AdventureOptionsTab.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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. setRedrawParent(true);
  33. #ifdef VCMI_MOBILE
  34. addConditional("mobile", true);
  35. addConditional("desktop", false);
  36. #else
  37. addConditional("mobile", false);
  38. addConditional("desktop", true);
  39. #endif
  40. const JsonNode config(ResourceID("config/widgets/settings/adventureOptionsTab.json"));
  41. addCallback("playerHeroSpeedChanged", [this](int value)
  42. {
  43. auto targetLabel = widget<CLabel>("heroSpeedValueLabel");
  44. if (targetLabel)
  45. {
  46. if (value <= 0)
  47. {
  48. targetLabel->setText("-");
  49. }
  50. else
  51. {
  52. int valuePercentage = 100 * 100 / value;
  53. targetLabel->setText(std::to_string(valuePercentage) + "%");
  54. }
  55. }
  56. setIntSetting("adventure", "heroMoveTime", value);
  57. });
  58. addCallback("enemyHeroSpeedChanged", [this](int value)
  59. {
  60. auto targetLabel = widget<CLabel>("enemySpeedValueLabel");
  61. if (targetLabel)
  62. {
  63. if (value <= 0)
  64. {
  65. targetLabel->setText("-");
  66. }
  67. else
  68. {
  69. int valuePercentage = 100 * 100 / value;
  70. targetLabel->setText(std::to_string(valuePercentage) + "%");
  71. }
  72. }
  73. setIntSetting("adventure", "enemyMoveTime", value);
  74. });
  75. addCallback("mapScrollSpeedChanged", [this](int value)
  76. {
  77. auto targetLabel = widget<CLabel>("mapScrollingValueLabel");
  78. int valuePercentage = 100 * value / 1200; // H3 max value is "1200", displaying it to be 100%
  79. if (targetLabel)
  80. targetLabel->setText(std::to_string(valuePercentage) + "%");
  81. return setIntSetting("adventure", "scrollSpeedPixels", value);
  82. });
  83. addCallback("heroReminderChanged", [](bool value)
  84. {
  85. return setBoolSetting("adventure", "heroReminder", value);
  86. });
  87. addCallback("quickCombatChanged", [](bool value)
  88. {
  89. return setBoolSetting("adventure", "quickCombat", value);
  90. });
  91. //settings that do not belong to base game:
  92. addCallback("numericQuantitiesChanged", [](bool value)
  93. {
  94. return setBoolSetting("gameTweaks", "numericCreaturesQuantities", value);
  95. });
  96. addCallback("forceMovementInfoChanged", [](bool value)
  97. {
  98. return setBoolSetting("gameTweaks", "forceMovementInfo", value);
  99. });
  100. addCallback("showGridChanged", [](bool value)
  101. {
  102. return setBoolSetting("gameTweaks", "showGrid", value);
  103. });
  104. addCallback("infoBarPickChanged", [](bool value)
  105. {
  106. return setBoolSetting("gameTweaks", "infoBarPick", value);
  107. });
  108. addCallback("borderScrollChanged", [](bool value)
  109. {
  110. return setBoolSetting("adventure", "borderScroll", value);
  111. });
  112. addCallback("leftButtonDragChanged", [](bool value)
  113. {
  114. return setBoolSetting("adventure", "leftButtonDrag", value);
  115. });
  116. build(config);
  117. std::shared_ptr<CToggleGroup> playerHeroSpeedToggle = widget<CToggleGroup>("heroMovementSpeedPicker");
  118. playerHeroSpeedToggle->setSelected(static_cast<int>(settings["adventure"]["heroMoveTime"].Float()));
  119. std::shared_ptr<CToggleGroup> enemyHeroSpeedToggle = widget<CToggleGroup>("enemyMovementSpeedPicker");
  120. enemyHeroSpeedToggle->setSelected(static_cast<int>(settings["adventure"]["enemyMoveTime"].Float()));
  121. std::shared_ptr<CToggleGroup> mapScrollSpeedToggle = widget<CToggleGroup>("mapScrollSpeedPicker");
  122. mapScrollSpeedToggle->setSelected(static_cast<int>(settings["adventure"]["scrollSpeedPixels"].Float()));
  123. std::shared_ptr<CToggleButton> heroReminderCheckbox = widget<CToggleButton>("heroReminderCheckbox");
  124. heroReminderCheckbox->setSelected(settings["adventure"]["heroReminder"].Bool());
  125. std::shared_ptr<CToggleButton> quickCombatCheckbox = widget<CToggleButton>("quickCombatCheckbox");
  126. quickCombatCheckbox->setSelected(settings["adventure"]["quickCombat"].Bool());
  127. std::shared_ptr<CToggleButton> numericQuantitiesCheckbox = widget<CToggleButton>("numericQuantitiesCheckbox");
  128. numericQuantitiesCheckbox->setSelected(settings["gameTweaks"]["numericCreaturesQuantities"].Bool());
  129. std::shared_ptr<CToggleButton> forceMovementInfoCheckbox = widget<CToggleButton>("forceMovementInfoCheckbox");
  130. forceMovementInfoCheckbox->setSelected(settings["gameTweaks"]["forceMovementInfo"].Bool());
  131. std::shared_ptr<CToggleButton> showGridCheckbox = widget<CToggleButton>("showGridCheckbox");
  132. showGridCheckbox->setSelected(settings["gameTweaks"]["showGrid"].Bool());
  133. std::shared_ptr<CToggleButton> infoBarPickCheckbox = widget<CToggleButton>("infoBarPickCheckbox");
  134. infoBarPickCheckbox->setSelected(settings["gameTweaks"]["infoBarPick"].Bool());
  135. std::shared_ptr<CToggleButton> borderScrollCheckbox = widget<CToggleButton>("borderScrollCheckbox");
  136. borderScrollCheckbox->setSelected(settings["adventure"]["borderScroll"].Bool());
  137. std::shared_ptr<CToggleButton> leftButtonDragCheckbox = widget<CToggleButton>("leftButtonDragCheckbox");
  138. if (leftButtonDragCheckbox)
  139. leftButtonDragCheckbox->setSelected(settings["adventure"]["leftButtonDrag"].Bool());
  140. }