X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftile_manager.cpp;h=0c87f4e3fb02054fba26e486ab6281bd5b1076e4;hb=546364c9567ef212ea9276201facf73f5ada696a;hp=c963a721d0f7e0c579509af63e89b4d2f0b41bad;hpb=236df51d91f0845cd4e06b3269e262911d81f5db;p=supertux.git diff --git a/src/tile_manager.cpp b/src/tile_manager.cpp index c963a721d..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,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) { @@ -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 */