62 template<
class TraverseLogic>
69 virtual void Advance(WorkingMemory* workingMemory);
74 bool TraversalHasVisitedNavDataChanged();
77 void Advance_(WorkingMemory* workingMemory);
79 void SetFinish(WorkingMemory* workingMemory);
85 KyResult InitDestinationNodeFromDestNavGraphEdge();
86 KyResult InitDestinationNodeFromDestNavGraphVertex();
87 KyResult InitDestinationNodeFromDestNavTriangle();
89 void InitPropagationBounds();
91 KyResult CheckNavDataChangeDuringTraversal(WorkingMemory* workingMemory);
92 KyResult CheckNavDataChangeAfterTraversal(WorkingMemory* workingMemory);
93 bool HasExplorationReachedDestNode();
95 bool ShouldReturnAfterTryingCanGo(WorkingMemory* workingMemory);
97 KyUInt32 CountAbstractGraphNodes(WorkingMemory* workingMemory, AStarNodeIndex& concreteDestinationNodeIdx);
98 void BuildAbstractPath(WorkingMemory* workingMemory, AStarNodeIndex& concreteDestAStarNodeIndex);
101 class TraversalCustomizer
104 typedef TraverseLogic TLogic;
110 bool CanEnterNavTag(
const NavTag& exitNavTag,
const NavTag& enterNavTag,
const Vec3f& pos) {
return TLogic::CanEnterNavTag(
m_traverseLogicUserData, exitNavTag, enterNavTag, pos); }
114 bool ShouldVisitNode(AStarTraversalContext* aStarTraversalContext, AStarNodeIndex nodeIndex);
115 bool IsNodeOutsidePropagationBounds(AStarTraversalContext* aStarTraversalContext, AStarNodeIndex nodeIndex);
118 bool ShouldOpenAbstractGraphNode(
const AbstractGraphNodeRawPtr& ) {
return true; }
119 bool ShouldOpenNavTriangleUnderAbstractGraphNode(
const AbstractGraphNodeRawPtr& abstractGraphNodeRawPtr);
120 Vec3f ComputeNodePositionOnHalfEdge(AStarTraversalContext* aStarTraversalContext,
const Vec3f& startPosOfEdge,
const Vec3f& endPosOfEdge, AStarNodeIndex predecessorNodeIndex);
121 KyResult OnNavTriangleExplored(AStarTraversalContext* aStarTraversalContext,
const NavTriangleRawPtr& navTriangleRawPtr, AStarNodeIndex currentNodeIndex);
122 KyResult OnNavGraphEdgeExplored(AStarTraversalContext* aStarTraversalContext,
const NavGraphEdgeRawPtr& navGraphEdgeRawPtr, AStarNodeIndex currentNodeIndex);
131 AStarTraversal<TraversalCustomizer> m_traversal;
Base class for AstarQuery.
Definition: baseastarquery.h:105
KyFloat32 Distance(const Vec2f &A, const Vec2f &B)
Returns the distance between A and B.
Definition: vec2f.h:138
OrientedBox2d is a 3d box with rotation constrained to be along Z.
Definition: orientedbox2d.h:26
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
This class is an helper used internally by the PathFinder Queries to factorize Code.
Definition: pathfinderqueryutils.h:35
void * GetTraverseLogicUserData() const
Gets m_traverseLogicUserData.
Definition: iquery.h:170
virtual void Advance(WorkingMemory *workingMemory)
This function is called by the QueryQueue to process one step on the query.
Definition: astarquery.inl:98
Each instance of this class uniquely identifies a single NavGraphEdge in a NavGraph.
Definition: navgraphedgerawptr.h:26
virtual void ReleaseWorkingMemoryOnCancelDuringProcess(WorkingMemory *workingMemory=nullptr)
Called when a query is canceled in FlushCommands while its status is QueryInProcess to make sure that...
Definition: astarquery.inl:25
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
Runs an A-star algorithm to find a Path through the navigation data (NavMesh & NavGraph) from a start...
Definition: astarquery.h:63
Identifies a single NavTriangle in a NavFloor.
Definition: navtrianglerawptr.h:21
void * m_traverseLogicUserData
This userData is typically passed by the Bot.
Definition: iquery.h:236
Each instance of this class uniquely identifies a single NavHalfEdge in a NavFloor.
Definition: navhalfedgerawptr.h:23
Each instance of this class uniquely identifies a single NavGraphVertex in a NavGraph.
Definition: navgraphvertexrawptr.h:27
float KyFloat32
float
Definition: types.h:32
3d vector using 32bits floating points.
Definition: vec3f.h:16