AdventureOptionsTab.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /*
  2. * AdventureOptionsTab.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 "AdventureOptionsTab.h"
  12. #include "../../../lib/filesystem/ResourceID.h"
  13. #include "../../gui/CGuiHandler.h"
  14. #include "../../widgets/Buttons.h"
  15. #include "../../widgets/TextControls.h"
  16. #include "../../widgets/Images.h"
  17. #include "CConfigHandler.h"
  18. static void setBoolSetting(std::string group, std::string field, bool value)
  19. {
  20. Settings fullscreen = settings.write[group][field];
  21. fullscreen->Bool() = value;
  22. }
  23. static void setIntSetting(std::string group, std::string field, int value)
  24. {
  25. Settings entry = settings.write[group][field];
  26. entry->Float() = value;
  27. }
  28. AdventureOptionsTab::AdventureOptionsTab()
  29. : InterfaceObjectConfigurable()
  30. {
  31. OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
  32. type |= REDRAW_PARENT;
  33. const JsonNode config(ResourceID("config/widgets/settings/adventureOptionsTab.json"));
  34. addCallback("playerHeroSpeedChanged", [this](int value)
  35. {
  36. auto targetLabel = widget<CLabel>("heroSpeedValueLabel");
  37. if (targetLabel)
  38. {
  39. if (value <= 0)
  40. {
  41. targetLabel->setText("-");
  42. }
  43. else
  44. {
  45. int valuePercentage = 100 * 100 / value;
  46. targetLabel->setText(std::to_string(valuePercentage) + "%");
  47. }
  48. }
  49. setIntSetting("adventure", "heroMoveTime", value);
  50. });
  51. addCallback("enemyHeroSpeedChanged", [this](int value)
  52. {
  53. auto targetLabel = widget<CLabel>("enemySpeedValueLabel");
  54. if (targetLabel)
  55. {
  56. if (value <= 0)
  57. {
  58. targetLabel->setText("-");
  59. }
  60. else
  61. {
  62. int valuePercentage = 100 * 100 / value;
  63. targetLabel->setText(std::to_string(valuePercentage) + "%");
  64. }
  65. }
  66. setIntSetting("adventure", "enemyMoveTime", value);
  67. });
  68. addCallback("mapScrollSpeedChanged", [this](int value)
  69. {
  70. auto targetLabel = widget<CLabel>("mapScrollingValueLabel");
  71. int valuePercentage = 100 * value / 1200; // H3 max value is "1200", displaying it to be 100%
  72. if (targetLabel)
  73. targetLabel->setText(std::to_string(valuePercentage) + "%");
  74. return setIntSetting("adventure", "scrollSpeedPixels", value);
  75. });
  76. addCallback("heroReminderChanged", [](bool value)
  77. {
  78. return setBoolSetting("adventure", "heroReminder", value);
  79. });
  80. addCallback("quickCombatChanged", [](bool value)
  81. {
  82. return setBoolSetting("adventure", "quickCombat", value);
  83. });
  84. //settings that do not belong to base game:
  85. addCallback("numericQuantitiesChanged", [](bool value)
  86. {
  87. return setBoolSetting("gameTweaks", "numericCreaturesQuantities", value);
  88. });
  89. addCallback("forceMovementInfoChanged", [](bool value)
  90. {
  91. return setBoolSetting("gameTweaks", "forceMovementInfo", value);
  92. });
  93. addCallback("showGridChanged", [](bool value)
  94. {
  95. return setBoolSetting("gameTweaks", "showGrid", value);
  96. });
  97. build(config);
  98. std::shared_ptr<CToggleGroup> playerHeroSpeedToggle = widget<CToggleGroup>("heroMovementSpeedPicker");
  99. playerHeroSpeedToggle->setSelected(static_cast<int>(settings["adventure"]["heroMoveTime"].Float()));
  100. std::shared_ptr<CToggleGroup> enemyHeroSpeedToggle = widget<CToggleGroup>("enemyMovementSpeedPicker");
  101. enemyHeroSpeedToggle->setSelected(static_cast<int>(settings["adventure"]["enemyMoveTime"].Float()));
  102. std::shared_ptr<CToggleGroup> mapScrollSpeedToggle = widget<CToggleGroup>("mapScrollSpeedPicker");
  103. mapScrollSpeedToggle->setSelected(static_cast<int>(settings["adventure"]["scrollSpeedPixels"].Float()));
  104. std::shared_ptr<CToggleButton> heroReminderCheckbox = widget<CToggleButton>("heroReminderCheckbox");
  105. heroReminderCheckbox->setSelected(settings["adventure"]["heroReminder"].Bool());
  106. std::shared_ptr<CToggleButton> quickCombatCheckbox = widget<CToggleButton>("quickCombatCheckbox");
  107. quickCombatCheckbox->setSelected(settings["adventure"]["quickCombat"].Bool());
  108. std::shared_ptr<CToggleButton> numericQuantitiesCheckbox = widget<CToggleButton>("numericQuantitiesCheckbox");
  109. numericQuantitiesCheckbox->setSelected(settings["gameTweaks"]["numericCreaturesQuantities"].Bool());
  110. std::shared_ptr<CToggleButton> forceMovementInfoCheckbox = widget<CToggleButton>("forceMovementInfoCheckbox");
  111. forceMovementInfoCheckbox->setSelected(settings["gameTweaks"]["forceMovementInfo"].Bool());
  112. std::shared_ptr<CToggleButton> showGridCheckbox = widget<CToggleButton>("showGridCheckbox");
  113. showGridCheckbox->setSelected(settings["gameTweaks"]["showGrid"].Bool());
  114. }