[Scummvm-git-logs] scummvm master -> 05d40f9b37e7b748105592460f66eb7765ad46bc

sev- noreply at scummvm.org
Tue Apr 1 19:57:08 UTC 2025


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:
05d40f9b37 TOLTECS: Add keymapper support


Commit: 05d40f9b37e7b748105592460f66eb7765ad46bc
    https://github.com/scummvm/scummvm/commit/05d40f9b37e7b748105592460f66eb7765ad46bc
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-04-01T21:57:04+02:00

Commit Message:
TOLTECS: Add keymapper support

Changed paths:
    engines/toltecs/menu.cpp
    engines/toltecs/metaengine.cpp
    engines/toltecs/movie.cpp
    engines/toltecs/script.cpp
    engines/toltecs/toltecs.cpp
    engines/toltecs/toltecs.h


diff --git a/engines/toltecs/menu.cpp b/engines/toltecs/menu.cpp
index 96f120f5eb7..a44f556ee61 100644
--- a/engines/toltecs/menu.cpp
+++ b/engines/toltecs/menu.cpp
@@ -33,6 +33,8 @@
 #include "toltecs/render.h"
 #include "toltecs/resource.h"
 
+#include "backends/keymapper/keymapper.h"
+
 namespace Toltecs {
 
 MenuSystem::MenuSystem(ToltecsEngine *vm) : _vm(vm) {
@@ -206,6 +208,10 @@ void MenuSystem::handleKeyDown(const Common::KeyState& kbd) {
 			_running = false;
 		} else if (kbd.keycode == Common::KEYCODE_ESCAPE) {
 			_editingDescription = false;
+			//// Now we turn on the keymapper
+			Common::Keymapper *keymapper = _vm->getEventManager()->getKeymapper();
+			g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
+			keymapper->getKeymap("toltecs-default")->setEnabled(true);
 		}
 	}
 }
@@ -598,6 +604,11 @@ void MenuSystem::clickSavegameItem(ItemID id) {
 		_vm->requestLoadgame(savegameItem->_slotNum);
 		_running = false;
 	} else {
+		Common::Keymapper *keymapper = _vm->getEventManager()->getKeymapper();
+		// Now we turn off the keymapper so it does not interfere with full text input
+		keymapper->getKeymap("toltecs-default")->setEnabled(false);
+		g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
+
 		_editingDescription = true;
 		_editingDescriptionItem = getItem(id);
 		_editingDescriptionID = id;
diff --git a/engines/toltecs/metaengine.cpp b/engines/toltecs/metaengine.cpp
index 15546a1fb1b..5d928e68c70 100644
--- a/engines/toltecs/metaengine.cpp
+++ b/engines/toltecs/metaengine.cpp
@@ -31,6 +31,10 @@
 #include "toltecs/toltecs.h"
 #include "toltecs/detection.h"
 
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
 namespace Toltecs {
 
 static const ADExtraGuiOptionsMap optionsList[] = {
@@ -75,6 +79,8 @@ public:
 	int getMaximumSaveSlot() const override;
 	bool removeSaveState(const char *target, int slot) const override;
 	SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
+
+	Common::KeymapArray initKeymaps(const char *target) const override;
 };
 
 bool ToltecsMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -199,6 +205,67 @@ SaveStateDescriptor ToltecsMetaEngine::querySaveMetaInfos(const char *target, in
 	return SaveStateDescriptor();
 }
 
+Common::KeymapArray ToltecsMetaEngine::initKeymaps(const char *target) const {
+	using namespace Common;
+	using namespace Toltecs;
+
+	Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "toltecs-default", _("Default keymappings"));
+	
+	Action *act;
+
+	act = new Action(kStandardActionLeftClick, _("Move / Select"));
+	act->setLeftClickEvent();
+	act->addDefaultInputMapping("MOUSE_LEFT");
+	act->addDefaultInputMapping("JOY_A");
+	engineKeyMap->addAction(act);
+
+	act = new Action(kStandardActionRightClick, _("Move / Perform Default Action"));
+	act->setRightClickEvent();
+	act->addDefaultInputMapping("MOUSE_RIGHT");
+	act->addDefaultInputMapping("JOY_B");
+	engineKeyMap->addAction(act);
+
+	act = new Action("SKIPDLG", _("Skip dialogue"));
+	act->setCustomEngineActionEvent(kActionSkipDialog);
+	act->addDefaultInputMapping("SPACE");
+	act->addDefaultInputMapping("JOY_X");
+	engineKeyMap->addAction(act);
+
+	act = new Action("OPENSAVEMENU", _("Save game"));
+	act->setCustomEngineActionEvent(kActionOpenSaveMenu);
+	act->addDefaultInputMapping("F5");
+	act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+	engineKeyMap->addAction(act);
+
+	act = new Action("OPENLOADMENU", _("Load game"));
+	act->setCustomEngineActionEvent(kActionOpenLoadMenu);
+	act->addDefaultInputMapping("F7");
+	act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+	engineKeyMap->addAction(act);
+
+	act = new Action("SKIPMOVIE", _("Skip cutscene"));
+	act->setCustomEngineActionEvent(kActionSkipMovie);
+	act->addDefaultInputMapping("ESCAPE");
+	act->addDefaultInputMapping("JOY_Y");
+	engineKeyMap->addAction(act);
+
+	act = new Action("MENUOPEN", _("Menu"));
+	act->setCustomEngineActionEvent(kActionMenuOpen);
+	act->addDefaultInputMapping("F10");
+	act->addDefaultInputMapping("JOY_START");
+	engineKeyMap->addAction(act);
+
+	act = new Action("SKIPRIDE", _("Skip ride"));
+	act->setCustomEngineActionEvent(kActionSkipRide);
+	act->addDefaultInputMapping("ESCAPE");
+	act->addDefaultInputMapping("JOY_Y");
+	engineKeyMap->addAction(act);
+
+
+	return Keymap::arrayOf(engineKeyMap);
+	
+}
+
 #if PLUGIN_ENABLED_DYNAMIC(TOLTECS)
 	REGISTER_PLUGIN_DYNAMIC(TOLTECS, PLUGIN_TYPE_ENGINE, ToltecsMetaEngine);
 #else
diff --git a/engines/toltecs/movie.cpp b/engines/toltecs/movie.cpp
index 2763b95d178..d54d9ed48fd 100644
--- a/engines/toltecs/movie.cpp
+++ b/engines/toltecs/movie.cpp
@@ -271,12 +271,16 @@ bool MoviePlayer::handleInput() {
 	Common::EventManager *eventMan = g_system->getEventManager();
 	while (eventMan->pollEvent(event)) {
 		switch (event.type) {
-		case Common::EVENT_KEYDOWN:
-			if (event.kbd.keycode == Common::KEYCODE_ESCAPE)
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+			switch (event.customType) {
+			case kActionSkipMovie:
 				return false;
-			if (event.kbd.keycode == Common::KEYCODE_F10) {
+			case kActionMenuOpen:
 				// TODO: The original would bring up a stripped down
 				// main menu dialog, without the save/restore options.
+				break;
+			default:
+				break;
 			}
 			break;
 		case Common::EVENT_LBUTTONDOWN:
diff --git a/engines/toltecs/script.cpp b/engines/toltecs/script.cpp
index 4ed74423ef9..54db1fa0049 100644
--- a/engines/toltecs/script.cpp
+++ b/engines/toltecs/script.cpp
@@ -1018,11 +1018,11 @@ void ScriptInterpreter::sfHandleInput() {
 	} else {
 		// Convert keyboard scancode to IBM PC scancode.
 		// Only scancodes known to be used (so far) are converted.
-		switch (_vm->_keyState.keycode) {
-		case Common::KEYCODE_ESCAPE:
+		switch (_vm->_action) {
+		case kActionSkipRide:
 			keyCode = 1;
 			break;
-		case Common::KEYCODE_F10:
+		case kActionMenuOpen:
 			keyCode = 68;
 			break;
 		default:
diff --git a/engines/toltecs/toltecs.cpp b/engines/toltecs/toltecs.cpp
index e25d8775bbf..b771129ac24 100644
--- a/engines/toltecs/toltecs.cpp
+++ b/engines/toltecs/toltecs.cpp
@@ -362,24 +362,23 @@ void ToltecsEngine::updateInput() {
 	Common::EventManager *eventMan = _system->getEventManager();
 	while (eventMan->pollEvent(event)) {
 		switch (event.type) {
-		case Common::EVENT_KEYDOWN:
-			_keyState = event.kbd;
-
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+			_action = event.customType;
 			//debug("key: flags = %02X; keycode = %d", _keyState.flags, _keyState.keycode);
 
-			switch (event.kbd.keycode) {
-			case Common::KEYCODE_F5:
+			switch (event.customType) {
+			case kActionOpenSaveMenu:
 				showMenu(kMenuIdSave);
 				break;
-			case Common::KEYCODE_F7:
+			case kActionOpenLoadMenu:
 				showMenu(kMenuIdLoad);
 				break;
-			case Common::KEYCODE_SPACE:
+			case kActionSkipDialog:
 				// Skip current dialog line, if a dialog is active
 				if (_screen->getTalkTextDuration() > 0) {
 					_sound->stopSpeech();
 					_screen->finishTalkTextItems();
-					_keyState.reset();	// event consumed
+					_action = kActionNone;	// event consumed
 				}
 				break;
 			default:
@@ -387,8 +386,8 @@ void ToltecsEngine::updateInput() {
 			}
 
 			break;
-		case Common::EVENT_KEYUP:
-			_keyState.reset();
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+			_action = kActionNone;
 			break;
 		case Common::EVENT_MOUSEMOVE:
 			_mouseX = event.mouse.x;
@@ -682,7 +681,7 @@ void ToltecsEngine::showMenu(MenuID menuId) {
 	_screen->finishTalkTextItems();
 	CursorMan.showMouse(true);
 	_menuSystem->run(menuId);
-	_keyState.reset();
+	_action = kActionNone;
 	_script->setSwitchLocalDataNear(true);
 }
 
diff --git a/engines/toltecs/toltecs.h b/engines/toltecs/toltecs.h
index 616aec80fe3..4c955c2f73e 100644
--- a/engines/toltecs/toltecs.h
+++ b/engines/toltecs/toltecs.h
@@ -83,6 +83,16 @@ enum SysString {
 	kSysStrCount
 };
 
+enum TOLTECSAction {
+	kActionNone,
+	kActionSkipDialog,
+	kActionOpenSaveMenu,
+	kActionOpenLoadMenu,
+	kActionSkipMovie,
+	kActionMenuOpen,
+	kActionSkipRide,
+};
+
 enum MenuID {
 	kMenuIdNone,
 	kMenuIdMain,
@@ -92,7 +102,7 @@ enum MenuID {
 };
 
 class ToltecsEngine : public ::Engine {
-	Common::KeyState _keyPressed;
+	
 
 protected:
 	Common::Error run() override;
@@ -179,7 +189,7 @@ public:
 
 	int16 _walkSpeedY, _walkSpeedX;
 
-	Common::KeyState _keyState;
+	Common::CustomEventType _action;
 	int16 _mouseX, _mouseY;
 	int16 _mouseDblClickTicks;
 	bool _mouseWaitForRelease;




More information about the Scummvm-git-logs mailing list