class CowNPCController extends ScriptedController;
var NavigationPoint RoamDestination;
var float ActionTime;
function TakeControlOf(Pawn aPawn)
{
if ( Pawn != aPawn )
{
aPawn.PossessedBy(self);
Pawn = aPawn;
}
GotoState('Roaming');
}
state Roaming
{
function Timer()
{
GotoState('Eating','Begin');
}
function SetMoveTarget()
{
local Actor NextMoveTarget;
if( RoamDestination == none ) {
RoamDestination = FindRandomDest();
}
NextMoveTarget = FindPathToward(RoamDestination,false);
if ( NextMoveTarget == None ) {
GotoState('Broken');
return;
}
Focus = NextMoveTarget;
MoveTarget = NextMoveTarget;
if ( !ActorReachable(MoveTarget) ) {
MoveTarget = FindPathToward(MoveTarget,false);
if ( Movetarget == None ) {
RoamDestination = none;
}
if ( Focus == NextMoveTarget )
Focus = MoveTarget;
}
}
Begin:
ActionTime = FRand() * 5 + 5;
SetTimer(ActionTime,false);
CowNPC(pawn).ChangeAnim('Walk',true);
StartMoving:
RoamDestination = none;
Focus = none;
Pawn.SetMovementPhysics();
Pawn.SetWalking(true);
WaitForLanding();
KeepMoving:
SetMoveTarget();
MoveToward(MoveTarget,,,,Pawn.bIsWalking);
if (Pawn.ReachedDestination(RoamDestination))
Goto('StartMoving');
Goto('KeepMoving');
}
state Eating
{
function Timer()
{
GotoState('Roaming','Begin');
}
Begin:
CowNPC(pawn).ChangeAnim('StartEat',false);
ActionTime = FRand() * 5 + 5;
SetTimer(ActionTime,false);
}
defaultproperties
{
}