Planeshift
DetourPathCorridor.h
Go to the documentation of this file.
1 //
2 // Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
3 //
4 // This software is provided 'as-is', without any express or implied
5 // warranty. In no event will the authors be held liable for any damages
6 // arising from the use of this software.
7 // Permission is granted to anyone to use this software for any purpose,
8 // including commercial applications, and to alter it and redistribute it
9 // freely, subject to the following restrictions:
10 // 1. The origin of this software must not be misrepresented; you must not
11 // claim that you wrote the original software. If you use this software
12 // in a product, an acknowledgment in the product documentation would be
13 // appreciated but is not required.
14 // 2. Altered source versions must be plainly marked as such, and must not be
15 // misrepresented as being the original software.
16 // 3. This notice may not be removed or altered from any source distribution.
17 //
18 
19 #ifndef DETOUTPATHCORRIDOR_H
20 #define DETOUTPATHCORRIDOR_H
21 
22 #include "DetourNavMeshQuery.h"
23 
27 {
28  float m_pos[3];
29  float m_target[3];
30 
31  dtPolyRef* m_path;
32  int m_npath;
33  int m_maxPath;
34 
35 public:
38 
42  bool init(const int maxPath);
43 
47  void reset(dtPolyRef ref, const float* pos);
48 
58  int findCorners(float* cornerVerts, unsigned char* cornerFlags,
59  dtPolyRef* cornerPolys, const int maxCorners,
60  dtNavMeshQuery* navquery, const dtQueryFilter* filter);
61 
67  void optimizePathVisibility(const float* next, const float pathOptimizationRange,
68  dtNavMeshQuery* navquery, const dtQueryFilter* filter);
69 
73  bool optimizePathTopology(dtNavMeshQuery* navquery, const dtQueryFilter* filter);
74 
75  bool moveOverOffmeshConnection(dtPolyRef offMeshConRef, dtPolyRef* refs,
76  float* startPos, float* endPos,
77  dtNavMeshQuery* navquery);
78 
79  bool fixPathStart(dtPolyRef safeRef, const float* safePos);
80 
81  bool trimInvalidPath(dtPolyRef safeRef, const float* safePos,
82  dtNavMeshQuery* navquery, const dtQueryFilter* filter);
83 
88  bool isValid(const int maxLookAhead, dtNavMeshQuery* navquery, const dtQueryFilter* filter);
89 
95  void movePosition(const float* npos, dtNavMeshQuery* navquery, const dtQueryFilter* filter);
96 
102  void moveTargetPosition(const float* npos, dtNavMeshQuery* navquery, const dtQueryFilter* filter);
103 
108  void setCorridor(const float* target, const dtPolyRef* polys, const int npath);
109 
112  inline const float* getPos() const { return m_pos; }
113 
116  inline const float* getTarget() const { return m_target; }
117 
120  inline dtPolyRef getFirstPoly() const { return m_npath ? m_path[0] : 0; }
121 
124  inline dtPolyRef getLastPoly() const { return m_npath ? m_path[m_npath-1] : 0; }
125 
128  inline const dtPolyRef* getPath() const { return m_path; }
129 
132  inline int getPathCount() const { return m_npath; }
133 };
134 
135 int dtMergeCorridorStartMoved(dtPolyRef* path, const int npath, const int maxPath,
136  const dtPolyRef* visited, const int nvisited);
137 
138 int dtMergeCorridorEndMoved(dtPolyRef* path, const int npath, const int maxPath,
139  const dtPolyRef* visited, const int nvisited);
140 
141 int dtMergeCorridorStartShortcut(dtPolyRef* path, const int npath, const int maxPath,
142  const dtPolyRef* visited, const int nvisited);
143 
144 #endif // DETOUTPATHCORRIDOR_H
bool fixPathStart(dtPolyRef safeRef, const float *safePos)
unsigned int dtPolyRef
A handle to a polygon within a navigation mesh tile.
Definition: DetourNavMesh.h:30
Represents a dynamic polygon corridor used to plan agent movement. ,.
int findCorners(float *cornerVerts, unsigned char *cornerFlags, dtPolyRef *cornerPolys, const int maxCorners, dtNavMeshQuery *navquery, const dtQueryFilter *filter)
Finds the corners in the corridor from the position toward the target. (The straightened path...
bool init(const int maxPath)
Allocates the corridor's path buffer.
void movePosition(const float *npos, dtNavMeshQuery *navquery, const dtQueryFilter *filter)
Moves the position from the current location to the desired location, adjusting the corridor as neede...
const float * getPos() const
Gets the current position within the corridor. (In the first polygon.)
bool trimInvalidPath(dtPolyRef safeRef, const float *safePos, dtNavMeshQuery *navquery, const dtQueryFilter *filter)
Defines polygon filtering and traversal costs for navigation mesh query operations.
void reset(dtPolyRef ref, const float *pos)
Resets the path corridor to the specified position.
void setCorridor(const float *target, const dtPolyRef *polys, const int npath)
Loads a new path and target into the corridor.
const dtPolyRef * getPath() const
The corridor's path.
void moveTargetPosition(const float *npos, dtNavMeshQuery *navquery, const dtQueryFilter *filter)
Moves the target from the curent location to the desired location, adjusting the corridor as needed t...
int dtMergeCorridorStartMoved(dtPolyRef *path, const int npath, const int maxPath, const dtPolyRef *visited, const int nvisited)
bool optimizePathTopology(dtNavMeshQuery *navquery, const dtQueryFilter *filter)
Attempts to optimize the path using a local area search. (Partial replanning.)
int dtMergeCorridorStartShortcut(dtPolyRef *path, const int npath, const int maxPath, const dtPolyRef *visited, const int nvisited)
void optimizePathVisibility(const float *next, const float pathOptimizationRange, dtNavMeshQuery *navquery, const dtQueryFilter *filter)
Attempts to optimize the path if the specified point is visible from the current position.
int getPathCount() const
The number of polygons in the current corridor path.
const float * getTarget() const
Gets the current target within the corridor. (In the last polygon.)
bool moveOverOffmeshConnection(dtPolyRef offMeshConRef, dtPolyRef *refs, float *startPos, float *endPos, dtNavMeshQuery *navquery)
bool isValid(const int maxLookAhead, dtNavMeshQuery *navquery, const dtQueryFilter *filter)
Checks the current corridor path to see if its polygon references remain valid.
dtPolyRef getLastPoly() const
The polygon reference id of the last polygon in the corridor, the polygon containing the target...
Provides the ability to perform pathfinding related queries against a navigation mesh.
int dtMergeCorridorEndMoved(dtPolyRef *path, const int npath, const int maxPath, const dtPolyRef *visited, const int nvisited)
dtPolyRef getFirstPoly() const
The polygon reference id of the first polygon in the corridor, the polygon containing the position...