+Sector*
+Level::get_next_sector(const Sector* sector)
+{
+ for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i)
+ {
+ if(i->second == sector)
+ {
+ i++;
+ if(i == sectors.end())
+ return NULL;
+ return i->second;
+ }
+ }
+ std::cerr << "Warning: Sector not found on level\n";
+ return NULL;
+}
+
+Sector*
+Level::get_previous_sector(const Sector* sector)
+{
+ for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i)
+ {
+ if(i->second == sector)
+ {
+ if(i == sectors.begin())
+ return NULL;
+ i--;
+ return i->second;
+ }
+ }
+ std::cerr << "Warning: Sector not found on level\n";
+ return NULL;
+}
+
+int
+Level::get_total_sectors()
+{
+return sectors.size();
+}
+
+int
+Level::get_total_badguys()
+{
+ int total_badguys = 0;
+ for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i)
+ total_badguys += i->second->get_total_badguys();
+ return total_badguys;
+}
+
+int
+Level::get_total_coins()
+{
+ int total_coins = 0;
+ for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i) {
+ TileMap* solids = i->second->solids;
+ if(!solids) {
+ std::cerr << "Sector '" << i->first << "' contains no solids!?!\n";
+ continue;
+ }
+ for(size_t x = 0; x < solids->get_width(); ++x)
+ for(size_t y = 0; y < solids->get_height(); ++y) {
+ const Tile* tile = solids->get_tile(x, y);
+ if(tile == 0) {
+ std::cerr << "Invalid tile in sector '" << i->first << "'.\n";
+ continue;
+ }
+ if(tile->attributes & Tile::COIN)
+ total_coins++;
+ }
+ }
+ return total_coins;
+}