CRmgTemplateZone.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. /*
  2. * CRmgTemplateZone.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 "CRmgTemplateZone.h"
  12. #include "../VCMI_Lib.h"
  13. #include "../CTownHandler.h"
  14. CRmgTemplateZone::CTownInfo::CTownInfo() : townCount(0), castleCount(0), townDensity(0), castleDensity(0)
  15. {
  16. }
  17. int CRmgTemplateZone::CTownInfo::getTownCount() const
  18. {
  19. return townCount;
  20. }
  21. void CRmgTemplateZone::CTownInfo::setTownCount(int value)
  22. {
  23. if(value < 0) throw std::runtime_error("Negative value for town count not allowed.");
  24. townCount = value;
  25. }
  26. int CRmgTemplateZone::CTownInfo::getCastleCount() const
  27. {
  28. return castleCount;
  29. }
  30. void CRmgTemplateZone::CTownInfo::setCastleCount(int value)
  31. {
  32. if(value < 0) throw std::runtime_error("Negative value for castle count not allowed.");
  33. castleCount = value;
  34. }
  35. int CRmgTemplateZone::CTownInfo::getTownDensity() const
  36. {
  37. return townDensity;
  38. }
  39. void CRmgTemplateZone::CTownInfo::setTownDensity(int value)
  40. {
  41. if(value < 0) throw std::runtime_error("Negative value for town density not allowed.");
  42. townDensity = value;
  43. }
  44. int CRmgTemplateZone::CTownInfo::getCastleDensity() const
  45. {
  46. return castleDensity;
  47. }
  48. void CRmgTemplateZone::CTownInfo::setCastleDensity(int value)
  49. {
  50. if(value < 0) throw std::runtime_error("Negative value for castle density not allowed.");
  51. castleDensity = value;
  52. }
  53. CRmgTemplateZone::CRmgTemplateZone() : id(0), type(ETemplateZoneType::PLAYER_START), size(1),
  54. townsAreSameType(false), matchTerrainToTown(true)
  55. {
  56. townTypes = getDefaultTownTypes();
  57. terrainTypes = getDefaultTerrainTypes();
  58. }
  59. TRmgTemplateZoneId CRmgTemplateZone::getId() const
  60. {
  61. return id;
  62. }
  63. void CRmgTemplateZone::setId(TRmgTemplateZoneId value)
  64. {
  65. if(value <= 0) throw std::runtime_error("Zone id should be greater than 0.");
  66. id = value;
  67. }
  68. ETemplateZoneType::ETemplateZoneType CRmgTemplateZone::getType() const
  69. {
  70. return type;
  71. }
  72. void CRmgTemplateZone::setType(ETemplateZoneType::ETemplateZoneType value)
  73. {
  74. type = value;
  75. }
  76. int CRmgTemplateZone::getSize() const
  77. {
  78. return size;
  79. }
  80. void CRmgTemplateZone::setSize(int value)
  81. {
  82. if(value <= 0) throw std::runtime_error("Zone size needs to be greater than 0.");
  83. size = value;
  84. }
  85. boost::optional<int> CRmgTemplateZone::getOwner() const
  86. {
  87. return owner;
  88. }
  89. void CRmgTemplateZone::setOwner(boost::optional<int> value)
  90. {
  91. if(!(*value >= 0 && *value <= PlayerColor::PLAYER_LIMIT_I)) throw std::runtime_error("Owner has to be in range 0 to max player count.");
  92. owner = value;
  93. }
  94. const CRmgTemplateZone::CTownInfo & CRmgTemplateZone::getPlayerTowns() const
  95. {
  96. return playerTowns;
  97. }
  98. void CRmgTemplateZone::setPlayerTowns(const CTownInfo & value)
  99. {
  100. playerTowns = value;
  101. }
  102. const CRmgTemplateZone::CTownInfo & CRmgTemplateZone::getNeutralTowns() const
  103. {
  104. return neutralTowns;
  105. }
  106. void CRmgTemplateZone::setNeutralTowns(const CTownInfo & value)
  107. {
  108. neutralTowns = value;
  109. }
  110. bool CRmgTemplateZone::getTownsAreSameType() const
  111. {
  112. return townsAreSameType;
  113. }
  114. void CRmgTemplateZone::setTownsAreSameType(bool value)
  115. {
  116. townsAreSameType = value;
  117. }
  118. const std::set<TFaction> & CRmgTemplateZone::getTownTypes() const
  119. {
  120. return townTypes;
  121. }
  122. void CRmgTemplateZone::setTownTypes(const std::set<TFaction> & value)
  123. {
  124. townTypes = value;
  125. }
  126. std::set<TFaction> CRmgTemplateZone::getDefaultTownTypes() const
  127. {
  128. std::set<TFaction> defaultTowns;
  129. auto towns = VLC->townh->getDefaultAllowed();
  130. for(int i = 0; i < towns.size(); ++i)
  131. {
  132. if(towns[i]) defaultTowns.insert(i);
  133. }
  134. return defaultTowns;
  135. }
  136. bool CRmgTemplateZone::getMatchTerrainToTown() const
  137. {
  138. return matchTerrainToTown;
  139. }
  140. void CRmgTemplateZone::setMatchTerrainToTown(bool value)
  141. {
  142. matchTerrainToTown = value;
  143. }
  144. const std::set<ETerrainType> & CRmgTemplateZone::getTerrainTypes() const
  145. {
  146. return terrainTypes;
  147. }
  148. void CRmgTemplateZone::setTerrainTypes(const std::set<ETerrainType> & value)
  149. {
  150. assert(value.find(ETerrainType::WRONG) == value.end() && value.find(ETerrainType::BORDER) == value.end() &&
  151. value.find(ETerrainType::WATER) == value.end() && value.find(ETerrainType::ROCK) == value.end());
  152. terrainTypes = value;
  153. }
  154. std::set<ETerrainType> CRmgTemplateZone::getDefaultTerrainTypes() const
  155. {
  156. std::set<ETerrainType> terTypes;
  157. static const ETerrainType::EETerrainType allowedTerTypes[] = { ETerrainType::DIRT, ETerrainType::SAND, ETerrainType::GRASS, ETerrainType::SNOW,
  158. ETerrainType::SWAMP, ETerrainType::ROUGH, ETerrainType::SUBTERRANEAN, ETerrainType::LAVA };
  159. for(auto & allowedTerType : allowedTerTypes) terTypes.insert(allowedTerType);
  160. return terTypes;
  161. }
  162. boost::optional<TRmgTemplateZoneId> CRmgTemplateZone::getTerrainTypeLikeZone() const
  163. {
  164. return terrainTypeLikeZone;
  165. }
  166. void CRmgTemplateZone::setTerrainTypeLikeZone(boost::optional<TRmgTemplateZoneId> value)
  167. {
  168. terrainTypeLikeZone = value;
  169. }
  170. boost::optional<TRmgTemplateZoneId> CRmgTemplateZone::getTownTypeLikeZone() const
  171. {
  172. return townTypeLikeZone;
  173. }
  174. void CRmgTemplateZone::setTownTypeLikeZone(boost::optional<TRmgTemplateZoneId> value)
  175. {
  176. townTypeLikeZone = value;
  177. }