[Scummvm-git-logs] scummvm master -> 268cb2176407342d9056371c4cf1873ea40a98dc

bluegr noreply at scummvm.org
Tue Aug 27 19:55:10 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:
268cb21764 HOPKINS: Add keymapper support


Commit: 268cb2176407342d9056371c4cf1873ea40a98dc
    https://github.com/scummvm/scummvm/commit/268cb2176407342d9056371c4cf1873ea40a98dc
Author: NabeelShabbir (i210443 at nu.edu.pk)
Date: 2024-08-27T22:55:07+03:00

Commit Message:
HOPKINS: Add keymapper support

Changed paths:
    engines/hopkins/events.cpp
    engines/hopkins/hopkins.h
    engines/hopkins/metaengine.cpp


diff --git a/engines/hopkins/events.cpp b/engines/hopkins/events.cpp
index 1f606400810..ed978edb553 100644
--- a/engines/hopkins/events.cpp
+++ b/engines/hopkins/events.cpp
@@ -30,6 +30,8 @@
 #include "common/textconsole.h"
 #include "graphics/cursorman.h"
 
+#include "backends/keymapper/keymapper.h"
+
 namespace Hopkins {
 
 EventsManager::EventsManager(HopkinsEngine *vm) {
@@ -251,9 +253,11 @@ void EventsManager::pollEvents() {
 		case Common::EVENT_RETURN_TO_LAUNCHER:
 			return;
 
+		case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+			handleKey(event);
+			return;
 		case Common::EVENT_KEYDOWN:
 			_keyState[(byte)toupper(event.kbd.ascii)] = true;
-			handleKey(event);
 			return;
 		case Common::EVENT_KEYUP:
 			_keyState[(byte)toupper(event.kbd.ascii)] = false;
@@ -281,15 +285,15 @@ void EventsManager::pollEvents() {
 }
 
 void EventsManager::handleKey(const Common::Event &event) {
-	_escKeyFl = (event.kbd.keycode == Common::KEYCODE_ESCAPE);
+	_escKeyFl = (event.customType == kActionEscape);
 
-	if (event.kbd.keycode == Common::KEYCODE_i || event.kbd.keycode == Common::KEYCODE_TAB)
+	if (event.customType == kActionInventory)
 		_gameKey = KEY_INVENTORY;
-	else if (event.kbd.keycode == Common::KEYCODE_F5)
+	else if (event.customType == kActionSave)
 		_gameKey = KEY_SAVE;
-	else if (event.kbd.keycode == Common::KEYCODE_F7)
+	else if (event.customType == kActionLoad)
 		_gameKey = KEY_LOAD;
-	else if (event.kbd.keycode == Common::KEYCODE_F1 || event.kbd.keycode == Common::KEYCODE_o)
+	else if (event.customType == kActionOptions)
 		_gameKey = KEY_OPTIONS;
 }
 
@@ -298,6 +302,10 @@ void EventsManager::handleKey(const Common::Event &event) {
  * @return		Keypress, or -1 if game quit was requested
  */
 int EventsManager::waitKeyPress() {
+
+	Common::Keymapper *keymapper = _vm->getEventManager()->getKeymapper();
+	keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+
 	char foundChar = '\0';
 
 	while (!foundChar) {
@@ -338,6 +346,8 @@ int EventsManager::waitKeyPress() {
 		g_system->delayMillis(10);
 	}
 
+	keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+
 	// Return character
 	return foundChar;
 }
diff --git a/engines/hopkins/hopkins.h b/engines/hopkins/hopkins.h
index 246618a3198..4d2b3f68eed 100644
--- a/engines/hopkins/hopkins.h
+++ b/engines/hopkins/hopkins.h
@@ -61,6 +61,15 @@ namespace Hopkins {
 #define SCREEN_WIDTH 640
 #define SCREEN_HEIGHT 480
 
+enum HOPKINSAction {
+	kActionNone,
+	kActionEscape,
+	kActionInventory,
+	kActionSave,
+	kActionLoad,
+	kActionOptions
+};
+
 enum HopkinsDebugChannels {
 	kDebugPath     = 1 << 0,
 	kDebugGraphics = 1 << 1
diff --git a/engines/hopkins/metaengine.cpp b/engines/hopkins/metaengine.cpp
index 49d32b2730d..306a04b2ae7 100644
--- a/engines/hopkins/metaengine.cpp
+++ b/engines/hopkins/metaengine.cpp
@@ -30,6 +30,10 @@
 #include "common/system.h"
 #include "graphics/surface.h"
 
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
 #include "hopkins/detection.h"
 
 #define MAX_SAVES 99
@@ -103,6 +107,8 @@ public:
 	int getMaximumSaveSlot() const override;
 	void 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 HopkinsMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -195,6 +201,68 @@ SaveStateDescriptor HopkinsMetaEngine::querySaveMetaInfos(const char *target, in
 	return SaveStateDescriptor();
 }
 
+Common::KeymapArray HopkinsMetaEngine::initKeymaps(const char *target) const {
+	using namespace Common;
+	using namespace Hopkins;
+
+	Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "hopkins-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", _("Exit/Skip"));
+	act->setCustomEngineActionEvent(kActionEscape);
+	act->addDefaultInputMapping("ESCAPE");
+	act->addDefaultInputMapping("JOY_BACK");
+	gameKeyMap->addAction(act);
+
+	act = new Action("INVENTORY", _("Open inventory"));
+	act->setCustomEngineActionEvent(kActionInventory);
+	act->addDefaultInputMapping("i");
+	act->addDefaultInputMapping("TAB");
+	act->addDefaultInputMapping("JOY_X");
+	gameKeyMap->addAction(act);
+
+	act = new Action("SAVE", _("Save game"));
+	act->setCustomEngineActionEvent(kActionSave);
+	act->addDefaultInputMapping("F5");
+	act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+	gameKeyMap->addAction(act);
+
+	act = new Action("LOAD", _("Load game"));
+	act->setCustomEngineActionEvent(kActionLoad);
+	act->addDefaultInputMapping("F7");
+	act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+	gameKeyMap->addAction(act);
+
+	act = new Action("OPTIONS", _("Option dialog"));
+	act->setCustomEngineActionEvent(kActionOptions);
+	act->addDefaultInputMapping("o");
+	act->addDefaultInputMapping("F1");
+	act->addDefaultInputMapping("JOY_Y");
+	gameKeyMap->addAction(act);
+
+
+	
+	KeymapArray keymaps(2);
+	keymaps[0] = engineKeyMap;
+	keymaps[1] = gameKeyMap;
+
+	return keymaps;
+}
+
 #if PLUGIN_ENABLED_DYNAMIC(HOPKINS)
 	REGISTER_PLUGIN_DYNAMIC(HOPKINS, PLUGIN_TYPE_ENGINE, HopkinsMetaEngine);
 #else




More information about the Scummvm-git-logs mailing list