62 lines
1.7 KiB
Ucode
62 lines
1.7 KiB
Ucode
/**
|
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
|
* this goal eval will not stop until its out of paths, and will return one of the nodes traversed at random
|
|
*/
|
|
class NavMeshGoal_Random extends NavMeshPathGoalEvaluator
|
|
native(AI);
|
|
|
|
cpptext
|
|
{
|
|
// Interface
|
|
virtual UBOOL EvaluateGoal( PathCardinalType PossibleGoal, const FNavMeshPathParams& PathParams, PathCardinalType& out_GenGoal );
|
|
virtual void NotifyExceededMaxPathVisits(PathCardinalType BestGuess, PathCardinalType& out_GenGoal) {/*don't care about best guess.. just ignore this*/}
|
|
virtual UBOOL DetermineFinalGoal(PathCardinalType& out_GenGoal, class AActor** out_DestActor, INT* out_DestItem);
|
|
|
|
}
|
|
|
|
/** minimum path distance before we start rating nodes; useful when you want to make sure the random decision covers a reasonable distance
|
|
* and isn't just moving back and forth in a small area
|
|
*/
|
|
var int MinDist;
|
|
|
|
var float BestRating;
|
|
var private native pointer PartialGoal{FNavMeshEdgeBase};
|
|
|
|
static function bool FindRandom(NavigationHandle NavHandle, optional int InMinDist = -1, optional int InMaxPathVisits = -1)
|
|
{
|
|
local NavMeshGoal_Random Eval;
|
|
|
|
if (NavHandle != None)
|
|
{
|
|
Eval = NavMeshGoal_Random(NavHandle.CreatePathGoalEvaluator(default.class));
|
|
if (InMaxPathVisits > 0)
|
|
{
|
|
Eval.MaxPathVisits = InMaxPathVisits;
|
|
}
|
|
Eval.MinDist = InMinDist;
|
|
NavHandle.AddGoalEvaluator(Eval);
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
native function RecycleNative();
|
|
|
|
function Recycle()
|
|
{
|
|
Super.Recycle();
|
|
MaxPathVisits = default.maxPathVisits;
|
|
BestRating = default.BestRating;
|
|
MinDist = default.MinDist;
|
|
RecycleNative();
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
BestRating=-1.0
|
|
MinDist=-1
|
|
}
|