diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-03-03 01:25:21 +0200 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-03-03 01:25:21 +0200 |
commit | 22f79fd0d623c8e11994905534f53da267e22935 (patch) | |
tree | 04403929ca80f47253f8dd523a29489c0fd30162 /src/resources/colordb.cpp | |
parent | 582428edf9e40db0d1ed7b78222562a7a5031fe4 (diff) | |
download | manaverse-22f79fd0d623c8e11994905534f53da267e22935.tar.gz manaverse-22f79fd0d623c8e11994905534f53da267e22935.tar.bz2 manaverse-22f79fd0d623c8e11994905534f53da267e22935.tar.xz manaverse-22f79fd0d623c8e11994905534f53da267e22935.zip |
Dehardcode item colors. Now reading all from configs.
Diffstat (limited to 'src/resources/colordb.cpp')
-rw-r--r-- | src/resources/colordb.cpp | 74 |
1 files changed, 64 insertions, 10 deletions
diff --git a/src/resources/colordb.cpp b/src/resources/colordb.cpp index c35cec95e..79622e8ed 100644 --- a/src/resources/colordb.cpp +++ b/src/resources/colordb.cpp @@ -28,9 +28,10 @@ namespace { - ColorDB::Colors mColors; + ColorDB::Colors mHairColors; bool mLoaded = false; std::string mFail = "#ffffff"; + ColorDB::ColorLists mColorLists; } void ColorDB::load() @@ -38,6 +39,12 @@ void ColorDB::load() if (mLoaded) unload(); + loadHair(); + loadColorLists(); +} + +void ColorDB::loadHair() +{ XML::Document *doc = new XML::Document("hair.xml"); xmlNodePtr root = doc->rootNode(); bool hairXml = true; @@ -55,7 +62,7 @@ void ColorDB::load() if (!root || !xmlStrEqual(root->name, BAD_CAST "colors")) { logger->log1("ColorDB: Failed to find any color files."); - mColors[0] = mFail; + mHairColors[0] = mFail; mLoaded = true; delete doc; @@ -69,10 +76,10 @@ void ColorDB::load() { int id = XML::getProperty(node, "id", 0); - if (mColors.find(id) != mColors.end()) + if (mHairColors.find(id) != mHairColors.end()) logger->log("ColorDB: Redefinition of dye ID %d", id); - mColors[id] = hairXml ? + mHairColors[id] = hairXml ? XML::getProperty(node, "value", "#FFFFFF") : XML::getProperty(node, "dye", "#FFFFFF"); } @@ -83,22 +90,59 @@ void ColorDB::load() mLoaded = true; } +void ColorDB::loadColorLists() +{ + XML::Document *doc = new XML::Document("itemcolors.xml"); + xmlNodePtr root = doc->rootNode(); + if (!root) + return; + + for_each_xml_child_node(node, root) + { + if (xmlStrEqual(node->name, BAD_CAST "list")) + { + std::string name = XML::getProperty(node, "name", ""); + if (name.empty()) + continue; + + std::map <int, ItemColor> colors; + ColorListsIterator it = mColorLists.find(name); + + if (it != mColorLists.end()) + colors = it->second; + + for_each_xml_child_node(colorNode, node) + { + if (xmlStrEqual(colorNode->name, BAD_CAST "color")) + { + ItemColor c(XML::getProperty(colorNode, "id", -1), + XML::getProperty(colorNode, "name", ""), + XML::getProperty(colorNode, "value", "")); + if (c.id > -1) + colors[c.id] = c; + } + } + mColorLists[name] = colors; + } + } +} + void ColorDB::unload() { logger->log1("Unloading color database..."); - mColors.clear(); + mHairColors.clear(); mLoaded = false; } -std::string &ColorDB::get(int id) +std::string &ColorDB::getHairColor(int id) { if (!mLoaded) load(); - ColorIterator i = mColors.find(id); + ColorIterator i = mHairColors.find(id); - if (i == mColors.end()) + if (i == mHairColors.end()) { logger->log("ColorDB: Error, unknown dye ID# %d", id); return mFail; @@ -109,7 +153,17 @@ std::string &ColorDB::get(int id) } } -int ColorDB::size() +int ColorDB::getHairSize() { - return static_cast<int>(mColors.size()); + return static_cast<int>(mHairColors.size()); +} + +std::map <int, ColorDB::ItemColor> *ColorDB::getColorsList(std::string name) +{ + std::map <int, ItemColor> colors; + ColorListsIterator it = mColorLists.find(name); + + if (it != mColorLists.end()) + return &it->second; + return 0; } |