X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftile.cpp;h=0712dcd619cd47fa71a163e3dd273a3bd225bca6;hb=311e23e2671e47d5cbbb06a869282be3238573de;hp=0edef84d9b7a822cd21fa05c76516b35b380f8f6;hpb=9599042661b468aae7bd34dca05441c0ebc93ad7;p=supertux.git diff --git a/src/tile.cpp b/src/tile.cpp index 0edef84d9..0712dcd61 100644 --- a/src/tile.cpp +++ b/src/tile.cpp @@ -24,19 +24,24 @@ #include #include -#include "app/globals.h" -#include "lisp/lisp.h" -#include "tile.h" -#include "resources.h" -#include "timer.h" -#include "math/vector.h" -#include "video/drawing_context.h" +#include "lisp/lisp.hpp" +#include "tile.hpp" +#include "resources.hpp" +#include "timer.hpp" +#include "math/vector.hpp" +#include "video/drawing_context.hpp" Tile::Tile() : id(0), editor_image(0), attributes(0), data(0), anim_fps(1) { } +Tile::Tile(unsigned int id_, Uint32 attributes_, const ImageSpec& imagespec) + : id(id_), editor_image(0), attributes(attributes_), data(0), anim_fps(1) +{ + imagespecs.push_back(imagespec); +} + Tile::~Tile() { for(std::vector::iterator i = images.begin(); i != images.end(); @@ -53,7 +58,7 @@ Tile::parse(const lisp::Lisp& reader) throw std::runtime_error("Missing tile-id."); } - bool value; + bool value = false; if(reader.get("solid", value) && value) attributes |= SOLID; if(reader.get("unisolid", value) && value) @@ -64,12 +69,10 @@ Tile::parse(const lisp::Lisp& reader) attributes |= ICE; if(reader.get("water", value) && value) attributes |= WATER; - if(reader.get("spike", value) && value) - attributes |= SPIKE; + if(reader.get("hurts", value) && value) + attributes |= HURTS; if(reader.get("fullbox", value) && value) attributes |= FULLBOX; - if(reader.get("distro", value) && value) - attributes |= COIN; if(reader.get("coin", value) && value) attributes |= COIN; if(reader.get("goal", value) && value) @@ -92,7 +95,7 @@ Tile::parse(const lisp::Lisp& reader) if(reader.get("slope-type", data)) { attributes |= SOLID | SLOPE; } - + const lisp::Lisp* images = reader.get_lisp("images"); if(images) parse_images(*images); @@ -108,19 +111,19 @@ Tile::parse_images(const lisp::Lisp& images_lisp) if(cur->get_type() == lisp::Lisp::TYPE_STRING) { std::string file; cur->get(file); - imagespecs.push_back(ImageSpec(file, Rectangle(0, 0, 0, 0))); + imagespecs.push_back(ImageSpec(file, Rect(0, 0, 0, 0))); } else if(cur->get_type() == lisp::Lisp::TYPE_CONS && cur->get_car()->get_type() == lisp::Lisp::TYPE_SYMBOL) { const lisp::Lisp* ptr = cur->get_cdr(); std::string file; - float x, y, w, h; + float x = 0, y = 0, w = 0, h = 0; ptr->get_car()->get(file); ptr = ptr->get_cdr(); ptr->get_car()->get(x); ptr = ptr->get_cdr(); ptr->get_car()->get(y); ptr = ptr->get_cdr(); ptr->get_car()->get(w); ptr = ptr->get_cdr(); ptr->get_car()->get(h); - imagespecs.push_back(ImageSpec(file, Rectangle(x, y, x+w, y+h))); + imagespecs.push_back(ImageSpec(file, Rect(x, y, x+w, y+h))); } else { std::cerr << "Expected string or list in images tag.\n"; continue; @@ -138,23 +141,20 @@ Tile::load_images(const std::string& tilesetpath) imagespecs.end(); ++i) { const ImageSpec& spec = *i; Surface* surface; - std::string file - = get_resource_filename(tilesetpath + spec.file); + std::string file = tilesetpath + spec.file; if(spec.rect.get_width() <= 0) { - surface = new Surface(file, true); + surface = new Surface(file); } else { surface = new Surface(file, (int) spec.rect.p1.x, (int) spec.rect.p1.y, (int) spec.rect.get_width(), - (int) spec.rect.get_height(), true); + (int) spec.rect.get_height()); } images.push_back(surface); } if(editor_imagefile != "") { - editor_image = new Surface( - get_resource_filename( - std::string("images/tilesets/") + editor_imagefile), true); + editor_image = new Surface(tilesetpath + editor_imagefile); } } @@ -173,7 +173,7 @@ void Tile::draw(DrawingContext& context, const Vector& pos, int layer) const { if(images.size() > 1) { - size_t frame = size_t(global_time * anim_fps) % images.size(); + size_t frame = size_t(game_time * anim_fps) % images.size(); context.draw_surface(images[frame], pos, layer); } else if (images.size() == 1) { context.draw_surface(images[0], pos, layer);