19 static const ClampNodeIndex ClampNodeIndex_Invalid =
KyUInt16MAXVAL;
25 ClampNode(
const Vec3f& pos, NodeTypeAndRawPtrDataIdx nodeTypeAndRawPtrDataIdx, ClampNodeIndex predecessorIdx, ClampNodeIndex nextNodeIdx);
26 ClampNode(
const Vec3f& pos,
const WorldIntegerPos& integerPos, NodeTypeAndRawPtrDataIdx nodeTypeAndRawPtrDataIdx, ClampNodeIndex predecessorIdx, ClampNodeIndex nextNodeIdx);
28 PathNodeType GetNodeType()
const;
31 void SetNodeType(PathNodeType nodeType);
32 void SetIdxOfRawPtrData(
KyUInt32 indexOfRawPtrData);
35 WorldIntegerPos m_nodeIntegerPos;
36 NodeTypeAndRawPtrDataIdx m_nodeTypeAndRawPtrDataIdx;
37 ClampNodeIndex m_predecessorNodeIdx;
38 ClampNodeIndex m_nextNodeIdx;
41 class PathRefinerContext;
42 class BaseRayCanGoQuery;
48 ClampResult_FAIL_MEMORYLIMIT,
49 ClampResult_FAIL_CANGOHIT
52 class PathClamperContext
57 enum PathClamperStatus
60 NeedToComputeIntersections,
61 ProcessingIntersections
65 ~PathClamperContext() { ReleaseWorkingMemory(); }
67 void ReleaseWorkingMemory()
69 m_triangleRawPtrNodes.ReleaseWorkingMemoryBuffer();
70 m_vertexRawPtrNodes.ReleaseWorkingMemoryBuffer();
71 m_clampNodes.ReleaseWorkingMemoryBuffer();
72 m_currentDestNavTrianglePtr.Invalidate();
73 m_clamperStatus = Initialisation;
74 m_currentClampNodeIdx = ClampNodeIndex_Invalid;
76 m_startNavGraphEdgePtr = NavGraphEdgePtr();
77 m_destNavGraphEdgePtr = NavGraphEdgePtr();
80 KyResult InitFromRefinerContext(WorkingMemory* workingMemory, PathRefinerContext* pathRefinerContext, PathClamperFlagMask pathClamperFlagMask);
81 KyResult InitFromCanGo(WorkingMemory* workingMemory, BaseRayCanGoQuery& baseRayCanGoQuery, PathClamperFlagMask pathClamperFlagMask);
82 KyResult InitFromChannel(Database* database, WorkingMemory* workingMemory,
const Channel& channel, PathClamperFlagMask pathClamperFlagMask);
84 bool IsClampingDone()
const {
return m_currentClampNodeIdx == 0; }
86 bool MustAddPointToStartOrDestClampNode(ClampNode* startOrDestClampNode,
const Vec3f& queryInputPosition)
const;
89 WorkingMemArray<ClampNode> m_clampNodes;
90 WorkingMemArray<NavTriangleRawPtr> m_triangleRawPtrNodes;
91 WorkingMemArray<NavGraphVertexRawPtr> m_vertexRawPtrNodes;
93 PathClamperStatus m_clamperStatus;
94 ClampNodeIndex m_currentClampNodeIdx;
95 KyUInt32 m_currentIntersectionLastIndex;
96 NavTrianglePtr m_currentDestNavTrianglePtr;
97 NavGraphEdgePtr m_startNavGraphEdgePtr;
98 NavGraphEdgePtr m_destNavGraphEdgePtr;
101 Vec3f m_currentStartPos;
102 NavTriangleRawPtr m_currentStartTriangleRawPtr;
103 WorldIntegerPos m_currentStartIntegerPos;
105 KyUInt16 m_currentIdxInTriangleBuffer;
107 PathClamperFlagMask m_pathClamperFlagMask;
113 KY_INLINE ClampNode::ClampNode() :
114 m_predecessorNodeIdx(ClampNodeIndex_Invalid),
115 m_nextNodeIdx(ClampNodeIndex_Invalid)
118 KY_INLINE ClampNode::ClampNode(
const Vec3f& pos, NodeTypeAndRawPtrDataIdx nodeTypeAndRawPtrDataIdx, ClampNodeIndex predecessorIdx, ClampNodeIndex nextNodeIdx) :
120 m_nodeTypeAndRawPtrDataIdx(nodeTypeAndRawPtrDataIdx),
121 m_predecessorNodeIdx(predecessorIdx),
122 m_nextNodeIdx(nextNodeIdx)
124 KY_INLINE ClampNode::ClampNode(
const Vec3f& pos,
const WorldIntegerPos& integerPos, NodeTypeAndRawPtrDataIdx nodeTypeAndRawPtrDataIdx, ClampNodeIndex predecessorIdx, ClampNodeIndex nextNodeIdx) :
126 m_nodeIntegerPos(integerPos),
127 m_nodeTypeAndRawPtrDataIdx(nodeTypeAndRawPtrDataIdx),
128 m_predecessorNodeIdx(predecessorIdx),
129 m_nextNodeIdx(nextNodeIdx)
132 KY_INLINE PathNodeType ClampNode::GetNodeType()
const {
return m_nodeTypeAndRawPtrDataIdx.GetNodeType(); }
133 KY_INLINE
KyUInt32 ClampNode::GetIdxOfRawPtrData()
const {
return m_nodeTypeAndRawPtrDataIdx.GetIdxOfRawPtrData(); }
135 KY_INLINE
void ClampNode::SetNodeType(PathNodeType nodeType) { m_nodeTypeAndRawPtrDataIdx.SetNodeType(nodeType); }
136 KY_INLINE
void ClampNode::SetIdxOfRawPtrData(
KyUInt32 indexOfRawPtrData) { m_nodeTypeAndRawPtrDataIdx.SetIdxOfRawPtrData(indexOfRawPtrData); }
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:132
std::uint16_t KyUInt16
uint16_t
Definition: types.h:28
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
#define KyUInt16MAXVAL
KyUInt16 max value
Definition: types.h:67
#define KyUInt32MAXVAL
KyUInt32 max value
Definition: types.h:68