X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fcollision.cpp;h=237590f0200c6a4e982000b40a253f9628dc9b6b;hb=ee6972038331a3c26a2a6a0bdb2baca25475b1d2;hp=ad1cc80db3e074455baf3ec5c7e95ba8bde30d90;hpb=3e754167548414481668ec3e3ee034f2356650cc;p=supertux.git diff --git a/src/collision.cpp b/src/collision.cpp index ad1cc80db..237590f02 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -18,14 +18,17 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA // 02111-1307, USA. +#include + +#include #include "defines.h" #include "collision.h" -#include "bitmask.h" #include "scene.h" #include "sector.h" #include "tilemap.h" #include "tile.h" +#if 0 bool rectcollision(const base_type& one, const base_type& two) { return (one.x >= two.x - one.width + 1 && @@ -42,6 +45,16 @@ bool rectcollision_offset(const base_type& one, const base_type& two, float off_ one.y <= two.y + two.height + off_y - 1); } +bool collision_object_map(const Rectangle& rect) +{ + base_type base; + base.x = rect.p1.x; + base.y = rect.p1.y; + base.width = rect.get_width(); + base.height = rect.get_height(); + return collision_object_map(base); +} + bool collision_object_map(const base_type& base) { const TileMap& tilemap = *Sector::current()->solids; @@ -54,7 +67,7 @@ bool collision_object_map(const base_type& base) for(int x = starttilex; x*32 < max_x; ++x) { for(int y = starttiley; y*32 < max_y; ++y) { - Tile* tile = tilemap.get_tile(x, y); + const Tile* tile = tilemap.get_tile(x, y); if(tile && tile->attributes & Tile::SOLID) return true; } @@ -74,7 +87,7 @@ void* collision_func(const base_type& base, tiletestfunction function) for(int x = starttilex; x*32 < max_x; ++x) { for(int y = starttiley; y*32 < max_y; ++y) { - Tile* tile = tilemap.get_tile(x, y); + const Tile* tile = tilemap.get_tile(x, y); void* result = function(tile); if(result != 0) return result; @@ -84,16 +97,22 @@ void* collision_func(const base_type& base, tiletestfunction function) return 0; } -static void* test_goal_tile_function(Tile* tile) +static void* test_goal_tile_function(const Tile* tile) { if(tile && (tile->attributes & Tile::GOAL)) - return tile; + return const_cast ((const void*) tile); // evil cast... return 0; } -Tile* collision_goal(const base_type& base) +const Tile* collision_goal(const Rectangle& rect) { - return (Tile*) collision_func(base, test_goal_tile_function); + // too lazy to rewrite for now, so we transform to base_type... + base_type base; + base.x = rect.p1.x; + base.y = rect.p1.y; + base.width = rect.get_width(); + base.height = rect.get_height(); + return (const Tile*) collision_func(base, test_goal_tile_function); } void collision_swept_object_map(base_type* old, base_type* current) @@ -235,7 +254,7 @@ void collision_swept_object_map(base_type* old, base_type* current) *old = *current; } -Tile* gettile(float x, float y) +const Tile* gettile(float x, float y) { const TileMap& tilemap = *Sector::current()->solids; return tilemap.get_tile_at(Vector(x, y)); @@ -243,40 +262,39 @@ Tile* gettile(float x, float y) bool issolid(float x, float y) { - Tile* tile = gettile(x,y); + const Tile* tile = gettile(x,y); return tile && (tile->attributes & Tile::SOLID); } bool isbrick(float x, float y) { - Tile* tile = gettile(x,y); + const Tile* tile = gettile(x,y); return tile && (tile->attributes & Tile::BRICK); } bool isice(float x, float y) { - Tile* tile = gettile(x,y); + const Tile* tile = gettile(x,y); return tile && (tile->attributes & Tile::ICE); } bool isspike(float x, float y) { - Tile* tile = gettile(x,y); + const Tile* tile = gettile(x,y); return tile && (tile->attributes & Tile::SPIKE); } bool isfullbox(float x, float y) { - Tile* tile = gettile(x,y); + const Tile* tile = gettile(x,y); return tile && (tile->attributes & Tile::FULLBOX); } bool iscoin(float x, float y) { - Tile* tile = gettile(x,y); + const Tile* tile = gettile(x,y); return tile && (tile->attributes & Tile::COIN); } -/* EOF */ - +#endif