Go to the documentation of this file.00001 #ifndef _GRID_SECTORIZER_H
00002 #define _GRID_SECTORIZER_H
00003
00004
00005
00006 #include "RakMemoryOverride.h"
00007
00008 #ifdef _USE_ORDERED_LIST
00009 #include "DS_OrderedList.h"
00010 #else
00011 #include "DS_List.h"
00012 #endif
00013
00014 class GridSectorizer
00015 {
00016 public:
00017 GridSectorizer();
00018 ~GridSectorizer();
00019
00020
00021
00022 void Init(const float _maxCellWidth, const float _maxCellHeight, const float minX, const float minY, const float maxX, const float maxY);
00023
00024
00025 void AddEntry(void *entry, const float minX, const float minY, const float maxX, const float maxY);
00026
00027 #ifdef _USE_ORDERED_LIST
00028
00029
00030 void RemoveEntry(void *entry, const float minX, const float minY, const float maxX, const float maxY);
00031
00032
00033 void MoveEntry(void *entry, const float sourceMinX, const float sourceMinY, const float sourceMaxX, const float sourceMaxY,
00034 const float destMinX, const float destMinY, const float destMaxX, const float destMaxY);
00035
00036 #endif
00037
00038
00039 void GetEntries(DataStructures::List<void*>& intersectionList, const float minX, const float minY, const float maxX, const float maxY);
00040
00041 void Clear(void);
00042
00043 protected:
00044 int WorldToCellX(const float input) const;
00045 int WorldToCellY(const float input) const;
00046 int WorldToCellXOffsetAndClamped(const float input) const;
00047 int WorldToCellYOffsetAndClamped(const float input) const;
00048
00049
00050 bool PositionCrossesCells(const float originX, const float originY, const float destinationX, const float destinationY) const;
00051
00052 float cellOriginX, cellOriginY;
00053 float cellWidth, cellHeight;
00054 float invCellWidth, invCellHeight;
00055 float gridWidth, gridHeight;
00056 int gridCellWidthCount, gridCellHeightCount;
00057
00058
00059
00060
00061 #ifdef _USE_ORDERED_LIST
00062 DataStructures::OrderedList<void*, void*>* grid;
00063 #else
00064 DataStructures::List<void*>* grid;
00065 #endif
00066 };
00067
00068 #endif