Remove particles when they get off the screen.
[supertux.git] / src / level.cpp
index a3d5a44..570b4b4 100644 (file)
 #include <fstream>
 #include <stdexcept>
 
-#include "globals.h"
-#include "setup.h"
+#include "app/globals.h"
+#include "app/setup.h"
 #include "camera.h"
-#include "screen/screen.h"
+#include "video/screen.h"
 #include "level.h"
-#include "physic.h"
+#include "math/physic.h"
 #include "scene.h"
 #include "sector.h"
 #include "tile.h"
-#include "lispreader.h"
+#include "utils/lispreader.h"
 #include "resources.h"
 #include "gameobjs.h"
-#include "lispwriter.h"
+#include "utils/lispwriter.h"
+#include "tilemap.h"
 
 using namespace std;
 
 Level::Level()
   : name("noname"), author("mr. x"), time_left(500)
+
 {
 }
 
@@ -88,7 +90,7 @@ Level::load(const std::string& filename)
 void
 Level::load_old_format(LispReader& reader)
 {
-  reader.read_string("name", name);
+  reader.read_string("name", name, true);
   reader.read_string("author", author);
   reader.read_int("time", time_left);
 
@@ -115,7 +117,11 @@ Level::save(const std::string& filename)
  writer->write_int("time", time_left);
 
  for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i)
+   {
+   writer->start_list("sector");
    i->second->write(*writer);
+   writer->end_list("sector");
+   }
 
  writer->end_list("supertux-level");
 
@@ -130,6 +136,13 @@ Level::~Level()
 }
 
 void
+Level::do_vertical_flip()
+{
+  for(Sectors::iterator i = sectors.begin(); i != sectors.end(); ++i)
+    i->second->do_vertical_flip();
+}
+
+void
 Level::add_sector(Sector* sector)
 {
   sectors.insert(std::make_pair(sector->get_name(), sector));       
@@ -145,3 +158,23 @@ Level::get_sector(const std::string& name)
   return i->second;
 }
 
+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 it = sectors.begin(); it != sectors.end(); ++it)
+    for(int x = 0; x < it->second->solids->get_width(); x++)
+      for(int y = 0; y < it->second->solids->get_height(); y++)
+        if(it->second->solids->get_tile(x,y)->attributes & Tile::COIN)
+          total_coins++;
+  return total_coins;
+}