110 lines
3.0 KiB
Ucode
110 lines
3.0 KiB
Ucode
/**
|
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
|
*/
|
|
class NavMeshGoal_At extends NavMeshPathGoalEvaluator
|
|
native(AI);
|
|
|
|
cpptext
|
|
{
|
|
// Interface
|
|
virtual UBOOL InitializeSearch( UNavigationHandle* Handle, const FNavMeshPathParams& PathParams);
|
|
virtual UBOOL EvaluateGoal( PathCardinalType PossibleGoal, const FNavMeshPathParams& PathParams, PathCardinalType& out_GenGoal );
|
|
virtual void NotifyExceededMaxPathVisits( PathCardinalType BestGuess, PathCardinalType& out_GenGoal );
|
|
virtual UBOOL DetermineFinalGoal( PathCardinalType& out_GenGoal, class AActor** out_DestActor, INT* out_DestItem );
|
|
virtual UBOOL SeedWorkingSet( PathOpenList& OpenList,
|
|
FNavMeshPolyBase* AnchorPoly,
|
|
DWORD PathSessionID,
|
|
UNavigationHandle* Handle,
|
|
const FNavMeshPathParams& PathParams);
|
|
|
|
}
|
|
|
|
/** Location to reach */
|
|
var Vector Goal;
|
|
/** Within this acceptable distance */
|
|
var float GoalDist;
|
|
/** Should keep track of cheapest path even if don't reach goal */
|
|
var bool bKeepPartial;
|
|
/** if set evaluate best partial path by line distance to goal */
|
|
var bool bWeightPartialByDist;
|
|
var float PartialDistSq;
|
|
var bool bGoalInSamePolyAsAnchor;
|
|
|
|
// the polygon that contains our goal point
|
|
var private native pointer GoalPoly{FNavMeshPolyBase};
|
|
|
|
// the last partial goal (used when no true path is found)
|
|
var private native pointer PartialGoal{FNavMeshEdgeBase};
|
|
|
|
native function RecycleNative();
|
|
|
|
static function bool AtActor(NavigationHandle NavHandle, Actor GoalActor, optional float Dist, optional bool bReturnPartial, optional bool bInWeightPartialByDist)
|
|
{
|
|
local Controller GoalController;
|
|
local Controller MyController;
|
|
local vector TargetLoc;
|
|
|
|
if (NavHandle != None)
|
|
{
|
|
GoalController = Controller(GoalActor);
|
|
if (GoalController != None)
|
|
{
|
|
GoalActor = GoalController.Pawn;
|
|
}
|
|
|
|
if (GoalActor != None)
|
|
{
|
|
MyController = Controller(NavHandle.Outer);
|
|
NavHandle.PopulatePathfindingParamCache();
|
|
TargetLoc = GoalActor.GetDestination(MyController);
|
|
return AtLocation(NavHandle, TargetLoc, Dist, bReturnPartial);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
static function bool AtLocation(NavigationHandle NavHandle, Vector GoalLocation, optional float Dist, optional bool bReturnPartial, optional bool bInWeightPartialByDist)
|
|
{
|
|
local NavMeshGoal_At Eval;
|
|
|
|
if (NavHandle != None)
|
|
{
|
|
Eval = NavMeshGoal_At(NavHandle.CreatePathGoalEvaluator(default.class));
|
|
|
|
if (Eval != None)
|
|
{
|
|
Eval.Goal = GoalLocation;
|
|
Eval.GoalDist = Dist;
|
|
Eval.bKeepPartial = bReturnPartial;
|
|
Eval.bWeightPartialByDist = bInWeightPartialByDist;
|
|
NavHandle.AddGoalEvaluator(Eval);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
function Recycle()
|
|
{
|
|
Goal = vect(0,0,0);
|
|
GoalDist = default.GoalDist;
|
|
bKeepPartial = default.bKeepPartial;
|
|
bWeightPartialByDist = default.bWeightPartialByDist;
|
|
PartialDistSq = default.PartialDistSq;
|
|
RecycleNative();
|
|
Super.Recycle();
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
MaxPathVisits=1024
|
|
PartialDistSq=1000000000000.0
|
|
|
|
bDoPartialAStar=true
|
|
MaxOpenListSize=2048
|
|
|
|
}
|