In theory, we have the spawner
Code: Select all
//=============================================================================
// RealFireSpawner.
//=============================================================================
class RealFireSpawner expands Effects;
var(Fire) float FireScale;
var(Fire) float FireRate;
var(Fire) float Fire1Weight;
var(Fire) float Fire2Weight;
var(Fire) float Fire3Weight;
var(Fire) Texture FireTexture1;
var(Fire) Texture FireTexture2;
var(Fire) Texture FireTexture3;
var(Fire) float FireDuration;
var(Fire) Vector FireOffset;
var(Fire) Vector FireVelocity;
var(Fire) Vector FireVelocityOffset;
var(Fire) float FireDespawnRate;
var(Fire) EPhysics FirePhysics;
var(Fire) bool bDamagingFire;
var(Fire) float FireDamageAmount;
var(Fire) float FireDamageRadius;
var(Fire) float FireDamageMomentum;
/*
var(Fire) Color Fire1Color;
var(Fire) Color Fire2Color;
var(Fire) Color Fire3Color;
*/
function BeginPlay()
{
//Starts fire loop!
SetTimer(1.0 / FireRate, true);
}
function Tick(float TimeDelta)
{
//Assures that the fire doesn't last forever unless specified
if ( TimeDelta > FireDuration && FireDuration > 0 )
Destroy();
}
function Timer()
{
//All these lines that set the fire properties
local RealFireFX fire1, fire2, fire3;
fire1 = Spawn(class'RealFireFX', self, '__realfirefx__', Location + (FireOffset * (frand() - 0.5)));
fire2 = Spawn(class'RealFireFX', self, '__realfirefx__', Location + (FireOffset * (frand() - 0.5)));
fire2 = Spawn(class'RealFireFX', self, '__realfirefx__', Location + (FireOffset * (frand() - 0.5)));
if ( fire1 == None || fire2 == None || fire3 == None )
return;
fire1.Texture = FireTexture1;
fire2.Texture = FireTexture2;
fire3.Texture = FireTexture3;
fire1.Sprite = FireTexture1;
fire2.Sprite = FireTexture2;
fire3.Sprite = FireTexture3;
fire1.Drawscale = frand() * FireScale;
fire2.Drawscale = frand() * FireScale;
fire3.Drawscale = frand() * FireScale;
fire1.bDamaging = bDamagingFire;
fire2.bDamaging = bDamagingFire;
fire3.bDamaging = bDamagingFire;
fire1.Velocity = FireVelocity + ((frand() - 0.5) * FireVelocityOffset);
fire2.Velocity = FireVelocity + ((frand() - 0.5) * FireVelocityOffset);
fire3.Velocity = FireVelocity + ((frand() - 0.5) * FireVelocityOffset);
fire1.SetPhysics(FirePhysics);
fire2.SetPhysics(FirePhysics);
fire3.SetPhysics(FirePhysics);
fire1.Drawscale *= frand() * Fire1Weight;
fire2.Drawscale *= frand() * Fire2Weight;
fire3.Drawscale *= frand() * Fire3Weight;
fire1.DespawnRate = FireDespawnRate;
fire2.DespawnRate = FireDespawnRate;
fire3.DespawnRate = FireDespawnRate;
fire1.FVelocity = FireVelocity;
fire2.FVelocity = FireVelocity;
fire3.FVelocity = FireVelocity;
fire1.VelocityOffset = FireVelocityOffset;
fire2.VelocityOffset = FireVelocityOffset;
fire3.VelocityOffset = FireVelocityOffset;
fire1.DamageAmount = FireDamageAmount;
fire2.DamageAmount = FireDamageAmount;
fire3.DamageAmount = FireDamageAmount;
fire1.DamageRadius = FireDamageRadius;
fire2.DamageRadius = FireDamageRadius;
fire3.DamageRadius = FireDamageRadius;
fire1.DamageMomentum = FireDamageMomentum;
fire2.DamageMomentum = FireDamageMomentum;
fire3.DamageMomentum = FireDamageMomentum;
/*
fire1.LightHue = Fire1Color.H;
fire1.LightSaturation = 255 - Fire1Color.LightSaturation;
fire1.LightBrightness = Fire1Color.LightBrightness;
fire2.LightHue = Fire2Color.LightHue;
fire2.LightSaturation = 255 - Fire2Color.LightSaturation;
fire2.LightBrightness = Fire2Color.LightBrightness;
fire3.LightHue = Fire3Color.LightHue;
fire3.LightSaturation = 255 - Fire3Color.LightSaturation;
fire3.LightBrightness = Fire3Color.LightBrightness;
*/
}
Code: Select all
//=============================================================================
// RealFireFX.
//=============================================================================
class RealFireFX expands Effects;
var bool bDamaging;
var float DespawnRate;
var Vector FVelocity;
var Vector VelocityOffset;
var float DamageAmount;
var float DamageRadius;
var float DamageMomentum;
function Tick(float delta)
{
DrawScale -= frand() * DespawnRate;
Velocity = FVelocity + ((frand() * 2 - 1) * VelocityOffset);
if ( bDamaging )
HurtRadius(DamageAmount, DamageRadius, 'Fire', DamageMomentum, Location);
if ( DrawScale < 0.1 )
Destroy();
}
However, a) the fire is using Engine.Actor for sprite instead of the one I specified, and b) the fire is spawning infinitely, without moving or even despawning after a time!
Please help! What did I do wrong now?
(also, it seems fire1, fire2 and fire3 at the spawner's Timer() function aren't set by Spawn() calls... )