X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsupertux%2Ftile.cpp;h=a0b73e1494a4a0c9560e4dec58c8b8134b5539b5;hb=33c9a30be6a351fe21a3eb702a7fa90acd43a741;hp=3d5ec4df705c858be222cb15ffc37fcdddcf7c42;hpb=0289d77aedcb806daaeb5965c34f8d69e8ceed33;p=supertux.git diff --git a/src/supertux/tile.cpp b/src/supertux/tile.cpp index 3d5ec4df7..a0b73e149 100644 --- a/src/supertux/tile.cpp +++ b/src/supertux/tile.cpp @@ -20,21 +20,27 @@ #include "supertux/tile_set.hpp" #include "video/drawing_context.hpp" +bool Tile::draw_editor_images = false; + Tile::Tile(const TileSet& new_tileset) : tileset(new_tileset), imagespecs(), images(), + editor_imagespecs(), + editor_images(), attributes(0), data(0), fps(1) { } -Tile::Tile(const TileSet& new_tileset, const std::vector& imagespecs_, +Tile::Tile(const TileSet& new_tileset, const std::vector& imagespecs_, const std::vector& editor_imagespecs_, uint32_t attributes, uint32_t data, float fps) : tileset(new_tileset), imagespecs(imagespecs_), images(), + editor_imagespecs(editor_imagespecs_), + editor_images(), attributes(attributes), data(data), fps(fps) @@ -72,11 +78,46 @@ Tile::load_images() images.push_back(surface); } } + + if(editor_images.size() == 0 && editor_imagespecs.size() != 0) + { + assert(editor_images.size() == 0); + for(std::vector::iterator i = editor_imagespecs.begin(); i != editor_imagespecs.end(); ++i) + { + const ImageSpec& spec = *i; + + SurfacePtr surface; + if(spec.rect.get_width() <= 0) + { + surface = Surface::create(spec.file); + } + else + { + surface = Surface::create(spec.file, + Rect((int) spec.rect.p1.x, + (int) spec.rect.p1.y, + Size((int) spec.rect.get_width(), + (int) spec.rect.get_height()))); + } + editor_images.push_back(surface); + } + } } void Tile::draw(DrawingContext& context, const Vector& pos, int z_pos) const { + if(draw_editor_images) { + if(editor_images.size() > 1) { + size_t frame = size_t(game_time * fps) % editor_images.size(); + context.draw_surface(editor_images[frame], pos, z_pos); + return; + } else if (editor_images.size() == 1) { + context.draw_surface(editor_images[0], pos, z_pos); + return; + } + } + if(images.size() > 1) { size_t frame = size_t(game_time * fps) % images.size(); context.draw_surface(images[frame], pos, z_pos); @@ -100,10 +141,10 @@ void Tile::print_debug(int id) const { log_debug << " Tile: id " << id << ", data " << getData() << ", attributes " << getAttributes() << ":" << std::endl; + for(std::vector::const_iterator im = editor_imagespecs.begin(); im != editor_imagespecs.end(); ++im) + log_debug << " Editor Imagespec: file " << im->file << "; rect " << im->rect << std::endl; for(std::vector::const_iterator im = imagespecs.begin(); im != imagespecs.end(); ++im) - { - log_debug << " Imagespec: file " << im->file << "; rect " << im->rect << std::endl; - } + log_debug << " Imagespec: file " << im->file << "; rect " << im->rect << std::endl; } /* EOF */