22#ifndef DETOURNAVMESHQUERY_H
23#define DETOURNAVMESHQUERY_H
34#define WITH_FIXED_AREA_ENTERING_COST 1
37#define DT_UNWALKABLE_POLY_COST FLT_MAX
56 virtual bool isLinkAllowed(
const unsigned long long int UserId)
const {
return true; }
58 UE_DEPRECATED(5.3,
"LinkIds are now based on a 64 bit uint. Use the version of this function that takes an unsigned long long int")
69#if WITH_FIXED_AREA_ENTERING_COST
152#if WITH_FIXED_AREA_ENTERING_COST
175#if !DT_LARGE_WORLD_COORDINATES_DISABLED
207 return !
isVirtual ?
getInlineCost(
pa,
pb,
prevRef,
prevTile,
prevPoly,
curRef,
curTile,
curPoly,
nextRef,
nextTile,
nextPoly)
208 :
getVirtualCost(
pa,
pb,
prevRef,
prevTile,
prevPoly,
curRef,
curTile,
curPoly,
nextRef,
nextTile,
nextPoly);
227#if WITH_FIXED_AREA_ENTERING_COST
254 return (side & DT_LINK_FLAG_OFFMESH_CON) == 0 || (side & DT_LINK_FLAG_OFFMESH_CON_BIDIR) != 0
256 : (side & DT_LINK_FLAG_OFFMESH_CON_BACKTRACKER) == 0);
323 inline unsigned int getFlag(
int idx)
const {
return data[idx].flag; }
339 inline void setFlag(
int idx,
unsigned int flag) {
data[idx].flag = flag; }
411 const dtReal* startPos,
const dtReal* endPos,
const dtReal costLimit,
const bool requireNavigableEndLocation,
545 dtPolyRef* polys,
int* polyCount,
const int maxPolys)
const;
673#if WITH_NAVMESH_CLUSTER_LINKS
773 dtPolyRef* polys,
const int maxPolys)
const;
820 return !(m_linkFilter &&
polyIdx >=
tile->header->offMeshBase
838 struct dtNode* lastBestNode;
841 dtReal startPos[3], endPos[3];
844 unsigned char requireNavigableEndLocation : 1;
852 mutable int m_queryNodes;
#define check(expr)
Definition AssertionMacros.h:314
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
T dtMin(T a, T b)
Definition DetourCommon.h:54
dtReal dtVdist(const dtReal *v1, const dtReal *v2)
Definition DetourCommon.h:304
double dtReal
Definition DetourLargeWorldCoordinates.h:15
#define DT_UNWALKABLE_POLY_COST
Definition DetourNavMeshQuery.h:37
#define WITH_FIXED_AREA_ENTERING_COST
Definition DetourNavMeshQuery.h:34
UEType_uint64 dtClusterRef
A handle to a cluster within a navigation mesh tile.
Definition DetourNavMesh.h:63
unsigned int dtStatus
Definition RecastGraphAStar.h:29
uint64 dtPolyRef
Definition RecastGraphAStar.h:28
bool left(const int *a, const int *b, const int *c)
Definition RecastMesh.cpp:182
const char * source
Definition lz4.h:711
A simple dynamic array of integers.
Definition DetourAlloc.h:168
int size() const
The current size of the integer array.
Definition DetourAlloc.h:207
void push(T item)
Definition DetourAlloc.h:190
void resize(int n)
Definition DetourAlloc.h:211
Definition DetourNavMeshQuery.h:349
NAVMESH_API dtStatus finalizeSlicedFindPathPartial(const dtPolyRef *existing, const int existingSize, dtPolyRef *path, int *pathCount, const int maxPath)
Definition DetourNavMeshQuery.cpp:2347
NAVMESH_API dtStatus findRandomPoint(const dtQueryFilter *filter, float(*frand)(), dtPolyRef *randomRef, dtReal *randomPt) const
Definition DetourNavMeshQuery.cpp:311
NAVMESH_API dtStatus closestPointOnPoly(dtPolyRef ref, const dtReal *pos, dtReal *closest) const
Definition DetourNavMeshQuery.cpp:749
NAVMESH_API dtStatus raycast(dtPolyRef startRef, const dtReal *startPos, const dtReal *endPos, const dtQueryFilter *filter, dtReal *t, dtReal *hitNormal, dtPolyRef *path, int *pathCount, const int maxPath) const
Definition DetourNavMeshQuery.cpp:3317
void setRequireNavigableEndLocation(const bool value)
Definition DetourNavMeshQuery.h:827
NAVMESH_API dtStatus appendVertex(const dtReal *pos, const unsigned char flags, const dtPolyRef ref, dtQueryResult &result, const bool bOverrideIdenticalPosition=true) const
Definition DetourNavMeshQuery.cpp:2427
NAVMESH_API ~dtNavMeshQuery()
Definition DetourNavMeshQuery.cpp:218
NAVMESH_API dtStatus findPolysAroundCircle(dtPolyRef startRef, const dtReal *centerPos, const dtReal radius, const dtQueryFilter *filter, dtPolyRef *resultRef, dtPolyRef *resultParent, dtReal *resultCost, int *resultCount, const int maxResult) const
Definition DetourNavMeshQuery.cpp:3574
NAVMESH_API dtStatus init(const dtNavMesh *nav, const int maxNodes, dtQuerySpecialLinkFilter *linkFilter=0)
Definition DetourNavMeshQuery.cpp:237
NAVMESH_API bool wasClusterLinkSearched(dtPolyRef cFrom, dtPolyRef cTo) const
bool isRequiringNavigableEndLocation() const
Definition DetourNavMeshQuery.h:828
bool passLinkFilter(const dtMeshTile *tile, const int polyIdx) const
Definition DetourNavMeshQuery.h:816
NAVMESH_API dtStatus initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef, const dtReal *startPos, const dtReal *endPos, const dtReal costLimit, const bool requireNavigableEndLocation, const dtQueryFilter *filter)
Definition DetourNavMeshQuery.cpp:2021
NAVMESH_API dtStatus findNearestPoly2D(const dtReal *center, const dtReal *extents, const dtQueryFilter *filter, dtPolyRef *outProjectedRef, dtReal *outProjectedPt, const dtReal *referencePt=0, dtReal tolerance=0) const
Definition DetourNavMeshQuery.cpp:1204
NAVMESH_API dtStatus findWallsAroundPath(const dtPolyRef *path, const int pathCount, const dtReal *searchAreaPoly, const int searchAreaPolyCount, const dtReal maxAreaEnterCost, const dtQueryFilter *filter, dtPolyRef *neiRefs, int *neiCount, const int maxNei, dtReal *resultWalls, dtPolyRef *resultRefs, int *resultCount, const int maxResult) const
[UE] Finds the wall segments that overlap the polygon shape.
Definition DetourNavMeshQuery.cpp:4952
NAVMESH_API dtStatus findPolysAroundShape(dtPolyRef startRef, const dtReal *verts, const int nverts, const dtQueryFilter *filter, dtPolyRef *resultRef, dtPolyRef *resultParent, dtReal *resultCost, int *resultCount, const int maxResult) const
Definition DetourNavMeshQuery.cpp:3760
NAVMESH_API dtStatus getPolyHeight(dtPolyRef ref, const dtReal *pos, dtReal *height) const
Definition DetourNavMeshQuery.cpp:1028
void getCurrentBestResult(struct dtNode *&bestNode, dtReal &bestCost) const
Gets best node ref and cost from sliced pathfinding data.
Definition DetourNavMeshQuery.h:761
NAVMESH_API void updateLinkFilter(dtQuerySpecialLinkFilter *linkFilter)
UE: updates special link filter for this query.
Definition DetourNavMeshQuery.cpp:301
NAVMESH_API dtStatus queryPolygons(const dtReal *center, const dtReal *extents, const dtQueryFilter *filter, dtPolyRef *polys, int *polyCount, const int maxPolys) const
Definition DetourNavMeshQuery.cpp:1525
NAVMESH_API dtStatus findNearestContainingPoly(const dtReal *center, const dtReal *extents, const dtQueryFilter *filter, dtPolyRef *nearestRef, dtReal *nearestPt) const
Definition DetourNavMeshQuery.cpp:1306
NAVMESH_API dtStatus closestPointOnPolyBoundary(dtPolyRef ref, const dtReal *pos, dtReal *closest) const
Definition DetourNavMeshQuery.cpp:870
NAVMESH_API dtStatus isPointInsidePoly(dtPolyRef ref, const dtReal *pos, bool &result) const
Definition DetourNavMeshQuery.cpp:944
NAVMESH_API dtStatus getPortalPoints(dtPolyRef from, dtPolyRef to, dtReal *left, dtReal *right, unsigned char &fromType, unsigned char &toType) const
Returns portal points between two polygons.
Definition DetourNavMeshQuery.cpp:3099
NAVMESH_API dtStatus getPolyWallSegments(dtPolyRef ref, const dtQueryFilter *filter, dtReal *segmentVerts, dtPolyRef *segmentRefs, int *segmentCount, const int maxSegments) const
Definition DetourNavMeshQuery.cpp:4337
NAVMESH_API dtStatus findNearestPoly(const dtReal *center, const dtReal *extents, const dtQueryFilter *filter, dtPolyRef *nearestRef, dtReal *nearestPt, const dtReal *referencePt=0) const
Definition DetourNavMeshQuery.cpp:1139
NAVMESH_API dtStatus getEdgeMidPoint(dtPolyRef from, dtPolyRef to, dtReal *mid) const
Returns edge mid point between two polygons.
Definition DetourNavMeshQuery.cpp:3254
int getQueryNodes() const
Definition DetourNavMeshQuery.h:763
NAVMESH_API dtStatus findPolysInPathDistance(dtPolyRef startRef, const dtReal *centerPos, const dtReal pathDistance, const dtQueryFilter *filter, dtPolyRef *resultRef, int *resultCount, const int maxResult) const
Definition DetourNavMeshQuery.cpp:3926
NAVMESH_API dtStatus finalizeSlicedFindPath(dtPolyRef *path, int *pathCount, const int maxPath)
Definition DetourNavMeshQuery.cpp:2284
NAVMESH_API dtStatus updateSlicedFindPath(const int maxIter, int *doneIters)
Definition DetourNavMeshQuery.cpp:2077
NAVMESH_API dtStatus findLocalNeighbourhood(dtPolyRef startRef, const dtReal *centerPos, const dtReal radius, const dtQueryFilter *filter, dtPolyRef *resultRef, dtPolyRef *resultParent, int *resultCount, const int maxResult) const
Definition DetourNavMeshQuery.cpp:4113
NAVMESH_API dtStatus findWallsInNeighbourhood(dtPolyRef startRef, const dtReal *centerPos, const dtReal radius, const dtQueryFilter *filter, dtPolyRef *neiRefs, int *neiCount, const int maxNei, dtReal *resultWalls, dtPolyRef *resultRefs, int *resultCount, const int maxResult) const
[UE] Finds the wall segments in local neighbourhood
Definition DetourNavMeshQuery.cpp:4611
NAVMESH_API dtNavMeshQuery()
Definition DetourNavMeshQuery.cpp:207
NAVMESH_API dtStatus findDistanceToWall(dtPolyRef startRef, const dtReal *centerPos, const dtReal maxRadius, const dtQueryFilter *filter, dtReal *hitDist, dtReal *hitPos, dtReal *hitNormal) const
Definition DetourNavMeshQuery.cpp:5142
NAVMESH_API dtStatus moveAlongSurface(dtPolyRef startRef, const dtReal *startPos, const dtReal *endPos, const dtQueryFilter *filter, dtReal *resultPos, dtPolyRef *visited, int *visitedCount, const int maxVisitedSize) const
Definition DetourNavMeshQuery.cpp:2892
const dtNavMesh * getAttachedNavMesh() const
Definition DetourNavMeshQuery.h:758
bool passLinkFilterByRef(const dtMeshTile *tile, const dtPolyRef ref) const
Definition DetourNavMeshQuery.h:811
NAVMESH_API dtStatus projectedPointOnPoly(dtPolyRef ref, const dtReal *pos, dtReal *projected) const
Definition DetourNavMeshQuery.cpp:931
NAVMESH_API dtStatus appendPortals(const int startIdx, const int endIdx, const dtReal *endPos, const dtPolyRef *path, dtQueryResult &result, const int options) const
Definition DetourNavMeshQuery.cpp:2448
class dtNodePool * getNodePool() const
Definition DetourNavMeshQuery.h:754
NAVMESH_API bool isValidPolyRef(dtPolyRef ref, const dtQueryFilter *filter) const
Definition DetourNavMeshQuery.cpp:5374
NAVMESH_API dtStatus findPath(dtPolyRef startRef, dtPolyRef endRef, const dtReal *startPos, const dtReal *endPos, const dtReal costLimit, const dtQueryFilter *filter, dtQueryResult &result, dtReal *totalCost) const
Definition DetourNavMeshQuery.cpp:1578
NAVMESH_API bool isInClosedList(dtPolyRef ref) const
Definition DetourNavMeshQuery.cpp:5391
NAVMESH_API dtStatus findRandomPointInPoly(dtPolyRef ref, float(*frand)(), dtReal *randomPt) const
Definition DetourNavMeshQuery.cpp:607
NAVMESH_API dtStatus findStraightPath(const dtReal *startPos, const dtReal *endPos, const dtPolyRef *path, const int pathSize, dtQueryResult &result, const int options=0) const
Definition DetourNavMeshQuery.cpp:2538
NAVMESH_API dtStatus findWallsOverlappingShape(dtPolyRef startRef, const dtReal *verts, const int nverts, const dtQueryFilter *filter, dtPolyRef *neiRefs, int *neiCount, const int maxNei, dtReal *resultWalls, dtPolyRef *resultRefs, int *resultCount, const int maxResult) const
[UE] Finds the wall segments that overlap the polygon shape.
Definition DetourNavMeshQuery.cpp:4785
NAVMESH_API dtStatus findRandomPointAroundCircle(dtPolyRef startRef, const dtReal *centerPos, const dtReal maxRadius, const dtQueryFilter *filter, float(*frand)(), dtPolyRef *randomRef, dtReal *randomPt) const
Definition DetourNavMeshQuery.cpp:404
Definition DetourNavMesh.h:503
unsigned int decodePolyIdPoly(dtPolyRef ref) const
Definition DetourNavMesh.h:793
Definition DetourNode.h:50
Definition DetourNode.h:117
Definition DetourNavMeshQuery.h:96
void setAreaCost(const int i, const dtReal cost)
Definition DetourNavMeshQuery.h:222
void setExcludeFlags(const unsigned short flags)
Definition DetourNavMeshQuery.h:290
void setShouldIgnoreClosedNodes(const bool shouldIgnore)
Instruct filter whether it can reopen nodes already on closed list.
Definition DetourNavMeshQuery.h:267
virtual ~dtQueryFilter()
Definition DetourNavMeshQuery.h:104
bool isVirtual
Definition DetourNavMeshQuery.h:99
virtual dtReal getVirtualCost(const dtReal *pa, const dtReal *pb, const dtPolyRef prevRef, const dtMeshTile *prevTile, const dtPoly *prevPoly, const dtPolyRef curRef, const dtMeshTile *curTile, const dtPoly *curPoly, const dtPolyRef nextRef, const dtMeshTile *nextTile, const dtPoly *nextPoly) const
virtual scoring function implementation (defaults to getInlineCost).
Definition DetourNavMeshQuery.h:163
dtQueryFilterData data
Definition DetourNavMeshQuery.h:98
const dtReal * getAllAreaCosts() const
Definition DetourNavMeshQuery.h:225
dtReal getCost(const dtReal *pa, const dtReal *pb, const dtPolyRef prevRef, const dtMeshTile *prevTile, const dtPoly *prevPoly, const dtPolyRef curRef, const dtMeshTile *curTile, const dtPoly *curPoly, const dtPolyRef nextRef, const dtMeshTile *nextTile, const dtPoly *nextPoly) const
Definition DetourNavMeshQuery.h:202
dtQueryFilter(bool inIsVirtual=true)
Definition DetourNavMeshQuery.h:102
bool isValidLinkSide(const unsigned char side) const
Definition DetourNavMeshQuery.h:252
void setHeuristicScale(const dtReal newScale)
Set euclidean distance heuristic scale.
Definition DetourNavMeshQuery.h:248
unsigned short getIncludeFlags() const
Definition DetourNavMeshQuery.h:277
bool getShouldIgnoreClosedNodes() const
Definition DetourNavMeshQuery.h:271
const dtReal * getAllFixedAreaCosts() const
Definition DetourNavMeshQuery.h:238
void setIsBacktracking(const bool isBacktracking)
Sets up filter for backtracking.
Definition DetourNavMeshQuery.h:260
dtReal getInlineCost(const dtReal *pa, const dtReal *pb, const dtPolyRef prevRef, const dtMeshTile *prevTile, const dtPoly *prevPoly, const dtPolyRef curRef, const dtMeshTile *curTile, const dtPoly *curPoly, const dtPolyRef nextRef, const dtMeshTile *nextTile, const dtPoly *nextPoly) const
inlined scoring function.
Definition DetourNavMeshQuery.h:147
bool getIsVirtual() const
Returns true if it's a virtual filter.
Definition DetourNavMeshQuery.h:131
virtual bool passVirtualFilter(const dtPolyRef ref, const dtMeshTile *tile, const dtPoly *poly) const
virtual filter implementation (defaults to passInlineFilter).
Definition DetourNavMeshQuery.h:122
virtual float getVirtualCost(const float *pa, const float *pb, const dtPolyRef prevRef, const dtMeshTile *prevTile, const dtPoly *prevPoly, const dtPolyRef curRef, const dtMeshTile *curTile, const dtPoly *curPoly, const dtPolyRef nextRef, const dtMeshTile *nextTile, const dtPoly *nextPoly) const final
Definition DetourNavMeshQuery.h:177
bool passFilter(const dtPolyRef ref, const dtMeshTile *tile, const dtPoly *poly) const
Definition DetourNavMeshQuery.h:137
dtReal getAreaFixedCost(const int i) const
Definition DetourNavMeshQuery.h:231
void setIncludeFlags(const unsigned short flags)
Definition DetourNavMeshQuery.h:281
unsigned short getExcludeFlags() const
Definition DetourNavMeshQuery.h:286
void setAreaFixedCost(const int i, const dtReal cost)
Definition DetourNavMeshQuery.h:236
void copyFrom(const dtQueryFilter *other)
Copy data values from source filter.
Definition DetourNavMeshQuery.h:299
bool equals(const dtQueryFilter *other) const
Check if two filters have the same data values.
Definition DetourNavMeshQuery.h:295
bool getIsBacktracking() const
Definition DetourNavMeshQuery.h:264
dtReal getModifiedHeuristicScale() const
Definition DetourNavMeshQuery.h:241
bool equals(const dtQueryFilter &other) const
Definition DetourNavMeshQuery.h:296
dtReal getAreaCost(const int i) const
Definition DetourNavMeshQuery.h:217
bool passInlineFilter(const dtPolyRef ref, const dtMeshTile *tile, const dtPoly *poly) const
inlined filter implementation.
Definition DetourNavMeshQuery.h:109
dtReal getHeuristicScale() const
Definition DetourNavMeshQuery.h:245
void copyFrom(const dtQueryFilter &other)
Definition DetourNavMeshQuery.h:300
NAVMESH_API void dtFreeNavMeshQuery(dtNavMeshQuery *query)
Definition DetourNavMeshQuery.cpp:118
NAVMESH_API dtNavMeshQuery * dtAllocNavMeshQuery()
Definition DetourNavMeshQuery.cpp:111
Definition DetourNavMesh.h:422
Definition DetourNode.h:39
Definition DetourNavMesh.h:206
unsigned short flags
The user defined polygon flags.
Definition DetourNavMesh.h:218
unsigned char getArea() const
Gets the user defined area id.
Definition DetourNavMesh.h:234
Definition DetourNavMeshQuery.h:67
NAVMESH_API dtQueryFilterData()
Definition DetourNavMeshQuery.cpp:70
dtReal m_areaFixedCost[DT_MAX_AREAS]
Fixed cost for entering an area type (Used by default implementation.)
Definition DetourNavMeshQuery.h:70
bool m_isBacktracking
Definition DetourNavMeshQuery.h:78
dtReal lowestAreaCost
Definition DetourNavMeshQuery.h:73
unsigned short m_includeFlags
Flags for polygons that can be visited. (Used by default implementation.)
Definition DetourNavMeshQuery.h:75
NAVMESH_API bool equals(const dtQueryFilterData *other) const
Definition DetourNavMeshQuery.cpp:83
dtReal m_areaCost[DT_MAX_AREAS]
Cost per area type. (Used by default implementation.)
Definition DetourNavMeshQuery.h:68
bool m_shouldIgnoreClosedNodes
Definition DetourNavMeshQuery.h:84
NAVMESH_API void copyFrom(const dtQueryFilterData *source)
Definition DetourNavMeshQuery.cpp:102
dtReal heuristicScale
Search heuristic scale.
Definition DetourNavMeshQuery.h:72
unsigned short m_excludeFlags
Flags for polygons that should not be visited. (Used by default implementation.)
Definition DetourNavMeshQuery.h:76
Definition DetourNavMeshQuery.h:305
dtPolyRef ref
Definition DetourNavMeshQuery.h:306
dtReal pos[3]
Definition DetourNavMeshQuery.h:308
dtQueryResultPack()
Definition DetourNavMeshQuery.h:311
unsigned int flag
Definition DetourNavMeshQuery.h:309
dtReal cost
Definition DetourNavMeshQuery.h:307
Definition DetourNavMeshQuery.h:316
dtReal getCost(int idx) const
Definition DetourNavMeshQuery.h:321
int addItem(dtPolyRef ref, dtReal cost, const dtReal *pos, unsigned int flag)
Definition DetourNavMeshQuery.h:335
void reserve(int n)
Definition DetourNavMeshQuery.h:317
void setFlag(int idx, unsigned int flag)
Definition DetourNavMeshQuery.h:339
dtChunkArray< dtQueryResultPack > data
Definition DetourNavMeshQuery.h:333
NAVMESH_API void copyFlags(unsigned char *flags, int nmax)
Definition DetourNavMeshQuery.cpp:171
unsigned int getFlag(int idx) const
Definition DetourNavMeshQuery.h:323
const dtReal * getPos(int idx) const
Definition DetourNavMeshQuery.h:322
int size() const
Definition DetourNavMeshQuery.h:318
dtPolyRef getRef(int idx) const
Definition DetourNavMeshQuery.h:320
NAVMESH_API void setPos(int idx, const dtReal *pos)
Definition DetourNavMeshQuery.cpp:139
NAVMESH_API void copyPos(dtReal *pos, int nmax)
Definition DetourNavMeshQuery.cpp:162
NAVMESH_API void copyCosts(dtReal *costs, int nmax)
Definition DetourNavMeshQuery.cpp:153
void setCost(int idx, dtReal cost)
Definition DetourNavMeshQuery.h:338
void setRef(int idx, dtPolyRef ref)
Definition DetourNavMeshQuery.h:337
NAVMESH_API void copyRefs(dtPolyRef *refs, int nmax)
Definition DetourNavMeshQuery.cpp:144
Definition DetourNavMeshQuery.h:50
virtual void initialize()
Called before accessing in A* loop (can be called multiple time for updateSlicedFindPath)
Definition DetourNavMeshQuery.h:62
virtual bool isLinkAllowed(const unsigned long long int UserId) const
Definition DetourNavMeshQuery.h:56
virtual ~dtQuerySpecialLinkFilter()
Definition DetourNavMeshQuery.h:51