diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | src/engine.cpp | 2 | ||||
-rw-r--r-- | src/map.cpp | 22 | ||||
-rw-r--r-- | src/map.h | 19 | ||||
-rw-r--r-- | src/resources/mapreader.cpp | 17 |
5 files changed, 62 insertions, 1 deletions
@@ -1,3 +1,6 @@ +0.0.14 (3 July 2005) +- Added support for map properties (to be used for music and minimap settings) + 0.0.13 (5 June 2005) - Added ability to trade items and money - Added server field to login dialog diff --git a/src/engine.cpp b/src/engine.cpp index 973523ed..9c39b3aa 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -492,6 +492,8 @@ void Engine::draw() std::stringstream debugStream; debugStream << "[" << fps << " fps] " << (mouseX / 32 + camera_x) << ", " << (mouseY / 32 + camera_y); + debugStream << " [music: " << tiledMap->getProperty("music") << "]"; + debugStream << " [minimap: " << tiledMap->getProperty("minimap") << "]"; debugInfo->setCaption(debugStream.str()); debugInfo->adjustSize(); } diff --git a/src/map.cpp b/src/map.cpp index 5f522dfb..24c9b5b4 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -177,6 +177,28 @@ int Map::getTileHeight() return tileHeight; } +std::string Map::getProperty(const std::string &name) +{ + std::map<std::string,std::string>::iterator i = properties.find(name); + + if (i != properties.end()) + { + return (*i).second; + } + + return ""; +} + +bool Map::hasProperty(const std::string &name) +{ + return (properties.find(name) != properties.end()); +} + +void Map::setProperty(const std::string &name, const std::string &value) +{ + properties[name] = value; +} + std::list<PATH_NODE> Map::findPath( int startX, int startY, int destX, int destY) { @@ -159,11 +159,30 @@ class Map std::list<PATH_NODE> findPath( int startX, int startY, int destX, int destY); + /** + * Get a map property. + * + * @return the value of the given property or an empty string when it + * doesn't exist. + */ + std::string getProperty(const std::string &name); + + /** + * Returns whether a certain property is available. + */ + bool hasProperty(const std::string &name); + + /** + * Set a map property. + */ + void setProperty(const std::string &name, const std::string &value); + private: int width, height; int tileWidth, tileHeight; MetaTile *metaTiles; Image **tiles; + std::map<std::string,std::string> properties; // Pathfinding members int onClosedList, onOpenList; diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index da7364a4..b62e6029 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -106,7 +106,22 @@ Map* MapReader::readMap(xmlNodePtr node, const std::string &path) for (node = node->xmlChildrenNode; node != NULL; node = node->next) { - if (xmlStrEqual(node->name, BAD_CAST "tileset")) + 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")) { Tileset *tileset = readTileset(node, pathDir, map); if (tileset) { |