X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fcollision_grid.h;h=abb2ef1682ebafd0cbea305e321eff8223321323;hb=c62a9b627722f6371877c4dcbc218c60edb58559;hp=fe3f8314f3f360f8ea2c0e729c5813efc1e6a856;hpb=62ff7f7776875e9389d10ae2e7b6348e9e5cb9c7;p=supertux.git diff --git a/src/collision_grid.h b/src/collision_grid.h index fe3f8314f..abb2ef168 100644 --- a/src/collision_grid.h +++ b/src/collision_grid.h @@ -1,10 +1,27 @@ +// $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" - -using namespace SuperTux; +#include "moving_object.h" class CollisionGridIterator; @@ -20,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. @@ -45,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; @@ -58,6 +77,7 @@ private: float height; float cell_width; float cell_height; + int iterator_timestamp; }; extern CollisionGrid* bla;