[Scummvm-git-logs] scummvm master -> 8ed565b43c2c9cd37b37a338f973ad37eafff175

bluegr noreply at scummvm.org
Wed Aug 28 14:39:09 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:
8ed565b43c TOON: Add keymapper support


Commit: 8ed565b43c2c9cd37b37a338f973ad37eafff175
    https://github.com/scummvm/scummvm/commit/8ed565b43c2c9cd37b37a338f973ad37eafff175
Author: NabeelShabbir (i210443 at nu.edu.pk)
Date: 2024-08-28T17:39:05+03:00

Commit Message:
TOON: Add keymapper support

Changed paths:
    engines/toon/metaengine.cpp
    engines/toon/movie.cpp
    engines/toon/toon.cpp
    engines/toon/toon.h


diff --git a/engines/toon/metaengine.cpp b/engines/toon/metaengine.cpp
index 3e07ef6bae4..853776312c1 100644
--- a/engines/toon/metaengine.cpp
+++ b/engines/toon/metaengine.cpp
@@ -30,6 +30,12 @@
 #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"
 #include "graphics/thumbnail.h"
 #include "toon/toon.h"
@@ -47,6 +53,8 @@ public:
 	SaveStateList listSaves(const char *target) const override;
 	SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
 	void removeSaveState(const char *target, int slot) const override;
+
+	Common::KeymapArray initKeymaps(const char *target) const override;
 };
 
 bool ToonMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -66,6 +74,90 @@ void ToonMetaEngine::removeSaveState(const char *target, int slot) const {
 	g_system->getSavefileManager()->removeSavefile(fileName);
 }
 
+Common::KeymapArray ToonMetaEngine::initKeymaps(const char *target) const {
+	using namespace Common;
+	using namespace Toon;
+
+	Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "toon-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("ESCAPE", _("Skip intro"));
+	act->setCustomEngineActionEvent(kActionEscape);
+	act->addDefaultInputMapping("ESCAPE");
+	act->addDefaultInputMapping("JOY_BACK");
+	gameKeyMap->addAction(act);
+
+	// I18N: Skips current line being spoken by a character
+	act = new Action("STOPCURRENTVOICE", _("Stop current voice"));
+	act->setCustomEngineActionEvent(kActionStopCurrentVoice);
+	act->addDefaultInputMapping("ESCAPE");
+	act->addDefaultInputMapping("SPACE");
+	act->addDefaultInputMapping("JOY_X");
+	gameKeyMap->addAction(act);
+
+	act = new Action("SAVEGAME", _("Save game"));
+	act->setCustomEngineActionEvent(kActionSaveGame);
+	act->addDefaultInputMapping("F5");
+	act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+	gameKeyMap->addAction(act);
+
+	act = new Action("LOADGAME", _("Load game"));
+	act->setCustomEngineActionEvent(kActionLoadGame);
+	act->addDefaultInputMapping("F6");
+	act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+	gameKeyMap->addAction(act);
+
+	act = new Action("SUBTITLES", _("Toggle subtitles"));
+	act->setCustomEngineActionEvent(kActionSubtitles);
+	act->addDefaultInputMapping("t");
+	act->addDefaultInputMapping("JOY_UP");
+	gameKeyMap->addAction(act);
+
+	act = new Action("MUTEMUSIC", _("Mute music"));
+	act->setCustomEngineActionEvent(kActionMuteMusic);
+	act->addDefaultInputMapping("m");
+	act->addDefaultInputMapping("JOY_DOWN");
+	gameKeyMap->addAction(act);
+
+	act = new Action("SPEECHMUTE", _("Mute speech"));
+	act->setCustomEngineActionEvent(kActionSpeechMute);
+	act->addDefaultInputMapping("d");
+	act->addDefaultInputMapping("JOY_LEFT");
+	gameKeyMap->addAction(act);
+
+	act = new Action("SFXMUTE", _("Mute sound effects"));
+	act->setCustomEngineActionEvent(kActionSFXMute);
+	act->addDefaultInputMapping("s");
+	act->addDefaultInputMapping("JOY_RIGHT");
+	gameKeyMap->addAction(act);
+
+	act = new Action("SHOWOPTIONS", _("Show options"));
+	act->setCustomEngineActionEvent(kActionShowOptions);
+	act->addDefaultInputMapping("F1");
+	act->addDefaultInputMapping("JOY_Y");
+	gameKeyMap->addAction(act);
+
+	KeymapArray keymaps(2);
+	keymaps[0] = engineKeyMap;
+	keymaps[1] = gameKeyMap;
+
+	return keymaps;
+}
+
 int ToonMetaEngine::getMaximumSaveSlot() const { return MAX_SAVE_SLOT; }
 
 SaveStateList ToonMetaEngine::listSaves(const char *target) const {
diff --git a/engines/toon/movie.cpp b/engines/toon/movie.cpp
index 49d043db2e2..e05e086d3bd 100644
--- a/engines/toon/movie.cpp
+++ b/engines/toon/movie.cpp
@@ -174,7 +174,7 @@ void Movie::playVideo(bool isFirstIntroVideo) {
 
 		Common::Event event;
 		while (_vm->_system->getEventManager()->pollEvent(event))
-			if ((event.type == Common::EVENT_KEYDOWN && event.kbd.keycode == Common::KEYCODE_ESCAPE)) {
+			if ((event.type == Common::EVENT_CUSTOM_ENGINE_ACTION_START && event.customType == kActionEscape)) {
 				_vm->dirtyAllScreen();
 				return;
 			}
diff --git a/engines/toon/toon.cpp b/engines/toon/toon.cpp
index 3b9c93312ff..064e43fe88f 100644
--- a/engines/toon/toon.cpp
+++ b/engines/toon/toon.cpp
@@ -221,45 +221,49 @@ void ToonEngine::parseInput() {
 			breakPollEventloop = true;
 			break;
 
-		case Common::EVENT_KEYDOWN:
-			if ((event.kbd.keycode == Common::KEYCODE_ESCAPE || event.kbd.keycode == Common::KEYCODE_SPACE) && !hasModifier) {
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+			switch (event.customType) {
+			case kActionStopCurrentVoice:
 				_audioManager->stopCurrentVoice();
-			}
-			if (event.kbd.keycode == Common::KEYCODE_F5 && !hasModifier) {
+				break;
+			case kActionSaveGame:
 				if (_gameState->_inMenu) {
 					playSoundWrong();
 				} else if (canSaveGameStateCurrently())
 					saveGame(-1, "");
-			}
-			if (event.kbd.keycode == Common::KEYCODE_F6 && !hasModifier) {
+				break;
+			case kActionLoadGame:
 				if (_gameState->_inMenu) {
 					playSoundWrong();
 				} else if (canLoadGameStateCurrently())
 					loadGame(-1);
-			}
-			if (event.kbd.keycode == Common::KEYCODE_t && !hasModifier) {
+				break;
+			case kActionSubtitles:
 				ConfMan.setBool("subtitles", !ConfMan.getBool("subtitles"));
 				syncSoundSettings();
-			}
-			if (event.kbd.keycode == Common::KEYCODE_m && !hasModifier) {
+				break;
+			case kActionMuteMusic:
 				ConfMan.setBool("music_mute", !ConfMan.getBool("music_mute"));
 				syncSoundSettings();
-			}
-			if (event.kbd.keycode == Common::KEYCODE_d && !hasModifier) {
+				break;
+			case kActionSpeechMute:
 				ConfMan.setBool("speech_mute", !ConfMan.getBool("speech_mute"));
 				syncSoundSettings();
-			}
-			if (event.kbd.keycode == Common::KEYCODE_s && !hasModifier) {
+				break;
+			case kActionSFXMute:
 				ConfMan.setBool("sfx_mute", !ConfMan.getBool("sfx_mute"));
 				syncSoundSettings();
-			}
-			if (event.kbd.keycode == Common::KEYCODE_F1 && !hasModifier) {
+				break;
+			case kActionShowOptions:
 				if (_gameState->_inMenu) {
 					playSoundWrong();
 				} else
 					showOptions();
+				break;
+			default:
+				break;
 			}
-
+		case Common::EVENT_KEYDOWN:
 			if (event.kbd.flags & Common::KBD_ALT) {
 				int slotNum = event.kbd.keycode - (event.kbd.keycode >= Common::KEYCODE_KP0 ? Common::KEYCODE_KP0 : Common::KEYCODE_0);
 				if (slotNum >= 0 && slotNum <= 9 && canSaveGameStateCurrently()) {
diff --git a/engines/toon/toon.h b/engines/toon/toon.h
index c438d4baff7..1f26df8f437 100644
--- a/engines/toon/toon.h
+++ b/engines/toon/toon.h
@@ -72,6 +72,19 @@ struct ADGameDescription;
  */
 namespace Toon {
 
+enum TOONAction {
+	kActionNone,
+	kActionEscape,
+	kActionStopCurrentVoice,
+	kActionSaveGame,
+	kActionLoadGame,
+	kActionSubtitles,
+	kActionMuteMusic,
+	kActionSpeechMute,
+	kActionSFXMute,
+	kActionShowOptions
+};
+
 enum ToonGameType {
 	GType_TOON = 1
 };




More information about the Scummvm-git-logs mailing list