- sounds are on both channels
[supertux.git] / src / supertux / world.cpp
index a8fda6b..399816c 100644 (file)
 #include "physfs/ifile_stream.hpp"
 #include "scripting/serialize.hpp"
 #include "scripting/squirrel_util.hpp"
-#include "supertux/mainloop.hpp"
+#include "supertux/globals.hpp"
+#include "supertux/screen_manager.hpp"
 #include "supertux/player_status.hpp"
 #include "supertux/world.hpp"
 #include "util/file_system.hpp"
 #include "util/reader.hpp"
+#include "util/string_util.hpp"
 #include "worldmap/worldmap.hpp"
 
-static bool has_suffix(const std::string& data, const std::string& suffix)
-{
-  if (data.length() >= suffix.length())
-    return data.compare(data.length() - suffix.length(), suffix.length(), suffix) == 0;
-  else
-    return false;
-}
-
 World* World::current_ = NULL;
 
 World::World() :
@@ -44,9 +38,12 @@ World::World() :
   world_thread(),
   title(),
   description(),
+  player_status(),
   hide_from_contribs(),
   is_levelset()
 {
+  player_status.reset(new PlayerStatus());
+
   is_levelset = true;
   hide_from_contribs = false;
   sq_resetobject(&world_thread);
@@ -54,7 +51,7 @@ World::World() :
 
 World::~World()
 {
-  sq_release(Scripting::global_vm, &world_thread);
+  sq_release(scripting::global_vm, &world_thread);
   if(current_ == this)
     current_ = NULL;
 }
@@ -115,7 +112,7 @@ World::load(const std::string& filename)
   }
 
   for(const char* const* filename = files; *filename != 0; ++filename) {
-    if(has_suffix(*filename, ".stl")) {
+    if(StringUtil::has_suffix(*filename, ".stl")) {
       levels.push_back(path + *filename);
     }
   }
@@ -125,18 +122,18 @@ World::load(const std::string& filename)
 void
 World::run()
 {
-  using namespace Scripting;
+  using namespace scripting;
 
   current_ = this;
 
   // create new squirrel table for persistent game state
-  HSQUIRRELVM vm = Scripting::global_vm;
+  HSQUIRRELVM vm = scripting::global_vm;
 
   sq_pushroottable(vm);
   sq_pushstring(vm, "state", -1);
   sq_newtable(vm);
   if(SQ_FAILED(sq_createslot(vm, -3)))
-    throw Scripting::SquirrelError(vm, "Couldn't create state table");
+    throw scripting::SquirrelError(vm, "Couldn't create state table");
   sq_pop(vm, 1);
 
   load_state();
@@ -150,22 +147,22 @@ World::run()
     compile_and_run(object_to_vm(world_thread), in, filename);
   } catch(std::exception& ) {
     // fallback: try to load worldmap worldmap.stwm
-    using namespace WorldMapNS;
-    g_main_loop->push_screen(new WorldMap(basedir + "worldmap.stwm"));
+    using namespace worldmap;
+    g_screen_manager->push_screen(new WorldMap(basedir + "worldmap.stwm", get_player_status()));
   }
 }
 
 void
 World::save_state()
 {
-  using namespace Scripting;
+  using namespace scripting;
 
   lisp::Writer writer(savegame_filename);
 
   writer.start_list("supertux-savegame");
   writer.write("version", 1);
 
-  using namespace WorldMapNS;
+  using namespace worldmap;
   if(WorldMap::current() != NULL) {
     std::ostringstream title;
     title << WorldMap::current()->get_title();
@@ -183,7 +180,7 @@ World::save_state()
   sq_pushroottable(global_vm);
   sq_pushstring(global_vm, "state", -1);
   if(SQ_SUCCEEDED(sq_get(global_vm, -2))) {
-    Scripting::save_squirrel_table(global_vm, -1, writer);
+    scripting::save_squirrel_table(global_vm, -1, writer);
     sq_pop(global_vm, 1);
   }
   sq_pop(global_vm, 1);
@@ -195,7 +192,7 @@ World::save_state()
 void
 World::load_state()
 {
-  using namespace Scripting;
+  using namespace scripting;
 
   try {
     lisp::Parser parser;
@@ -253,4 +250,10 @@ World::get_basedir() const
   return basedir;
 }
 
+const std::string&
+World::get_title() const
+{
+  return title;
+}
+
 /* EOF */