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

bluegr noreply at scummvm.org
Sun Jul 28 22:10:52 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:
8e9019bc86 ILLUSIONS: Add keymapper support


Commit: 8e9019bc86d1b2f8b9dfa63e2cc195c47ac876f0
    https://github.com/scummvm/scummvm/commit/8e9019bc86d1b2f8b9dfa63e2cc195c47ac876f0
Author: NabeelShabbir (i210443 at nu.edu.pk)
Date: 2024-07-29T01:10:49+03:00

Commit Message:
ILLUSIONS: Add keymapper support

Changed paths:
    engines/illusions/bbdou/illusions_bbdou.cpp
    engines/illusions/duckman/illusions_duckman.cpp
    engines/illusions/illusions.h
    engines/illusions/input.cpp
    engines/illusions/input.h
    engines/illusions/metaengine.cpp


diff --git a/engines/illusions/bbdou/illusions_bbdou.cpp b/engines/illusions/bbdou/illusions_bbdou.cpp
index c54aa679f4e..63aba763267 100644
--- a/engines/illusions/bbdou/illusions_bbdou.cpp
+++ b/engines/illusions/bbdou/illusions_bbdou.cpp
@@ -267,24 +267,23 @@ bool IllusionsEngine_BBDOU::hasFeature(EngineFeature f) const {
 
 void IllusionsEngine_BBDOU::initInput() {
 	_input->setInputEvent(kEventLeftClick, 0x01)
-		.addMouseButton(MOUSE_LEFT_BUTTON)
-		.addKey(Common::KEYCODE_RETURN);
+		.addMouseButton(MOUSE_LEFT_BUTTON);
 	_input->setInputEvent(kEventRightClick, 0x02)
 		.addMouseButton(MOUSE_RIGHT_BUTTON);
 	_input->setInputEvent(kEventInventory, 0x04)
 		.addMouseButton(MOUSE_RIGHT_BUTTON)
-		.addKey(Common::KEYCODE_TAB);
+		.addKey(kActionInventory);
 	_input->setInputEvent(kEventAbort, 0x08)
-		.addKey(Common::KEYCODE_ESCAPE);
+		.addKey(kActionAbort);
 	_input->setInputEvent(kEventSkip, 0x10)
-		.addKey(Common::KEYCODE_SPACE);
+		.addKey(kActionSkip);
 	_input->setInputEvent(kEventF1, 0x20)
-		.addKey(Common::KEYCODE_F1);
+		.addKey(kActionCheatMode);
 	_input->setInputEvent(kEventUp, 0x40)
-		.addKey(Common::KEYCODE_UP);
+		.addKey(kActionCursorUp);
 	_input->setInputEvent(kEventDown, 0x80)
 		.addMouseButton(MOUSE_RIGHT_BUTTON)
-		.addKey(Common::KEYCODE_DOWN);
+		.addKey(kActionCursorDown);
 }
 
 #define UPDATEFUNCTION(priority, sceneId, callback) \
diff --git a/engines/illusions/duckman/illusions_duckman.cpp b/engines/illusions/duckman/illusions_duckman.cpp
index 2ae89d56466..4e5bf4560e1 100644
--- a/engines/illusions/duckman/illusions_duckman.cpp
+++ b/engines/illusions/duckman/illusions_duckman.cpp
@@ -254,26 +254,24 @@ bool IllusionsEngine_Duckman::hasFeature(EngineFeature f) const {
 
 void IllusionsEngine_Duckman::initInput() {
 	_input->setInputEvent(kEventLeftClick, 0x01)
-		.addMouseButton(MOUSE_LEFT_BUTTON)
-		.addKey(Common::KEYCODE_RETURN);
+		.addMouseButton(MOUSE_LEFT_BUTTON);
 	_input->setInputEvent(kEventRightClick, 0x02)
-		.addMouseButton(MOUSE_RIGHT_BUTTON)
-		.addKey(Common::KEYCODE_BACKSPACE);
+		.addMouseButton(MOUSE_RIGHT_BUTTON);
 	// 0x04 is unused
 	_input->setInputEvent(kEventInventory, 0x08)
-		.addKey(Common::KEYCODE_TAB);
+		.addKey(kActionInventory);
 	_input->setInputEvent(kEventAbort, 0x10)
-		.addKey(Common::KEYCODE_ESCAPE);
+		.addKey(kActionAbort);
 	_input->setInputEvent(kEventSkip, 0x20)
 		.addMouseButton(MOUSE_LEFT_BUTTON)
-		.addKey(Common::KEYCODE_SPACE);
+		.addKey(kActionSkip);
 	_input->setInputEvent(kEventUp, 0x40)
-		.addKey(Common::KEYCODE_UP);
+		.addKey(kActionCursorUp);
 	_input->setInputEvent(kEventDown, 0x80)
 		.addMouseButton(MOUSE_RIGHT_BUTTON)
-		.addKey(Common::KEYCODE_DOWN);
+		.addKey(kActionCursorDown);
 	_input->setInputEvent(kEventF1, 0x100)
-		.addKey(Common::KEYCODE_F1);
+		.addKey(kActionCheatMode);
 }
 
 #define UPDATEFUNCTION(priority, sceneId, callback) \
diff --git a/engines/illusions/illusions.h b/engines/illusions/illusions.h
index 7b7771ace37..651a691322a 100644
--- a/engines/illusions/illusions.h
+++ b/engines/illusions/illusions.h
@@ -41,6 +41,18 @@
 
 namespace Illusions {
 
+enum ILLUSIONSAction {
+	kActionNone,
+	kActionCursorUp,
+	kActionCursorDown,
+	kActionCursorLeft,
+	kActionCursorRight,
+	kActionInventory,
+	kActionAbort,
+	kActionSkip,
+	kActionCheatMode
+};
+
 char *debugW2I(uint16 *wstr);
 void swapBytesInWideString(byte * wstr);
 
diff --git a/engines/illusions/input.cpp b/engines/illusions/input.cpp
index 6dd222e22fb..0b0dde9eb8c 100644
--- a/engines/illusions/input.cpp
+++ b/engines/illusions/input.cpp
@@ -26,17 +26,17 @@ namespace Illusions {
 
 // KeyMap
 
-void KeyMap::addKey(Common::KeyCode key) {
-	add(key, MOUSE_NONE);
+void KeyMap::addKey(Common::CustomEventType action) {
+	add(action, MOUSE_NONE);
 }
 
 void KeyMap::addMouseButton(int mouseButton) {
-	add(Common::KEYCODE_INVALID, mouseButton);
+	add(kActionNone, mouseButton);
 }
 
-void KeyMap::add(Common::KeyCode key, int mouseButton) {
+void KeyMap::add(Common::CustomEventType action, int mouseButton) {
 	KeyMapping keyMapping;
-	keyMapping._key = key;
+	keyMapping._action = action;
 	keyMapping._mouseButton = mouseButton;
 	keyMapping._down = false;
 	push_back(keyMapping);
@@ -52,8 +52,8 @@ InputEvent& InputEvent::setBitMask(uint bitMask) {
 	return *this;
 }
 
-InputEvent& InputEvent::addKey(Common::KeyCode key) {
-	_keyMap.addKey(key);
+InputEvent& InputEvent::addKey(Common::CustomEventType action) {
+	_keyMap.addKey(action);
 	return *this;
 }
 
@@ -62,11 +62,11 @@ InputEvent& InputEvent::addMouseButton(int mouseButton) {
 	return *this;
 }
 
-uint InputEvent::handle(Common::KeyCode key, int mouseButton, bool down) {
+uint InputEvent::handle(Common::CustomEventType action, int mouseButton, bool down) {
 	uint newKeys = 0;
 	for (KeyMap::iterator it = _keyMap.begin(); it != _keyMap.end(); ++it) {
 		KeyMapping &keyMapping = *it;
-		if ((keyMapping._key != Common::KEYCODE_INVALID && keyMapping._key == key) ||
+		if ((keyMapping._action != kActionNone && keyMapping._action == action) ||
 			(keyMapping._mouseButton != MOUSE_NONE && keyMapping._mouseButton == mouseButton)) {
 			if (down && !keyMapping._down) {
 				newKeys |= _bitMask;
@@ -99,6 +99,12 @@ Input::Input() {
 
 void Input::processEvent(Common::Event event) {
 	switch (event.type) {
+	case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+		handleAction(event.customType, MOUSE_NONE, true);
+		break;
+	case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+		handleAction(event.customType, MOUSE_NONE, false);
+		break;
 	case Common::EVENT_KEYDOWN:
 		handleKey(event.kbd.keycode, MOUSE_NONE, true);
 		break;
@@ -173,33 +179,35 @@ InputEvent& Input::setInputEvent(uint evt, uint bitMask) {
 	return inputEvent.setBitMask(bitMask);
 }
 
-void Input::handleKey(Common::KeyCode key, int mouseButton, bool down) {
-	switch (key) {
-	case Common::KEYCODE_UP:
+void Input::handleAction(Common::CustomEventType action, int mouseButton, bool down) {
+	switch (action) {
+	case kActionCursorUp:
 		moveCursorByKeyboard(0, -4);
 		break;
-	case Common::KEYCODE_DOWN:
+	case kActionCursorDown:
 		moveCursorByKeyboard(0, 4);
 		break;
-	case Common::KEYCODE_RIGHT:
+	case kActionCursorRight:
 		moveCursorByKeyboard(4, 0);
 		break;
-	case Common::KEYCODE_LEFT:
+	case kActionCursorLeft:
 		moveCursorByKeyboard(-4, 0);
 		break;
 	default:
 		break;
 	}
 	for (uint i = 0; i < kEventMax; ++i) {
-		_newKeys |= _inputEvents[i].handle(key, mouseButton, down);
+		_newKeys |= _inputEvents[i].handle(action, mouseButton, down);
 	}
 	uint prevButtonStates = _buttonStates;
 	_buttonStates |= _newKeys;
 	_newKeys = 0;
 	_newButtons = ~prevButtonStates & _buttonStates;
+}
 
-	if ( !down && !isCheatModeActive()) {
-		if ( _cheatCodeIndex < 7 && key == kCheatCode[_cheatCodeIndex]) {
+void Input::handleKey(Common::KeyCode key, int mouseButton, bool down) {
+	if (!down && !isCheatModeActive()) {
+		if (_cheatCodeIndex < 7 && key == kCheatCode[_cheatCodeIndex]) {
 			_cheatCodeIndex++;
 		} else {
 			_cheatCodeIndex = 0;
@@ -212,7 +220,7 @@ void Input::handleMouseButton(int mouseButton, bool down) {
 		_buttonsDown |= mouseButton;
 	else
 		_buttonsDown &= ~mouseButton;
-	handleKey(Common::KEYCODE_INVALID, mouseButton, down);
+	handleAction(kActionNone, mouseButton, down);
 }
 
 bool Input::pollButton(uint bitMask) {
diff --git a/engines/illusions/input.h b/engines/illusions/input.h
index 040d297b69a..fce78a31882 100644
--- a/engines/illusions/input.h
+++ b/engines/illusions/input.h
@@ -26,6 +26,7 @@
 #include "common/events.h"
 #include "common/keyboard.h"
 #include "common/rect.h"
+#include "illusions/illusions.h"
 
 namespace Illusions {
 
@@ -48,26 +49,26 @@ enum {
 };
 
 struct KeyMapping {
-	Common::KeyCode _key;
+	Common::CustomEventType _action;
 	int _mouseButton;
 	bool _down;
 };
 
 class KeyMap : public Common::Array<KeyMapping> {
 public:
-	void addKey(Common::KeyCode key);
+	void addKey(Common::CustomEventType action);
 	void addMouseButton(int mouseButton);
 protected:
-	void add(Common::KeyCode key, int mouseButton);
+	void add(Common::CustomEventType action, int mouseButton);
 };
 
 class InputEvent {
 public:
 	InputEvent();
 	InputEvent& setBitMask(uint bitMask);
-	InputEvent& addKey(Common::KeyCode key);
+	InputEvent& addKey(Common::CustomEventType action);
 	InputEvent& addMouseButton(int mouseButton);
-	uint handle(Common::KeyCode key, int mouseButton, bool down);
+	uint handle(Common::CustomEventType action, int mouseButton, bool down);
 	uint getBitMask() const { return _bitMask; }
 protected:
 	uint _bitMask;
@@ -100,6 +101,7 @@ protected:
 	Common::Point _cursorPos, _prevCursorPos;
 	InputEvent _inputEvents[kEventMax];
 	bool _cursorMovedByKeyboard;
+	void handleAction(Common::CustomEventType Action, int mouseButton, bool down);
 	void handleKey(Common::KeyCode key, int mouseButton, bool down);
 	void handleMouseButton(int mouseButton, bool down);
 	void discardButtons(uint bitMask);
diff --git a/engines/illusions/metaengine.cpp b/engines/illusions/metaengine.cpp
index 5f7f2889331..498cfc11836 100644
--- a/engines/illusions/metaengine.cpp
+++ b/engines/illusions/metaengine.cpp
@@ -23,7 +23,12 @@
 #include "illusions/bbdou/illusions_bbdou.h"
 #include "illusions/duckman/illusions_duckman.h"
 
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
 #include "common/config-manager.h"
+#include "common/translation.h"
 #include "engines/advancedDetector.h"
 #include "common/savefile.h"
 #include "common/system.h"
@@ -57,6 +62,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 IllusionsMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -75,6 +82,87 @@ void IllusionsMetaEngine::removeSaveState(const char *target, int slot) const {
 	g_system->getSavefileManager()->removeSavefile(fileName);
 }
 
+Common::KeymapArray IllusionsMetaEngine::initKeymaps(const char *target) const {
+	using namespace Common;
+	using namespace Illusions;
+
+	Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "illusions-default", _("Default keymappings"));
+	Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+
+	Common::Action *act;
+
+	act = new Action(kStandardActionLeftClick, _("Left click"));
+	act->setLeftClickEvent();
+	act->addDefaultInputMapping("MOUSE_LEFT");
+	act->addDefaultInputMapping("JOY_A");
+	act->addDefaultInputMapping("RETURN");
+	engineKeyMap->addAction(act);
+
+	act = new Action(kStandardActionRightClick, _("Right click"));
+	act->setRightClickEvent();
+	act->addDefaultInputMapping("MOUSE_RIGHT");
+	act->addDefaultInputMapping("JOY_B");
+	act->addDefaultInputMapping("BACKSPACE");
+	engineKeyMap->addAction(act);
+
+	act = new Action("CRSRUP", _("Move cursor up"));
+	act->setCustomEngineActionEvent(kActionCursorUp);
+	act->addDefaultInputMapping("JOY_UP");
+	act->addDefaultInputMapping("UP");
+	act->allowKbdRepeats();
+	gameKeyMap->addAction(act);
+
+	act = new Action("CRSRDOWN", _("Move cursor down"));
+	act->setCustomEngineActionEvent(kActionCursorDown);
+	act->addDefaultInputMapping("JOY_DOWN");
+	act->addDefaultInputMapping("DOWN");
+	act->allowKbdRepeats();
+	gameKeyMap->addAction(act);
+
+	act = new Action("CRSRLEFT", _("Move cursor left"));
+	act->setCustomEngineActionEvent(kActionCursorLeft);
+	act->addDefaultInputMapping("JOY_LEFT");
+	act->addDefaultInputMapping("LEFT");
+	act->allowKbdRepeats();
+	gameKeyMap->addAction(act);
+
+	act = new Action("CRSRRIGHT", _("Move cursor right"));
+	act->setCustomEngineActionEvent(kActionCursorRight);
+	act->addDefaultInputMapping("JOY_RIGHT");
+	act->addDefaultInputMapping("RIGHT");
+	act->allowKbdRepeats();
+	gameKeyMap->addAction(act);
+
+	act = new Action("ABORT", _("Abort"));
+	act->setCustomEngineActionEvent(kActionAbort);
+	act->addDefaultInputMapping("ESCAPE");
+	act->addDefaultInputMapping("JOY_X");
+	gameKeyMap->addAction(act);
+
+	act = new Action("SKIP", _("Skip"));
+	act->setCustomEngineActionEvent(kActionSkip);
+	act->addDefaultInputMapping("SPACE");
+	gameKeyMap->addAction(act);
+
+	act = new Action("INVENTORY", _("Open inventory"));
+	act->setCustomEngineActionEvent(kActionInventory);
+	act->addDefaultInputMapping("TAB");
+	act->addDefaultInputMapping("JOY_Y");
+	gameKeyMap->addAction(act);
+
+	act = new Action("ENCHEAT", _("Enable cheat mode"));
+	act->setCustomEngineActionEvent(kActionCheatMode);
+	act->addDefaultInputMapping("F1");
+	act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+	gameKeyMap->addAction(act);
+
+	KeymapArray keymaps(2);
+	keymaps[0] = engineKeyMap;
+	keymaps[1] = gameKeyMap;
+
+	return keymaps;
+}
+
 int IllusionsMetaEngine::getMaximumSaveSlot() const {
 	return 999;
 }




More information about the Scummvm-git-logs mailing list