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 DETOURPROXIMITYGRID_H 00020 #define DETOURPROXIMITYGRID_H 00021 00022 class dtProximityGrid 00023 { 00024 int m_maxItems; 00025 float m_cellSize; 00026 float m_invCellSize; 00027 00028 struct Item 00029 { 00030 unsigned short id; 00031 short x,y; 00032 unsigned short next; 00033 }; 00034 Item* m_pool; 00035 int m_poolHead; 00036 int m_poolSize; 00037 00038 unsigned short* m_buckets; 00039 int m_bucketsSize; 00040 00041 int m_bounds[4]; 00042 00043 public: 00044 dtProximityGrid(); 00045 ~dtProximityGrid(); 00046 00047 bool init(const int maxItems, const float cellSize); 00048 00049 void clear(); 00050 00051 void addItem(const unsigned short id, 00052 const float minx, const float miny, 00053 const float maxx, const float maxy); 00054 00055 int queryItems(const float minx, const float miny, 00056 const float maxx, const float maxy, 00057 unsigned short* ids, const int maxIds) const; 00058 00059 int getItemCountAt(const int x, const int y) const; 00060 00061 inline const int* getBounds() const { return m_bounds; } 00062 inline const float getCellSize() const { return m_cellSize; } 00063 }; 00064 00065 dtProximityGrid* dtAllocProximityGrid(); 00066 void dtFreeProximityGrid(dtProximityGrid* ptr); 00067 00068 00069 #endif // DETOURPROXIMITYGRID_H 00070