GameSettings.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. * GameSettings.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 "GameSettings.h"
  12. #include "JsonNode.h"
  13. VCMI_LIB_NAMESPACE_BEGIN
  14. bool IGameSettings::getBoolean(EGameSettings option) const
  15. {
  16. return getValue(option).Bool();
  17. }
  18. int64_t IGameSettings::getInteger(EGameSettings option) const
  19. {
  20. return getValue(option).Integer();
  21. }
  22. double IGameSettings::getDouble(EGameSettings option) const
  23. {
  24. return getValue(option).Float();
  25. }
  26. GameSettings::GameSettings():
  27. gameSettings(static_cast<size_t>(EGameSettings::OPTIONS_COUNT))
  28. {
  29. }
  30. void GameSettings::load(const JsonNode & input)
  31. {
  32. static std::array<std::array<std::string, 2>, 34> optionPath =
  33. { {
  34. {"textData", "heroClass"},
  35. {"textData", "artifact"},
  36. {"textData", "creature"},
  37. {"textData", "faction"},
  38. {"textData", "hero"},
  39. {"textData", "spell"},
  40. {"textData", "object"},
  41. {"textData", "terrain"},
  42. {"textData", "river"},
  43. {"textData", "road"},
  44. {"textData", "mapVersion"},
  45. {"modules", "STACK_EXPERIENCE"},
  46. {"modules", "STACK_ARTIFACTS"},
  47. {"modules", "COMMANDERS"},
  48. {"hardcodedFeatures", "DWELLINGS_ACCUMULATE_CREATURES"},
  49. {"hardcodedFeatures", "NO_RANDOM_SPECIAL_WEEKS_AND_MONTHS"},
  50. {"hardcodedFeatures", "BLACK_MARKET_MONTHLY_ARTIFACTS_CHANGE"},
  51. {"hardcodedFeatures", "WINNING_HERO_WITH_NO_TROOPS_RETREATS"},
  52. {"hardcodedFeatures", "ALL_CREATURES_GET_DOUBLE_MONTHS"},
  53. {"hardcodedFeatures", "NEGATIVE_LUCK"},
  54. {"hardcodedFeatures", "CREEP_SIZE"},
  55. {"hardcodedFeatures", "WEEKLY_GROWTH"},
  56. {"hardcodedFeatures", "NEUTRAL_STACK_EXP"},
  57. {"hardcodedFeatures", "MAX_BUILDING_PER_TURN"},
  58. {"hardcodedFeatures", "MAX_HEROES_AVAILABLE_PER_PLAYER"},
  59. {"hardcodedFeatures", "MAX_HEROES_ON_MAP_PER_PLAYER"},
  60. {"hardcodedFeatures", "ATTACK_POINT_DMG_MULTIPLIER"},
  61. {"hardcodedFeatures", "ATTACK_POINTS_DMG_MULTIPLIER_CAP"},
  62. {"hardcodedFeatures", "DEFENSE_POINT_DMG_MULTIPLIER"},
  63. {"hardcodedFeatures", "DEFENSE_POINTS_DMG_MULTIPLIER_CAP"},
  64. {"hardcodedFeatures", "HERO_STARTING_ARMY_STACKS_COUNT_CHANCES"},
  65. {"hardcodedFeatures", "DEFAULT_BUILDING_SET_DWELLING_CHANCES"},
  66. {"bonuses", "global"},
  67. {"bonuses", "heroes"},
  68. } };
  69. static_assert(static_cast<size_t>(EGameSettings::OPTIONS_COUNT) == optionPath.size(), "Missing option path");
  70. for (size_t i = 0; i < optionPath.size(); ++i)
  71. {
  72. const std::string & group = optionPath[i][0];
  73. const std::string & key = optionPath[i][1];
  74. const JsonNode & optionValue = input[group][key];
  75. if (!optionValue.isNull())
  76. gameSettings[i] = optionValue;
  77. }
  78. }
  79. const JsonNode & GameSettings::getValue(EGameSettings option) const
  80. {
  81. assert(option < EGameSettings::OPTIONS_COUNT);
  82. auto index = static_cast<size_t>(option);
  83. return gameSettings[index];
  84. }
  85. VCMI_LIB_NAMESPACE_END