Browse Source

Added map swipe option

Ivan Savenko 2 years ago
parent
commit
b7025125d5

+ 4 - 2
Mods/vcmi/config/vcmi/english.json

@@ -49,10 +49,12 @@
 
 	"vcmi.adventureOptions.numericQuantities.hover" : "Numeric Creature Quantities",
 	"vcmi.adventureOptions.numericQuantities.help" : "{Numeric Creature Quantities}\n\n Shows approximate enemy creatures quantities in numeric A-B format.",
-	"vcmi.adventureOptions.forceMovementInfo.hover" : "Always Show Move Info",
-	"vcmi.adventureOptions.forceMovementInfo.help" : "{Always Show Move Info}\n\n Replaces default status bar info with movement points data without need to hold ALT button.",
+	"vcmi.adventureOptions.forceMovementInfo.hover" : "Always Show Movement Cost",
+	"vcmi.adventureOptions.forceMovementInfo.help" : "{Always Show Movement Cost}\n\n Replaces default status bar info with movement points data without need to hold ALT button.",
 	"vcmi.adventureOptions.showGrid.hover" : "Show Grid",
 	"vcmi.adventureOptions.showGrid.help" : "{Show Grid}\n\n Shows grid overlay, showing borders between adventure map tiles.",
+	"vcmi.adventureOptions.mapSwipe.hover" : "Map Swipe",
+	"vcmi.adventureOptions.mapSwipe.help" : "{Map Swipe}\n\n Allows map movement via finger swipe gesture on systems with touchscreen. As of right now, can also be accessed via left mouse button.",
 	"vcmi.adventureOptions.mapScrollSpeed1.hover": "",
 	"vcmi.adventureOptions.mapScrollSpeed5.hover": "",
 	"vcmi.adventureOptions.mapScrollSpeed6.hover": "",

+ 24 - 22
Mods/vcmi/config/vcmi/ukrainian.json

@@ -33,27 +33,29 @@
 	"vcmi.settingsMainWindow.adventureTab.hover" : "Мапа Пригод",
 	"vcmi.settingsMainWindow.adventureTab.help"  : "Перемикає на вкладку параметрів мапи пригод - мапа пригод є частиною гри, де ви можете переміщати своїх героїв",
 
-	"vcmi.systemOptions.videoGroup" : "Налаштування Відео",
-	"vcmi.systemOptions.audioGroup" : "Налаштування Аудіо",
-	"vcmi.systemOptions.otherGroup" : "Інші Налаштування",
-	"vcmi.systemOptions.townsGroup" : "Екран Міста",
+	"vcmi.systemOptions.videoGroup" : "Налаштування відео",
+	"vcmi.systemOptions.audioGroup" : "Налаштування аудіо",
+	"vcmi.systemOptions.otherGroup" : "Інші налаштування",
+	"vcmi.systemOptions.townsGroup" : "Екран міста",
 
-	"vcmi.systemOptions.fullscreenButton.hover" : "Повноекранний Режим",
-	"vcmi.systemOptions.fullscreenButton.help"  : "{Повноекранний Режим}\n\n Якщо обрано, VCMI буде запускатися в режимі на весь екран, інакше — віконний режим",
-	"vcmi.systemOptions.resolutionButton.hover" : "Роздільна здатність",
+	"vcmi.systemOptions.fullscreenButton.hover" : "Повноекранний режим",
+	"vcmi.systemOptions.fullscreenButton.help"  : "{Повноекранний режим}\n\n Якщо обрано, VCMI буде запускатися в режимі на весь екран, інакше — віконний режим",
+	"vcmi.systemOptions.resolutionButton.hover" : "Роздільна здатність: %wx%h",
 	"vcmi.systemOptions.resolutionButton.help"  : "{Роздільна здатність}\n\n Зміна розширення екрану в грі. Аби зміни набули чинності необхідно перезавантажити гру.",
 	"vcmi.systemOptions.resolutionMenu.hover"   : "Обрати роздільну здатність екрану",
 	"vcmi.systemOptions.resolutionMenu.help"    : "Змінити роздільну здатність екрану в грі.",
-	"vcmi.systemOptions.fullscreenFailed"       : "{Повноекранний Режим}\n\n Не вдалося перейти в повноекранний режим! Поточна роздільна здатність не підтримується дисплеєм!",
-	"vcmi.systemOptions.framerateButton.hover"  : "Лічильник Кадрів",
-	"vcmi.systemOptions.framerateButton.help"   : "{Лічильник Кадрів}\n\n Перемикає видимість лічильника кадрів на секунду у кутку ігрового вікна",
+	"vcmi.systemOptions.fullscreenFailed"       : "{Повноекранний режим}\n\n Не вдалося перейти в повноекранний режим! Поточна роздільна здатність не підтримується дисплеєм!",
+	"vcmi.systemOptions.framerateButton.hover"  : "Лічильник кадрів",
+	"vcmi.systemOptions.framerateButton.help"   : "{Лічильник кадрів}\n\n Перемикає видимість лічильника кадрів на секунду у кутку ігрового вікна",
 
-	"vcmi.adventureOptions.numericQuantities.hover" : "Числовий Показник Кількост",
-	"vcmi.adventureOptions.numericQuantities.help" : "{Числовий Показник Кількост}\n\n Показує приблизну кількість ворожих істот у числовому форматі А-Б.",
-	"vcmi.adventureOptions.forceMovementInfo.hover" : "Завжди Показувати Вартість Руху",
-	"vcmi.adventureOptions.forceMovementInfo.help" : "{Завжди Показувати Вартість Руху}\n\n Замінює стандартну інформацію в рядку стану на вартість переміщення без необхідності утримувати клавішу ALT.",
-	"vcmi.adventureOptions.showGrid.hover" : "Показувати Сітку",
-	"vcmi.adventureOptions.showGrid.help" : "{Показувати Сітку}\n\n Відображає сітку, що показує межі між клітинками на мапі пригод.",
+	"vcmi.adventureOptions.numericQuantities.hover" : "Числовий показник кількості",
+	"vcmi.adventureOptions.numericQuantities.help" : "{Числовий показник кількості}\n\n Показує приблизну кількість ворожих істот у числовому форматі А-Б.",
+	"vcmi.adventureOptions.forceMovementInfo.hover" : "Завжди показувати вартість руху",
+	"vcmi.adventureOptions.forceMovementInfo.help" : "{Завжди показувати вартість руху}\n\n Замінює стандартну інформацію в рядку стану на вартість переміщення без необхідності утримувати клавішу ALT.",
+	"vcmi.adventureOptions.showGrid.hover" : "Показувати сітку",
+	"vcmi.adventureOptions.showGrid.help" : "{Показувати сітку}\n\n Відображає сітку, що показує межі між клітинками на мапі пригод.",
+	"vcmi.adventureOptions.mapSwipe.hover" : "Прокрутка мапи жестом",
+	"vcmi.adventureOptions.mapSwipe.help" : "{Прокрутка мапи жестом}\n\n Дозволяє переміщати мапу пальцем на системах з сенсорним екраном. Станом на зараз, також доступний за допомогою лівої кнопки миші.",
 	"vcmi.adventureOptions.mapScrollSpeed1.hover": "",
 	"vcmi.adventureOptions.mapScrollSpeed5.hover": "",
 	"vcmi.adventureOptions.mapScrollSpeed6.hover": "",
@@ -79,13 +81,13 @@
 	"vcmi.battleOptions.skipBattleIntroMusic.hover": "Пропускати вступну музику",
 	"vcmi.battleOptions.skipBattleIntroMusic.help": "{Пропускати вступну музику}\n\n Пропускати коротку музику, яка грає на початку кожної битви перед початком дії. Також можна пропустити, натиснувши клавішу ESC.",
 
-	"vcmi.otherOptions.availableCreaturesAsDwellingLabel.hover" : "Показувати Доступних Істот",
-	"vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Показувати Доступних Істот}\n\n Показує істот, яких можна придбати, замість їхнього приросту у зведенні по місту (нижній лівий кут).",
-	"vcmi.otherOptions.creatureGrowthAsDwellingLabel.hover" : "Показувати Приріст Істот",
-	"vcmi.otherOptions.creatureGrowthAsDwellingLabel.help" : "{Показувати Приріст Істот}\n\n Показує щотижневий приріст істот, замість кількості яку можна придбати у зведенні по місту (нижній лівий кут).",
+	"vcmi.otherOptions.availableCreaturesAsDwellingLabel.hover" : "Показувати доступних істот",
+	"vcmi.otherOptions.availableCreaturesAsDwellingLabel.help" : "{Показувати доступних істот}\n\n Показує істот, яких можна придбати, замість їхнього приросту у зведенні по місту (нижній лівий кут).",
+	"vcmi.otherOptions.creatureGrowthAsDwellingLabel.hover" : "Показувати приріст істот",
+	"vcmi.otherOptions.creatureGrowthAsDwellingLabel.help" : "{Показувати приріст істот}\n\n Показує щотижневий приріст істот, замість кількості яку можна придбати у зведенні по місту (нижній лівий кут).",
 
-	"vcmi.otherOptions.compactTownCreatureInfo.hover": "Компактне Відображення Істот у Місті",
-	"vcmi.otherOptions.compactTownCreatureInfo.help": "{Компактне Відображення Істот у Місті}\n\n Показує інформацію про істот у місті у зведенні по місту у більш компактному вигляді.",
+	"vcmi.otherOptions.compactTownCreatureInfo.hover": "Компактне відображення істот у місті",
+	"vcmi.otherOptions.compactTownCreatureInfo.help": "{Компактне відображення істот у місті}\n\n Показує інформацію про істот у місті у зведенні по місту у більш компактному вигляді.",
 
 	"vcmi.townHall.missingBase"             : "Спочатку необхідно звести початкову будівлю: %s",
 	"vcmi.townHall.noCreaturesToRecruit"    : "Немає істот, яких можна завербувати!",

+ 12 - 8
client/mapView/MapViewActions.cpp

@@ -26,11 +26,6 @@ MapViewActions::MapViewActions(MapView & owner, const std::shared_ptr<MapViewMod
 	, owner(owner)
 	, curHoveredTile(-1, -1, -1)
 	, isSwiping(false)
-#if defined(VCMI_ANDROID) || defined(VCMI_IOS)
-	, swipeEnabled(settings["general"]["swipe"].Bool())
-#else
-	, swipeEnabled(settings["general"]["swipeDesktop"].Bool())
-#endif
 {
 	pos.w = model->getPixelsVisibleDimensions().x;
 	pos.h = model->getPixelsVisibleDimensions().y;
@@ -38,6 +33,15 @@ MapViewActions::MapViewActions(MapView & owner, const std::shared_ptr<MapViewMod
 	addUsedEvents(LCLICK | RCLICK | MCLICK | HOVER | MOVE);
 }
 
+bool MapViewActions::swipeEnabled() const
+{
+#if defined(VCMI_ANDROID) || defined(VCMI_IOS)
+	return settings["general"]["swipe"].Bool();
+#else
+	return settings["general"]["swipeDesktop"].Bool();
+#endif
+}
+
 void MapViewActions::setContext(const std::shared_ptr<IMapRendererContext> & context)
 {
 	this->context = context;
@@ -59,7 +63,7 @@ void MapViewActions::clickLeft(tribool down, bool previousState)
 	if(indeterminate(down))
 		return;
 
-	if(swipeEnabled)
+	if(swipeEnabled())
 	{
 		if(handleSwipeStateChange(static_cast<bool>(down)))
 		{
@@ -103,11 +107,11 @@ void MapViewActions::mouseMoved(const Point & cursorPosition)
 void MapViewActions::handleSwipeMove(const Point & cursorPosition)
 {
 	// unless swipe is enabled, swipe move only works with middle mouse button
-	if(!swipeEnabled && !GH.isMouseButtonPressed(MouseButton::MIDDLE))
+	if(!swipeEnabled() && !GH.isMouseButtonPressed(MouseButton::MIDDLE))
 		return;
 
 	// on mobile platforms with enabled swipe any button is enough
-	if(swipeEnabled && (!GH.isMouseButtonPressed() || GH.multifinger))
+	if(swipeEnabled() && (!GH.isMouseButtonPressed() || GH.multifinger))
 		return;
 
 	if(!isSwiping)

+ 1 - 1
client/mapView/MapViewActions.h

@@ -18,7 +18,6 @@ class MapView;
 
 class MapViewActions : public CIntObject
 {
-	bool swipeEnabled;
 	bool isSwiping;
 
 	Point swipeInitialViewPos;
@@ -33,6 +32,7 @@ class MapViewActions : public CIntObject
 	void handleHover(const Point & cursorPosition);
 	void handleSwipeMove(const Point & cursorPosition);
 	bool handleSwipeStateChange(bool btnPressed);
+	bool swipeEnabled() const;
 
 public:
 	MapViewActions(MapView & owner, const std::shared_ptr<MapViewModel> & model);

+ 15 - 0
client/windows/settings/AdventureOptionsTab.cpp

@@ -102,6 +102,14 @@ AdventureOptionsTab::AdventureOptionsTab()
 	{
 		return setBoolSetting("gameTweaks", "showGrid", value);
 	});
+	addCallback("mapSwipeChanged", [](bool value)
+	{
+#if defined(VCMI_MOBILE)
+		setBoolSetting("general", "swipe", value);
+#else
+		setBoolSetting("general", "swipeDesktop", value);
+#endif
+	});
 	build(config);
 
 	std::shared_ptr<CToggleGroup> playerHeroSpeedToggle = widget<CToggleGroup>("heroMovementSpeedPicker");
@@ -127,4 +135,11 @@ AdventureOptionsTab::AdventureOptionsTab()
 
 	std::shared_ptr<CToggleButton> showGridCheckbox = widget<CToggleButton>("showGridCheckbox");
 	showGridCheckbox->setSelected(settings["gameTweaks"]["showGrid"].Bool());
+
+	std::shared_ptr<CToggleButton> mapSwipeCheckbox = widget<CToggleButton>("mapSwipeCheckbox");
+#if defined(VCMI_MOBILE)
+	mapSwipeCheckbox->setSelected(settings["general"]["swipe"].Bool());
+#else
+	mapSwipeCheckbox->setSelected(settings["general"]["swipeDesktop"].Bool());
+#endif
 }

+ 50 - 25
config/widgets/settings/adventureOptionsTab.json

@@ -293,9 +293,10 @@
 			],
 			"callback": "mapScrollSpeedChanged"
 		},
-/////////////////////////////////////// Bottom section - Checkboxes
+		
+/////////////////////////////////////// Right section - Original H3 options
 		{
-			"name": "bottomCheckboxesLabels",
+			"name": "rightCheckboxesLabels",
 			"type": "labelGroup",
 			"font": "medium",
 			"alignment": "left",
@@ -303,44 +304,31 @@
 			"items":
 			[
 				{
-					"position": {"x": 45, "y": 295},
+					"position": {"x": 415, "y": 55},
 					"text": "core.genrltxt.572" // TODO: show move path
 				},
 				{
-					"position": {"x": 45, "y": 325},
+					"position": {"x": 415, "y": 85},
 					"text": "core.genrltxt.573" // show hero reminder
 				},
 				{
-					"position": {"x": 45, "y": 355},
+					"position": {"x": 415, "y": 115},
 					"text": "core.genrltxt.574" // quick combat
-				},
-				{
-					"position": {"x": 45, "y": 385},
-					"text": "vcmi.adventureOptions.numericQuantities.hover"
-				},
-				{
-					"position": {"x": 45, "y": 415},
-					"text": "vcmi.adventureOptions.forceMovementInfo.hover"
-				},
-				{
-					"position": {"x": 45, "y": 445},
-					"text": "vcmi.adventureOptions.showGrid.hover"
 				}
 			]
 		},
-
 		{
 			"name": "showMovePathPlaceholder",
 			"type": "picture",
 			"image": "settingsWindow/checkBoxEmpty",
-			"position": {"x": 10, "y": 293},
+			"position": {"x": 380, "y": 53},
 		},
 		{
 			"name": "heroReminderCheckbox",
 			"type": "toggleButton",
 			"image": "sysopchk.def",
 			"help": "core.help.361",
-			"position": {"x": 10, "y": 323},
+			"position": {"x": 380, "y": 83},
 			"callback": "heroReminderChanged"
 		},
 		{
@@ -348,15 +336,43 @@
 			"type": "toggleButton",
 			"image": "sysopchk.def",
 			"help": "core.help.362",
-			"position": {"x": 10, "y": 353},
+			"position": {"x": 380, "y": 113},
 			"callback": "quickCombatChanged"
 		},
+		
+/////////////////////////////////////// Bottom section - VCMI Options
+		{
+			"name": "bottomCheckboxesLabels",
+			"type": "labelGroup",
+			"font": "medium",
+			"alignment": "left",
+			"color": "white",
+			"items":
+			[
+				{
+					"position": {"x": 45, "y": 295},
+					"text": "vcmi.adventureOptions.numericQuantities.hover"
+				},
+				{
+					"position": {"x": 45, "y": 325},
+					"text": "vcmi.adventureOptions.forceMovementInfo.hover"
+				},
+				{
+					"position": {"x": 45, "y": 355},
+					"text": "vcmi.adventureOptions.showGrid.hover"
+				},
+				{
+					"position": {"x": 45, "y": 385},
+					"text": "vcmi.adventureOptions.mapSwipe.hover"
+				}
+			]
+		},
 		{
 			"name": "numericQuantitiesCheckbox",
 			"type": "toggleButton",
 			"image": "sysopchk.def",
 			"help": "vcmi.adventureOptions.numericQuantities",
-			"position": {"x": 10, "y": 383},
+			"position": {"x": 10, "y": 293},
 			"callback": "numericQuantitiesChanged"
 		},
 		{
@@ -364,7 +380,7 @@
 			"type": "toggleButton",
 			"image": "sysopchk.def",
 			"help": "vcmi.adventureOptions.forceMovementInfo",
-			"position": {"x": 10, "y": 413},
+			"position": {"x": 10, "y": 323},
 			"callback": "forceMovementInfoChanged"
 		},
 		{
@@ -372,8 +388,17 @@
 			"type": "toggleButton",
 			"image": "sysopchk.def",
 			"help": "vcmi.adventureOptions.showGrid",
-			"position": {"x": 10, "y": 443},
+			"position": {"x": 10, "y": 353},
 			"callback": "showGridChanged"
-		}
+		},
+		{
+			"name": "mapSwipeCheckbox",
+			"type": "toggleButton",
+			"image": "sysopchk.def",
+			"help": "vcmi.adventureOptions.mapSwipe",
+			"position": {"x": 10, "y": 383},
+			"callback": "mapSwipeChanged"
+		},
+
 	]
 }