[Scummvm-git-logs] scummvm master -> 05d40f9b37e7b748105592460f66eb7765ad46bc
sev-
noreply at scummvm.org
Tue Apr 1 19:57:08 UTC 2025
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:
05d40f9b37 TOLTECS: Add keymapper support
Commit: 05d40f9b37e7b748105592460f66eb7765ad46bc
https://github.com/scummvm/scummvm/commit/05d40f9b37e7b748105592460f66eb7765ad46bc
Author: aunnoman1 (aunnoman123 at outlook.com)
Date: 2025-04-01T21:57:04+02:00
Commit Message:
TOLTECS: Add keymapper support
Changed paths:
engines/toltecs/menu.cpp
engines/toltecs/metaengine.cpp
engines/toltecs/movie.cpp
engines/toltecs/script.cpp
engines/toltecs/toltecs.cpp
engines/toltecs/toltecs.h
diff --git a/engines/toltecs/menu.cpp b/engines/toltecs/menu.cpp
index 96f120f5eb7..a44f556ee61 100644
--- a/engines/toltecs/menu.cpp
+++ b/engines/toltecs/menu.cpp
@@ -33,6 +33,8 @@
#include "toltecs/render.h"
#include "toltecs/resource.h"
+#include "backends/keymapper/keymapper.h"
+
namespace Toltecs {
MenuSystem::MenuSystem(ToltecsEngine *vm) : _vm(vm) {
@@ -206,6 +208,10 @@ void MenuSystem::handleKeyDown(const Common::KeyState& kbd) {
_running = false;
} else if (kbd.keycode == Common::KEYCODE_ESCAPE) {
_editingDescription = false;
+ //// Now we turn on the keymapper
+ Common::Keymapper *keymapper = _vm->getEventManager()->getKeymapper();
+ g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, false);
+ keymapper->getKeymap("toltecs-default")->setEnabled(true);
}
}
}
@@ -598,6 +604,11 @@ void MenuSystem::clickSavegameItem(ItemID id) {
_vm->requestLoadgame(savegameItem->_slotNum);
_running = false;
} else {
+ Common::Keymapper *keymapper = _vm->getEventManager()->getKeymapper();
+ // Now we turn off the keymapper so it does not interfere with full text input
+ keymapper->getKeymap("toltecs-default")->setEnabled(false);
+ g_system->setFeatureState(OSystem::kFeatureVirtualKeyboard, true);
+
_editingDescription = true;
_editingDescriptionItem = getItem(id);
_editingDescriptionID = id;
diff --git a/engines/toltecs/metaengine.cpp b/engines/toltecs/metaengine.cpp
index 15546a1fb1b..5d928e68c70 100644
--- a/engines/toltecs/metaengine.cpp
+++ b/engines/toltecs/metaengine.cpp
@@ -31,6 +31,10 @@
#include "toltecs/toltecs.h"
#include "toltecs/detection.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
namespace Toltecs {
static const ADExtraGuiOptionsMap optionsList[] = {
@@ -75,6 +79,8 @@ public:
int getMaximumSaveSlot() const override;
bool 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 ToltecsMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -199,6 +205,67 @@ SaveStateDescriptor ToltecsMetaEngine::querySaveMetaInfos(const char *target, in
return SaveStateDescriptor();
}
+Common::KeymapArray ToltecsMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace Toltecs;
+
+ Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "toltecs-default", _("Default keymappings"));
+
+ Action *act;
+
+ act = new Action(kStandardActionLeftClick, _("Move / Select"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionRightClick, _("Move / Perform Default Action"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeyMap->addAction(act);
+
+ act = new Action("SKIPDLG", _("Skip dialogue"));
+ act->setCustomEngineActionEvent(kActionSkipDialog);
+ act->addDefaultInputMapping("SPACE");
+ act->addDefaultInputMapping("JOY_X");
+ engineKeyMap->addAction(act);
+
+ act = new Action("OPENSAVEMENU", _("Save game"));
+ act->setCustomEngineActionEvent(kActionOpenSaveMenu);
+ act->addDefaultInputMapping("F5");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ engineKeyMap->addAction(act);
+
+ act = new Action("OPENLOADMENU", _("Load game"));
+ act->setCustomEngineActionEvent(kActionOpenLoadMenu);
+ act->addDefaultInputMapping("F7");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ engineKeyMap->addAction(act);
+
+ act = new Action("SKIPMOVIE", _("Skip cutscene"));
+ act->setCustomEngineActionEvent(kActionSkipMovie);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_Y");
+ engineKeyMap->addAction(act);
+
+ act = new Action("MENUOPEN", _("Menu"));
+ act->setCustomEngineActionEvent(kActionMenuOpen);
+ act->addDefaultInputMapping("F10");
+ act->addDefaultInputMapping("JOY_START");
+ engineKeyMap->addAction(act);
+
+ act = new Action("SKIPRIDE", _("Skip ride"));
+ act->setCustomEngineActionEvent(kActionSkipRide);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_Y");
+ engineKeyMap->addAction(act);
+
+
+ return Keymap::arrayOf(engineKeyMap);
+
+}
+
#if PLUGIN_ENABLED_DYNAMIC(TOLTECS)
REGISTER_PLUGIN_DYNAMIC(TOLTECS, PLUGIN_TYPE_ENGINE, ToltecsMetaEngine);
#else
diff --git a/engines/toltecs/movie.cpp b/engines/toltecs/movie.cpp
index 2763b95d178..d54d9ed48fd 100644
--- a/engines/toltecs/movie.cpp
+++ b/engines/toltecs/movie.cpp
@@ -271,12 +271,16 @@ bool MoviePlayer::handleInput() {
Common::EventManager *eventMan = g_system->getEventManager();
while (eventMan->pollEvent(event)) {
switch (event.type) {
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_ESCAPE)
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ switch (event.customType) {
+ case kActionSkipMovie:
return false;
- if (event.kbd.keycode == Common::KEYCODE_F10) {
+ case kActionMenuOpen:
// TODO: The original would bring up a stripped down
// main menu dialog, without the save/restore options.
+ break;
+ default:
+ break;
}
break;
case Common::EVENT_LBUTTONDOWN:
diff --git a/engines/toltecs/script.cpp b/engines/toltecs/script.cpp
index 4ed74423ef9..54db1fa0049 100644
--- a/engines/toltecs/script.cpp
+++ b/engines/toltecs/script.cpp
@@ -1018,11 +1018,11 @@ void ScriptInterpreter::sfHandleInput() {
} else {
// Convert keyboard scancode to IBM PC scancode.
// Only scancodes known to be used (so far) are converted.
- switch (_vm->_keyState.keycode) {
- case Common::KEYCODE_ESCAPE:
+ switch (_vm->_action) {
+ case kActionSkipRide:
keyCode = 1;
break;
- case Common::KEYCODE_F10:
+ case kActionMenuOpen:
keyCode = 68;
break;
default:
diff --git a/engines/toltecs/toltecs.cpp b/engines/toltecs/toltecs.cpp
index e25d8775bbf..b771129ac24 100644
--- a/engines/toltecs/toltecs.cpp
+++ b/engines/toltecs/toltecs.cpp
@@ -362,24 +362,23 @@ void ToltecsEngine::updateInput() {
Common::EventManager *eventMan = _system->getEventManager();
while (eventMan->pollEvent(event)) {
switch (event.type) {
- case Common::EVENT_KEYDOWN:
- _keyState = event.kbd;
-
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ _action = event.customType;
//debug("key: flags = %02X; keycode = %d", _keyState.flags, _keyState.keycode);
- switch (event.kbd.keycode) {
- case Common::KEYCODE_F5:
+ switch (event.customType) {
+ case kActionOpenSaveMenu:
showMenu(kMenuIdSave);
break;
- case Common::KEYCODE_F7:
+ case kActionOpenLoadMenu:
showMenu(kMenuIdLoad);
break;
- case Common::KEYCODE_SPACE:
+ case kActionSkipDialog:
// Skip current dialog line, if a dialog is active
if (_screen->getTalkTextDuration() > 0) {
_sound->stopSpeech();
_screen->finishTalkTextItems();
- _keyState.reset(); // event consumed
+ _action = kActionNone; // event consumed
}
break;
default:
@@ -387,8 +386,8 @@ void ToltecsEngine::updateInput() {
}
break;
- case Common::EVENT_KEYUP:
- _keyState.reset();
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+ _action = kActionNone;
break;
case Common::EVENT_MOUSEMOVE:
_mouseX = event.mouse.x;
@@ -682,7 +681,7 @@ void ToltecsEngine::showMenu(MenuID menuId) {
_screen->finishTalkTextItems();
CursorMan.showMouse(true);
_menuSystem->run(menuId);
- _keyState.reset();
+ _action = kActionNone;
_script->setSwitchLocalDataNear(true);
}
diff --git a/engines/toltecs/toltecs.h b/engines/toltecs/toltecs.h
index 616aec80fe3..4c955c2f73e 100644
--- a/engines/toltecs/toltecs.h
+++ b/engines/toltecs/toltecs.h
@@ -83,6 +83,16 @@ enum SysString {
kSysStrCount
};
+enum TOLTECSAction {
+ kActionNone,
+ kActionSkipDialog,
+ kActionOpenSaveMenu,
+ kActionOpenLoadMenu,
+ kActionSkipMovie,
+ kActionMenuOpen,
+ kActionSkipRide,
+};
+
enum MenuID {
kMenuIdNone,
kMenuIdMain,
@@ -92,7 +102,7 @@ enum MenuID {
};
class ToltecsEngine : public ::Engine {
- Common::KeyState _keyPressed;
+
protected:
Common::Error run() override;
@@ -179,7 +189,7 @@ public:
int16 _walkSpeedY, _walkSpeedX;
- Common::KeyState _keyState;
+ Common::CustomEventType _action;
int16 _mouseX, _mouseY;
int16 _mouseDblClickTicks;
bool _mouseWaitForRelease;
More information about the Scummvm-git-logs
mailing list