[Scummvm-git-logs] scummvm master -> ca60a3325f46ec3af685f1f98e48fc8a5cc7f716
bluegr
noreply at scummvm.org
Sat Aug 31 19:29:12 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:
ca60a3325f TINSEL: Add keymapper support
Commit: ca60a3325f46ec3af685f1f98e48fc8a5cc7f716
https://github.com/scummvm/scummvm/commit/ca60a3325f46ec3af685f1f98e48fc8a5cc7f716
Author: NabeelShabbir (128056426+NabeelShabbir at users.noreply.github.com)
Date: 2024-08-31T22:29:09+03:00
Commit Message:
TINSEL: Add keymapper support
Changed paths:
engines/tinsel/dialogs.cpp
engines/tinsel/events.cpp
engines/tinsel/metaengine.cpp
engines/tinsel/tinsel.cpp
engines/tinsel/tinsel.h
diff --git a/engines/tinsel/dialogs.cpp b/engines/tinsel/dialogs.cpp
index 8c36e3d8633..60f8e8dfa15 100644
--- a/engines/tinsel/dialogs.cpp
+++ b/engines/tinsel/dialogs.cpp
@@ -62,6 +62,8 @@
#include "common/textconsole.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Tinsel {
//----------------- LOCAL DEFINES --------------------
@@ -1411,18 +1413,18 @@ bool Dialogs::updateString(const Common::KeyState &kbd) {
/**
* Keystrokes get sent here when load/save screen is up.
*/
-static bool InvKeyIn(const Common::KeyState &kbd) {
- if (kbd.keycode == Common::KEYCODE_PAGEUP ||
- kbd.keycode == Common::KEYCODE_PAGEDOWN ||
- kbd.keycode == Common::KEYCODE_HOME ||
- kbd.keycode == Common::KEYCODE_END)
+static bool InvKeyIn(const Common::KeyState &kbd, const Common::CustomEventType &customType) {
+ if (customType == kActionPageUp ||
+ customType == kActionPageDown ||
+ customType == kActionHome ||
+ customType == kActionEnd)
return true; // Key needs processing
if (kbd.keycode == 0 && kbd.ascii == 0) {
;
} else if (kbd.keycode == Common::KEYCODE_RETURN) {
return true; // Key needs processing
- } else if (kbd.keycode == Common::KEYCODE_ESCAPE) {
+ } else if (customType == kActionEscape) {
return true; // Key needs processing
} else {
#ifndef JAPAN
@@ -3659,6 +3661,11 @@ void Dialogs::openMenu(CONFTYPE menuType) {
_invD[INV_CONF].resizable = false;
_invD[INV_CONF].bMoveable = false;
+ Common::Keymapper *keymapper = _vm->getEventManager()->getKeymapper();
+ if (menuType == SAVE_MENU || menuType == LOAD_MENU) {
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+ keymapper->getKeymap("saveload-shortcuts")->setEnabled(true);
+ }
switch (menuType) {
case MAIN_MENU:
setMenuGlobals(&ciOption);
@@ -5494,6 +5501,13 @@ bool Dialogs::isConvWindow() {
}
void Dialogs::callFunction(BFUNC boxFunc) {
+
+ Common::Keymapper *keymapper = _vm->getEventManager()->getKeymapper();
+ if (boxFunc == CLOSEWIN || boxFunc == SAVEGAME || boxFunc == LOADGAME) {
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+ keymapper->getKeymap("saveload-shortcuts")->setEnabled(false);
+ }
+
switch (boxFunc) {
case SAVEGAME:
killInventory();
diff --git a/engines/tinsel/events.cpp b/engines/tinsel/events.cpp
index 2421f7eef85..a658a966df6 100644
--- a/engines/tinsel/events.cpp
+++ b/engines/tinsel/events.cpp
@@ -44,6 +44,8 @@
#include "tinsel/token.h"
#include "tinsel/noir/notebook.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Tinsel {
//----------------- EXTERNAL FUNCTIONS ---------------------
diff --git a/engines/tinsel/metaengine.cpp b/engines/tinsel/metaengine.cpp
index 12890f38cd2..3f5237e7577 100644
--- a/engines/tinsel/metaengine.cpp
+++ b/engines/tinsel/metaengine.cpp
@@ -32,6 +32,10 @@
#include "tinsel/detection.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
static const ADExtraGuiOptionsMap optionsList[] = {
{
GAMEOPTION_CROP_HEIGHT_480_TO_432,
@@ -97,6 +101,8 @@ public:
void registerDefaultSettings(const Common::String &target) const override;
const ADExtraGuiOptionsMap *getAdvancedExtraGuiOptions() const override;
+
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool TinselMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -226,6 +232,142 @@ const ADExtraGuiOptionsMap *TinselMetaEngine::getAdvancedExtraGuiOptions() const
return optionsList;
}
+Common::KeymapArray TinselMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace Tinsel;
+
+ Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "tinsel-default", _("Default keymappings"));
+ Keymap *gameKeyMap = new Keymap(Keymap::kKeymapTypeGame, "game-shortcuts", _("Game keymappings"));
+ Keymap *saveloadKeyMap = new Keymap(Keymap::kKeymapTypeGame, "saveload-shortcuts", _("Save/Load 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", _("Escape"));
+ act->setCustomEngineActionEvent(kActionEscape);
+ act->addDefaultInputMapping("ESCAPE");
+ engineKeyMap->addAction(act);
+
+ act = new Action("MOVEUP", _("Move up"));
+ act->setCustomEngineActionEvent(kActionMoveUp);
+ act->addDefaultInputMapping("UP");
+ act->addDefaultInputMapping("KP8");
+ gameKeyMap->addAction(act);
+
+ act = new Action("MOVEDOWN", _("Move down"));
+ act->setCustomEngineActionEvent(kActionMoveDown);
+ act->addDefaultInputMapping("DOWN");
+ act->addDefaultInputMapping("KP2");
+ gameKeyMap->addAction(act);
+
+ act = new Action("MOVELEFT", _("Move left"));
+ act->setCustomEngineActionEvent(kActionMoveLeft);
+ act->addDefaultInputMapping("LEFT");
+ act->addDefaultInputMapping("KP4");
+ gameKeyMap->addAction(act);
+
+ act = new Action("MOVERIGHT", _("Move right"));
+ act->setCustomEngineActionEvent(kActionMoveRight);
+ act->addDefaultInputMapping("RIGHT");
+ act->addDefaultInputMapping("KP6");
+ gameKeyMap->addAction(act);
+
+ // I18N: Walk to where cursor points
+ act = new Action("WALK", _("Walk to"));
+ act->setCustomEngineActionEvent(kActionWalkTo);
+ act->addDefaultInputMapping("SPACE");
+ gameKeyMap->addAction(act);
+
+ // I18N: Perform action on object where cursor points
+ act = new Action("ACTION", _("Action"));
+ act->setCustomEngineActionEvent(kActionAction);
+ act->addDefaultInputMapping("RETURN");
+ act->addDefaultInputMapping("KP_ENTER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("LOOK", _("Look"));
+ act->setCustomEngineActionEvent(kActionLook);
+ act->addDefaultInputMapping("l");
+ act->addDefaultInputMapping("LCTRL");
+ act->addDefaultInputMapping("RCTRL");
+ gameKeyMap->addAction(act);
+
+ act = new Action("OPTIONSDIALOG", _("Options Dialog"));
+ act->setCustomEngineActionEvent(kActionOptionsDialog);
+ act->addDefaultInputMapping("F1");
+ act->addDefaultInputMapping("1");
+ gameKeyMap->addAction(act);
+
+ act = new Action("INVENTORY", _("Inventory"));
+ act->setCustomEngineActionEvent(kActionInventory);
+ act->addDefaultInputMapping("F2");
+ gameKeyMap->addAction(act);
+
+ act = new Action("NOTEBOOK", _("Notebook"));
+ act->setCustomEngineActionEvent(kActionNotebook);
+ act->addDefaultInputMapping("F3");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SAVE", _("Save"));
+ act->setCustomEngineActionEvent(kActionSave);
+ act->addDefaultInputMapping("F5");
+ act->addDefaultInputMapping("5");
+ gameKeyMap->addAction(act);
+
+ act = new Action("LOAD", _("Load"));
+ act->setCustomEngineActionEvent(kActionLoad);
+ act->addDefaultInputMapping("7");
+ act->addDefaultInputMapping("F7");
+ gameKeyMap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setCustomEngineActionEvent(kActionQuit);
+ act->addDefaultInputMapping("C+q");
+ act->addDefaultInputMapping("A+q");
+ gameKeyMap->addAction(act);
+
+ act = new Action("PGUPMENU", _("Page Up in save/load menu"));
+ act->setCustomEngineActionEvent(kActionPageUp);
+ act->addDefaultInputMapping("PAGEUP");
+ act->addDefaultInputMapping("KP9");
+ saveloadKeyMap->addAction(act);
+
+ act = new Action("PGDOWNMENU", _("Page down in save/load menu"));
+ act->setCustomEngineActionEvent(kActionPageDown);
+ act->addDefaultInputMapping("PAGEDOWN");
+ act->addDefaultInputMapping("KP3");
+ saveloadKeyMap->addAction(act);
+
+ act = new Action("STARTOFMENU", _("Go to start of save/load menu"));
+ act->setCustomEngineActionEvent(kActionHome);
+ act->addDefaultInputMapping("HOME");
+ act->addDefaultInputMapping("KP7");
+ saveloadKeyMap->addAction(act);
+
+ act = new Action("ENDOFMENU", _("Go to end of save/load menu"));
+ act->setCustomEngineActionEvent(kActionEnd);
+ act->addDefaultInputMapping("END");
+ act->addDefaultInputMapping("KP1");
+ saveloadKeyMap->addAction(act);
+
+ KeymapArray keymaps(3);
+ keymaps[0] = engineKeyMap;
+ keymaps[1] = gameKeyMap;
+ keymaps[2] = saveloadKeyMap;
+ return keymaps;
+}
+
#if PLUGIN_ENABLED_DYNAMIC(TINSEL)
REGISTER_PLUGIN_DYNAMIC(TINSEL, PLUGIN_TYPE_ENGINE, TinselMetaEngine);
#else
diff --git a/engines/tinsel/tinsel.cpp b/engines/tinsel/tinsel.cpp
index e78e16389f7..ced7f454eb9 100644
--- a/engines/tinsel/tinsel.cpp
+++ b/engines/tinsel/tinsel.cpp
@@ -170,107 +170,91 @@ void KeyboardProcess(CORO_PARAM, const void *) {
ProcessButEvent(PLR_DRAG2_END);
}
continue;
-
- case Common::KEYCODE_LCTRL:
- case Common::KEYCODE_RCTRL:
- if (evt.type == Common::EVENT_KEYDOWN) {
- ProcessKeyEvent(PLR_LOOK);
- } else {
- // Control key release
- }
- continue;
-
default:
break;
}
// At this point only key down events need processing
- if (evt.type == Common::EVENT_KEYUP)
+ if (evt.type == Common::EVENT_KEYUP || evt.customType == Common::EVENT_CUSTOM_ENGINE_ACTION_END)
continue;
if (_vm->_keyHandler != NULL)
// Keyboard is hooked, so pass it on to that handler first
- if (!_vm->_keyHandler(evt.kbd))
+ if (!_vm->_keyHandler(evt.kbd, evt.customType))
continue;
- switch (evt.kbd.keycode) {
+ switch (evt.customType) {
/*** SPACE = WALKTO ***/
- case Common::KEYCODE_SPACE:
+ case kActionWalkTo:
ProcessKeyEvent(PLR_WALKTO);
continue;
/*** RETURN = ACTION ***/
- case Common::KEYCODE_RETURN:
- case Common::KEYCODE_KP_ENTER:
+ case kActionAction:
ProcessKeyEvent(PLR_ACTION);
continue;
/*** l = LOOK ***/
- case Common::KEYCODE_l: // LOOK
+ case kActionLook: // LOOK
ProcessKeyEvent(PLR_LOOK);
continue;
- case Common::KEYCODE_ESCAPE:
+ case kActionEscape:
ProcessKeyEvent(PLR_ESCAPE);
continue;
-
-#ifdef SLOW_RINCE_DOWN
- case '>':
- AddInterlude(1);
- continue;
- case '<':
- AddInterlude(-1);
- continue;
-#endif
-
- case Common::KEYCODE_1:
- case Common::KEYCODE_F1:
+ case kActionOptionsDialog:
// Options dialog
ProcessKeyEvent(PLR_MENU);
continue;
- case Common::KEYCODE_F2:
+ case kActionInventory:
ProcessKeyEvent(PLR_INVENTORY);
continue;
- case Common::KEYCODE_F3:
+ case kActionNotebook:
ProcessKeyEvent(PLR_NOTEBOOK);
continue;
- case Common::KEYCODE_5:
- case Common::KEYCODE_F5:
+ case kActionSave:
// Save game
ProcessKeyEvent(PLR_SAVE);
continue;
- case Common::KEYCODE_7:
- case Common::KEYCODE_F7:
+ case kActionLoad:
// Load game
ProcessKeyEvent(PLR_LOAD);
continue;
- case Common::KEYCODE_m:
- // Debug facility - scene hopper
- if (TinselVersion >= 2) {
- if (evt.kbd.hasFlags(Common::KBD_ALT))
- ProcessKeyEvent(PLR_JUMP);
- }
- break;
- case Common::KEYCODE_q:
- if ((evt.kbd.hasFlags(Common::KBD_CTRL)) || (evt.kbd.hasFlags(Common::KBD_ALT)))
- ProcessKeyEvent(PLR_QUIT);
+ case kActionQuit:
+ ProcessKeyEvent(PLR_QUIT);
continue;
- case Common::KEYCODE_PAGEUP:
- case Common::KEYCODE_KP9:
+ case kActionPageUp:
ProcessKeyEvent(PLR_PGUP);
continue;
- case Common::KEYCODE_PAGEDOWN:
- case Common::KEYCODE_KP3:
+ case kActionPageDown:
ProcessKeyEvent(PLR_PGDN);
continue;
- case Common::KEYCODE_HOME:
- case Common::KEYCODE_KP7:
+ case kActionHome:
ProcessKeyEvent(PLR_HOME);
continue;
- case Common::KEYCODE_END:
- case Common::KEYCODE_KP1:
+ case kActionEnd:
ProcessKeyEvent(PLR_END);
continue;
+ default:
+ break;
+ }
+
+ switch (evt.kbd.keycode) {
+#ifdef SLOW_RINCE_DOWN
+ case '>':
+ AddInterlude(1);
+ continue;
+ case '<':
+ AddInterlude(-1);
+ continue;
+#endif
+ case Common::KEYCODE_m:
+ // Debug facility - scene hopper
+ if (TinselVersion >= 2) {
+ if (evt.kbd.hasFlags(Common::KBD_ALT))
+ ProcessKeyEvent(PLR_JUMP);
+ }
+ break;
default:
ProcessKeyEvent(PLR_NOEVENT);
break;
@@ -1213,9 +1197,9 @@ bool TinselEngine::pollEvent() {
case Common::EVENT_KEYDOWN:
case Common::EVENT_KEYUP:
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
ProcessKeyEvent(event);
break;
-
default:
break;
}
@@ -1324,28 +1308,24 @@ void TinselEngine::ChopDrivers() {
void TinselEngine::ProcessKeyEvent(const Common::Event &event) {
// Check for movement keys
int idx = 0;
- switch (event.kbd.keycode) {
- case Common::KEYCODE_UP:
- case Common::KEYCODE_KP8:
+ switch (event.customType) {
+ case kActionMoveUp:
idx = MSK_UP;
break;
- case Common::KEYCODE_DOWN:
- case Common::KEYCODE_KP2:
+ case kActionMoveDown:
idx = MSK_DOWN;
break;
- case Common::KEYCODE_LEFT:
- case Common::KEYCODE_KP4:
+ case kActionMoveLeft:
idx = MSK_LEFT;
break;
- case Common::KEYCODE_RIGHT:
- case Common::KEYCODE_KP6:
+ case kActionMoveRight:
idx = MSK_RIGHT;
break;
default:
break;
}
if (idx != 0) {
- if (event.type == Common::EVENT_KEYDOWN)
+ if (event.type == Common::EVENT_CUSTOM_ENGINE_ACTION_START)
_dosPlayerDir |= idx;
else
_dosPlayerDir &= ~idx;
diff --git a/engines/tinsel/tinsel.h b/engines/tinsel/tinsel.h
index a73966e4505..90da5fa2be3 100644
--- a/engines/tinsel/tinsel.h
+++ b/engines/tinsel/tinsel.h
@@ -69,6 +69,28 @@ class SystemReel;
typedef Common::List<Common::Rect> RectList;
+enum TINSELAction {
+ kActionNone,
+ kActionWalkTo,
+ kActionAction,
+ kActionLook,
+ kActionEscape,
+ kActionOptionsDialog,
+ kActionInventory,
+ kActionNotebook,
+ kActionSave,
+ kActionLoad,
+ kActionQuit,
+ kActionPageUp,
+ kActionPageDown,
+ kActionHome,
+ kActionEnd,
+ kActionMoveUp,
+ kActionMoveDown,
+ kActionMoveLeft,
+ kActionMoveRight
+};
+
enum {
kTinselDebugAnimations = 1 << 0,
kTinselDebugActions = 1 << 1,
@@ -85,7 +107,7 @@ enum TinselKeyDirection {
MSK_DIRECTION = MSK_LEFT | MSK_RIGHT | MSK_UP | MSK_DOWN
};
-typedef bool (*KEYFPTR)(const Common::KeyState &);
+typedef bool (*KEYFPTR)(const Common::KeyState &, const Common::CustomEventType &);
#define SCREEN_WIDTH (_vm->screen().w) // PC screen dimensions
#define SCREEN_HEIGHT (_vm->screen().h)
More information about the Scummvm-git-logs
mailing list