<MatzeB> -cleanup in resource management functions
[supertux.git] / src / worldmap.cpp
index c199abf..415e8a4 100644 (file)
@@ -85,7 +85,7 @@ string_to_direction(const std::string& directory)
 
 TileManager::TileManager()
 {
-  std::string stwt_filename = datadir +  "images/worldmap/antarctica.stwt";
+  std::string stwt_filename = datadir +  "/images/worldmap/antarctica.stwt";
   lisp_object_t* root_obj = lisp_read_from_file(stwt_filename);
  
   if (!root_obj)
@@ -327,7 +327,7 @@ WorldMap::~WorldMap()
 void
 WorldMap::load_map()
 {
-  std::string filename = datadir +  "levels/default/worldmap.stwm";
+  std::string filename = datadir +  "/levels/default/worldmap.stwm";
   
   lisp_object_t* root_obj = lisp_read_from_file(filename);
   if (!root_obj)
@@ -404,10 +404,10 @@ void WorldMap::get_level_title(Levels::pointer level)
 
   FILE * fi;
   lisp_object_t* root_obj = 0;
-  fi = fopen((datadir +  "levels/" + level->name).c_str(), "r");
+  fi = fopen((datadir +  "/levels/" + level->name).c_str(), "r");
   if (fi == NULL)
   {
-    perror((datadir +  "levels/" + level->name).c_str());
+    perror((datadir +  "/levels/" + level->name).c_str());
     return;
   }
 
@@ -590,19 +590,49 @@ WorldMap::update()
               level->y == tux->get_tile_pos().y)
             {
               std::cout << "Enter the current level: " << level->name << std::endl;;
-              GameSession session(datadir +  "levels/" + level->name,
+              GameSession session(datadir +  "/levels/" + level->name,
                                   1, ST_GL_LOAD_LEVEL_FILE);
 
               switch (session.run())
                 {
                 case GameSession::LEVEL_FINISHED:
-                  level->solved = true;
-                  if (session.get_world()->get_tux()->got_coffee)
-                    player_status.bonus = PlayerStatus::FLOWER_BONUS;
-                  else if (session.get_world()->get_tux()->size == BIG)
-                    player_status.bonus = PlayerStatus::GROWUP_BONUS;
-                  else
-                    player_status.bonus = PlayerStatus::NO_BONUS;
+                  {
+                    bool old_level_state = level->solved;
+                    level->solved = true;
+
+                    if (session.get_world()->get_tux()->got_coffee)
+                      player_status.bonus = PlayerStatus::FLOWER_BONUS;
+                    else if (session.get_world()->get_tux()->size == BIG)
+                      player_status.bonus = PlayerStatus::GROWUP_BONUS;
+                    else
+                      player_status.bonus = PlayerStatus::NO_BONUS;
+
+                    if (old_level_state != level->solved)
+                      { // Try to detect the next direction to which we should walk
+                        // FIXME: Mostly a hack
+                        Direction dir = NONE;
+                    
+                        Tile* tile = at(tux->get_tile_pos());
+
+                        if (tile->north && tux->back_direction != NORTH)
+                          dir = NORTH;
+                        else if (tile->south && tux->back_direction != SOUTH)
+                          dir = SOUTH;
+                        else if (tile->east && tux->back_direction != EAST)
+                          dir = EAST;
+                        else if (tile->west && tux->back_direction != WEST)
+                          dir = WEST;
+
+                        if (dir != NONE)
+                          {
+                            tux->set_direction(dir);
+                            tux->update(0.33f);
+                          }
+
+                        std::cout << "Walk to dir: " << dir << std::endl;
+                      }
+                  }
+
                   break;
                 case GameSession::LEVEL_ABORT:
                   // Reseting the player_status might be a worthy