55 lines
1.3 KiB
Ucode
55 lines
1.3 KiB
Ucode
/**
|
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
|
* - this constraint will throw out nodes which the pathing bot could get to, but not get away from. Normally this
|
|
* is not necessary as you're usually pathing somewhere so a node which you can't get out of is thrown out by A*, but if
|
|
* you're doing some sort of generic search (ie. for a node in range of something) you could end up with a node the bot can't
|
|
* escape from, thus causing him to be forever stuck.. this constraint will prevent that from happening
|
|
*/
|
|
class Path_AvoidInEscapableNodes extends PathConstraint
|
|
native(AI);
|
|
|
|
var int Radius;
|
|
var int Height;
|
|
var int MaxFallSpeed;
|
|
var int moveFlags;
|
|
|
|
cpptext
|
|
{
|
|
// Interface
|
|
virtual UBOOL EvaluatePath( UReachSpec* Spec, APawn* Pawn, INT& out_PathCost, INT& out_HeuristicCost );
|
|
}
|
|
|
|
private native function CachePawnReacFlags(Pawn P);
|
|
|
|
static function bool DontGetStuck( Pawn P )
|
|
{
|
|
local Path_AvoidInEscapableNodes Con;
|
|
|
|
if( P != None)
|
|
{
|
|
Con = Path_AvoidInEscapableNodes(P.CreatePathConstraint(default.class));
|
|
if( Con != None )
|
|
{
|
|
Con.CachePawnReacFlags(P);
|
|
P.AddPathConstraint( Con );
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
function Recycle()
|
|
{
|
|
Super.Recycle();
|
|
Radius=0;
|
|
Height=0;
|
|
MaxFallSpeed=0;
|
|
moveFlags=0;
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
Cacheidx=11
|
|
}
|