Core.Object | +--Engine.Actor | +--Engine.Effects | +--RuneI.FireRadius
float
TimePassed
void
DoRadiusEffect()
simulated
Spawned()
Tick(float DeltaTime)
00001 //============================================================================= 00002 // FireRadius. 00003 //============================================================================= 00004 class FireRadius expands Effects; 00005 00006 var float TimePassed; 00007 const StartRadius = 22.0; 00008 const EndRadius=125.0; 00009 const EffectTime=0.75; 00010 00011 simulated function Spawned() 00012 { 00013 TimePassed=0.0; 00014 ScaleGlow = EffectTime * 2; 00015 00016 DoRadiusEffect(); 00017 } 00018 00019 function DoRadiusEffect() 00020 { 00021 local actor A; 00022 local int i; 00023 local bool bCollisionJoints; 00024 00025 foreach RadiusActors(class'actor', A, EndRadius * 2, Location) 00026 { 00027 if (A == self || A==Owner || A.Owner==Owner) 00028 continue; 00029 00030 if (A.bHidden) 00031 continue; 00032 00033 if (ScriptPawn(A) != None && ScriptPawn(A).bIsBoss) 00034 continue; 00035 00036 if (!FastTrace(Location, A.Location)) 00037 continue; 00038 00039 if (A.IsA('Pawn')) 00040 { 00041 // Set on fire 00042 Pawn(A).PowerupBlaze(Pawn(Owner)); 00043 00044 // Do some damage 00045 A.JointDamaged(10, Pawn(Owner), A.Location, Normal(A.Location-Owner.Location)*50, 'fire', 0); 00046 // A.AddVelocity((Normal(A.Location-Owner.Location)+vect(0,0,1))*300); 00047 } 00048 else if (A.IsA('Decoration') || A.IsA('Inventory')) 00049 { 00050 // Set all collision joints on fire 00051 for (i=0; i<A.NumJoints(); i++) 00052 { 00053 if ((A.JointFlags[i] & JOINT_FLAG_COLLISION)!=0) 00054 { 00055 bCollisionJoints = true; 00056 A.SetOnFire(Pawn(Owner), i); 00057 } 00058 } 00059 if (!bCollisionJoints) 00060 A.SetOnFire(Pawn(Owner), 1); 00061 } 00062 } 00063 } 00064 00065 simulated function Tick(float DeltaTime) 00066 { 00067 local float newRadius; 00068 00069 TimePassed += DeltaTime; 00070 newRadius = StartRadius + (EndRadius-StartRadius) * (TimePassed/EffectTime); 00071 DrawScale = newRadius/StartRadius; 00072 00073 // Fade the blast radius out 00074 ScaleGlow -= DeltaTime * 2; 00075 if(ScaleGlow <= 0) 00076 Destroy(); 00077 // SetCollisionSize(newRadius, CollisionHeight); 00078 } 00079 00080 defaultproperties 00081 { 00082 RemoteRole=ROLE_SimulatedProxy 00083 DrawType=DT_VerticalSprite 00084 Style=STY_Translucent 00085 Texture=FireTexture'RuneFX2.FireRing' 00086 CollisionRadius=22.000000 00087 CollisionHeight=22.000000 00088 bCollideActors=True 00089 }