From a8a422352df3441d3cf0da967dc94b42c2c21239 Mon Sep 17 00:00:00 2001 From: Björn Steinbrink Date: Sun, 16 Oct 2005 16:58:01 +0000 Subject: Some code improvements. --- ChangeLog | 1 + src/map.cpp | 64 ++++++++++++++++++++++++++++++------------------------------- 2 files changed, 32 insertions(+), 33 deletions(-) diff --git a/ChangeLog b/ChangeLog index 49c64ec7..8b626f20 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ 2005-10-16 Björn Steinbrink + * src/map.cpp: Some code improvements. * src/Makefile.am: Added two missing files. 2005-10-16 Eugenio Favalli diff --git a/src/map.cpp b/src/map.cpp index 37b7292a..449f72e9 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -22,14 +22,16 @@ */ #include "map.h" + +#include +#include + #include "tileset.h" #include "being.h" #include "graphics.h" #include "resources/image.h" #include "sprite.h" -#include - MetaTile::MetaTile(): whichList(0) { @@ -161,29 +163,26 @@ Map::setTileWithGid(int x, int y, int layer, int gid) } } +class ContainsGidFunctor +{ + public: + bool operator() (Tileset* set) + { + return (set->getFirstGid() <= gid && + gid - set->getFirstGid() < (int)set->spriteset.size()); + } + int gid; +} containsGid; + Tileset* Map::getTilesetWithGid(int gid) { Tilesets::iterator i; - Tileset *set = NULL; - // Find the tileset with the highest firstGid below/equal to gid - for (i = tilesets.begin(); i != tilesets.end(); ++i) - { - if ((*i)->getFirstGid() <= gid) { - set = (*i); - } - else { - break; - } - } + containsGid.gid = gid; + i = find_if(tilesets.begin(), tilesets.end(), containsGid); - if (set && (gid - set->getFirstGid()) < (int)set->spriteset.size()) - { - return set; - } - - return NULL; + return (i == tilesets.end()) ? NULL : *i; } Image* @@ -207,22 +206,21 @@ Map::setWalk(int x, int y, bool walkable) bool Map::getWalk(int x, int y) { - // If walkable, check for colliding into a being - if (!tileCollides(x, y)) { - std::list::iterator i = beings.begin(); - while (i != beings.end()) { - Being *being = (*i); - // Collision when non-portal being is found at this location - if (being->x == x && being->y == y && being->job != 45) { - return false; - } - i++; - } - return true; - } - else { + // Check for being walkable + if (tileCollides(x, y)) { return false; } + + // Check for collision with a being + std::list::iterator i = beings.begin(); + for (i = beings.begin(); i != beings.end(); i++) { + // job 45 is a portal, they don't collide + if ((*i)->x == x && (*i)->y == y && (*i)->job != 45) { + return false; + } + } + + return true; } bool -- cgit v1.2.3-70-g09d2