9 #ifndef Navigation_AStarTraversal_H
10 #define Navigation_AStarTraversal_H
28 class TraversalVisitNodeContext
31 TraversalVisitNodeContext() {}
35 NavGraphVertexRawPtr m_visitedGraphVertexRawPtr;
36 AStarNodeIndex m_visitedNodeIndex;
39 template<
class TraversalCustomzier>
44 typedef typename TraversalCustomzier::TLogic TraverseLogic;
47 AStarTraversal() : m_traversalCustomizer(), m_astarContext(
KY_NULL), m_traversalParams(KY_NULL) {}
48 AStarTraversal(
const TraversalCustomzier& customizer) : m_traversalCustomizer(customizer), m_astarContext(
KY_NULL), m_traversalParams(
KY_NULL) {}
50 KyResult InitializeContextAndStartNode(QueryUtils& queryUtils,
const Vec3f& startPos3f,
const NavTrianglePtr& startTrianglePtr);
51 KyResult InitializeContextAndStartNode(QueryUtils& queryUtils,
const Vec3f& startPos3f,
const NavGraphEdgePtr& startNavGraphEdgePtr);
52 KyResult InitializeContextAndStartNode(QueryUtils& queryUtils,
const Vec3f& startPos3f,
const NavGraphVertexPtr& startNavGraphVertexPtr);
55 KyResult InitializeDestNode(
const Vec3f& destPos,
const NavTrianglePtr& destTrianglePtr);
56 KyResult InitializeDestNode(
const Vec3f& destPos,
const NavGraphEdgePtr& destNavGraphEdgePtr);
57 KyResult InitializeDestNode(
const NavGraphVertexPtr& destNavGraphVertexPtr);
59 KyResult ExploreAllNodesInTriangle(ActiveData* activeData,
const NavTriangleRawPtr& triangleRawPtr, AStarNodeIndex currentNodeIndex);
61 KyResult ExploreAllNodesInNavGraphEdge(ActiveData* activeData,
const Vec3f& posOnEdge,
const NavGraphEdgeRawPtr& navGraphEdgeRawPtr, AStarNodeIndex currentNodeIndex, NavGraphEdgeDirection m_navGraphEdgePathfindMode);
63 KY_INLINE
bool IsThereNodeToVisit() {
return m_astarContext->m_traversalBinHeap.IsEmpty() ==
false; }
66 KyResult VisitNode(QueryUtils& queryUtils, TraversalVisitNodeContext& visitNodeContext);
67 KyResult UpdateOpenedOrClosedNode(AStarNodeIndex neighborNodeIndex, AStarNodeIndex currentNodeIndex,
71 KyResult ExploreNeighborsOfHalfEdgeNode(ActiveData* activeData, AStarNodeIndex indexOfOpenWithLowerCost,
const NavHalfEdgeRawPtr& currentEdgeRawPtr,
72 const NavHalfEdgeRawPtr& pairHalfEdgeRawPtr,
const Vec3f& nodePosition,
const LogicDoNotUseCanEnterNavTag&);
73 KyResult ExploreNeighborsOfHalfEdgeNode(ActiveData* activeData, AStarNodeIndex indexOfOpenWithLowerCost,
const NavHalfEdgeRawPtr& currentEdgeRawPtr,
74 const NavHalfEdgeRawPtr& pairHalfEdgeRawPtr,
const Vec3f& nodePosition,
const LogicDoUseCanEnterNavTag&);
76 KyResult ExploreNeighborsOfHalfEdgeNode(ActiveData* activeData, AStarNodeIndex indexOfOpenWithLowerCost,
const NavHalfEdgeRawPtr& halfEdgeRawPtr);
77 KyResult ExploreNeighborsOfGraphVertexNode(ActiveData* activeData, AStarNodeIndex indexOfOpenWithLowerCost, NavGraphVertexRawPtr& visitedGraphVertexRawPtr);
78 KyResult ExploreNeighborsOfAbstractGraphNode(AStarNodeIndex currentCostNodeIndex,
const AbstractGraphNodeRawPtr& currentAbstractNodeRawPtr);
80 KyResult ExploreHalfEdgesOfTriangle(ActiveData* activeData,
const NavTriangleRawPtr& triangleRawPtr, AStarNodeIndex currentNodeIndex);
81 KyResult ExploreGraphVerticesInTriangle(
const NavTriangleRawPtr& triangleRawPtr, AStarNodeIndex currentNodeIndex);
83 KyResult ExploreAbstractGraphNodesOnNavHalEdgeRawPtr(
const NavHalfEdgeRawPtr& navHalfEdgeRawPtr, AStarNodeIndex currentNodeIndex);
85 KyResult CreateNewHalfEdgeNode(ActiveData* activeData,
const NavHalfEdgeRawPtr& HalfEdge,
const NavHalfEdgeRawPtr& pairHalfEdge,
86 const Vec3f& startPosOfEdge,
const Vec3f& endPosOfEdge, AStarNodeIndex predecessorIndex);
88 KyResult CreateNewGraphVertexNode(
const NavGraphVertexRawPtr& navGraphVertexRawPtr, AStarNodeIndex predecessorIndex,
90 KyResult CreateNewAbstractGraphNode(
const AbstractGraphNodeRawPtr& abstractGraphNodeRawPtr,
const AbstractGraphNodeRawPtr& pairedAbstractGraphNodeRawPtr,
91 AStarNodeIndex predecessorNodeIndex,
KyFloat32 costFromCurrentNode);
93 KyResult OpenOrUpdateGraphVertex(
const NavGraphVertexRawPtr& navGraphVertexRawPtr, AStarNodeIndex vertexNodeIndex, AStarNodeIndex currentNodeIndex,
96 KyResult OpenOrUpdateHalfEdge(ActiveData* activeData,
const NavHalfEdgeRawPtr& halfEdge, AStarNodeIndex halfEdgeNodeIndex,
97 const Vec3f& startPosOfEdge,
const Vec3f& endPosOfEdge, AStarNodeIndex currentNodeIndex);
99 KyResult OpenOrUpdateAbstractGraphNode(
const AbstractGraphNodeRawPtr& neighborAbstractNodeRawPtr,
100 AStarNodeIndex neighborAstarNodeIndex, AStarNodeIndex currentNodeIndex,
KyFloat32 costFromCurrentNode);
102 bool ShouldOpenHalfEdgeNode(
const NavHalfEdgeRawPtr& halfEdge, NavHalfEdgeRawPtr& pairHalfEdgeOfNewNode);
103 bool ShouldOpenGraphVertexNode(
const NavGraphVertexRawPtr& navGraphVertexRawPtr);
104 bool ShouldOpenAbstractGraphNode(
const AbstractGraphNodeRawPtr& abstractGraphNodeRawPtr, AbstractGraphNodeRawPtr& pairedAbstractGraphNodeRawPtr);
106 bool CanTraverseNavTriangle(
const NavTriangleRawPtr& triangle);
107 bool CanTraverseNavTriangleAndGetCost(
const NavTriangleRawPtr& triangle,
const Vec3f& A,
const Vec3f& B,
KyFloat32& cost,
KyFloat32& costMultiplier);
108 bool CanTraverseGraphEdgeAndGetCost(
const NavGraphEdgeRawPtr& edge,
const Vec3f& A,
const Vec3f& B,
KyFloat32& cost,
KyFloat32& costMultiplier);
110 KyFloat32 EvaluateCostToDest(
const Vec3f& nodePosition);
113 KyResult InitializeInvalidDestNode();
116 TraversalCustomzier m_traversalCustomizer;
118 AStarTraversalContext* m_astarContext;
119 TraversalParameters* m_traversalParams;
126 #endif //Navigation_AStarTraversal_H
KyInt32 KyResult
Defines a type that can be returned by methods or functions in the Gameware Navigation SDK to indicat...
Definition: types.h:254
#define KY_NULL
Null value.
Definition: types.h:247
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43