Removed tile_path from tileset, instead give fully qualified path to the Tile
authorgrumbel <grumbel@837edb03-e0f3-0310-88ca-d4d4e8b29345>
Sun, 6 Dec 2009 01:32:11 +0000 (01:32 +0000)
committergrumbel <grumbel@837edb03-e0f3-0310-88ca-d4d4e8b29345>
Sun, 6 Dec 2009 01:32:11 +0000 (01:32 +0000)
git-svn-id: http://supertux.lethargik.org/svn/supertux/trunk/supertux@6175 837edb03-e0f3-0310-88ca-d4d4e8b29345

src/supertux/tile.cpp
src/supertux/tile_set.cpp
src/supertux/tile_set.hpp
src/supertux/tile_set_parser.cpp
src/supertux/tile_set_parser.hpp

index 419de8e..5161020 100644 (file)
@@ -58,18 +58,19 @@ Tile::load_images()
 {
   if(images.size() == 0 && imagespecs.size() != 0)
   {
-    const std::string& tiles_path = tileset.tiles_path;
-
     assert(images.size() == 0);
-    for(std::vector<ImageSpec>::iterator i = imagespecs.begin(); i !=
-          imagespecs.end(); ++i) {
+    for(std::vector<ImageSpec>::iterator i = imagespecs.begin(); i != imagespecs.end(); ++i) 
+    {
       const ImageSpec& spec = *i;
+
       Surface* surface;
-      std::string file = tiles_path + spec.file;
-      if(spec.rect.get_width() <= 0) {
-        surface = new Surface(file);
-      } else {
-        surface = new Surface(file,
+      if(spec.rect.get_width() <= 0) 
+      {
+        surface = new Surface(spec.file);
+      }
+      else 
+      {
+        surface = new Surface(spec.file,
                               (int) spec.rect.p1.x,
                               (int) spec.rect.p1.y,
                               (int) spec.rect.get_width(),
index 42a48ec..475f4a4 100644 (file)
@@ -20,7 +20,6 @@
 
 TileSet::TileSet() :
   tiles(),
-  tiles_path(), 
   tiles_loaded(false)
 {
   tiles.resize(1, 0);
@@ -29,7 +28,6 @@ TileSet::TileSet() :
 
 TileSet::TileSet(const std::string& filename) :
   tiles(),
-  tiles_path(), 
   tiles_loaded(true)
 {
   TileSetParser parser(*this, filename);
index a5085c5..cc303d2 100644 (file)
@@ -30,7 +30,6 @@ private:
   typedef std::vector<Tile*> Tiles;
   Tiles tiles;
 
-  std::string tiles_path;
   bool        tiles_loaded;
 
   friend class TileManager;
index 68c4d37..e3fe52e 100644 (file)
 
 TileSetParser::TileSetParser(TileSet& tileset, const std::string& filename) :
   m_tileset(tileset),
-  m_filename(filename)
+  m_filename(filename),
+  m_tiles_path()
 {  
 }
 
 void
 TileSetParser::parse()
 {
-  m_tileset.tiles_path = FileSystem::dirname(m_filename);
+  m_tiles_path = FileSystem::dirname(m_filename);
 
   m_tileset.tiles.resize(1, 0);
   m_tileset.tiles[0] = new Tile(m_tileset);
@@ -86,8 +87,16 @@ TileSetParser::parse()
       bool has_attributes = iter.lisp()->get("attributes", attributes);
       bool has_datas = iter.lisp()->get("datas", datas);
 
-      if(!iter.lisp()->get("image",      images))
+      if (!iter.lisp()->get("image",      images))
+      {
         iter.lisp()->get( "images",      images);
+      }
+
+      // make the image path absolute
+      for(std::vector<std::string>::iterator i = images.begin(); i != images.end(); ++i)
+      {
+        *i = m_tiles_path + *i;
+      }
 
       iter.lisp()->get("width",      width);
       iter.lisp()->get("height",     height);
@@ -199,12 +208,12 @@ TileSetParser::parse_tile(Tile& tile, const Reader& reader)
 #ifndef NDEBUG
   images = reader.get_lisp("editor-images");
   if(images)
-    parse_images(tile, *images);
+    parse_tile_images(tile, *images);
   else {
 #endif
     images = reader.get_lisp("images");
     if(images)
-      parse_images(tile, *images);
+      parse_tile_images(tile, *images);
 #ifndef NDEBUG
   }
 #endif
@@ -215,31 +224,40 @@ TileSetParser::parse_tile(Tile& tile, const Reader& reader)
 }
 
 void
-TileSetParser::parse_images(Tile& tile, const Reader& images_lisp)
+TileSetParser::parse_tile_images(Tile& tile, const Reader& images_lisp)
 {
   const lisp::Lisp* list = &images_lisp;
-  while(list) {
+  while(list) 
+  {
     const lisp::Lisp* cur = list->get_car();
-    if(cur->get_type() == lisp::Lisp::TYPE_STRING) {
+
+    if(cur->get_type() == lisp::Lisp::TYPE_STRING) 
+    {
       std::string file;
       cur->get(file);
-      tile.imagespecs.push_back(Tile::ImageSpec(file, Rect(0, 0, 0, 0)));
-    } else if(cur->get_type() == lisp::Lisp::TYPE_CONS &&
-              cur->get_car()->get_type() == lisp::Lisp::TYPE_SYMBOL &&
-              cur->get_car()->get_symbol() == "region") {
+      tile.imagespecs.push_back(Tile::ImageSpec(m_tiles_path + file, Rect(0, 0, 0, 0)));
+    }
+    else if(cur->get_type() == lisp::Lisp::TYPE_CONS &&
+            cur->get_car()->get_type() == lisp::Lisp::TYPE_SYMBOL &&
+            cur->get_car()->get_symbol() == "region") 
+    {
       const lisp::Lisp* ptr = cur->get_cdr();
 
       std::string file;
-      float x = 0, y = 0, w = 0, h = 0;
+      float x = 0;
+      float y = 0;
+      float w = 0;
+      float h = 0;
       ptr->get_car()->get(file); ptr = ptr->get_cdr();
       ptr->get_car()->get(x); ptr = ptr->get_cdr();
       ptr->get_car()->get(y); ptr = ptr->get_cdr();
       ptr->get_car()->get(w); ptr = ptr->get_cdr();
       ptr->get_car()->get(h);
-      tile.imagespecs.push_back(Tile::ImageSpec(file, Rect(x, y, x+w, y+h)));
-    } else {
+      tile.imagespecs.push_back(Tile::ImageSpec(m_tiles_path + file, Rect(x, y, x+w, y+h)));
+    } 
+    else 
+    {
       log_warning << "Expected string or list in images tag" << std::endl;
-      continue;
     }
 
     list = list->get_cdr();
index 04adbda..88c7ea5 100644 (file)
@@ -31,6 +31,7 @@ class TileSetParser
 private:
   TileSet&    m_tileset;
   std::string m_filename;
+  std::string m_tiles_path;
   
 public:
   TileSetParser(TileSet& tileset, const std::string& filename);
@@ -39,7 +40,7 @@ public:
 
 private:
   uint32_t parse_tile(Tile& tile, const Reader& reader);
-  void parse_images(Tile& tile, const Reader& cur);
+  void parse_tile_images(Tile& tile, const Reader& cur);
   
 private:
   TileSetParser(const TileSetParser&);