Issue #89: Respawn Tux at original, not current position. This is because upon restar...
[supertux.git] / src / worldmap / level.cpp
index 51f2a81..aafa660 100644 (file)
 #include "sprite/sprite_manager.hpp"
 #include "sprite/sprite.hpp"
 #include "video/drawing_context.hpp"
+#include "log.hpp"
+#include "file_system.hpp"
 
 namespace WorldMapNS
 {
 
 LevelTile::LevelTile(const std::string& basedir, const lisp::Lisp* lisp)
-  : solved(false), auto_path(true)
+  : solved(false), auto_play(false), auto_path(true), basedir(basedir), picture_cached(false),
+    picture(0)
 {
+  lisp->get("name", name);
   lisp->get("x", pos.x);
   lisp->get("y", pos.y);
-  
+  lisp->get("auto-play", auto_play);
+
   std::string spritefile = "images/worldmap/common/leveldot.sprite";
   lisp->get("sprite", spritefile);
   sprite.reset(sprite_manager->create(spritefile));
 
   lisp->get("extro-script", extro_script);
-  lisp->get("name", name);
-  
+
   if (!PHYSFS_exists((basedir + name).c_str()))
   {
-    log_warning << "level file '" << name 
+    log_warning << "level file '" << name
       << "' does not exist and will not be added to the worldmap" << std::endl;
     return;
   }
@@ -52,6 +56,7 @@ LevelTile::LevelTile(const std::string& basedir, const lisp::Lisp* lisp)
 
 LevelTile::~LevelTile()
 {
+  delete picture;
 }
 
 void
@@ -65,4 +70,17 @@ LevelTile::update(float )
 {
 }
 
+const Surface*
+LevelTile::get_picture()
+{
+  if (picture_cached) return picture;
+  picture_cached = true;
+  std::string fname = FileSystem::strip_extension(basedir + name)+".jpg";
+  if (!PHYSFS_exists(fname.c_str())) {
+       return 0;
+  }
+  picture = new Surface(fname);
+  return picture;
+}
+
 }