1
0
KF2-Dev-Scripts/GameFramework/Classes/GameCrowdBehavior_RunFromPanic.uc
2020-12-13 18:01:13 +03:00

88 lines
2.2 KiB
Ucode

/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*/
class GameCrowdBehavior_RunFromPanic extends GameCrowdAgentBehavior
native
placeable
dependsOn(GameCrowdAgent);
/** Actor who caused panic - if set, flee this actor */
var transient Actor PanicFocus;
function ActivatedBy(Actor NewActionTarget)
{
local GameCrowdDestination TempDest, PrevDest;
// don't pass action target to super - we don't want to look at it
PanicFocus = NewActionTarget;
PrevDest = MyAgent.PreviousDestination;
// see if already heading away from danger
if( MyAgent.CurrentDestination != None && AllowThisDestination(MyAgent.CurrentDestination) )
{
return;
}
else if( PrevDest != None && PrevDest.AllowableDestinationFor(MyAgent) )
{
// try heading back where agent was coming from
TempDest = MyAgent.CurrentDestination;
MyAgent.CurrentDestination.DecrementCustomerCount(MyAgent);
MyAgent.SetCurrentDestination(MyAgent.PreviousDestination);
MyAgent.PreviousDestination = TempDest;
MyAgent.UpdateIntermediatePoint();
}
}
function InitBehavior(GameCrowdAgent Agent)
{
super.InitBehavior(Agent);
MyAgent.bIsPanicked = TRUE;
MyAgent.SetMaxSpeed();
}
function StopBehavior()
{
Super.StopBehavior();
MyAgent.bIsPanicked = FALSE;
MyAgent.SetMaxSpeed();
}
function Actor GetBehaviorInstigator()
{
return PanicFocus;
}
/**
* Return true if agent is allowed to go to destination while panicked
*/
function bool AllowThisDestination(GameCrowdDestination Destination)
{
return !Destination.bAvoidWhenPanicked && !Destination.AtCapacity() && (Destination.bFleeDestination || (PanicFocus == None) || (((Destination.Location - MyAgent.Location) dot (MyAgent.Location - PanicFocus.Location)) > 0.0));
}
/**
* return true if get kismet or new behavior from this destination
*/
function bool AllowBehaviorAt(GameCrowdDestination Destination)
{
return !Destination.bSkipBehaviorIfPanicked && !Destination.bAvoidWhenPanicked;
}
function string GetBehaviorString()
{
return "Run from PANIC "@PanicFocus;
}
defaultproperties
{
bIsViralBehavior=TRUE
MaxPlayerDistance=20000.0
MyEventType=CBE_Panic
ViralBehaviorEvent=CBE_Alert
DebugBehaviorColor=(R=255,G=0,B=0)
}