Configuration.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * Configuration.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 "Configuration.h"
  12. #include "../serializer/JsonSerializeFormat.h"
  13. VCMI_LIB_NAMESPACE_BEGIN
  14. Rewardable::EVisitMode Rewardable::Configuration::getVisitMode() const
  15. {
  16. return static_cast<EVisitMode>(visitMode);
  17. }
  18. ui16 Rewardable::Configuration::getResetDuration() const
  19. {
  20. return resetParameters.period;
  21. }
  22. std::optional<int> Rewardable::Configuration::getVariable(const std::string & category, const std::string & name) const
  23. {
  24. std::string variableID = category + '@' + name;
  25. if (variables.values.count(variableID))
  26. return variables.values.at(variableID);
  27. return std::nullopt;
  28. }
  29. const JsonNode & Rewardable::Configuration::getPresetVariable(const std::string & category, const std::string & name) const
  30. {
  31. static const JsonNode emptyNode;
  32. std::string variableID = category + '@' + name;
  33. if (variables.preset.count(variableID))
  34. return variables.preset.at(variableID);
  35. else
  36. return emptyNode;
  37. }
  38. void Rewardable::Configuration::presetVariable(const std::string & category, const std::string & name, const JsonNode & value)
  39. {
  40. std::string variableID = category + '@' + name;
  41. variables.preset[variableID] = value;
  42. }
  43. void Rewardable::Configuration::initVariable(const std::string & category, const std::string & name, int value)
  44. {
  45. std::string variableID = category + '@' + name;
  46. variables.values[variableID] = value;
  47. }
  48. void Rewardable::ResetInfo::serializeJson(JsonSerializeFormat & handler)
  49. {
  50. handler.serializeInt("period", period);
  51. handler.serializeBool("visitors", visitors);
  52. handler.serializeBool("rewards", rewards);
  53. }
  54. void Rewardable::VisitInfo::serializeJson(JsonSerializeFormat & handler)
  55. {
  56. handler.serializeStruct("limiter", limiter);
  57. handler.serializeStruct("reward", reward);
  58. handler.serializeStruct("message", message);
  59. handler.serializeInt("visitType", visitType);
  60. }
  61. void Rewardable::Variables::serializeJson(JsonSerializeFormat & handler)
  62. {
  63. if (handler.saving)
  64. {
  65. JsonNode presetNode;
  66. for (auto const & entry : preset)
  67. presetNode[entry.first] = entry.second;
  68. handler.serializeRaw("preset", presetNode, {});
  69. }
  70. else
  71. {
  72. preset.clear();
  73. JsonNode presetNode;
  74. handler.serializeRaw("preset", presetNode, {});
  75. for (auto const & entry : presetNode.Struct())
  76. preset[entry.first] = entry.second;
  77. }
  78. }
  79. void Rewardable::Configuration::serializeJson(JsonSerializeFormat & handler)
  80. {
  81. handler.serializeStruct("onSelect", onSelect);
  82. handler.enterArray("info").serializeStruct(info);
  83. handler.serializeEnum("selectMode", selectMode, std::vector<std::string>{SelectModeString.begin(), SelectModeString.end()});
  84. handler.serializeEnum("visitMode", visitMode, std::vector<std::string>{VisitModeString.begin(), VisitModeString.end()});
  85. handler.serializeStruct("resetParameters", resetParameters);
  86. handler.serializeBool("canRefuse", canRefuse);
  87. handler.serializeBool("showScoutedPreview", showScoutedPreview);
  88. handler.serializeBool("coastVisitable", coastVisitable);
  89. handler.serializeInt("infoWindowType", infoWindowType);
  90. }
  91. VCMI_LIB_NAMESPACE_END