CTown.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * CTownHandler.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 "CTown.h"
  12. #include "CFaction.h"
  13. #include "CTownHandler.h"
  14. #include "../building/CBuilding.h"
  15. #include "../../texts/TextIdentifier.h"
  16. VCMI_LIB_NAMESPACE_BEGIN
  17. CTown::CTown()
  18. : faction(nullptr), mageLevel(0), primaryRes(0), defaultTavernChance(0)
  19. {
  20. }
  21. CTown::~CTown()
  22. {
  23. for(auto & build : buildings)
  24. build.second.dellNull();
  25. for(auto & str : clientInfo.structures)
  26. str.dellNull();
  27. }
  28. std::string CTown::getRandomNameTextID(size_t index) const
  29. {
  30. return TextIdentifier("faction", faction->modScope, faction->identifier, "randomName", index).get();
  31. }
  32. size_t CTown::getRandomNamesCount() const
  33. {
  34. return namesCount;
  35. }
  36. std::string CTown::getBuildingScope() const
  37. {
  38. if(faction == nullptr)
  39. //no faction == random faction
  40. return "building";
  41. else
  42. return "building." + faction->getJsonKey();
  43. }
  44. std::set<si32> CTown::getAllBuildings() const
  45. {
  46. std::set<si32> res;
  47. for(const auto & b : buildings)
  48. {
  49. res.insert(b.first.num);
  50. }
  51. return res;
  52. }
  53. const CBuilding * CTown::getSpecialBuilding(BuildingSubID::EBuildingSubID subID) const
  54. {
  55. for(const auto & kvp : buildings)
  56. {
  57. if(kvp.second->subId == subID)
  58. return buildings.at(kvp.first);
  59. }
  60. return nullptr;
  61. }
  62. BuildingID CTown::getBuildingType(BuildingSubID::EBuildingSubID subID) const
  63. {
  64. const auto * building = getSpecialBuilding(subID);
  65. return building == nullptr ? BuildingID::NONE : building->bid.num;
  66. }
  67. VCMI_LIB_NAMESPACE_END