summaryrefslogtreecommitdiff
path: root/src/resources/mapdb.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2011-03-13 21:23:33 +0200
committerAndrei Karas <akaras@inbox.ru>2011-03-13 21:59:10 +0200
commitbf32ca896ccf51385eb67812088ba5861ca2ede2 (patch)
tree02cc6a7f8de3ef48b6092668368f3b5ba8f35683 /src/resources/mapdb.cpp
parent774e86e8d2f8d787fb3b3a865cd500f166153c96 (diff)
downloadmv-bf32ca896ccf51385eb67812088ba5861ca2ede2.tar.gz
mv-bf32ca896ccf51385eb67812088ba5861ca2ede2.tar.bz2
mv-bf32ca896ccf51385eb67812088ba5861ca2ede2.tar.xz
mv-bf32ca896ccf51385eb67812088ba5861ca2ede2.zip
Add ability to remap maps to different files.
Diffstat (limited to 'src/resources/mapdb.cpp')
-rw-r--r--src/resources/mapdb.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/resources/mapdb.cpp b/src/resources/mapdb.cpp
new file mode 100644
index 000000000..37b127c02
--- /dev/null
+++ b/src/resources/mapdb.cpp
@@ -0,0 +1,88 @@
+/*
+ * Color database
+ * Copyright (C) 2008 Aethyra Development Team
+ * Copyright (C) 2011 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "resources/mapdb.h"
+
+#include "configuration.h"
+#include "client.h"
+#include "log.h"
+
+#include "utils/xml.h"
+
+#include <libxml/tree.h>
+
+namespace
+{
+ bool mLoaded = false;
+ MapDB::Maps mMaps;
+}
+
+void MapDB::load()
+{
+ if (mLoaded)
+ unload();
+
+ XML::Document *doc = new XML::Document(
+ paths.getStringValue("maps") + "remap.xml");
+
+ xmlNodePtr root = doc->rootNode();
+ if (!root)
+ return;
+
+ for_each_xml_child_node(node, root)
+ {
+ if (xmlStrEqual(node->name, BAD_CAST "map"))
+ {
+ std::string name = XML::getProperty(node, "name", "");
+ if (name.empty())
+ continue;
+
+ std::string value = XML::getProperty(node, "value", "");
+ if (value.empty())
+ continue;
+
+ mMaps[name] = value;
+ }
+ }
+
+ delete doc;
+
+ mLoaded = true;
+}
+
+
+void MapDB::unload()
+{
+ logger->log1("Unloading map database...");
+
+ mMaps.clear();
+ mLoaded = false;
+}
+
+std::string MapDB::getMapName(std::string name)
+{
+ MapIterator it = mMaps.find(name);
+ logger->log("map: " + name);
+
+ if (it != mMaps.end())
+ return it->second;
+ return name;
+}