Planeshift

DetourLocalBoundary.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 DETOURLOCALBOUNDARY_H
00020 #define DETOURLOCALBOUNDARY_H
00021 
00022 #include "DetourNavMeshQuery.h"
00023 
00024 
00025 class dtLocalBoundary
00026 {
00027         static const int MAX_LOCAL_SEGS = 8;
00028         static const int MAX_LOCAL_POLYS = 16;
00029         
00030         struct Segment
00031         {
00032                 float s[6];     
00033                 float d;        
00034         };
00035         
00036         float m_center[3];
00037         Segment m_segs[MAX_LOCAL_SEGS];
00038         int m_nsegs;
00039         
00040         dtPolyRef m_polys[MAX_LOCAL_POLYS];
00041         int m_npolys;
00042 
00043         void addSegment(const float dist, const float* seg);
00044         
00045 public:
00046         dtLocalBoundary();
00047         ~dtLocalBoundary();
00048         
00049         void reset();
00050         
00051         void update(dtPolyRef ref, const float* pos, const float collisionQueryRange,
00052                                 dtNavMeshQuery* navquery, const dtQueryFilter* filter);
00053         
00054         bool isValid(dtNavMeshQuery* navquery, const dtQueryFilter* filter);
00055         
00056         inline const float* getCenter() const { return m_center; }
00057         inline int getSegmentCount() const { return m_nsegs; }
00058         inline const float* getSegment(int i) const { return m_segs[i].s; }
00059 };
00060 
00061 #endif // DETOURLOCALBOUNDARY_H