[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