X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fworldmap%2Flevel.cpp;h=85e987f2140989237aa3659b3ac48454ae210b5c;hb=8eff855963e2699763d0d653dabc9b709f0d2ab0;hp=aafa6603501fb188895a2218302df0687475eac7;hpb=9fa95a3f4318f71b151a57035a6a8d5732b5ed95;p=supertux.git diff --git a/src/worldmap/level.cpp b/src/worldmap/level.cpp index aafa66035..85e987f21 100644 --- a/src/worldmap/level.cpp +++ b/src/worldmap/level.cpp @@ -1,13 +1,11 @@ -// $Id$ -// // SuperTux -// Copyright (C) 2004 Ingo Ruhnke +// Copyright (C) 2004 Ingo Ruhnke // Copyright (C) 2006 Christoph Sommer // -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,41 +13,51 @@ // 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 02111-1307, USA. +// along with this program. If not, see . #include -#include #include -#include "worldmap/level.hpp" -#include "sprite/sprite_manager.hpp" +#include + #include "sprite/sprite.hpp" +#include "sprite/sprite_manager.hpp" +#include "util/file_system.hpp" +#include "util/log.hpp" +#include "util/reader.hpp" #include "video/drawing_context.hpp" -#include "log.hpp" -#include "file_system.hpp" +#include "worldmap/level.hpp" -namespace WorldMapNS -{ +namespace worldmap { -LevelTile::LevelTile(const std::string& basedir, const lisp::Lisp* lisp) - : solved(false), auto_play(false), auto_path(true), basedir(basedir), picture_cached(false), - picture(0) +LevelTile::LevelTile(const std::string& basedir_, const Reader& lisp) : + pos(), + title(), + solved(false), + perfect(false), + auto_play(false), + sprite(), + statistics(), + target_time(), + extro_script(), + basedir(basedir_), + picture_cached(false), + picture(0) { - lisp->get("name", name); - lisp->get("x", pos.x); - lisp->get("y", pos.y); - lisp->get("auto-play", auto_play); + lisp.get("name", name); + lisp.get("x", pos.x); + lisp.get("y", pos.y); + lisp.get("auto-play", auto_play); std::string spritefile = "images/worldmap/common/leveldot.sprite"; - lisp->get("sprite", spritefile); - sprite.reset(sprite_manager->create(spritefile)); + lisp.get("sprite", spritefile); + sprite = SpriteManager::current()->create(spritefile); - lisp->get("extro-script", extro_script); + lisp.get("extro-script", extro_script); - if (!PHYSFS_exists((basedir + name).c_str())) + if (!PHYSFS_exists((basedir_ + name).c_str())) { log_warning << "level file '" << name - << "' does not exist and will not be added to the worldmap" << std::endl; + << "' does not exist and will not be added to the worldmap" << std::endl; return; } } @@ -70,17 +78,37 @@ LevelTile::update(float ) { } -const Surface* -LevelTile::get_picture() +void +LevelTile::update_sprite_action() { - if (picture_cached) return picture; - picture_cached = true; - std::string fname = FileSystem::strip_extension(basedir + name)+".jpg"; - if (!PHYSFS_exists(fname.c_str())) { - return 0; + if (perfect) + { + sprite->set_action("perfect"); + } + else if (solved) + { + sprite->set_action("perfect"); + } + else + { + sprite->set_action("default"); } - picture = new Surface(fname); - return picture; } +void +LevelTile::set_solved(bool v) +{ + solved = v; + update_sprite_action(); } + +void +LevelTile::set_perfect(bool v) +{ + perfect = v; + update_sprite_action(); +} + +} // namespace worldmap + +/* EOF */