Jelajahi Sumber

Add tile properties.

aster2013 11 tahun lalu
induk
melakukan
0ab5fb8d16
2 mengubah file dengan 25 tambahan dan 1 penghapusan
  1. 21 1
      Source/Engine/Urho2D/TmxFile2D.cpp
  2. 4 0
      Source/Engine/Urho2D/TmxFile2D.h

+ 21 - 1
Source/Engine/Urho2D/TmxFile2D.cpp

@@ -165,6 +165,15 @@ Sprite2D* TmxFile2D::GetTileSprite(int gid) const
     return i->second_;
 }
 
+const HashMap<String, String>* TmxFile2D::GetTileProperties(int gid) const
+{
+    HashMap<int, HashMap<String, String> >::ConstIterator i = tileProperties_.Find(gid);
+    if (i == tileProperties_.End())
+        return 0;
+
+    return &(i->second_);
+}
+
 bool TmxFile2D::LoadTileSet(const XMLElement& element)
 {
     XMLElement imageElem = element.GetChild("image");
@@ -179,7 +188,7 @@ bool TmxFile2D::LoadTileSet(const XMLElement& element)
 
     tileSetTextures_.Push(texture);
 
-    int gid = element.GetInt("firstgid");
+    int firstgid = element.GetInt("firstgid"); 
     int tileWidth = element.GetInt("tilewidth");
     int tileHeight = element.GetInt("tileheight");
     int spacing = element.GetInt("spacing");
@@ -187,6 +196,7 @@ bool TmxFile2D::LoadTileSet(const XMLElement& element)
     int imageWidth = imageElem.GetInt("width");
     int imageHeight = imageElem.GetInt("height");
 
+    int gid = firstgid;
     for (int y = margin; y < imageHeight - margin; y += tileHeight + spacing)
     {
         for (int x = margin; x < imageWidth - margin; x += tileWidth + spacing)
@@ -201,6 +211,16 @@ bool TmxFile2D::LoadTileSet(const XMLElement& element)
         }
     }
 
+    for (XMLElement tileElem = element.GetChild("tile"); tileElem; tileElem = tileElem.GetNext("tile"))
+    {
+        if (tileElem.HasChild("properties"))
+        {
+            HashMap<String, String> properties;
+            LoadProperties(tileElem.GetChild("properties"), properties);
+            tileProperties_[firstgid + tileElem.GetInt("id")] = properties;
+        }
+    }
+
     return true;
 }
 

+ 4 - 0
Source/Engine/Urho2D/TmxFile2D.h

@@ -171,6 +171,8 @@ public:
     const TmxLayer2D* GetLayer(unsigned index) const;
     /// Return tile sprite by gid.
     Sprite2D* GetTileSprite(int gid) const;
+    /// Return tile properties by gid.
+    const HashMap<String, String>* GetTileProperties(int gid) const;
 
 private:
     /// Load tile set.
@@ -198,6 +200,8 @@ private:
     Vector<SharedPtr<Texture2D> > tileSetTextures_;
     /// Gid to tile sprite mapping.
     HashMap<int, SharedPtr<Sprite2D> > tileSprites_;
+    /// Gid to tile properties mapping.
+    HashMap<int, HashMap<String, String> > tileProperties_;
     /// Layers.
     Vector<TmxLayer2D*> layers_;
 };