Today, I'll present a mutator.
Code: Select all
//=============================================================================
// SmashableActorsMatch.
//=============================================================================
class SmashableActorsMatch expands Mutator;
var ActorSpeedInfo ActorSpeeds;
event bool NewActorSpeedInfo(Actor A)
{
local ActorSpeedInfo ASI;
if ( ActorSpeeds == None )
{
ActorSpeeds = Spawn(class'ActorSpeedInfo', Self);
ActorSpeeds.CActor = A;
}
else
for (ASI = ActorSpeeds; ASI != None; ASI = ASI.NextInfo)
if ( ASI.NextInfo == None )
{
ASI.NextInfo = Spawn(class'ActorSpeedInfo', Self);
ASI.NextInfo.CActor = A;
ASI.NextInfo.PreviousInfo = ASI;
break;
}
}
function PostBeginPlay()
{
local Actor A;
foreach AllActors(class'Actor', A)
{
if ( A.bMovable && Pawn(A) != None )
{
NewActorSPeedInfo(A);
}
}
}
function Tick(float delta)
{
local ActorSpeedInfo ASI;
for ( ASI = ActorSpeeds; ASI != None; ASI = ASI.Nextinfo )
if ( ASI.ActorSpeeds[1] > 120 && ASI.ActorSpeeds[0] < 25 )
ASI.CActor.TakeDamage(ASI.ActorSpeeds[1] / sqrt(ASI.ActorSpeeds[0]), Pawn(ASI.CActor), ASI.CActor.Location, vect(0, 0, 320), 'Smash');
}
//=============================================================================
// ActorSpeedInfo.
//=============================================================================
class ActorSpeedInfo expands Info;
var Actor CActor;
var float ActorSpeeds[2];
var ActorSpeedInfo PreviousInfo;
var ActorSpeedInfo NextInfo;
function Tick(float delta)
{
ActorSpeeds[1] = ActorSpeeds[0];
ActorSPeeds[0] = VSize(CActor.Velocity);
}
The problem is: How will I test a pawn that moves fast and brakes fast? What can I do to reproduce something like that and see if the actors can be damaged?!