21 template<
class TraverseLogic>
22 class MultiDestinationPathFinderQuery :
public BaseMultiDestinationPathFinderQuery
28 MultiDestinationPathFinderQuery();
29 virtual ~MultiDestinationPathFinderQuery();
35 virtual void Advance(WorkingMemory* workingMemory);
37 virtual void ReleaseWorkingMemoryOnCancelDuringProcess(WorkingMemory* workingMemory =
nullptr);
40 bool TraversalHasVisitedNavDataChanged();
43 void SetFinish(WorkingMemory* workingMemory);
44 KyResult ComputeStartGraphEdgeOrGraphVertexOrTriangle(PathFinderQueryUtils& queryUtils);
45 KyResult ComputeStartTriangle(PathFinderQueryUtils& queryUtils);
46 KyResult ComputeDestTriangleIfNeeded(PathFinderQueryUtils& queryUtils);
47 KyResult InitializeContextAndStartNode(PathFinderQueryUtils& queryUtils);
49 KyResult InitDestinationNodeFromDestNavGraphEdge(PathFinderPoint& dest);
50 KyResult InitDestinationNodeFromDestNavGraphVertex(PathFinderPoint& dest);
51 KyResult InitDestinationNodeFromDestNavTriangle(PathFinderPoint& dest);
52 KyResult InitTraversalFromStartNode(PathFinderQueryUtils& queryUtils);
53 void InitPropagationBounds();
55 KyResult CheckNavDataChangeDuringTraversal(WorkingMemory* workingMemory);
56 KyResult CheckNavDataChangeAfterTraversal(WorkingMemory* workingMemory);
58 bool ShouldReturnAfterTryingCanGo(WorkingMemory* workingMemory);
60 bool HasExplorationReachedAllDestNodes();
61 bool HasExplorationReachedAtLeastADestNode();
63 void ComputeRawCosts();
65 PathEdgeType GetPathEdgeType(
const AStarNode& predecessorNode,
const AStarNode& node);
67 bool ProcessFirstDestination();
68 bool UpdateResultAndSelectFirstDestination();
69 bool ProcessNextDestination(WorkingMemory* workingMemory);
71 KyUInt32 CountAbstractGraphNodes(WorkingMemory* workingMemory, AStarNodeIndex& concreteDestAStarNodeIndex);
72 void BuildAbstractPath(WorkingMemory* workingMemory, AStarNodeIndex& concreteDestAStarNodeIndex);
75 class TraversalCustomizer
78 typedef TraverseLogic TLogic;
80 TraversalCustomizer() : m_query(nullptr), m_traverseLogicUserData(nullptr) {}
82 bool CanTraverse(
const NavTriangleRawPtr& triangleRawPtr,
KyFloat32* costMultiplier) {
return triangleRawPtr.CanBeTraversed<TLogic>(m_traverseLogicUserData, costMultiplier); }
83 bool CanTraverse(
const NavGraphEdgeRawPtr& edgeRawPtr,
KyFloat32* costMultiplier) {
return edgeRawPtr.CanBeTraversed<TLogic>(m_traverseLogicUserData, costMultiplier); }
84 bool CanEnterNavTag(
const NavTag& exitNavTag,
const NavTag& enterNavTag,
const Vec3f& pos) {
return TLogic::CanEnterNavTag(m_traverseLogicUserData, exitNavTag, enterNavTag, pos); }
85 KyFloat32 GetHeuristicFromNodePosition(
const Vec3f&) {
return 0.0f; }
87 void* GetTraverseLogicUserData()
const {
return m_traverseLogicUserData; }
88 bool ShouldVisitNode(AStarTraversalContext* aStarTraversalContext, AStarNodeIndex nodeIndex);
89 bool IsNodeOutsidePropagationBounds(AStarTraversalContext* aStarTraversalContext, AStarNodeIndex nodeIndex);
91 bool ShouldOpenHalfEdgeNode(
const NavHalfEdgeRawPtr& halfEdge, NavHalfEdgeRawPtr& pairHalfEdgeOfNewNode);
92 bool ShouldOpenGraphVertexNode(
const NavGraphVertexRawPtr&) {
return true; }
93 bool ShouldOpenAbstractGraphNode(
const AbstractGraphNodeRawPtr&) {
return true; }
94 bool ShouldOpenNavTriangleUnderAbstractGraphNode(
const AbstractGraphNodeRawPtr& abstractGraphNodeRawPtr);
96 Vec3f ComputeNodePositionOnHalfEdge(AStarTraversalContext* aStarTraversalContext,
const Vec3f& startPosOfEdge,
const Vec3f& endPosOfEdge, AStarNodeIndex predecessorNodeIndex);
97 KyResult OnNavTriangleExplored(AStarTraversalContext* aStarTraversalContext,
const NavTriangleRawPtr& navTriangleRawPtr, AStarNodeIndex currentNodeIndex);
98 KyResult OnNavGraphEdgeExplored(AStarTraversalContext* aStarTraversalContext,
const NavGraphEdgeRawPtr& navGraphEdgeRawPtr, AStarNodeIndex currentNodeIndex);
100 MultiDestinationPathFinderQuery<TraverseLogic>* m_query;
101 void* m_traverseLogicUserData;
104 AStarTraversal<TraversalCustomizer> m_traversal;
105 KyArray<MonodirectionalRayCanGoQuery<TraverseLogic> > m_rayCanGoQueries;
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
float KyFloat32
float
Definition: types.h:32