CBuildingHandler.cpp 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "StdInc.h"
  2. #include "CBuildingHandler.h"
  3. /*
  4. * CBuildingHandler.cpp, part of VCMI engine
  5. *
  6. * Authors: listed in file AUTHORS in main folder
  7. *
  8. * License: GNU General Public License v2.0 or later
  9. * Full text of license available in license.txt file, in main folder
  10. *
  11. */
  12. BuildingID CBuildingHandler::campToERMU( int camp, int townType, std::set<BuildingID> builtBuildings )
  13. {
  14. static const std::vector<BuildingID> campToERMU =
  15. {
  16. BuildingID::TOWN_HALL, BuildingID::CITY_HALL,
  17. BuildingID::CAPITOL, BuildingID::FORT, BuildingID::CITADEL, BuildingID::CASTLE, BuildingID::TAVERN,
  18. BuildingID::BLACKSMITH, BuildingID::MARKETPLACE, BuildingID::RESOURCE_SILO, BuildingID::NONE,
  19. BuildingID::MAGES_GUILD_1, BuildingID::MAGES_GUILD_2, BuildingID::MAGES_GUILD_3, BuildingID::MAGES_GUILD_4,
  20. BuildingID::MAGES_GUILD_5,
  21. BuildingID::SHIPYARD, BuildingID::GRAIL,
  22. BuildingID::SPECIAL_1, BuildingID::SPECIAL_2, BuildingID::SPECIAL_3, BuildingID::SPECIAL_4
  23. }; //creature generators with banks - handled separately
  24. if (camp < campToERMU.size())
  25. {
  26. return campToERMU[camp];
  27. }
  28. static const std::vector<int> hordeLvlsPerTType[GameConstants::F_NUMBER] =
  29. {
  30. {2}, {1}, {1,4}, {0,2}, {0}, {0}, {0}, {0}, {0}
  31. };
  32. int curPos = campToERMU.size();
  33. for (int i=0; i<GameConstants::CREATURES_PER_TOWN; ++i)
  34. {
  35. if(camp == curPos) //non-upgraded
  36. return BuildingID(30 + i);
  37. curPos++;
  38. if(camp == curPos) //upgraded
  39. return BuildingID(37 + i);
  40. curPos++;
  41. if (i < 5) // last two levels don't have reserved horde ID. Yet another H3C weirdeness
  42. {
  43. if (vstd::contains(hordeLvlsPerTType[townType], i))
  44. {
  45. if (camp == curPos)
  46. {
  47. if (hordeLvlsPerTType[townType][0] == i)
  48. {
  49. if(vstd::contains(builtBuildings, 37 + hordeLvlsPerTType[townType][0])) //if upgraded dwelling is built
  50. return BuildingID::HORDE_1_UPGR;
  51. else //upgraded dwelling not presents
  52. return BuildingID::HORDE_1;
  53. }
  54. else
  55. {
  56. if(hordeLvlsPerTType[townType].size() > 1)
  57. {
  58. if(vstd::contains(builtBuildings, 37 + hordeLvlsPerTType[townType][1])) //if upgraded dwelling is built
  59. return BuildingID::HORDE_2_UPGR;
  60. else //upgraded dwelling not presents
  61. return BuildingID::HORDE_2;
  62. }
  63. }
  64. }
  65. }
  66. curPos++;
  67. }
  68. }
  69. assert(0);
  70. return BuildingID::NONE; //not found
  71. }