X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftile_manager.cpp;h=0c87f4e3fb02054fba26e486ab6281bd5b1076e4;hb=546364c9567ef212ea9276201facf73f5ada696a;hp=f9ad0c2355a073f2da2fa0fee23462766465f7b2;hpb=c79b901309bf5e0544fef1e92d264f51402f4370;p=supertux.git diff --git a/src/tile_manager.cpp b/src/tile_manager.cpp index f9ad0c235..0c87f4e3f 100644 --- a/src/tile_manager.cpp +++ b/src/tile_manager.cpp @@ -19,12 +19,13 @@ // 02111-1307, USA. #include -#include "screen/drawing_context.h" -#include "setup.h" -#include "globals.h" -#include "lispreader.h" +#include "video/drawing_context.h" +#include "app/setup.h" +#include "app/globals.h" +#include "utils/lispreader.h" #include "tile.h" #include "tile_manager.h" +#include "scene.h" TileManager* TileManager::instance_ = 0; std::set* TileManager::tilegroups_ = 0; @@ -37,9 +38,8 @@ TileManager::TileManager() TileManager::~TileManager() { - for(std::vector::iterator i = tiles.begin(); i != tiles.end(); ++i) { - delete *i; - } + for(Tiles::iterator i = tiles.begin(); i != tiles.end(); ++i) + delete i->second; delete tilegroups_; } @@ -50,15 +50,14 @@ void TileManager::load_tileset(std::string filename) return; // free old tiles - for(std::vector::iterator i = tiles.begin(); i != tiles.end(); ++i) { - delete *i; - } + for(Tiles::iterator i = tiles.begin(); i != tiles.end(); ++i) + delete i->second; tiles.clear(); lisp_object_t* root_obj = lisp_read_from_file(filename); if (!root_obj) - st_abort("Couldn't load file", filename); + Termination::abort("Couldn't load file", filename); if (strcmp(lisp_symbol(lisp_car(root_obj)), "supertux-tiles") == 0) { @@ -75,16 +74,12 @@ void TileManager::load_tileset(std::string filename) Tile* tile = new Tile; int tile_id = tile->read(reader); - if(tile_id < 0) { +/* if(tile_id < 0) { std::cerr - << "Warning: parse error when reading a tile, skipping.\n"; + << "Warning: parse error when reading a tile (id < 0), skipping.\n"; continue; - } - - tile_id += tileset_id; + }*/ - if(tile_id >= int(tiles.size())) - tiles.resize(tile_id+1); tiles[tile_id] = tile; } else if (strcmp(lisp_symbol(lisp_car(element)), "tileset") == 0) @@ -136,21 +131,30 @@ TileManager::draw_tile(DrawingContext& context, unsigned int c, if(c == 0) return; - Tile& tile = get(c); + Tile* tile = get(c); - if(!tile.images.size()) + if(!tile->images.size()) return; - if(tile.images.size() > 1) + if(tile->images.size() > 1) { size_t frame - = ((global_frame_counter*25) / tile.anim_speed) % tile.images.size(); - context.draw_surface(tile.images[frame], pos, layer); + = ((global_frame_counter*25) / tile->anim_speed) % tile->images.size(); + context.draw_surface(tile->images[frame], pos, layer); } - else if (tile.images.size() == 1) + else if (tile->images.size() == 1) { - context.draw_surface(tile.images[0], pos, layer); + context.draw_surface(tile->images[0], pos, layer); } } +Tile* +TileManager::get(unsigned int id) +{ +Tiles::iterator i = tiles.find(id); +if(i == tiles.end()) + return 0; +return i->second; +} + /* EOF */