X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flevel.cpp;h=c0f5b2582e370f1e92576099758255f06c8a00be;hb=7504b8ef1155259916f0e38eeb74a6024bb1d85b;hp=1ba57a4f4862a2e5c0912bb5343e85baa97b7cd0;hpb=244488950ba1c0daf20795213619c27e6963937c;p=supertux.git diff --git a/src/level.cpp b/src/level.cpp index 1ba57a4f4..c0f5b2582 100644 --- a/src/level.cpp +++ b/src/level.cpp @@ -29,7 +29,6 @@ #include #include -#include "video/screen.hpp" #include "log.hpp" #include "lisp/parser.hpp" #include "lisp/lisp.hpp" @@ -45,9 +44,7 @@ #include "object/camera.hpp" #include "object/tilemap.hpp" #include "object/coin.hpp" - -// test -#include "flip_level_transformer.hpp" +#include "object/block.hpp" using namespace std; @@ -86,16 +83,17 @@ Level::load(const std::string& filepath) iter.value()->get(name); } else if(token == "author") { iter.value()->get(author); + } else if(token == "on-menukey-script") { + iter.value()->get(on_menukey_script); } else if(token == "sector") { Sector* sector = new Sector(this); sector->parse(*(iter.lisp())); add_sector(sector); } else { log_warning << "Unknown token '" << token << "' in level file" << std::endl; - continue; } } - + } catch(std::exception& e) { std::stringstream msg; msg << "Problem when reading level '" << filepath << "': " << e.what(); @@ -128,6 +126,8 @@ Level::save(const std::string& filename) writer->write_string("name", name, true); writer->write_string("author", author); + if(on_menukey_script != "") + writer->write_string("on-menukey-script", on_menukey_script); for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i) { Sector* sector = *i; @@ -184,7 +184,6 @@ Level::get_sector(size_t num) int Level::get_total_coins() { - // FIXME not really correct as coins can also be inside blocks... int total_coins = 0; for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i) { Sector* sector = *i; @@ -192,7 +191,27 @@ Level::get_total_coins() o != sector->gameobjects.end(); ++o) { Coin* coin = dynamic_cast (*o); if(coin) + { total_coins++; + continue; + } + BonusBlock *block = dynamic_cast (*o); + if(block) + { + if (block->contents == BonusBlock::CONTENT_COIN) + { + total_coins++; + continue; + } +#if 0 + // FIXME: do we want this? q.v. src/object/oneup.cpp + else if (block->contents == BonusBlock::CONTENT_1UP) + { + total_coins += 100; + continue; + } +#endif + } } } return total_coins;