34 UpperBoundType_PathLastNode = 0,
35 UpperBoundType_ValidityUpperBound,
36 UpperBoundType_PathInvalid,
37 UpperBoundType_Temporary,
86 static const char* s_strs[] =
88 "PathValidityStatus_NoPath",
90 "ValidityIntervalMustBeRecomputed",
91 "ValidityIsBeingChecked",
92 "Dirty_ProgressInvalid",
93 "Dirty_InvalidBeforeProgress_ProcessingAfter",
94 "Dirty_InvalidBeforeProgress_ValidAfter",
95 "Dirty_ValidBeforeProgress_InvalidAfter",
96 "Dirty_InvalidBeforeAndAfterProgress"
99 KY_COMPILER_ASSERT(enumCount ==
sizeof(s_strs) /
sizeof(
const char*));
101 return idx >= 0 && idx < enumCount ? s_strs[idx] :
"PathValidityStatus_UNKNOWN";
104 template <
class OSTREAM>
105 inline OSTREAM& operator<<(OSTREAM& os,
PathValidityStatus e) { os << ToString(e);
return os; }
119 void ClearBoundsAndEventList();
121 UpperBoundType GetUpperBoundType()
const;
126 template<
class TraverseLogic>
128 KyFloat32 minDistanceFromTargetOnPathBackward,
KyFloat32 minDistanceFromTargetOnPathForward);
130 enum FirstNewIntervalExtendedStatus
132 FirstNewIntervalIsNotAnExtension,
133 FirstNewIntervalIsAnExtension
137 template<
class TraverseLogic>
138 KyResult ValidateForward(
Path* path,
void* traverseLogicUserData,
139 FirstNewIntervalExtendedStatus* firstIntervalStatus,
KyFloat32 minimumDistanceAdvancement = 0.0f);
146 template<
class TraverseLogic>
147 KyResult ValidateBackWard(
Path* path,
void* traverseLogicUserData,
KyFloat32 minimumdrawBackDistance = 0.0f);
149 template<
class TraverseLogic>
150 KyResult TestCanGoToPrevPathNode(
Path* path,
void* traverseLogicUserData);
151 template<
class TraverseLogic>
152 KyResult TestCanGoToNextPathNode(
Path* path,
void* traverseLogicUserData, FirstNewIntervalExtendedStatus* firstNewInterval);
154 template<
class TraverseLogic>
155 void FindLastValidPositionForward(
Path* path,
void* traverseLogicUserData, FirstNewIntervalExtendedStatus* firstNewInterval);
156 template<
class TraverseLogic>
157 void FindLastValidPositionBackward(
Path* path,
void* traverseLogicUserData);
159 template<
class TraverseLogic>
161 template<
class TraverseLogic>
164 template<
class TraverseLogic>
166 template<
class TraverseLogic>
167 KyResult ValidateNavTagTransitionForward(
void* traverseLogicUserData,
KyUInt32 firstNewEvent,
172 KyResult BuildEventListFromLowerBoundToUpperBound(
Path* path);
174 void CreateIntervalForNavTagSubSegment(
Path* path,
KyUInt32 pathEdgeIdxToMoveOn, FirstNewIntervalExtendedStatus* firstNewInterval)
176 CreateIntervalsForNavTagSubsegmentButLast(path, pathEdgeIdxToMoveOn, firstNewInterval);
177 const PathEventType lastEventType = GetEventTypeForLastNavTagSubSegment(path, pathEdgeIdxToMoveOn);
178 CreateIntervalForLastNavTagSubSegment(path, pathEdgeIdxToMoveOn, lastEventType, firstNewInterval);
181 void CreateIntervalsForNavTagSubsegmentButLast(
Path* path,
KyUInt32 pathEdgeIdxToMoveOn, FirstNewIntervalExtendedStatus* firstNewInterval);
182 void CreateIntervalForLastNavTagSubSegment(
Path* path,
KyUInt32 pathEdgeIdxToMoveOn,
PathEventType typeOfLastEvent, FirstNewIntervalExtendedStatus* firstNewInterval);
183 void CheckIfLastEventShouldBeRemoved(
const NavTagSubSegment& incomingNavTagSubSegment, FirstNewIntervalExtendedStatus* firstNewInterval);
186 void CreateIntervalForGraphEdge(
Path* path,
KyUInt32 pathEdgeIdxToMoveOn);
187 void CreateIntervalForOutsideAlongGraphEdge(
Path* path,
KyUInt32 pathEdgeIdxToMoveOn);
188 void CreateIntervalForFromOutsidePathEdge(
Path* path,
KyUInt32 pathEdgeIdxToMoveOn);
189 void CreateIntervalForToOutsidePathEdge(
Path* path,
KyUInt32 pathEdgeIdxToMoveOn);
196 template<
class TraverseLogic>
199 template<
class TraverseLogic>
200 KyResult ValidateChannelSection(
void* traverseLogicUserData,
Path* path,
const ChannelSectionPtr &channelSectionPtr);
201 template<
class TraverseLogic>
203 template<
class TraverseLogic>
205 template<
class TraverseLogic,
class EdgeIntersector>
206 KyResult PerformBreadthFirstSearchTraversal(
void* traverseLogicUserData,
Path* path, EdgeIntersector& intersector);
208 template<
class TraverseLogic>
222 bool m_needToCheckLastEventForRemoval;
223 bool m_needToValidateChannelSections;
The Path validity around the progress of the bot on path is limited:
Definition: pathvalidityinterval.h:76
No Path has been set yet.
Definition: pathvalidityinterval.h:45
This class aggregates all necessary information about a position on a Path.
Definition: positiononpath.h:29
PathEventList aggregates all PathEvents and PathEventIntervals in a PathValidityInterval.
Definition: patheventlist.h:117
std::uint32_t KyUInt32
uint32_t
Definition: types.h:29
PathValidityInterval bound specific: bound reached start or end of the path or the max distance of va...
Definition: patheventlist.h:31
The Path has been completely checked and is valid.
Definition: pathvalidityinterval.h:48
NavData have changed around the Path, its validation is about to start.
Definition: pathvalidityinterval.h:51
This class represents a NavTag sub-segment of a ray (within a RayCastQuery or a RayCanGoQuery, carried out against the NavMesh).
Definition: navtagsubsegment.h:39
PathValidityStatus
Enumerate the different validity status of a LivePath.
Definition: pathvalidityinterval.h:42
General purpose array for movable objects that require explicit construction/destruction.
Definition: kyarray.h:162
The validation can not be processed at all.
Definition: pathvalidityinterval.h:61
Each instance of this class uniquely identifies a single NavFloor.
Definition: navtagptr.h:21
The Path is currently under validation.
Definition: pathvalidityinterval.h:55
Navigation return code class.
Definition: types.h:108
The Autodesk Navigation namespace.
Definition: gamekitcrowddispersion.cpp:17
PathEventStatusInList
Defines the PathEvent status relative to its place in the PathEventList.
Definition: patheventlist.h:39
The Path validity around the progress of the bot on path is limited:
Definition: pathvalidityinterval.h:66
Maintains runtime validity information on a given Path.
Definition: pathvalidityinterval.h:110
std::int32_t KyInt32
int32_t
Definition: types.h:24
The Path validity around the progress of the bot on path is limited:
Definition: pathvalidityinterval.h:71
Each instance of this class uniquely identifies a single NavTriangle in a NavFloor.
Definition: navtriangleptr.h:17
The Path validity around the progress of the bot on path is limited: both backward and forward valida...
Definition: pathvalidityinterval.h:80
Tag type used for function overloading in templates. It will be set as a nested typedef in CustomTrav...
Definition: traverselogic.h:54
Tag type used for function overloading in templates. It will be set as a nested typedef in CustomTrav...
Definition: traverselogic.h:51
The class representing a path.
Definition: path.h:62
float KyFloat32
float
Definition: types.h:32
3d vector using 32bits floating points.
Definition: vec3f.h:16
PathEventType
Defines the different kinds of PathEvent.
Definition: patheventlist.h:20