1 #ifndef __COLLISION_GRID_ITERATOR_H__
2 #define __COLLISION_GRID_ITERATOR_H__
4 #include "math/rectangle.h"
6 using namespace SuperTux;
10 class CollisionGridIterator
13 CollisionGridIterator(CollisionGrid& newgrid, const Rectangle& bbox)
16 start_x = int(bbox.p1.x / grid.cell_width);
21 y = int(bbox.p1.y / grid.cell_height);
25 end_x = int(bbox.p2.x / grid.cell_width) + 1;
26 if(end_x > (int) grid.cells_x)
29 end_y = int(bbox.p2.y / grid.cell_height) + 1;
30 if(end_y > (int) grid.cells_y)
33 if(start_x >= end_x) {
34 printf("bad region.\n");
40 timestamp = grid.iterator_timestamp++;
46 CollisionGrid::ObjectWrapper* wrapper = next_wrapper();
50 return wrapper->object;
54 friend class CollisionGrid;
56 CollisionGrid::ObjectWrapper* next_wrapper()
58 CollisionGrid::ObjectWrapper* wrapper;
65 entry = grid.grid[y*grid.cells_x + x];
73 wrapper = entry->object_wrapper;
75 } while(wrapper->timestamp == timestamp);
77 wrapper->timestamp = timestamp;
83 CollisionGrid::GridEntry* entry;
85 int start_x, end_x, end_y;