AdventureOptionsTab.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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/ResourcePath.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. OBJECT_CONSTRUCTION;
  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(JsonPath::builtin("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("infoBarCreatureManagementChanged", [](bool value)
  113. {
  114. return setBoolSetting("gameTweaks", "infoBarCreatureManagement", value);
  115. });
  116. addCallback("leftButtonDragChanged", [](bool value)
  117. {
  118. return setBoolSetting("adventure", "leftButtonDrag", value);
  119. });
  120. addCallback("smoothDraggingChanged", [](bool value)
  121. {
  122. return setBoolSetting("adventure", "smoothDragging", value);
  123. });
  124. addCallback("skipAdventureMapAnimationsChanged", [](bool value)
  125. {
  126. return setBoolSetting("gameTweaks", "skipAdventureMapAnimations", value);
  127. });
  128. addCallback("hideBackgroundChanged", [](bool value)
  129. {
  130. return setBoolSetting("adventure", "hideBackground", value);
  131. });
  132. build(config);
  133. std::shared_ptr<CToggleGroup> playerHeroSpeedToggle = widget<CToggleGroup>("heroMovementSpeedPicker");
  134. playerHeroSpeedToggle->setSelected(static_cast<int>(settings["adventure"]["heroMoveTime"].Float()));
  135. std::shared_ptr<CToggleGroup> enemyHeroSpeedToggle = widget<CToggleGroup>("enemyMovementSpeedPicker");
  136. enemyHeroSpeedToggle->setSelected(static_cast<int>(settings["adventure"]["enemyMoveTime"].Float()));
  137. std::shared_ptr<CToggleGroup> mapScrollSpeedToggle = widget<CToggleGroup>("mapScrollSpeedPicker");
  138. mapScrollSpeedToggle->setSelected(static_cast<int>(settings["adventure"]["scrollSpeedPixels"].Float()));
  139. std::shared_ptr<CToggleButton> heroReminderCheckbox = widget<CToggleButton>("heroReminderCheckbox");
  140. heroReminderCheckbox->setSelected(settings["adventure"]["heroReminder"].Bool());
  141. std::shared_ptr<CToggleButton> quickCombatCheckbox = widget<CToggleButton>("quickCombatCheckbox");
  142. quickCombatCheckbox->setSelected(settings["adventure"]["quickCombat"].Bool());
  143. std::shared_ptr<CToggleButton> numericQuantitiesCheckbox = widget<CToggleButton>("numericQuantitiesCheckbox");
  144. numericQuantitiesCheckbox->setSelected(settings["gameTweaks"]["numericCreaturesQuantities"].Bool());
  145. std::shared_ptr<CToggleButton> forceMovementInfoCheckbox = widget<CToggleButton>("forceMovementInfoCheckbox");
  146. forceMovementInfoCheckbox->setSelected(settings["gameTweaks"]["forceMovementInfo"].Bool());
  147. std::shared_ptr<CToggleButton> showGridCheckbox = widget<CToggleButton>("showGridCheckbox");
  148. showGridCheckbox->setSelected(settings["gameTweaks"]["showGrid"].Bool());
  149. std::shared_ptr<CToggleButton> infoBarPickCheckbox = widget<CToggleButton>("infoBarPickCheckbox");
  150. infoBarPickCheckbox->setSelected(settings["gameTweaks"]["infoBarPick"].Bool());
  151. std::shared_ptr<CToggleButton> borderScrollCheckbox = widget<CToggleButton>("borderScrollCheckbox");
  152. borderScrollCheckbox->setSelected(settings["adventure"]["borderScroll"].Bool());
  153. std::shared_ptr<CToggleButton> infoBarCreatureManagementCheckbox = widget<CToggleButton>("infoBarCreatureManagementCheckbox");
  154. infoBarCreatureManagementCheckbox->setSelected(settings["gameTweaks"]["infoBarCreatureManagement"].Bool());
  155. std::shared_ptr<CToggleButton> leftButtonDragCheckbox = widget<CToggleButton>("leftButtonDragCheckbox");
  156. if (leftButtonDragCheckbox)
  157. leftButtonDragCheckbox->setSelected(settings["adventure"]["leftButtonDrag"].Bool());
  158. std::shared_ptr<CToggleButton> smoothDraggingCheckbox = widget<CToggleButton>("smoothDraggingCheckbox");
  159. if (smoothDraggingCheckbox)
  160. smoothDraggingCheckbox->setSelected(settings["adventure"]["smoothDragging"].Bool());
  161. std::shared_ptr<CToggleButton> skipAdventureMapAnimationsCheckbox = widget<CToggleButton>("skipAdventureMapAnimationsCheckbox");
  162. skipAdventureMapAnimationsCheckbox->setSelected(settings["gameTweaks"]["skipAdventureMapAnimations"].Bool());
  163. std::shared_ptr<CToggleButton> hideBackgroundCheckbox = widget<CToggleButton>("hideBackgroundCheckbox");
  164. hideBackgroundCheckbox->setSelected(settings["adventure"]["hideBackground"].Bool());
  165. }