X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fcollision_grid.h;h=abb2ef1682ebafd0cbea305e321eff8223321323;hb=cf66e7ab073b4e9479d5b6d479f8c351b89e8aee;hp=09cc87afd544a7ae137146916e5d1d3c530d24cc;hpb=c43ea9b0d5372718888138ea2cc4abcd5acb5299;p=supertux.git diff --git a/src/collision_grid.h b/src/collision_grid.h index 09cc87afd..abb2ef168 100644 --- a/src/collision_grid.h +++ b/src/collision_grid.h @@ -1,10 +1,29 @@ +// $Id$ +// +// SuperTux +// Copyright (C) 2005 Matthias Braun +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +// 02111-1307, USA. #ifndef __COLLISION_GRID_H__ #define __COLLISION_GRID_H__ #include -#include "special/moving_object.h" +#include "moving_object.h" -using namespace SuperTux; +class CollisionGridIterator; /** * A rectangular grid to keep track of all moving game objects. It allows fast @@ -18,15 +37,16 @@ public: void add_object(MovingObject* object); void remove_object(MovingObject* object); - void move_object(MovingObject* object); void check_collisions(); private: + friend class CollisionGridIterator; + struct ObjectWrapper { MovingObject* object; - Rectangle dest; + Rect dest; /** (pseudo) timestamp. When reading from the grid the timestamp is * changed so that you can easily avoid reading an object multiple times * when it is in several cells that you check. @@ -43,9 +63,10 @@ private: ObjectWrapper* object_wrapper; }; - void remove_object_from_gridcell(int gridcell, MovingObject* object); + void remove_object_from_gridcell(int gridcell, ObjectWrapper* wrapper); void collide_object(ObjectWrapper* wrapper); void collide_object_object(ObjectWrapper* wrapper, ObjectWrapper* wrapper2); + void move_object(ObjectWrapper* wrapper); typedef std::vector GridEntries; GridEntries grid; @@ -56,6 +77,7 @@ private: float height; float cell_width; float cell_height; + int iterator_timestamp; }; extern CollisionGrid* bla;