From 6722e88207a733e4912cabf957f966d1c4a8d102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Lindeijer?= Date: Wed, 19 Jul 2006 20:48:05 +0000 Subject: [PATCH] Implemented loading for the way Tiled saves properties since version 0.6.0 and updated all current maps. --- ChangeLog | 14 ++++++++++- src/resources/mapreader.cpp | 50 ++++++++++++++++++++++++------------- src/resources/mapreader.h | 10 ++++++++ 3 files changed, 56 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 570719215..679c24425 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,16 @@ 2006-07-19 Bjørn Lindeijer - * tmw.cbp: Added Code::Blocks project file. * src/gui/minimap.cpp: Fixed dot size of local player. * src/engine.cpp: Fixed color of "[TARGET]". + * src/resources/mapreader.cpp, src/resources/mapreader.h, + data/maps/new_12-1.tmx.gz, data/maps/new_3-1.tmx.gz, + data/maps/new_4-1.tmx.gz, data/maps/new_5-1.tmx.gz, + data/maps/new_6-1.tmx.gz, data/maps/new_7-1.tmx.gz, + data/maps/new_8-1.tmx.gz, data/maps/new_9-1.tmx.gz, + data/maps/new_1-1.tmx.gz, data/maps/new_10-1.tmx.gz, + data/maps/new_11-1.tmx.gz, data/maps/new_2-1.tmx.gz: Implemented + loading for the way Tiled saves properties since version 0.6.0 and + updated all current maps. 2006-07-19 Eugenio Favalli @@ -19,6 +27,10 @@ character selection dialog. * data/graphics/sprites/Makefile.am: Alphabetically correct. +2006-07-19 Bjørn Lindeijer + + * tmw.cbp: Added Code::Blocks project file. + 2006-07-18 Bjørn Lindeijer * src/gui/updatewindow.cpp, src/gui/updatewindow.h, src/main.cpp, diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index bddc1092d..48f23aea0 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: - - 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,11 +209,42 @@ 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: + + 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) { diff --git a/src/resources/mapreader.h b/src/resources/mapreader.h index eb5a85770..ad21762d0 100644 --- a/src/resources/mapreader.h +++ b/src/resources/mapreader.h @@ -28,6 +28,7 @@ #include +class Properties; class Map; class Tileset; @@ -51,6 +52,15 @@ class MapReader readMap(xmlNodePtr node, const std::string &path); 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. */