Planeshift

DetourProximityGrid.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 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