[Scummvm-git-logs] scummvm master -> 783dfa8bdff5745a5929b3ec85ce91f679aed61c

bluegr noreply at scummvm.org
Sat Aug 17 15:53:58 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:
783dfa8bdf TUCKER: Add keymapper support


Commit: 783dfa8bdff5745a5929b3ec85ce91f679aed61c
    https://github.com/scummvm/scummvm/commit/783dfa8bdff5745a5929b3ec85ce91f679aed61c
Author: NabeelShabbir (i210443 at nu.edu.pk)
Date: 2024-08-17T18:53:54+03:00

Commit Message:
TUCKER: Add keymapper support

Changed paths:
    engines/tucker/metaengine.cpp
    engines/tucker/tucker.cpp
    engines/tucker/tucker.h


diff --git a/engines/tucker/metaengine.cpp b/engines/tucker/metaengine.cpp
index e0cbfe5ccea..c14d978a5cc 100644
--- a/engines/tucker/metaengine.cpp
+++ b/engines/tucker/metaengine.cpp
@@ -22,6 +22,12 @@
 #include "common/savefile.h"
 #include "common/system.h"
 #include "common/fs.h"
+#include "common/translation.h"
+
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
 #include "engines/advancedDetector.h"
 #include "base/plugins.h"
 #include "graphics/thumbnail.h"
@@ -150,8 +156,82 @@ public:
 			target = getName();
 		return Tucker::generateGameStateFileName(target, saveGameIdx, saveGameIdx == kSavegameFilePattern);
 	}
+	
+	Common::KeymapArray initKeymaps(const char *target) const override;
 };
 
+Common::KeymapArray TuckerMetaEngine::initKeymaps(const char *target) const {
+	using namespace Common;
+	using namespace Tucker;
+
+	Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "tucker-default", _("Default keymappings"));
+	Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+
+	Common::Action *act;
+
+	act = new Common::Action(kStandardActionLeftClick, _("Left click"));
+	act->setLeftClickEvent();
+	act->addDefaultInputMapping("MOUSE_LEFT");
+	act->addDefaultInputMapping("JOY_A");
+	engineKeyMap->addAction(act);
+
+	act = new Common::Action(kStandardActionRightClick, _("Right click"));
+	act->setRightClickEvent();
+	act->addDefaultInputMapping("MOUSE_RIGHT");
+	act->addDefaultInputMapping("JOY_B");
+	engineKeyMap->addAction(act);
+
+	act = new Common::Action("PAUSE", _("Pause"));
+	act->setCustomEngineActionEvent(kActionPause);
+	act->addDefaultInputMapping("p");
+	act->addDefaultInputMapping("JOY_X");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("SKIP_SPEECH", _("Skip speech"));
+	act->setCustomEngineActionEvent(kActionSkipSpeech);
+	act->addDefaultInputMapping("PERIOD");
+	act->addDefaultInputMapping("JOY_LEFT_TRIGGER");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("FAST_MODE", _("Fast mode"));
+	act->setCustomEngineActionEvent(kActionFastMode);
+	act->addDefaultInputMapping("C+f");
+	act->addDefaultInputMapping("JOY_RIGHT_TRIGGER");
+	gameKeyMap->addAction(act);
+
+	// I18N: Panel contains all actor actions and the artstyle is toggled
+	act = new Common::Action("TOGGLE_PANEL_STYLE", _("Toggle panel style"));
+	act->setCustomEngineActionEvent(kActionTogglePanelStyle);
+	act->addDefaultInputMapping("F1");
+	act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("TOGGLE_TEXT_SPEECH", _("Toggle text speech"));
+	act->setCustomEngineActionEvent(kActionToggleTextSpeech);
+	act->addDefaultInputMapping("F2");
+	act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("HELP", _("Help"));
+	act->setCustomEngineActionEvent(kActionHelp);
+	act->addDefaultInputMapping("F3");
+	act->addDefaultInputMapping("JOY_Y");
+	gameKeyMap->addAction(act);
+
+	act = new Common::Action("ESCAPE", _("Escape"));
+	act->setCustomEngineActionEvent(kActionEscape);
+	act->addDefaultInputMapping("ESCAPE");
+	act->addDefaultInputMapping("JOY_BACK");
+	gameKeyMap->addAction(act);
+
+	KeymapArray keymaps(2);
+	keymaps[0] = engineKeyMap;
+	keymaps[1] = gameKeyMap;
+
+	return keymaps;
+}
+
+
 #if PLUGIN_ENABLED_DYNAMIC(TUCKER)
 	REGISTER_PLUGIN_DYNAMIC(TUCKER, PLUGIN_TYPE_ENGINE, TuckerMetaEngine);
 #else
diff --git a/engines/tucker/tucker.cpp b/engines/tucker/tucker.cpp
index 152effc5032..e13228c9613 100644
--- a/engines/tucker/tucker.cpp
+++ b/engines/tucker/tucker.cpp
@@ -29,6 +29,8 @@
 #include "common/savefile.h"
 #include "common/textconsole.h"
 
+#include "backends/keymapper/keymapper.h"
+
 #include "engines/util.h"
 
 #include "graphics/cursorman.h"
@@ -641,40 +643,34 @@ void TuckerEngine::parseEvents() {
 	Common::Event ev;
 	while (_eventMan->pollEvent(ev)) {
 		switch (ev.type) {
-		case Common::EVENT_KEYDOWN:
-			switch (ev.kbd.ascii) {
-			// do not use KEYCODE_PERIOD here so that it works with most keyboard layouts
-			case '.':
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+			switch (ev.customType) {
+			case kActionEscape:
+				_inputKeys[kInputKeyEscape] = true;
+				// fall through
+			case kActionSkipSpeech:
 				_inputKeys[kInputKeySkipSpeech] = true;
 				break;
-			default:
-				break;
-			}
-			switch (ev.kbd.keycode) {
-			case Common::KEYCODE_f:
-				if (ev.kbd.hasFlags(Common::KBD_CTRL)) {
-					_fastMode = !_fastMode;
-				}
+			case kActionFastMode:
+				_fastMode = !_fastMode;
 				break;
-			case Common::KEYCODE_p:
+			case kActionPause:
 				_inputKeys[kInputKeyPause] = true;
 				break;
-			case Common::KEYCODE_F1:
+			case kActionTogglePanelStyle:
 				_inputKeys[kInputKeyTogglePanelStyle] = true;
 				break;
-			case Common::KEYCODE_F2:
+			case kActionToggleTextSpeech:
 				_inputKeys[kInputKeyToggleTextSpeech] = true;
 				break;
-			case Common::KEYCODE_F3:
+			case kActionHelp:
 				_inputKeys[kInputKeyHelp] = true;
 				break;
-			case Common::KEYCODE_ESCAPE:
-				_inputKeys[kInputKeyEscape] = true;
-				_inputKeys[kInputKeySkipSpeech] = true;
-				break;
 			default:
 				break;
 			}
+			break;
+		case Common::EVENT_KEYDOWN:
 			_lastKeyPressed = ev.kbd.keycode;
 			break;
 		case Common::EVENT_MOUSEMOVE:
@@ -1638,6 +1634,13 @@ void TuckerEngine::drawData3() {
 }
 
 void TuckerEngine::execData3PreUpdate() {
+	Common::Keymapper *keymapper = _eventMan->getKeymapper();
+	if (_location == kLocationComputerScreen) {
+		keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+	} else {
+		keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+	}
+
 	switch (_location) {
 	case 1:
 		execData3PreUpdate_locationNum1();
diff --git a/engines/tucker/tucker.h b/engines/tucker/tucker.h
index 379d6cc2a94..0594577afd6 100644
--- a/engines/tucker/tucker.h
+++ b/engines/tucker/tucker.h
@@ -53,6 +53,17 @@ class RewindableAudioStream;
  */
 namespace Tucker {
 
+enum TUCKERAction {
+	kActionNone,
+	kActionSkipSpeech,
+	kActionFastMode,
+	kActionPause,
+	kActionTogglePanelStyle,
+	kActionToggleTextSpeech,
+	kActionHelp,
+	kActionEscape
+};
+
 enum CursorStyle {
 	kCursorNormal     = 0,
 	kCursorTalk       = 1,




More information about the Scummvm-git-logs mailing list