X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftile_manager.cpp;h=0c87f4e3fb02054fba26e486ab6281bd5b1076e4;hb=546364c9567ef212ea9276201facf73f5ada696a;hp=7d6841a101902d7a6545a0e1d62f72f5176aef9b;hpb=c5cbd36c2e01d8c807c8c931ca44fb7c1b48ad18;p=supertux.git diff --git a/src/tile_manager.cpp b/src/tile_manager.cpp index 7d6841a10..0c87f4e3f 100644 --- a/src/tile_manager.cpp +++ b/src/tile_manager.cpp @@ -38,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_; } @@ -51,9 +50,8 @@ 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); @@ -76,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) @@ -137,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 */