X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Ftile.cpp;h=252cd6ea48466cb132eb04fce42760904ddd6a97;hb=07ddaed2a657e4d2a3d038fed223fc5827159caf;hp=6683b02dd23e2d151443758fb4a54c8d6a8a7f12;hpb=d8496f30a608d6827fefdfe33234acb6f4d8f0fe;p=supertux.git diff --git a/src/tile.cpp b/src/tile.cpp index 6683b02dd..252cd6ea4 100644 --- a/src/tile.cpp +++ b/src/tile.cpp @@ -1,7 +1,8 @@ // $Id$ -// +// // SuperTux // Copyright (C) 2004 Tobias Glaesser +// Copyright (C) 2006 Matthias Braun // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -12,7 +13,7 @@ // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// +// // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA @@ -24,18 +25,26 @@ #include #include -#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" +#include "log.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(); @@ -52,7 +61,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) @@ -63,8 +72,8 @@ 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("coin", value) && value) @@ -89,7 +98,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); @@ -111,7 +120,7 @@ Tile::parse_images(const lisp::Lisp& images_lisp) 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(); @@ -119,7 +128,7 @@ Tile::parse_images(const lisp::Lisp& images_lisp) ptr->get_car()->get(h); imagespecs.push_back(ImageSpec(file, Rect(x, y, x+w, y+h))); } else { - std::cerr << "Expected string or list in images tag.\n"; + log_warning << "Expected string or list in images tag" << std::endl; continue; } @@ -135,22 +144,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(tilespath + editor_imagefile), true); + editor_image = new Surface(tilesetpath + editor_imagefile); } } @@ -169,7 +176,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);