#include "supertux/level.hpp"
+#include "badguy/goldbomb.hpp"
#include "lisp/list_iterator.hpp"
#include "lisp/parser.hpp"
#include "object/bonus_block.hpp"
using namespace std;
Level::Level() :
- name("noname"),
- author("Mr. X"),
+ name("noname"),
+ author("Mr. X"),
contact(),
license(),
filename(),
on_menukey_script(),
sectors(),
stats(),
- tileset(NULL),
+ target_time(),
+ tileset(NULL),
free_tileset(false)
{
}
int version = 1;
level->get("version", version);
if(version == 1) {
- log_info << "level uses old format: version 1" << std::endl;
- tileset = tile_manager->get_tileset("images/tiles.strf");
+ log_info << "[" << filepath << "] level uses old format: version 1" << std::endl;
+ tileset = TileManager::current()->get_tileset("images/tiles.strf");
load_old_format(*level);
return;
}
const lisp::Lisp* tilesets_lisp = level->get_lisp("tilesets");
if(tilesets_lisp != NULL) {
- tileset = tile_manager->parse_tileset_definition(*tilesets_lisp);
+ tileset = TileManager::current()->parse_tileset_definition(*tilesets_lisp).release();
free_tileset = true;
}
std::string tileset_name;
if(level->get("tileset", tileset_name)) {
if(tileset != NULL) {
- log_warning << "multiple tilesets specified in level" << std::endl;
+ log_warning << "[" << filepath << "] multiple tilesets specified in level" << std::endl;
} else {
- tileset = tile_manager->get_tileset(tileset_name);
+ tileset = TileManager::current()->get_tileset(tileset_name);
}
}
/* load default tileset */
if(tileset == NULL) {
- tileset = tile_manager->get_tileset("images/tiles.strf");
+ tileset = TileManager::current()->get_tileset("images/tiles.strf");
}
current_tileset = tileset;
if(token == "version") {
iter.value()->get(version);
if(version > 2) {
- log_warning << "level format newer than application" << std::endl;
+ log_warning << "[" << filepath << "] level format newer than application" << std::endl;
}
} else if(token == "tileset" || token == "tilesets") {
continue;
Sector* sector = new Sector(this);
sector->parse(*(iter.lisp()));
add_sector(sector);
+ } else if(token == "target-time") {
+ iter.value()->get(target_time);
} else {
- log_warning << "Unknown token '" << token << "' in level file" << std::endl;
+ log_warning << "[" << filepath << "] Unknown token '" << token << "' in level file" << std::endl;
}
}
if (license == "") {
- log_warning << "The level author did not specify a license for this level. You might not be allowed to share it." << std::endl;
-
+ log_warning << "[" << filepath << "] The level author \"" << author << "\" did not specify a license for this level \"" << name << "\". You might not be allowed to share it." << std::endl;
}
} catch(std::exception& e) {
std::stringstream msg;
}
Sector*
-Level::get_sector(const std::string& name)
+Level::get_sector(const std::string& name_)
{
for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i) {
Sector* sector = *i;
- if(sector->get_name() == name)
+ if(sector->get_name() == name_)
return sector;
}
int total_coins = 0;
for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i) {
Sector* sector = *i;
- for(Sector::GameObjects::iterator o = sector->gameobjects.begin();
- o != sector->gameobjects.end(); ++o) {
- Coin* coin = dynamic_cast<Coin*> (*o);
+ for(auto o = sector->gameobjects.begin(); o != sector->gameobjects.end(); ++o) {
+ Coin* coin = dynamic_cast<Coin*>(o->get());
if(coin)
{
total_coins++;
continue;
}
- BonusBlock *block = dynamic_cast<BonusBlock*> (*o);
+ BonusBlock *block = dynamic_cast<BonusBlock*>(o->get());
if(block)
{
if (block->contents == BonusBlock::CONTENT_COIN)
{
total_coins += block->hit_counter;
continue;
- }
-#if 0
- // FIXME: do we want this? q.v. src/object/oneup.cpp
- else if (block->contents == BonusBlock::CONTENT_1UP)
- {
- total_coins += 100;
+ } else if (block->contents == BonusBlock::CONTENT_RAIN) {
+ total_coins += 10;
+ continue;
+ } else if (block->contents == BonusBlock::CONTENT_EXPLODE) {
+ total_coins += 10;
continue;
}
-#endif
}
+ GoldBomb *goldbomb = dynamic_cast<GoldBomb*>(o->get());
+ if(goldbomb)
+ total_coins += 10;
}
}
return total_coins;
Level::get_total_secrets()
{
int total_secrets = 0;
- for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i)
+ for(auto i = sectors.begin(); i != sectors.end(); ++i)
total_secrets += (*i)->get_total_count<SecretAreaTrigger>();
return total_secrets;
}