Planeshift

DetourPathQueue.h

Go to the documentation of this file.
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