2
0

CBuilding.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /*
  2. * CBuilding.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 "CBuilding.h"
  12. #include "../../GameLibrary.h"
  13. #include "../../texts/CGeneralTextHandler.h"
  14. #include "../faction/CFaction.h"
  15. #include "../faction/CTown.h"
  16. VCMI_LIB_NAMESPACE_BEGIN
  17. const std::map<std::string, CBuilding::EBuildMode> CBuilding::MODES =
  18. {
  19. { "normal", CBuilding::BUILD_NORMAL },
  20. { "auto", CBuilding::BUILD_AUTO },
  21. { "special", CBuilding::BUILD_SPECIAL },
  22. { "grail", CBuilding::BUILD_GRAIL }
  23. };
  24. BuildingTypeUniqueID CBuilding::getUniqueTypeID() const
  25. {
  26. return BuildingTypeUniqueID(town->faction->getId(), bid);
  27. }
  28. std::string CBuilding::getJsonKey() const
  29. {
  30. return modScope + ':' + identifier;
  31. }
  32. std::string CBuilding::getNameTranslated() const
  33. {
  34. return LIBRARY->generaltexth->translate(getNameTextID());
  35. }
  36. std::string CBuilding::getDescriptionTranslated() const
  37. {
  38. return LIBRARY->generaltexth->translate(getDescriptionTextID());
  39. }
  40. std::string CBuilding::getBaseTextID() const
  41. {
  42. return TextIdentifier("building", modScope, town->faction->identifier, identifier).get();
  43. }
  44. std::string CBuilding::getNameTextID() const
  45. {
  46. return TextIdentifier(getBaseTextID(), "name").get();
  47. }
  48. std::string CBuilding::getDescriptionTextID() const
  49. {
  50. return TextIdentifier(getBaseTextID(), "description").get();
  51. }
  52. BuildingID CBuilding::getBase() const
  53. {
  54. const CBuilding * build = this;
  55. while (build->upgrade != BuildingID::NONE)
  56. {
  57. build = build->town->buildings.at(build->upgrade).get();
  58. }
  59. return build->bid;
  60. }
  61. si32 CBuilding::getDistance(const BuildingID & buildID) const
  62. {
  63. const CBuilding * build = town->buildings.at(buildID).get();
  64. int distance = 0;
  65. while (build->upgrade != BuildingID::NONE && build != this)
  66. {
  67. build = build->town->buildings.at(build->upgrade).get();
  68. distance++;
  69. }
  70. if (build == this)
  71. return distance;
  72. return -1;
  73. }
  74. void CBuilding::addNewBonus(const std::shared_ptr<Bonus> & b, BonusList & bonusList) const
  75. {
  76. bonusList.push_back(b);
  77. }
  78. VCMI_LIB_NAMESPACE_END