Planeshift
|
00001 // 00002 // Copyright (c) 2009-2010 Mikko Mononen [email protected] 00003 // 00004 // This software is provided 'as-is', without any express or implied 00005 // warranty. In no event will the authors be held liable for any damages 00006 // arising from the use of this software. 00007 // Permission is granted to anyone to use this software for any purpose, 00008 // including commercial applications, and to alter it and redistribute it 00009 // freely, subject to the following restrictions: 00010 // 1. The origin of this software must not be misrepresented; you must not 00011 // claim that you wrote the original software. If you use this software 00012 // in a product, an acknowledgment in the product documentation would be 00013 // appreciated but is not required. 00014 // 2. Altered source versions must be plainly marked as such, and must not be 00015 // misrepresented as being the original software. 00016 // 3. This notice may not be removed or altered from any source distribution. 00017 // 00018 00019 #ifndef DETOURPATHQUEUE_H 00020 #define DETOURPATHQUEUE_H 00021 00022 #include "DetourNavMesh.h" 00023 #include "DetourNavMeshQuery.h" 00024 00025 static const unsigned int DT_PATHQ_INVALID = 0; 00026 00027 typedef unsigned int dtPathQueueRef; 00028 00029 class dtPathQueue 00030 { 00031 struct PathQuery 00032 { 00033 dtPathQueueRef ref; 00035 float startPos[3], endPos[3]; 00036 dtPolyRef startRef, endRef; 00038 dtPolyRef* path; 00039 int npath; 00041 dtStatus status; 00042 int keepAlive; 00043 const dtQueryFilter* filter; 00044 }; 00045 00046 static const int MAX_QUEUE = 8; 00047 PathQuery m_queue[MAX_QUEUE]; 00048 dtPathQueueRef m_nextHandle; 00049 int m_maxPathSize; 00050 int m_queueHead; 00051 dtNavMeshQuery* m_navquery; 00052 00053 void purge(); 00054 00055 public: 00056 dtPathQueue(); 00057 ~dtPathQueue(); 00058 00059 bool init(const int maxPathSize, const int maxSearchNodeCount, dtNavMesh* nav); 00060 00061 void update(const int maxIters); 00062 00063 dtPathQueueRef request(dtPolyRef startRef, dtPolyRef endRef, 00064 const float* startPos, const float* endPos, 00065 const dtQueryFilter* filter); 00066 00067 dtStatus getRequestStatus(dtPathQueueRef ref) const; 00068 00069 dtStatus getPathResult(dtPathQueueRef ref, dtPolyRef* path, int* pathSize, const int maxPath); 00070 00071 inline const dtNavMeshQuery* getNavQuery() const { return m_navquery; } 00072 00073 }; 00074 00075 #endif // DETOURPATHQUEUE_H