From 5dc6243dfc06924d9206b2987bb7ededaa87f8f1 Mon Sep 17 00:00:00 2001
From: Bjørn Lindeijer <bjorn@lindeijer.nl>
Date: Sun, 6 Mar 2005 17:42:17 +0000
Subject: Added collision tileset... last commit missed there files.

---
 src/resources/mapreader.cpp | 25 ++++++++++++++++++++++---
 src/resources/mapreader.h   |  5 +++++
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp
index b28515c1..20438c9d 100644
--- a/src/resources/mapreader.cpp
+++ b/src/resources/mapreader.cpp
@@ -176,8 +176,15 @@ void MapReader::readLayer(xmlNodePtr node, Map *map, int layer)
                     if (xmlStrEqual(n2->name, BAD_CAST "tile") && y < h)
                     {
                         int gid = getProperty(n2, "gid", -1);
-                        if (layer == 0) map->setWalk(x, y, true);
-                        map->setTile(x, y, layer, getTileWithGid(gid));
+                        if (layer == 3)
+                        {
+                            Tileset *set = getTilesetWithGid(gid);
+                            map->setWalk(x, y,
+                                    !set || (gid - set->getFirstGid() == 0));
+                        }
+                        else if (layer < 3) {
+                            map->setTile(x, y, layer, getTileWithGid(gid));
+                        }
 
                         x++;
                         if (x == w) {x = 0; y++;}
@@ -255,6 +262,18 @@ int MapReader::getProperty(xmlNodePtr node, const char* name, int def)
 }
 
 Image *MapReader::getTileWithGid(int gid)
+{
+    std::vector<Tileset*>::iterator i;
+    Tileset *set = getTilesetWithGid(gid);
+
+    if (set) {
+        return set->spriteset[gid - set->getFirstGid()];
+    }
+
+    return NULL;
+}
+
+Tileset *MapReader::getTilesetWithGid(int gid)
 {
     std::vector<Tileset*>::iterator i;
     Tileset *set = NULL;
@@ -272,7 +291,7 @@ Image *MapReader::getTileWithGid(int gid)
 
     if (set && (gid - set->getFirstGid()) < (int)set->spriteset.size())
     {
-        return set->spriteset[gid - set->getFirstGid()];
+        return set;
     }
 
     return NULL;
diff --git a/src/resources/mapreader.h b/src/resources/mapreader.h
index 69c531de..59270f25 100644
--- a/src/resources/mapreader.h
+++ b/src/resources/mapreader.h
@@ -89,6 +89,11 @@ class MapReader
          */
         static Image *getTileWithGid(int gid);
 
+        /**
+         * Finds the tile set that a tile with the given global id is part of.
+         */
+        static Tileset *MapReader::getTilesetWithGid(int gid);
+
         static std::vector<Tileset*> tilesets;
 };
 
-- 
cgit v1.2.3-70-g09d2