From b81a0ffdb844fdcf204a6c0978a7b4f1dec11d8c Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Wed, 16 Mar 2011 05:27:07 +0000 Subject: [PATCH] - consistent display order for unit and upgrade requirement resources as requested by tomreyn --- source/glest_game/types/unit_type.cpp | 36 ++++++++++++++++++++---- source/glest_game/types/upgrade_type.cpp | 33 +++++++++++++++++++--- 2 files changed, 60 insertions(+), 9 deletions(-) diff --git a/source/glest_game/types/unit_type.cpp b/source/glest_game/types/unit_type.cpp index 0289c4db..7817fe5b 100644 --- a/source/glest_game/types/unit_type.cpp +++ b/source/glest_game/types/unit_type.cpp @@ -325,32 +325,51 @@ void UnitType::load(int id,const string &dir, const TechTree *techTree, rotationAllowed=true; } + std::map sortedItems; //unit requirements const XmlNode *unitRequirementsNode= parametersNode->getChild("unit-requirements"); for(int i=0; igetChildCount(); ++i){ const XmlNode *unitNode= unitRequirementsNode->getChild("unit", i); string name= unitNode->getAttribute("name")->getRestrictedValue(); - unitReqs.push_back(factionType->getUnitType(name)); + sortedItems[name] = 0; } + for(std::map::iterator iterMap = sortedItems.begin(); + iterMap != sortedItems.end(); ++iterMap) { + unitReqs.push_back(factionType->getUnitType(iterMap->first)); + } + sortedItems.clear(); + //upgrade requirements const XmlNode *upgradeRequirementsNode= parametersNode->getChild("upgrade-requirements"); for(int i=0; igetChildCount(); ++i){ const XmlNode *upgradeReqNode= upgradeRequirementsNode->getChild("upgrade", i); string name= upgradeReqNode->getAttribute("name")->getRestrictedValue(); - upgradeReqs.push_back(factionType->getUpgradeType(name)); + sortedItems[name] = 0; } + for(std::map::iterator iterMap = sortedItems.begin(); + iterMap != sortedItems.end(); ++iterMap) { + upgradeReqs.push_back(factionType->getUpgradeType(iterMap->first)); + } + sortedItems.clear(); //resource requirements const XmlNode *resourceRequirementsNode= parametersNode->getChild("resource-requirements"); costs.resize(resourceRequirementsNode->getChildCount()); - for(int i=0; igetChild("resource", i); string name= resourceNode->getAttribute("name")->getRestrictedValue(); int amount= resourceNode->getAttribute("amount")->getIntValue(); - costs[i].init(techTree->getResourceType(name), amount); + sortedItems[name] = amount; } + int index = 0; + for(std::map::iterator iterMap = sortedItems.begin(); + iterMap != sortedItems.end(); ++iterMap) { + costs[index].init(techTree->getResourceType(iterMap->first), iterMap->second); + index++; + } + sortedItems.clear(); //resources stored const XmlNode *resourcesStoredNode= parametersNode->getChild("resources-stored"); @@ -359,8 +378,15 @@ void UnitType::load(int id,const string &dir, const TechTree *techTree, const XmlNode *resourceNode= resourcesStoredNode->getChild("resource", i); string name= resourceNode->getAttribute("name")->getRestrictedValue(); int amount= resourceNode->getAttribute("amount")->getIntValue(); - storedResources[i].init(techTree->getResourceType(name), amount); + sortedItems[name] = amount; } + index = 0; + for(std::map::iterator iterMap = sortedItems.begin(); + iterMap != sortedItems.end(); ++iterMap) { + storedResources[index].init(techTree->getResourceType(iterMap->first), iterMap->second); + index++; + } + sortedItems.clear(); //image const XmlNode *imageNode= parametersNode->getChild("image"); diff --git a/source/glest_game/types/upgrade_type.cpp b/source/glest_game/types/upgrade_type.cpp index 73e8d420..c1f02253 100644 --- a/source/glest_game/types/upgrade_type.cpp +++ b/source/glest_game/types/upgrade_type.cpp @@ -83,39 +83,64 @@ void UpgradeType::load(const string &dir, const TechTree *techTree, const XmlNode *upgradeTimeNode= upgradeNode->getChild("time"); productionTime= upgradeTimeNode->getAttribute("value")->getIntValue(); + std::map sortedItems; + //unit requirements const XmlNode *unitRequirementsNode= upgradeNode->getChild("unit-requirements"); for(int i = 0; i < unitRequirementsNode->getChildCount(); ++i) { const XmlNode *unitNode= unitRequirementsNode->getChild("unit", i); string name= unitNode->getAttribute("name")->getRestrictedValue(); - unitReqs.push_back(factionType->getUnitType(name)); + sortedItems[name] = 0; } + for(std::map::iterator iterMap = sortedItems.begin(); + iterMap != sortedItems.end(); ++iterMap) { + unitReqs.push_back(factionType->getUnitType(iterMap->first)); + } + sortedItems.clear(); //upgrade requirements const XmlNode *upgradeRequirementsNode= upgradeNode->getChild("upgrade-requirements"); for(int i = 0; i < upgradeRequirementsNode->getChildCount(); ++i) { const XmlNode *upgradeReqNode= upgradeRequirementsNode->getChild("upgrade", i); string name= upgradeReqNode->getAttribute("name")->getRestrictedValue(); - upgradeReqs.push_back(factionType->getUpgradeType(name)); + sortedItems[name] = 0; } + for(std::map::iterator iterMap = sortedItems.begin(); + iterMap != sortedItems.end(); ++iterMap) { + upgradeReqs.push_back(factionType->getUpgradeType(iterMap->first)); + } + sortedItems.clear(); //resource requirements + int index = 0; const XmlNode *resourceRequirementsNode= upgradeNode->getChild("resource-requirements"); costs.resize(resourceRequirementsNode->getChildCount()); for(int i = 0; i < costs.size(); ++i) { const XmlNode *resourceNode= resourceRequirementsNode->getChild("resource", i); string name= resourceNode->getAttribute("name")->getRestrictedValue(); int amount= resourceNode->getAttribute("amount")->getIntValue(); - costs[i].init(techTree->getResourceType(name), amount); + sortedItems[name] = amount; } + index = 0; + for(std::map::iterator iterMap = sortedItems.begin(); + iterMap != sortedItems.end(); ++iterMap) { + costs[index].init(techTree->getResourceType(iterMap->first), iterMap->second); + index++; + } + sortedItems.clear(); //effects const XmlNode *effectsNode= upgradeNode->getChild("effects"); for(int i = 0; i < effectsNode->getChildCount(); ++i) { const XmlNode *unitNode= effectsNode->getChild("unit", i); string name= unitNode->getAttribute("name")->getRestrictedValue(); - effects.push_back(factionType->getUnitType(name)); + sortedItems[name] = 0; } + for(std::map::iterator iterMap = sortedItems.begin(); + iterMap != sortedItems.end(); ++iterMap) { + effects.push_back(factionType->getUnitType(iterMap->first)); + } + sortedItems.clear(); //values maxHp= upgradeNode->getChild("max-hp")->getAttribute("value")->getIntValue();