Browse Source

Setting for haptic feedback

Michael 2 years ago
parent
commit
ff51b8f46b

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

@@ -74,6 +74,8 @@
 	"vcmi.systemOptions.longTouchMenu.entry"     : "%d milliseconds",
 	"vcmi.systemOptions.framerateButton.hover"  : "Show FPS",
 	"vcmi.systemOptions.framerateButton.help"   : "{Show FPS}\n\nToggle the visibility of the Frames Per Second counter in the corner of the game window",
+	"vcmi.systemOptions.hapticFeedbackButton.hover"  : "Haptic feedback",
+	"vcmi.systemOptions.hapticFeedbackButton.help"   : "{Haptic feedback}\n\nToggle the haptic feedback on touch inputs",
 
 	"vcmi.adventureOptions.infoBarPick.hover" : "Show Messages in Info Panel",
 	"vcmi.adventureOptions.infoBarPick.help" : "{Show Messages in Info Panel}\n\nWhenever possible, game messages from visiting map objects will be shown in the info panel, instead of popping up in a separate window.",

+ 2 - 0
Mods/vcmi/config/vcmi/german.json

@@ -74,6 +74,8 @@
 	"vcmi.systemOptions.longTouchMenu.entry"     : "%d Millisekunden",
 	"vcmi.systemOptions.framerateButton.hover"  : "FPS anzeigen",
 	"vcmi.systemOptions.framerateButton.help"   : "{FPS anzeigen}\n\n Schaltet die Sichtbarkeit des Zählers für die Bilder pro Sekunde in der Ecke des Spielfensters um.",
+	"vcmi.systemOptions.hapticFeedbackButton.hover"  : "Haptisches Feedback",
+	"vcmi.systemOptions.hapticFeedbackButton.help"   : "{Haptisches Feedback}\n\nHaptisches Feedback bei Touch-Eingaben.",
 
 	"vcmi.adventureOptions.infoBarPick.hover" : "Meldungen im Infobereich anzeigen",
 	"vcmi.adventureOptions.infoBarPick.help" : "{Meldungen im Infobereich anzeigen}\n\nWann immer möglich, werden Spielnachrichten von besuchten Kartenobjekten in der Infoleiste angezeigt, anstatt als Popup-Fenster zu erscheinen",

+ 6 - 3
client/eventsSDL/InputSourceTouch.cpp

@@ -39,6 +39,7 @@ InputSourceTouch::InputSourceTouch()
 	params.useRelativeMode = settings["general"]["userRelativePointer"].Bool();
 	params.relativeModeSpeedFactor = settings["general"]["relativePointerSpeedMultiplier"].Float();
 	params.longTouchTimeMilliseconds = settings["general"]["longTouchTimeMilliseconds"].Float();
+	params.hapticFeedback = settings["general"]["hapticFeedback"].Bool();
 
 	if (params.useRelativeMode)
 		state = TouchState::RELATIVE_MODE;
@@ -298,11 +299,13 @@ void InputSourceTouch::emitPinchEvent(const SDL_TouchFingerEvent & tfinger)
 }
 
 void InputSourceTouch::hapticFeedback() {
+	if(hapticFeedback)
 #if defined(VCMI_ANDROID)
-    CAndroidVMHelper vmHelper;
-    vmHelper.callStaticVoidMethod(CAndroidVMHelper::NATIVE_METHODS_DEFAULT_CLASS, "hapticFeedback");
+		CAndroidVMHelper vmHelper;
+		vmHelper.callStaticVoidMethod(CAndroidVMHelper::NATIVE_METHODS_DEFAULT_CLASS, "hapticFeedback");
 #endif
 #if defined(VCMI_IOS)
-    iOS_utils::hapticFeedback();
+    	iOS_utils::hapticFeedback();
 #endif
+	}
 }

+ 2 - 0
client/eventsSDL/InputSourceTouch.h

@@ -79,6 +79,8 @@ struct TouchInputParameters
 	uint32_t pinchSensitivityThreshold = 10;
 
 	bool useRelativeMode = false;
+
+	bool hapticFeedback = false;
 };
 
 /// Class that handles touchscreen input from SDL events

+ 7 - 0
client/windows/settings/GeneralOptionsTab.cpp

@@ -153,6 +153,10 @@ GeneralOptionsTab::GeneralOptionsTab()
 	{
 		setBoolSetting("video", "showfps", value);
 	});
+	addCallback("hapticFeedbackChanged", [](bool value)
+	{
+		setBoolSetting("general", "hapticFeedback", value);
+	});
 
 	//moved from "other" tab that is disabled for now to avoid excessible tabs with barely any content
 	addCallback("availableCreaturesAsDwellingChanged", [=](int value)
@@ -190,6 +194,9 @@ GeneralOptionsTab::GeneralOptionsTab()
 	std::shared_ptr<CToggleButton> framerateCheckbox = widget<CToggleButton>("framerateCheckbox");
 	framerateCheckbox->setSelected(settings["video"]["showfps"].Bool());
 
+	std::shared_ptr<CToggleButton> hapticFeedbackCheckbox = widget<CToggleButton>("hapticFeedbackCheckbox");
+	hapticFeedbackCheckbox->setSelected(settings["general"]["hapticFeedback"].Bool());
+
 	std::shared_ptr<CSlider> musicSlider = widget<CSlider>("musicSlider");
 	musicSlider->scrollTo(CCS->musich->getVolume());
 

+ 6 - 1
config/schemas/settings.json

@@ -33,7 +33,8 @@
 				"extraDump",
 				"userRelativePointer",
 				"relativePointerSpeedMultiplier",
-				"longTouchTimeMilliseconds"
+				"longTouchTimeMilliseconds",
+				"hapticFeedback"
 			],
 			"properties" : {
 				"playerName" : {
@@ -101,6 +102,10 @@
 				"longTouchTimeMilliseconds" : {
 					"type" : "number",
 					"default" : 1000
+				},
+				"hapticFeedback" : {
+					"type" : "boolean",
+					"default" : false
 				}
 			}
 		},

+ 11 - 1
config/widgets/settings/generalOptionsTab.json

@@ -57,6 +57,10 @@
 					"name": "longTouchLabel",
 					"text": "vcmi.systemOptions.longTouchButton.hover",
 					"created" : "touchscreen"
+				},
+				{
+					"text": "vcmi.systemOptions.hapticFeedbackButton.hover",
+					"created" : "touchscreen"
 				}
 			]
 		},
@@ -76,7 +80,7 @@
 					"name": "scalingButton",
 					"type": "buttonGear",
 					"help": "vcmi.systemOptions.scalingButton",
-					"callback": "setGameScaling",
+					"callback": "setGameScaling"
 				},
 				{
 					"name": "fullscreenBorderlessCheckbox",
@@ -106,6 +110,12 @@
 					"help": "vcmi.systemOptions.longTouchButton",
 					"callback": "setLongTouchDuration",
 					"created" : "touchscreen"
+				},
+				{
+					"name": "hapticFeedbackCheckbox",
+					"help": "vcmi.systemOptions.hapticFeedbackButton",
+					"callback": "hapticFeedbackChanged",
+					"created" : "touchscreen"
 				}
 			]
 		},