2
0

UpgradeInfo.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. /*
  2. * UpgradeInfo.cpp, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #include "StdInc.h"
  11. #include "UpgradeInfo.h"
  12. #include "CCreatureHandler.h"
  13. VCMI_LIB_NAMESPACE_BEGIN
  14. void UpgradeInfo::addUpgrade(const CreatureID & upgradeID, const Creature * creature, int costPercentageModifier)
  15. {
  16. isAvailable = costPercentageModifier >= 0;
  17. upgradesIDs.push_back(upgradeID);
  18. ResourceSet upgradeCost = (upgradeID.toCreature()->getFullRecruitCost() - creature->getFullRecruitCost()) * costPercentageModifier / 100;
  19. upgradeCost.positive(); //upgrade cost can't be negative, ignore missing resources
  20. upgradesCosts.push_back(std::move(upgradeCost));
  21. // sort from highest ID to smallest
  22. size_t pos = upgradesIDs.size() - 1;
  23. while(pos > 0 && upgradesIDs[pos] > upgradesIDs[pos - 1])
  24. {
  25. std::swap(upgradesIDs[pos], upgradesIDs[pos - 1]);
  26. std::swap(upgradesCosts[pos], upgradesCosts[pos - 1]);
  27. --pos;
  28. }
  29. }
  30. VCMI_LIB_NAMESPACE_END