[Scummvm-git-logs] scummvm master -> bdf57257ddf0aedf6e7088e60f5c384e57eabb72

bluegr noreply at scummvm.org
Fri Jul 26 22:35:25 UTC 2024


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
bdf57257dd TOUCHE: Add keymapper support


Commit: bdf57257ddf0aedf6e7088e60f5c384e57eabb72
    https://github.com/scummvm/scummvm/commit/bdf57257ddf0aedf6e7088e60f5c384e57eabb72
Author: NabeelShabbir (i210443 at nu.edu.pk)
Date: 2024-07-27T01:35:21+03:00

Commit Message:
TOUCHE: Add keymapper support

Changed paths:
    engines/touche/menu.cpp
    engines/touche/metaengine.cpp
    engines/touche/touche.cpp
    engines/touche/touche.h


diff --git a/engines/touche/menu.cpp b/engines/touche/menu.cpp
index ea0afe4f860..6811045b707 100644
--- a/engines/touche/menu.cpp
+++ b/engines/touche/menu.cpp
@@ -24,6 +24,8 @@
 #include "common/system.h"
 #include "common/savefile.h"
 
+#include "backends/keymapper/keymapper.h"
+
 #include "touche/graphics.h"
 #include "touche/midi.h"
 #include "touche/touche.h"
@@ -303,6 +305,10 @@ void ToucheEngine::handleOptions(int forceDisplay) {
 				updateScreenArea(90, 102, 460, 196);
 				doRedraw = false;
 			}
+
+			Common::Keymapper *keymapper = _eventMan->getKeymapper();
+			keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+
 			Common::Event event;
 			while (_eventMan->pollEvent(event)) {
 				const Button *button = 0;
@@ -341,6 +347,9 @@ void ToucheEngine::handleOptions(int forceDisplay) {
 					break;
 				}
 			}
+
+			keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+
 			_system->updateScreen();
 			_system->delayMillis(10);
 		}
@@ -476,38 +485,15 @@ int ToucheEngine::displayQuitDialog() {
 				quitLoop = true;
 				ret = 1;
 				break;
-			case Common::EVENT_KEYDOWN:
+			case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
 				quitLoop = true;
-				switch (_language) {
-				case Common::FR_FRA:
-					if (event.kbd.keycode == Common::KEYCODE_o) {
-						ret = 1;
-					}
-					break;
-				case Common::DE_DEU:
-					if (event.kbd.keycode == Common::KEYCODE_j) {
-						ret = 1;
-					}
-					break;
-				case Common::ES_ESP:
-					if (event.kbd.keycode == Common::KEYCODE_s) {
-						ret = 1;
-					}
-					break;
-				case Common::PL_POL:
-					if (event.kbd.keycode == Common::KEYCODE_s || event.kbd.keycode == Common::KEYCODE_t) {
-						ret = 1;
-					}
-					break;
-				default:
-					// According to cyx, the Italian version uses the same
-					// keys as the English one.
-					if (event.kbd.keycode == Common::KEYCODE_y) {
-						ret = 1;
-					}
-					break;
+				if (event.customType == kToucheActionYes) {
+					ret = 1;
 				}
 				break;
+			case Common::EVENT_JOYBUTTON_DOWN:
+			case Common::EVENT_KEYDOWN:
+				quitLoop = true;
 			default:
 				break;
 			}
diff --git a/engines/touche/metaengine.cpp b/engines/touche/metaengine.cpp
index 7158ada6329..c16bf0efe1a 100644
--- a/engines/touche/metaengine.cpp
+++ b/engines/touche/metaengine.cpp
@@ -23,6 +23,11 @@
 #include "engines/advancedDetector.h"
 #include "common/savefile.h"
 #include "common/system.h"
+#include "common/translation.h"
+
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
 
 #include "base/plugins.h"
 
@@ -44,6 +49,8 @@ public:
 			target = getName();
 		return Touche::generateGameStateFileName(target, saveGameIdx, saveGameIdx == kSavegameFilePattern);
 	}
+
+	Common::KeymapArray initKeymaps(const char *target) const override;
 };
 
 bool ToucheMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -104,6 +111,105 @@ void ToucheMetaEngine::removeSaveState(const char *target, int slot) const {
 	g_system->getSavefileManager()->removeSavefile(filename);
 }
 
+Common::KeymapArray ToucheMetaEngine::initKeymaps(const char *target) const {
+	using namespace Common;
+	using namespace Touche;
+
+	Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "touche-default", "Default keymappings");
+	Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+	Action *act;
+
+	act = new Action(kStandardActionLeftClick, _("Left click"));
+	act->setLeftClickEvent();
+	act->addDefaultInputMapping("MOUSE_LEFT");
+	act->addDefaultInputMapping("JOY_A");
+	engineKeyMap->addAction(act);
+
+	act = new Action(kStandardActionRightClick, _("Right click"));
+	act->setRightClickEvent();
+	act->addDefaultInputMapping("MOUSE_RIGHT");
+	act->addDefaultInputMapping("JOY_B");
+	engineKeyMap->addAction(act);
+
+	{
+		act = new Action("SKIPORQUIT", _("Skip sequence/open quit dialogue"));
+		act->setCustomEngineActionEvent(kToucheActionSkipOrQuit);
+		act->addDefaultInputMapping("ESCAPE");
+		act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+		gameKeyMap->addAction(act);
+
+		act = new Action("SKIPDILOG", _("Skip Dialogue"));
+		act->setCustomEngineActionEvent(kToucheActionSkipDialogue);
+		act->addDefaultInputMapping("SPACE");
+		act->addDefaultInputMapping("JOY_X");
+		gameKeyMap->addAction(act);
+
+		act = new Action("OPTIONS", _("Open options menu"));
+		act->setCustomEngineActionEvent(kToucheActionOpenOptions);
+		act->addDefaultInputMapping("F5");
+		act->addDefaultInputMapping("JOY_Y");
+		gameKeyMap->addAction(act);
+
+		// I18N: The actor walking pace is increased
+		act = new Action("ENABLEFASTWALK", _("Enable fast walk"));
+		act->setCustomEngineActionEvent(kToucheActionEnableFastWalk);
+		act->addDefaultInputMapping("F9");
+		act->addDefaultInputMapping("JOY_LEFT");
+		gameKeyMap->addAction(act);
+
+		// I18N: The actor walking pace is decreased
+		act = new Action("DISABLEFASTWALK", _("Disable fast walk"));
+		act->setCustomEngineActionEvent(kToucheActionDisableFastWalk);
+		act->addDefaultInputMapping("F10");
+		act->addDefaultInputMapping("JOY_LEFT_STICK");
+		gameKeyMap->addAction(act);
+
+		act = new Action("TGGLFASTMODE", _("Toggle fast mode"));
+		act->setCustomEngineActionEvent(kToucheActionToggleFastMode);
+		act->addDefaultInputMapping("C+f");
+		act->addDefaultInputMapping("JOY_RIGHT_STICK");
+		gameKeyMap->addAction(act);
+
+		act = new Action("TGGLTALKTEXT", _("Toggle between voice/text/text and voice"));
+		act->setCustomEngineActionEvent(kToucheActionToggleTalkTextMode);
+		act->addDefaultInputMapping("t");
+		act->addDefaultInputMapping("JOY_RIGHT");
+		gameKeyMap->addAction(act);
+
+		String s = ConfMan.get("language", target);
+		Language l = Common::parseLanguage(s);
+
+		act = new Action("YES", _("Press \"Yes\" Key"));
+		act->setCustomEngineActionEvent(kToucheActionYes);
+		act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+		switch (l) {
+		case FR_FRA:
+			act->addDefaultInputMapping("o");
+			break;
+		case DE_DEU:
+			act->addDefaultInputMapping("j");
+			break;
+		case ES_ESP:
+			act->addDefaultInputMapping("s");
+			break;
+		case PL_POL:
+			act->addDefaultInputMapping("s");
+			act->addDefaultInputMapping("t");
+			break;
+		default:
+			act->addDefaultInputMapping("y");
+			break;
+		}
+		gameKeyMap->addAction(act);
+	}
+
+	KeymapArray keymaps(2);
+	keymaps[0] = engineKeyMap;
+	keymaps[1] = gameKeyMap;
+
+	return keymaps;
+}
+
 #if PLUGIN_ENABLED_DYNAMIC(TOUCHE)
 	REGISTER_PLUGIN_DYNAMIC(TOUCHE, PLUGIN_TYPE_ENGINE, ToucheMetaEngine);
 #else
diff --git a/engines/touche/touche.cpp b/engines/touche/touche.cpp
index fd93d37e904..411a154a73f 100644
--- a/engines/touche/touche.cpp
+++ b/engines/touche/touche.cpp
@@ -400,42 +400,46 @@ void ToucheEngine::processEvents(bool handleKeyEvents) {
 	Common::Event event;
 	while (_eventMan->pollEvent(event)) {
 		switch (event.type) {
-		case Common::EVENT_KEYDOWN:
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
 			if (!handleKeyEvents) {
 				break;
 			}
-			_flagsTable[600] = event.kbd.keycode;
-			if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
+			if (event.customType == kToucheActionSkipOrQuit) {
+				_flagsTable[600] = Common::KEYCODE_ESCAPE;
 				if (_displayQuitDialog) {
 					if (displayQuitDialog()) {
 						quitGame();
 					}
 				}
-			} else if (event.kbd.keycode == Common::KEYCODE_F5) {
+			} else if (event.customType == kToucheActionOpenOptions) {
 				if (_flagsTable[618] == 0 && !_hideInventoryTexts) {
 					handleOptions(0);
 				}
-			} else if (event.kbd.keycode == Common::KEYCODE_F9) {
+			} else if (event.customType == kToucheActionEnableFastWalk) {
 				_fastWalkMode = true;
-			} else if (event.kbd.keycode == Common::KEYCODE_F10) {
+			} else if (event.customType == kToucheActionDisableFastWalk) {
 				_fastWalkMode = false;
 			}
-			if (event.kbd.hasFlags(Common::KBD_CTRL)) {
-				if (event.kbd.keycode == Common::KEYCODE_f) {
-					_fastMode = !_fastMode;
-				}
+			if (event.customType == kToucheActionToggleFastMode) {
+				_fastMode = !_fastMode;
 			} else {
-				if (event.kbd.keycode == Common::KEYCODE_t) {
+				if (event.customType == kToucheActionToggleTalkTextMode) {
 					++_talkTextMode;
 					if (_talkTextMode == kTalkModeCount) {
 						_talkTextMode = 0;
 					}
 					displayTextMode(-(92 + _talkTextMode));
-				} else if (event.kbd.keycode == Common::KEYCODE_SPACE) {
+				} else if (event.customType == kToucheActionSkipDialogue) {
 					updateKeyCharTalk(2);
 				}
 			}
 			break;
+		case Common::EVENT_KEYDOWN:
+			if (!handleKeyEvents) {
+				break;
+			}
+			_flagsTable[600] = event.kbd.keycode;
+			break;
 		case Common::EVENT_LBUTTONDOWN:
 			_inp_leftMouseButtonPressed = true;
 			break;
diff --git a/engines/touche/touche.h b/engines/touche/touche.h
index eeafc07770a..346deb30337 100644
--- a/engines/touche/touche.h
+++ b/engines/touche/touche.h
@@ -45,6 +45,18 @@
  */
 namespace Touche {
 
+enum TOUCHEAction {
+	kToucheActionNone,
+	kToucheActionYes,
+	kToucheActionSkipOrQuit,
+	kToucheActionOpenOptions,
+	kToucheActionEnableFastWalk,
+	kToucheActionDisableFastWalk,
+	kToucheActionToggleFastMode,
+	kToucheActionToggleTalkTextMode,
+	kToucheActionSkipDialogue
+};
+
 struct Area {
 	Common::Rect r;
 	int16 srcX, srcY;




More information about the Scummvm-git-logs mailing list