//============================================================================= // SchlonzMASPlasmaProjectile. //============================================================================= class SchlonzMASPlasmaProjectile extends ONSMASPlasmaProjectile; var Actor HomingTarget; var vector InitialDir; var bool Homing; replication // mach doch mal schnell... { reliable if (bNetInitial && Role == ROLE_Authority) InitialDir, HomingTarget; } simulated function PostBeginPlay() { InitialDir = vector( Rotation ); Velocity = InitialDir * Speed; /* Schnickschnack if (PhysicsVolume.bWaterVolume) Velocity = 0.6 * Velocity; */ SetTimer( 0.1, true ); Homing = true; Super.PostBeginPlay(); } simulated function Timer() { local float VelMag; local vector ForceDir; if( HomingTarget == None ) { if( Homing ) { // no target, stop timer SetTimer( 0.1, false ); } return; } ForceDir = Normal(HomingTarget.Location - Location); if( ForceDir dot InitialDir > 0 ) { // Do normal guidance to target. VelMag = VSize(Velocity); ForceDir = Normal( ForceDir * 4.0 * VelMag + Velocity ); Velocity = VelMag * ForceDir; Acceleration = 20 * ForceDir; // Update rocket so it faces in the direction its going. SetRotation(rotator(Velocity)); } }