diff options
Diffstat (limited to 'src/resources')
-rw-r--r-- | src/resources/mapreader.cpp | 50 | ||||
-rw-r--r-- | src/resources/mapreader.h | 10 |
2 files changed, 43 insertions, 17 deletions
diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index bddc1092..48f23aea 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -192,26 +192,11 @@ MapReader::readMap(xmlNodePtr node, const std::string &path) int tilew = getProperty(node, "tilewidth", DEFAULT_TILE_WIDTH); int tileh = getProperty(node, "tileheight", DEFAULT_TILE_HEIGHT); int layerNr = 0; - Map* map = new Map(w, h, tilew, tileh); + Map *map = new Map(w, h, tilew, tileh); for (node = node->xmlChildrenNode; node != NULL; node = node->next) { - if (xmlStrEqual(node->name, BAD_CAST "property")) - { - // Example: <property name="name" value="value"/> - - xmlChar *name = xmlGetProp(node, BAD_CAST "name"); - xmlChar *value = xmlGetProp(node, BAD_CAST "value"); - - if (name && value) - { - map->setProperty((const char*)name, (const char*)value); - } - - if (name) xmlFree(name); - if (value) xmlFree(value); - } - else if (xmlStrEqual(node->name, BAD_CAST "tileset")) + if (xmlStrEqual(node->name, BAD_CAST "tileset")) { Tileset *tileset = readTileset(node, pathDir, map); if (tileset) { @@ -224,12 +209,43 @@ MapReader::readMap(xmlNodePtr node, const std::string &path) readLayer(node, map, layerNr); layerNr++; } + else if (xmlStrEqual(node->name, BAD_CAST "properties")) + { + readProperties(node, map); + } } return map; } void +MapReader::readProperties(xmlNodePtr node, Properties* props) +{ + node = node->xmlChildrenNode; + + while (node != NULL) + { + if (xmlStrEqual(node->name, BAD_CAST "property")) + { + // Example: <property name="name" value="value"/> + + xmlChar *name = xmlGetProp(node, BAD_CAST "name"); + xmlChar *value = xmlGetProp(node, BAD_CAST "value"); + + if (name && value) + { + props->setProperty((const char*) name, (const char*) value); + } + + if (name) xmlFree(name); + if (value) xmlFree(value); + } + + node = node->next; + } +} + +void MapReader::readLayer(xmlNodePtr node, Map *map, int layer) { node = node->xmlChildrenNode; diff --git a/src/resources/mapreader.h b/src/resources/mapreader.h index eb5a8577..ad21762d 100644 --- a/src/resources/mapreader.h +++ b/src/resources/mapreader.h @@ -28,6 +28,7 @@ #include <libxml/tree.h> +class Properties; class Map; class Tileset; @@ -52,6 +53,15 @@ class MapReader private: /** + * Reads the properties element. + * + * @param props the Properties instance to which the properties will + * be assigned + */ + static void + readProperties(xmlNodePtr node, Properties* props); + + /** * Reads a map layer. */ static void |