75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //
 | |
| // Copyright (c) 2009-2010 Mikko Mononen memon@inside.org
 | |
| //
 | |
| // This software is provided 'as-is', without any express or implied
 | |
| // warranty.  In no event will the authors be held liable for any damages
 | |
| // arising from the use of this software.
 | |
| // Permission is granted to anyone to use this software for any purpose,
 | |
| // including commercial applications, and to alter it and redistribute it
 | |
| // freely, subject to the following restrictions:
 | |
| // 1. The origin of this software must not be misrepresented; you must not
 | |
| //    claim that you wrote the original software. If you use this software
 | |
| //    in a product, an acknowledgment in the product documentation would be
 | |
| //    appreciated but is not required.
 | |
| // 2. Altered source versions must be plainly marked as such, and must not be
 | |
| //    misrepresented as being the original software.
 | |
| // 3. This notice may not be removed or altered from any source distribution.
 | |
| //
 | |
| 
 | |
| #ifndef DETOURPROXIMITYGRID_H
 | |
| #define DETOURPROXIMITYGRID_H
 | |
| 
 | |
| class dtProximityGrid
 | |
| {
 | |
| 	float m_cellSize;
 | |
| 	float m_invCellSize;
 | |
| 	
 | |
| 	struct Item
 | |
| 	{
 | |
| 		unsigned short id;
 | |
| 		short x,y;
 | |
| 		unsigned short next;
 | |
| 	};
 | |
| 	Item* m_pool;
 | |
| 	int m_poolHead;
 | |
| 	int m_poolSize;
 | |
| 	
 | |
| 	unsigned short* m_buckets;
 | |
| 	int m_bucketsSize;
 | |
| 	
 | |
| 	int m_bounds[4];
 | |
| 	
 | |
| public:
 | |
| 	dtProximityGrid();
 | |
| 	~dtProximityGrid();
 | |
| 	
 | |
| 	bool init(const int poolSize, const float cellSize);
 | |
| 	
 | |
| 	void clear();
 | |
| 	
 | |
| 	void addItem(const unsigned short id,
 | |
| 				 const float minx, const float miny,
 | |
| 				 const float maxx, const float maxy);
 | |
| 	
 | |
| 	int queryItems(const float minx, const float miny,
 | |
| 				   const float maxx, const float maxy,
 | |
| 				   unsigned short* ids, const int maxIds) const;
 | |
| 	
 | |
| 	int getItemCountAt(const int x, const int y) const;
 | |
| 	
 | |
| 	inline const int* getBounds() const { return m_bounds; }
 | |
| 	inline float getCellSize() const { return m_cellSize; }
 | |
| 
 | |
| private:
 | |
| 	// Explicitly disabled copy constructor and copy assignment operator.
 | |
| 	dtProximityGrid(const dtProximityGrid&);
 | |
| 	dtProximityGrid& operator=(const dtProximityGrid&);
 | |
| };
 | |
| 
 | |
| dtProximityGrid* dtAllocProximityGrid();
 | |
| void dtFreeProximityGrid(dtProximityGrid* ptr);
 | |
| 
 | |
| 
 | |
| #endif // DETOURPROXIMITYGRID_H
 | |
| 
 |