[Scummvm-git-logs] scummvm master -> bdf57257ddf0aedf6e7088e60f5c384e57eabb72
bluegr
noreply at scummvm.org
Fri Jul 26 22:35:25 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:
bdf57257dd TOUCHE: Add keymapper support
Commit: bdf57257ddf0aedf6e7088e60f5c384e57eabb72
https://github.com/scummvm/scummvm/commit/bdf57257ddf0aedf6e7088e60f5c384e57eabb72
Author: NabeelShabbir (i210443 at nu.edu.pk)
Date: 2024-07-27T01:35:21+03:00
Commit Message:
TOUCHE: Add keymapper support
Changed paths:
engines/touche/menu.cpp
engines/touche/metaengine.cpp
engines/touche/touche.cpp
engines/touche/touche.h
diff --git a/engines/touche/menu.cpp b/engines/touche/menu.cpp
index ea0afe4f860..6811045b707 100644
--- a/engines/touche/menu.cpp
+++ b/engines/touche/menu.cpp
@@ -24,6 +24,8 @@
#include "common/system.h"
#include "common/savefile.h"
+#include "backends/keymapper/keymapper.h"
+
#include "touche/graphics.h"
#include "touche/midi.h"
#include "touche/touche.h"
@@ -303,6 +305,10 @@ void ToucheEngine::handleOptions(int forceDisplay) {
updateScreenArea(90, 102, 460, 196);
doRedraw = false;
}
+
+ Common::Keymapper *keymapper = _eventMan->getKeymapper();
+ keymapper->getKeymap("game-shortcuts")->setEnabled(false);
+
Common::Event event;
while (_eventMan->pollEvent(event)) {
const Button *button = 0;
@@ -341,6 +347,9 @@ void ToucheEngine::handleOptions(int forceDisplay) {
break;
}
}
+
+ keymapper->getKeymap("game-shortcuts")->setEnabled(true);
+
_system->updateScreen();
_system->delayMillis(10);
}
@@ -476,38 +485,15 @@ int ToucheEngine::displayQuitDialog() {
quitLoop = true;
ret = 1;
break;
- case Common::EVENT_KEYDOWN:
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
quitLoop = true;
- switch (_language) {
- case Common::FR_FRA:
- if (event.kbd.keycode == Common::KEYCODE_o) {
- ret = 1;
- }
- break;
- case Common::DE_DEU:
- if (event.kbd.keycode == Common::KEYCODE_j) {
- ret = 1;
- }
- break;
- case Common::ES_ESP:
- if (event.kbd.keycode == Common::KEYCODE_s) {
- ret = 1;
- }
- break;
- case Common::PL_POL:
- if (event.kbd.keycode == Common::KEYCODE_s || event.kbd.keycode == Common::KEYCODE_t) {
- ret = 1;
- }
- break;
- default:
- // According to cyx, the Italian version uses the same
- // keys as the English one.
- if (event.kbd.keycode == Common::KEYCODE_y) {
- ret = 1;
- }
- break;
+ if (event.customType == kToucheActionYes) {
+ ret = 1;
}
break;
+ case Common::EVENT_JOYBUTTON_DOWN:
+ case Common::EVENT_KEYDOWN:
+ quitLoop = true;
default:
break;
}
diff --git a/engines/touche/metaengine.cpp b/engines/touche/metaengine.cpp
index 7158ada6329..c16bf0efe1a 100644
--- a/engines/touche/metaengine.cpp
+++ b/engines/touche/metaengine.cpp
@@ -23,6 +23,11 @@
#include "engines/advancedDetector.h"
#include "common/savefile.h"
#include "common/system.h"
+#include "common/translation.h"
+
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
#include "base/plugins.h"
@@ -44,6 +49,8 @@ public:
target = getName();
return Touche::generateGameStateFileName(target, saveGameIdx, saveGameIdx == kSavegameFilePattern);
}
+
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool ToucheMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -104,6 +111,105 @@ void ToucheMetaEngine::removeSaveState(const char *target, int slot) const {
g_system->getSavefileManager()->removeSavefile(filename);
}
+Common::KeymapArray ToucheMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace Touche;
+
+ Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "touche-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("SKIPORQUIT", _("Skip sequence/open quit dialogue"));
+ act->setCustomEngineActionEvent(kToucheActionSkipOrQuit);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("SKIPDILOG", _("Skip Dialogue"));
+ act->setCustomEngineActionEvent(kToucheActionSkipDialogue);
+ act->addDefaultInputMapping("SPACE");
+ act->addDefaultInputMapping("JOY_X");
+ gameKeyMap->addAction(act);
+
+ act = new Action("OPTIONS", _("Open options menu"));
+ act->setCustomEngineActionEvent(kToucheActionOpenOptions);
+ act->addDefaultInputMapping("F5");
+ act->addDefaultInputMapping("JOY_Y");
+ gameKeyMap->addAction(act);
+
+ // I18N: The actor walking pace is increased
+ act = new Action("ENABLEFASTWALK", _("Enable fast walk"));
+ act->setCustomEngineActionEvent(kToucheActionEnableFastWalk);
+ act->addDefaultInputMapping("F9");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ // I18N: The actor walking pace is decreased
+ act = new Action("DISABLEFASTWALK", _("Disable fast walk"));
+ act->setCustomEngineActionEvent(kToucheActionDisableFastWalk);
+ act->addDefaultInputMapping("F10");
+ act->addDefaultInputMapping("JOY_LEFT_STICK");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TGGLFASTMODE", _("Toggle fast mode"));
+ act->setCustomEngineActionEvent(kToucheActionToggleFastMode);
+ act->addDefaultInputMapping("C+f");
+ act->addDefaultInputMapping("JOY_RIGHT_STICK");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TGGLTALKTEXT", _("Toggle between voice/text/text and voice"));
+ act->setCustomEngineActionEvent(kToucheActionToggleTalkTextMode);
+ act->addDefaultInputMapping("t");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ String s = ConfMan.get("language", target);
+ Language l = Common::parseLanguage(s);
+
+ act = new Action("YES", _("Press \"Yes\" Key"));
+ act->setCustomEngineActionEvent(kToucheActionYes);
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ switch (l) {
+ case FR_FRA:
+ act->addDefaultInputMapping("o");
+ break;
+ case DE_DEU:
+ act->addDefaultInputMapping("j");
+ break;
+ case ES_ESP:
+ act->addDefaultInputMapping("s");
+ break;
+ case PL_POL:
+ act->addDefaultInputMapping("s");
+ act->addDefaultInputMapping("t");
+ break;
+ default:
+ act->addDefaultInputMapping("y");
+ break;
+ }
+ gameKeyMap->addAction(act);
+ }
+
+ KeymapArray keymaps(2);
+ keymaps[0] = engineKeyMap;
+ keymaps[1] = gameKeyMap;
+
+ return keymaps;
+}
+
#if PLUGIN_ENABLED_DYNAMIC(TOUCHE)
REGISTER_PLUGIN_DYNAMIC(TOUCHE, PLUGIN_TYPE_ENGINE, ToucheMetaEngine);
#else
diff --git a/engines/touche/touche.cpp b/engines/touche/touche.cpp
index fd93d37e904..411a154a73f 100644
--- a/engines/touche/touche.cpp
+++ b/engines/touche/touche.cpp
@@ -400,42 +400,46 @@ void ToucheEngine::processEvents(bool handleKeyEvents) {
Common::Event event;
while (_eventMan->pollEvent(event)) {
switch (event.type) {
- case Common::EVENT_KEYDOWN:
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
if (!handleKeyEvents) {
break;
}
- _flagsTable[600] = event.kbd.keycode;
- if (event.kbd.keycode == Common::KEYCODE_ESCAPE) {
+ if (event.customType == kToucheActionSkipOrQuit) {
+ _flagsTable[600] = Common::KEYCODE_ESCAPE;
if (_displayQuitDialog) {
if (displayQuitDialog()) {
quitGame();
}
}
- } else if (event.kbd.keycode == Common::KEYCODE_F5) {
+ } else if (event.customType == kToucheActionOpenOptions) {
if (_flagsTable[618] == 0 && !_hideInventoryTexts) {
handleOptions(0);
}
- } else if (event.kbd.keycode == Common::KEYCODE_F9) {
+ } else if (event.customType == kToucheActionEnableFastWalk) {
_fastWalkMode = true;
- } else if (event.kbd.keycode == Common::KEYCODE_F10) {
+ } else if (event.customType == kToucheActionDisableFastWalk) {
_fastWalkMode = false;
}
- if (event.kbd.hasFlags(Common::KBD_CTRL)) {
- if (event.kbd.keycode == Common::KEYCODE_f) {
- _fastMode = !_fastMode;
- }
+ if (event.customType == kToucheActionToggleFastMode) {
+ _fastMode = !_fastMode;
} else {
- if (event.kbd.keycode == Common::KEYCODE_t) {
+ if (event.customType == kToucheActionToggleTalkTextMode) {
++_talkTextMode;
if (_talkTextMode == kTalkModeCount) {
_talkTextMode = 0;
}
displayTextMode(-(92 + _talkTextMode));
- } else if (event.kbd.keycode == Common::KEYCODE_SPACE) {
+ } else if (event.customType == kToucheActionSkipDialogue) {
updateKeyCharTalk(2);
}
}
break;
+ case Common::EVENT_KEYDOWN:
+ if (!handleKeyEvents) {
+ break;
+ }
+ _flagsTable[600] = event.kbd.keycode;
+ break;
case Common::EVENT_LBUTTONDOWN:
_inp_leftMouseButtonPressed = true;
break;
diff --git a/engines/touche/touche.h b/engines/touche/touche.h
index eeafc07770a..346deb30337 100644
--- a/engines/touche/touche.h
+++ b/engines/touche/touche.h
@@ -45,6 +45,18 @@
*/
namespace Touche {
+enum TOUCHEAction {
+ kToucheActionNone,
+ kToucheActionYes,
+ kToucheActionSkipOrQuit,
+ kToucheActionOpenOptions,
+ kToucheActionEnableFastWalk,
+ kToucheActionDisableFastWalk,
+ kToucheActionToggleFastMode,
+ kToucheActionToggleTalkTextMode,
+ kToucheActionSkipDialogue
+};
+
struct Area {
Common::Rect r;
int16 srcX, srcY;
More information about the Scummvm-git-logs
mailing list