CBuildingHandler.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * CBuildingHandler.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 "CBuildingHandler.h"
  12. VCMI_LIB_NAMESPACE_BEGIN
  13. BuildingID CBuildingHandler::campToERMU(int camp, int townType, const std::set<BuildingID> & builtBuildings)
  14. {
  15. static const std::vector<BuildingID> campToERMU =
  16. {
  17. BuildingID::TOWN_HALL, BuildingID::CITY_HALL,
  18. BuildingID::CAPITOL, BuildingID::FORT, BuildingID::CITADEL, BuildingID::CASTLE, BuildingID::TAVERN,
  19. BuildingID::BLACKSMITH, BuildingID::MARKETPLACE, BuildingID::RESOURCE_SILO, BuildingID::NONE,
  20. BuildingID::MAGES_GUILD_1, BuildingID::MAGES_GUILD_2, BuildingID::MAGES_GUILD_3, BuildingID::MAGES_GUILD_4,
  21. BuildingID::MAGES_GUILD_5,
  22. BuildingID::SHIPYARD, BuildingID::GRAIL,
  23. BuildingID::SPECIAL_1, BuildingID::SPECIAL_2, BuildingID::SPECIAL_3, BuildingID::SPECIAL_4
  24. }; //creature generators with banks - handled separately
  25. if (camp < campToERMU.size())
  26. {
  27. return campToERMU[camp];
  28. }
  29. static const std::vector<int> hordeLvlsPerTType[GameConstants::F_NUMBER] =
  30. {
  31. {2}, {1}, {1,4}, {0,2}, {0}, {0}, {0}, {0}, {0}
  32. };
  33. int curPos = static_cast<int>(campToERMU.size());
  34. for (int i=0; i<GameConstants::CREATURES_PER_TOWN; ++i)
  35. {
  36. if(camp == curPos) //non-upgraded
  37. return BuildingID(30 + i);
  38. curPos++;
  39. if(camp == curPos) //upgraded
  40. return BuildingID(37 + i);
  41. curPos++;
  42. if (i < 5) // last two levels don't have reserved horde ID. Yet another H3C weirdeness
  43. {
  44. if (vstd::contains(hordeLvlsPerTType[townType], i))
  45. {
  46. if (camp == curPos)
  47. {
  48. if (hordeLvlsPerTType[townType][0] == i)
  49. {
  50. BuildingID dwellingID(BuildingID::DWELL_UP_FIRST + hordeLvlsPerTType[townType][0]);
  51. if(vstd::contains(builtBuildings, dwellingID)) //if upgraded dwelling is built
  52. return BuildingID::HORDE_1_UPGR;
  53. else //upgraded dwelling not presents
  54. return BuildingID::HORDE_1;
  55. }
  56. else
  57. {
  58. if(hordeLvlsPerTType[townType].size() > 1)
  59. {
  60. BuildingID dwellingID(BuildingID::DWELL_UP_FIRST + hordeLvlsPerTType[townType][1]);
  61. if(vstd::contains(builtBuildings, dwellingID)) //if upgraded dwelling is built
  62. return BuildingID::HORDE_2_UPGR;
  63. else //upgraded dwelling not presents
  64. return BuildingID::HORDE_2;
  65. }
  66. }
  67. }
  68. }
  69. curPos++;
  70. }
  71. }
  72. assert(0);
  73. return BuildingID::NONE; //not found
  74. }
  75. VCMI_LIB_NAMESPACE_END