Planeshift
|
Provides the ability to perform pathfinding related queries against a navigation mesh. More...
#include <DetourNavMeshQuery.h>
Classes | |
struct | dtQueryData |
Public Member Functions | |
dtNavMeshQuery () | |
dtStatus | init (const dtNavMesh *nav, const int maxNodes) |
Initializes the query object. | |
~dtNavMeshQuery () | |
Standard Pathfinding Functions | |
dtStatus | findPath (dtPolyRef startRef, dtPolyRef endRef, const float *startPos, const float *endPos, const dtQueryFilter *filter, dtPolyRef *path, int *pathCount, const int maxPath) const |
Finds a path from the start polygon to the end polygon. | |
dtStatus | findStraightPath (const float *startPos, const float *endPos, const dtPolyRef *path, const int pathSize, float *straightPath, unsigned char *straightPathFlags, dtPolyRef *straightPathRefs, int *straightPathCount, const int maxStraightPath) const |
Finds the straight path from the start to the end position within the polygon corridor. | |
Sliced Pathfinding Functions | |
Common use case:
| |
dtStatus | initSlicedFindPath (dtPolyRef startRef, dtPolyRef endRef, const float *startPos, const float *endPos, const dtQueryFilter *filter) |
Intializes a sliced path query. | |
dtStatus | updateSlicedFindPath (const int maxIter, int *doneIters) |
Updates an in-progress sliced path query. | |
dtStatus | finalizeSlicedFindPath (dtPolyRef *path, int *pathCount, const int maxPath) |
Finalizes and returns the results of a sliced path query. | |
dtStatus | finalizeSlicedFindPathPartial (const dtPolyRef *existing, const int existingSize, dtPolyRef *path, int *pathCount, const int maxPath) |
Finalizes and returns the results of an incomplete sliced path query, returning the path to the furthest polygon on the existing path that was visited during the search. | |
Dijkstra Search Functions | |
dtStatus | findPolysAroundCircle (dtPolyRef startRef, const float *centerPos, const float radius, const dtQueryFilter *filter, dtPolyRef *resultRef, dtPolyRef *resultParent, float *resultCost, int *resultCount, const int maxResult) const |
Finds the polygons along the navigation graph that touch the specified circle. | |
dtStatus | findPolysAroundShape (dtPolyRef startRef, const float *verts, const int nverts, const dtQueryFilter *filter, dtPolyRef *resultRef, dtPolyRef *resultParent, float *resultCost, int *resultCount, const int maxResult) const |
Finds the polygons along the naviation graph that touch the specified convex polygon. | |
Local Query Functions | |
dtStatus | findNearestPoly (const float *center, const float *extents, const dtQueryFilter *filter, dtPolyRef *nearestRef, float *nearestPt) const |
Finds the polygon nearest to the specified center point. | |
dtStatus | queryPolygons (const float *center, const float *extents, const dtQueryFilter *filter, dtPolyRef *polys, int *polyCount, const int maxPolys) const |
Finds polygons that overlap the search box. | |
dtStatus | findLocalNeighbourhood (dtPolyRef startRef, const float *centerPos, const float radius, const dtQueryFilter *filter, dtPolyRef *resultRef, dtPolyRef *resultParent, int *resultCount, const int maxResult) const |
Finds the non-overlapping navigation polygons in the local neighbourhood around the center position. | |
dtStatus | moveAlongSurface (dtPolyRef startRef, const float *startPos, const float *endPos, const dtQueryFilter *filter, float *resultPos, dtPolyRef *visited, int *visitedCount, const int maxVisitedSize) const |
Moves from the start to the end position constrained to the navigation mesh. | |
dtStatus | raycast (dtPolyRef startRef, const float *startPos, const float *endPos, const dtQueryFilter *filter, float *t, float *hitNormal, dtPolyRef *path, int *pathCount, const int maxPath) const |
Casts a 'walkability' ray along the surface of the navigation mesh from the start position toward the end position. | |
dtStatus | findDistanceToWall (dtPolyRef startRef, const float *centerPos, const float maxRadius, const dtQueryFilter *filter, float *hitDist, float *hitPos, float *hitNormal) const |
Finds the distance from the specified position to the nearest polygon wall. | |
dtStatus | getPolyWallSegments (dtPolyRef ref, const dtQueryFilter *filter, float *segmentVerts, dtPolyRef *segmentRefs, int *segmentCount, const int maxSegments) const |
Returns the segments for the specified polygon, optionally including portals. | |
dtStatus | findRandomPoint (const dtQueryFilter *filter, float(*frand)(), dtPolyRef *randomRef, float *randomPt) const |
Returns random location on navmesh. Polygons are chosen weighted by area. The search runs in linear related to number of polygon. | |
dtStatus | findRandomPointAroundCircle (dtPolyRef startRef, const float *centerPos, const float maxRadius, const dtQueryFilter *filter, float(*frand)(), dtPolyRef *randomRef, float *randomPt) const |
Returns random location on navmesh within the reach of specified location. Polygons are chosen weighted by area. The search runs in linear related to number of polygon. The location is not exactly constrained by the circle, but it limits the visited polygons. | |
dtStatus | closestPointOnPoly (dtPolyRef ref, const float *pos, float *closest) const |
Finds the closest point on the specified polygon. | |
dtStatus | closestPointOnPolyBoundary (dtPolyRef ref, const float *pos, float *closest) const |
Returns a point on the boundary closest to the source point if the source point is outside the polygon's xz-bounds. | |
dtStatus | getPolyHeight (dtPolyRef ref, const float *pos, float *height) const |
Gets the height of the polygon at the provided position using the height detail. (Most accurate.) | |
Miscellaneous Functions | |
bool | isValidPolyRef (dtPolyRef ref, const dtQueryFilter *filter) const |
Returns true if the polygon reference is valid and passes the filter restrictions. | |
bool | isInClosedList (dtPolyRef ref) const |
Returns true if the polygon reference is in the closed list. | |
class dtNodePool * | getNodePool () const |
Gets the node pool. | |
const dtNavMesh * | getAttachedNavMesh () const |
Gets the navigation mesh the query object is using. |
Provides the ability to perform pathfinding related queries against a navigation mesh.
Definition at line 121 of file DetourNavMeshQuery.h.
dtNavMeshQuery::dtNavMeshQuery | ( | ) |
dtNavMeshQuery::~dtNavMeshQuery | ( | ) |
dtStatus dtNavMeshQuery::closestPointOnPoly | ( | dtPolyRef | ref, |
const float * | pos, | ||
float * | closest | ||
) | const |
Finds the closest point on the specified polygon.
[in] | ref | The reference id of the polygon. |
[in] | pos | The position to check. [(x, y, z)] |
[out] | closest | The closest point on the polygon. [(x, y, z)] |
dtStatus dtNavMeshQuery::closestPointOnPolyBoundary | ( | dtPolyRef | ref, |
const float * | pos, | ||
float * | closest | ||
) | const |
Returns a point on the boundary closest to the source point if the source point is outside the polygon's xz-bounds.
[in] | ref | The reference id to the polygon. |
[in] | pos | The position to check. [(x, y, z)] |
[out] | closest | The closest point. [(x, y, z)] |
dtStatus dtNavMeshQuery::finalizeSlicedFindPath | ( | dtPolyRef * | path, |
int * | pathCount, | ||
const int | maxPath | ||
) |
Finalizes and returns the results of a sliced path query.
[out] | path | An ordered list of polygon references representing the path. (Start to end.) [(polyRef) * pathCount ] |
[out] | pathCount | The number of polygons returned in the path array. |
[in] | maxPath | The max number of polygons the path array can hold. [Limit: >= 1] |
dtStatus dtNavMeshQuery::finalizeSlicedFindPathPartial | ( | const dtPolyRef * | existing, |
const int | existingSize, | ||
dtPolyRef * | path, | ||
int * | pathCount, | ||
const int | maxPath | ||
) |
Finalizes and returns the results of an incomplete sliced path query, returning the path to the furthest polygon on the existing path that was visited during the search.
[out] | existing | An array of polygon references for the existing path. |
[out] | existingSize | The number of polygon in the existing array. |
[out] | path | An ordered list of polygon references representing the path. (Start to end.) [(polyRef) * pathCount ] |
[out] | pathCount | The number of polygons returned in the path array. |
[in] | maxPath | The max number of polygons the path array can hold. [Limit: >= 1] |
dtStatus dtNavMeshQuery::findDistanceToWall | ( | dtPolyRef | startRef, |
const float * | centerPos, | ||
const float | maxRadius, | ||
const dtQueryFilter * | filter, | ||
float * | hitDist, | ||
float * | hitPos, | ||
float * | hitNormal | ||
) | const |
Finds the distance from the specified position to the nearest polygon wall.
[in] | startRef | The reference id of the polygon containing centerPos . |
[in] | centerPos | The center of the search circle. [(x, y, z)] |
[in] | maxRadius | The radius of the search circle. |
[in] | filter | The polygon filter to apply to the query. |
[out] | hitDist | The distance to the nearest wall from centerPos . |
[out] | hitPos | The nearest position on the wall that was hit. [(x, y, z)] |
[out] | hitNormal | The normalized ray formed from the wall point to the source point. [(x, y, z)] |
dtStatus dtNavMeshQuery::findLocalNeighbourhood | ( | dtPolyRef | startRef, |
const float * | centerPos, | ||
const float | radius, | ||
const dtQueryFilter * | filter, | ||
dtPolyRef * | resultRef, | ||
dtPolyRef * | resultParent, | ||
int * | resultCount, | ||
const int | maxResult | ||
) | const |
Finds the non-overlapping navigation polygons in the local neighbourhood around the center position.
[in] | startRef | The reference id of the polygon where the search starts. |
[in] | centerPos | The center of the query circle. [(x, y, z)] |
[in] | radius | The radius of the query circle. |
[in] | filter | The polygon filter to apply to the query. |
[out] | resultRef | The reference ids of the polygons touched by the circle. |
[out] | resultParent | The reference ids of the parent polygons for each result. Zero if a result polygon has no parent. [opt] |
[out] | resultCount | The number of polygons found. |
[in] | maxResult | The maximum number of polygons the result arrays can hold. |
dtStatus dtNavMeshQuery::findNearestPoly | ( | const float * | center, |
const float * | extents, | ||
const dtQueryFilter * | filter, | ||
dtPolyRef * | nearestRef, | ||
float * | nearestPt | ||
) | const |
Finds the polygon nearest to the specified center point.
[in] | center | The center of the search box. [(x, y, z)] |
[in] | extents | The search distance along each axis. [(x, y, z)] |
[in] | filter | The polygon filter to apply to the query. |
[out] | nearestRef | The reference id of the nearest polygon. |
[out] | nearestPt | The nearest point on the polygon. [opt] [(x, y, z)] |
dtStatus dtNavMeshQuery::findPath | ( | dtPolyRef | startRef, |
dtPolyRef | endRef, | ||
const float * | startPos, | ||
const float * | endPos, | ||
const dtQueryFilter * | filter, | ||
dtPolyRef * | path, | ||
int * | pathCount, | ||
const int | maxPath | ||
) | const |
Finds a path from the start polygon to the end polygon.
[in] | startRef | The refrence id of the start polygon. |
[in] | endRef | The reference id of the end polygon. |
[in] | startPos | A position within the start polygon. [(x, y, z)] |
[in] | endPos | A position within the end polygon. [(x, y, z)] |
[in] | filter | The polygon filter to apply to the query. |
[out] | path | An ordered list of polygon references representing the path. (Start to end.) [(polyRef) * pathCount ] |
[out] | pathCount | The number of polygons returned in the path array. |
[in] | maxPath | The maximum number of polygons the path array can hold. [Limit: >= 1] |
dtStatus dtNavMeshQuery::findPolysAroundCircle | ( | dtPolyRef | startRef, |
const float * | centerPos, | ||
const float | radius, | ||
const dtQueryFilter * | filter, | ||
dtPolyRef * | resultRef, | ||
dtPolyRef * | resultParent, | ||
float * | resultCost, | ||
int * | resultCount, | ||
const int | maxResult | ||
) | const |
Finds the polygons along the navigation graph that touch the specified circle.
[in] | startRef | The reference id of the polygon where the search starts. |
[in] | centerPos | The center of the search circle. [(x, y, z)] |
[in] | radius | The radius of the search circle. |
[in] | filter | The polygon filter to apply to the query. |
[out] | resultRef | The reference ids of the polygons touched by the circle. [opt] |
[out] | resultParent | The reference ids of the parent polygons for each result. Zero if a result polygon has no parent. [opt] |
[out] | resultCost | The search cost from centerPos to the polygon. [opt] |
[out] | resultCount | The number of polygons found. [opt] |
[in] | maxResult | The maximum number of polygons the result arrays can hold. |
dtStatus dtNavMeshQuery::findPolysAroundShape | ( | dtPolyRef | startRef, |
const float * | verts, | ||
const int | nverts, | ||
const dtQueryFilter * | filter, | ||
dtPolyRef * | resultRef, | ||
dtPolyRef * | resultParent, | ||
float * | resultCost, | ||
int * | resultCount, | ||
const int | maxResult | ||
) | const |
Finds the polygons along the naviation graph that touch the specified convex polygon.
[in] | startRef | The reference id of the polygon where the search starts. |
[in] | verts | The vertices describing the convex polygon. (CCW) [(x, y, z) * nverts ] |
[in] | nverts | The number of vertices in the polygon. |
[in] | filter | The polygon filter to apply to the query. |
[out] | resultRef | The reference ids of the polygons touched by the search polygon. [opt] |
[out] | resultParent | The reference ids of the parent polygons for each result. Zero if a result polygon has no parent. [opt] |
[out] | resultCost | The search cost from the centroid point to the polygon. [opt] |
[out] | resultCount | The number of polygons found. |
[in] | maxResult | The maximum number of polygons the result arrays can hold. |
dtStatus dtNavMeshQuery::findRandomPoint | ( | const dtQueryFilter * | filter, |
float(*)() | frand, | ||
dtPolyRef * | randomRef, | ||
float * | randomPt | ||
) | const |
Returns random location on navmesh. Polygons are chosen weighted by area. The search runs in linear related to number of polygon.
[in] | filter | The polygon filter to apply to the query. |
[in] | frand | Function returning a random number [0..1). |
[out] | randomRef | The reference id of the random location. |
[out] | randomPt | The random location. |
dtStatus dtNavMeshQuery::findRandomPointAroundCircle | ( | dtPolyRef | startRef, |
const float * | centerPos, | ||
const float | maxRadius, | ||
const dtQueryFilter * | filter, | ||
float(*)() | frand, | ||
dtPolyRef * | randomRef, | ||
float * | randomPt | ||
) | const |
Returns random location on navmesh within the reach of specified location. Polygons are chosen weighted by area. The search runs in linear related to number of polygon. The location is not exactly constrained by the circle, but it limits the visited polygons.
[in] | startRef | The reference id of the polygon where the search starts. |
[in] | centerPos | The center of the search circle. [(x, y, z)] |
[in] | filter | The polygon filter to apply to the query. |
[in] | frand | Function returning a random number [0..1). |
[out] | randomRef | The reference id of the random location. |
[out] | randomPt | The random location. [(x, y, z)] |
dtStatus dtNavMeshQuery::findStraightPath | ( | const float * | startPos, |
const float * | endPos, | ||
const dtPolyRef * | path, | ||
const int | pathSize, | ||
float * | straightPath, | ||
unsigned char * | straightPathFlags, | ||
dtPolyRef * | straightPathRefs, | ||
int * | straightPathCount, | ||
const int | maxStraightPath | ||
) | const |
Finds the straight path from the start to the end position within the polygon corridor.
[in] | startPos | Path start position. [(x, y, z)] |
[in] | endPos | Path end position. [(x, y, z)] |
[in] | path | An array of polygon references that represent the path corridor. |
[in] | pathSize | The number of polygons in the path array. |
[out] | straightPath | Points describing the straight path. [(x, y, z) * straightPathCount ]. |
[out] | straightPathFlags | Flags describing each point. (See: dtStraightPathFlags) [opt] |
[out] | straightPathRefs | The reference id of the polygon that is being entered at each point. [opt] |
[out] | straightPathCount | The number of points in the straight path. |
[in] | maxStraightPath | The maximum number of points the straight path arrays can hold. [Limit: > 0] |
const dtNavMesh* dtNavMeshQuery::getAttachedNavMesh | ( | ) | const [inline] |
Gets the navigation mesh the query object is using.
Definition at line 418 of file DetourNavMeshQuery.h.
class dtNodePool* dtNavMeshQuery::getNodePool | ( | ) | const [inline] |
Gets the height of the polygon at the provided position using the height detail. (Most accurate.)
[in] | ref | The reference id of the polygon. |
[in] | pos | A position within the xz-bounds of the polygon. [(x, y, z)] |
[out] | height | The height at the surface of the polygon. |
dtStatus dtNavMeshQuery::getPolyWallSegments | ( | dtPolyRef | ref, |
const dtQueryFilter * | filter, | ||
float * | segmentVerts, | ||
dtPolyRef * | segmentRefs, | ||
int * | segmentCount, | ||
const int | maxSegments | ||
) | const |
Returns the segments for the specified polygon, optionally including portals.
[in] | ref | The reference id of the polygon. |
[in] | filter | The polygon filter to apply to the query. |
[out] | segmentVerts | The segments. [(ax, ay, az, bx, by, bz) * segmentCount] |
[out] | segmentRefs | The reference ids of each segment's neighbor polygon. Or zero if the segment is a wall. [opt] [(parentRef) * segmentCount ] |
[out] | segmentCount | The number of segments returned. |
[in] | maxSegments | The maximum number of segments the result arrays can hold. |
Initializes the query object.
[in] | nav | Pointer to the dtNavMesh object to use for all queries. |
[in] | maxNodes | Maximum number of search nodes. [Limits: 0 < value <= 65536] |
dtStatus dtNavMeshQuery::initSlicedFindPath | ( | dtPolyRef | startRef, |
dtPolyRef | endRef, | ||
const float * | startPos, | ||
const float * | endPos, | ||
const dtQueryFilter * | filter | ||
) |
Intializes a sliced path query.
[in] | startRef | The refrence id of the start polygon. |
[in] | endRef | The reference id of the end polygon. |
[in] | startPos | A position within the start polygon. [(x, y, z)] |
[in] | endPos | A position within the end polygon. [(x, y, z)] |
[in] | filter | The polygon filter to apply to the query. |
bool dtNavMeshQuery::isInClosedList | ( | dtPolyRef | ref | ) | const |
Returns true if the polygon reference is in the closed list.
[in] | ref | The reference id of the polygon to check. |
bool dtNavMeshQuery::isValidPolyRef | ( | dtPolyRef | ref, |
const dtQueryFilter * | filter | ||
) | const |
Returns true if the polygon reference is valid and passes the filter restrictions.
[in] | ref | The polygon reference to check. |
[in] | filter | The filter to apply. |
dtStatus dtNavMeshQuery::moveAlongSurface | ( | dtPolyRef | startRef, |
const float * | startPos, | ||
const float * | endPos, | ||
const dtQueryFilter * | filter, | ||
float * | resultPos, | ||
dtPolyRef * | visited, | ||
int * | visitedCount, | ||
const int | maxVisitedSize | ||
) | const |
Moves from the start to the end position constrained to the navigation mesh.
[in] | startRef | The reference id of the start polygon. |
[in] | startPos | A position of the mover within the start polygon. [(x, y, x)] |
[in] | endPos | The desired end position of the mover. [(x, y, z)] |
[in] | filter | The polygon filter to apply to the query. |
[out] | resultPos | The result position of the mover. [(x, y, z)] |
[out] | visited | The reference ids of the polygons visited during the move. |
[out] | visitedCount | The number of polygons visited during the move. |
[in] | maxVisitedSize | The maximum number of polygons the visited array can hold. |
dtStatus dtNavMeshQuery::queryPolygons | ( | const float * | center, |
const float * | extents, | ||
const dtQueryFilter * | filter, | ||
dtPolyRef * | polys, | ||
int * | polyCount, | ||
const int | maxPolys | ||
) | const |
Finds polygons that overlap the search box.
[in] | center | The center of the search box. [(x, y, z)] |
[in] | extents | The search distance along each axis. [(x, y, z)] |
[in] | filter | The polygon filter to apply to the query. |
[out] | polys | The reference ids of the polygons that overlap the query box. |
[out] | polyCount | The number of polygons in the search result. |
[in] | maxPolys | The maximum number of polygons the search result can hold. |
dtStatus dtNavMeshQuery::raycast | ( | dtPolyRef | startRef, |
const float * | startPos, | ||
const float * | endPos, | ||
const dtQueryFilter * | filter, | ||
float * | t, | ||
float * | hitNormal, | ||
dtPolyRef * | path, | ||
int * | pathCount, | ||
const int | maxPath | ||
) | const |
Casts a 'walkability' ray along the surface of the navigation mesh from the start position toward the end position.
[in] | startRef | The reference id of the start polygon. |
[in] | startPos | A position within the start polygon representing the start of the ray. [(x, y, z)] |
[in] | endPos | The position to cast the ray toward. [(x, y, z)] |
[out] | t | The hit parameter. (FLT_MAX if no wall hit.) |
[out] | hitNormal | The normal of the nearest wall hit. [(x, y, z)] |
[in] | filter | The polygon filter to apply to the query. |
[out] | path | The reference ids of the visited polygons. [opt] |
[out] | pathCount | The number of visited polygons. [opt] |
[in] | maxPath | The maximum number of polygons the path array can hold. |
Updates an in-progress sliced path query.
[in] | maxIter | The maximum number of iterations to perform. |
[out] | doneIters | The actual number of iterations completed. [opt] |