Core.Object | +--Engine.Actor | +--Engine.Projectile | +--UnrealI.PeaceRocket
float
ClosestDistance
Pawn
ClosestPawn
int
Count
vector
X,Y,Z
void
Explode(vector HitLocation, vector HitNormal)
PostBeginPlay()
ProcessTouch(Actor Other, Vector HitLocation)
Tick(float DeltaTime)
Timer()
00001 //============================================================================= 00002 // PeaceRocket. 00003 //============================================================================= 00004 class PeaceRocket extends Projectile; 00005 00006 #exec MESH IMPORT MESH=perock ANIVFILE=MODELS\perock_a.3D DATAFILE=MODELS\perock_d.3D X=0 Y=0 Z=0 00007 #exec MESH ORIGIN MESH=perock X=0 Y=0 Z=0 YAW=0 ROLL=0 PITCH=-64 00008 #exec MESH SEQUENCE MESH=perock SEQ=All STARTFRAME=0 NUMFRAMES=16 00009 #exec MESH SEQUENCE MESH=perock SEQ=Ignite STARTFRAME=0 NUMFRAMES=3 00010 #exec MESH SEQUENCE MESH=perock SEQ=Flying STARTFRAME=3 NUMFRAMES=13 00011 #exec TEXTURE IMPORT NAME=Jpeace1 FILE=MODELS\peaceg.PCX 00012 #exec MESHMAP SCALE MESHMAP=perock X=0.07 Y=0.07 Z=0.14 00013 #exec MESHMAP SETTEXTURE MESHMAP=perock NUM=1 TEXTURE=Jpeace1 00014 00015 var vector X,Y,Z; 00016 var pawn ClosestPawn; 00017 var float ClosestDistance; 00018 var int Count; 00019 00020 function PostBeginPlay() 00021 { 00022 Super.PostBeginPlay(); 00023 PlaySound(SpawnSound); 00024 Velocity = Vector(Rotation) * 120.0; 00025 Acceleration = Velocity * 1.67; 00026 Count = 0; 00027 Timer(); 00028 SetTimer(1.0,True); 00029 } 00030 00031 function Timer() 00032 { 00033 local pawn Victims; 00034 local float thisDist; 00035 00036 ClosestDistance = 100000; 00037 ClosestPawn = None; 00038 Count++; 00039 if (Count==8) 00040 { 00041 Explode(Location, vect(0,0,0)); 00042 return; 00043 } 00044 00045 //FIXME - use the pawnlist for this 00046 foreach VisibleCollidingActors( class'Pawn', Victims, 500.0 ) 00047 { 00048 thisDist = VSize(Victims.Location - Location); 00049 if ( thisDist < ClosestDistance) 00050 { 00051 ClosestPawn = Victims; 00052 ClosestDistance = thisDist; 00053 } 00054 } 00055 } 00056 function Tick( float DeltaTime ) 00057 { 00058 local float MagnitudeVel; 00059 if (ClosestPawn != None) 00060 { 00061 MagnitudeVel = VSize(Velocity); 00062 Velocity = MagnitudeVel * Normal( Normal(ClosestPawn.Location - Location) 00063 * MagnitudeVel * DeltaTime * 6 + Velocity); 00064 SetRotation(rotator(Velocity)); 00065 } 00066 } 00067 function ProcessTouch (Actor Other, Vector HitLocation) 00068 { 00069 local int hitdamage; 00070 if ((PeaceRocket(Other) == none)) Explode(HitLocation, HitLocation); 00071 } 00072 00073 function Explode(vector HitLocation, vector HitNormal) 00074 { 00075 HurtRadius(damage, 200.0, 'exploded', MomentumTransfer, HitLocation); 00076 Spawn(class'BallExplosion'); 00077 Destroy(); 00078 } 00079 00080 defaultproperties 00081 { 00082 MaxSpeed=600.000000 00083 Damage=100.000000 00084 MomentumTransfer=70000 00085 bNetTemporary=False 00086 LifeSpan=15.000000 00087 Mesh=LodMesh'UnrealI.perock' 00088 AmbientGlow=96 00089 LightType=LT_Steady 00090 LightEffect=LE_NonIncidence 00091 LightBrightness=79 00092 LightHue=28 00093 LightSaturation=157 00094 LightRadius=6 00095 bBounce=True 00096 }