[Scummvm-git-logs] scummvm master -> d82d54967627b2ca2b8caaa65df0d97b1ee9f870
bluegr
noreply at scummvm.org
Sat Jul 27 20:49:45 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:
d82d549676 DRACI: Add keymapper support
Commit: d82d54967627b2ca2b8caaa65df0d97b1ee9f870
https://github.com/scummvm/scummvm/commit/d82d54967627b2ca2b8caaa65df0d97b1ee9f870
Author: NabeelShabbir (i210443 at nu.edu.pk)
Date: 2024-07-27T23:49:42+03:00
Commit Message:
DRACI: Add keymapper support
Changed paths:
engines/draci/draci.cpp
engines/draci/draci.h
engines/draci/game.cpp
engines/draci/game.h
engines/draci/metaengine.cpp
diff --git a/engines/draci/draci.cpp b/engines/draci/draci.cpp
index 4989175585e..912af2b87df 100644
--- a/engines/draci/draci.cpp
+++ b/engines/draci/draci.cpp
@@ -267,7 +267,13 @@ void DraciEngine::handleEvents() {
_game->scheduleEnteringRoomUsingGate(_game->prevRoomNum(), 0);
}
break;
- case Common::KEYCODE_ESCAPE: {
+ default:
+ break;
+ }
+ break;
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ switch (event.customType) {
+ case kActionEscape: {
if (_game->getLoopStatus() == kStatusInventory &&
_game->getLoopSubstatus() == kOuterLoop) {
_game->inventoryDone();
@@ -299,22 +305,22 @@ void DraciEngine::handleEvents() {
}
break;
}
- case Common::KEYCODE_m:
+ case kActionMap:
if (_game->getLoopStatus() == kStatusOrdinary) {
const int new_room = _game->getRoomNum() != _game->getMapRoom()
? _game->getMapRoom() : _game->getPreviousRoomNum();
_game->scheduleEnteringRoomUsingGate(new_room, 0);
}
break;
- case Common::KEYCODE_w:
+ case kActionShowWalkMap:
// Show walking map toggle
_showWalkingMap = !_showWalkingMap;
_game->switchWalkingAnimations(_showWalkingMap);
break;
- case Common::KEYCODE_q:
+ case kActionToggleWalkSpeed:
_game->setWantQuickHero(!_game->getWantQuickHero());
break;
- case Common::KEYCODE_i:
+ case kActionInventory:
if (_game->getRoomNum() == _game->getMapRoom() ||
_game->getLoopSubstatus() != kOuterLoop) {
break;
@@ -325,19 +331,19 @@ void DraciEngine::handleEvents() {
_game->inventoryInit();
}
break;
- case Common::KEYCODE_F5:
+ case kActionOpenMainMenu:
if (event.kbd.hasFlags(0)) {
openMainMenuDialog();
}
break;
- case Common::KEYCODE_COMMA:
- case Common::KEYCODE_PERIOD:
- case Common::KEYCODE_SLASH:
+ case kActionTogglePointerItem:
+ case kActionInvRotatePrevious:
+ case kActionInvRotateNext:
if ((_game->getLoopStatus() == kStatusOrdinary ||
_game->getLoopStatus() == kStatusInventory) &&
_game->getLoopSubstatus() == kOuterLoop &&
_game->getRoomNum() != _game->getMapRoom()) {
- _game->inventorySwitch(event.kbd.keycode);
+ _game->inventorySwitch(event.customType);
}
break;
default:
diff --git a/engines/draci/draci.h b/engines/draci/draci.h
index 105a7b84ecc..a815ced8ed6 100644
--- a/engines/draci/draci.h
+++ b/engines/draci/draci.h
@@ -41,6 +41,19 @@ class OSystem;
*/
namespace Draci {
+enum DRACIAction {
+ kActionNone,
+ kActionEscape,
+ kActionMap,
+ kActionShowWalkMap,
+ kActionToggleWalkSpeed,
+ kActionInventory,
+ kActionOpenMainMenu,
+ kActionTogglePointerItem,
+ kActionInvRotatePrevious,
+ kActionInvRotateNext
+};
+
class Screen;
class Mouse;
class Game;
diff --git a/engines/draci/game.cpp b/engines/draci/game.cpp
index b52e813a47a..f5e30e8e394 100644
--- a/engines/draci/game.cpp
+++ b/engines/draci/game.cpp
@@ -958,9 +958,9 @@ void Game::inventoryReload() {
_currentItem = tempItem;
}
-void Game::inventorySwitch(int keycode) {
- switch (keycode) {
- case Common::KEYCODE_SLASH:
+void Game::inventorySwitch(int action) {
+ switch (action) {
+ case kActionTogglePointerItem:
// Switch between holding an item and the ordinary mouse cursor.
if (!getCurrentItem()) {
if (getPreviousItemPosition() >= 0) {
@@ -972,12 +972,12 @@ void Game::inventorySwitch(int keycode) {
putItem(getCurrentItem(), getPreviousItemPosition());
}
break;
- case Common::KEYCODE_COMMA:
- case Common::KEYCODE_PERIOD:
+ case kActionInvRotatePrevious:
+ case kActionInvRotateNext:
// Iterate between the items in the inventory.
if (getCurrentItem()) {
assert(getPreviousItemPosition() >= 0);
- int direction = keycode == Common::KEYCODE_PERIOD ? +1 : -1;
+ int direction = action == kActionInvRotateNext ? +1 : -1;
// Find the next available item.
int pos = getPreviousItemPosition() + direction;
while (true) {
diff --git a/engines/draci/game.h b/engines/draci/game.h
index 9fd1568a234..d07a174407f 100644
--- a/engines/draci/game.h
+++ b/engines/draci/game.h
@@ -300,7 +300,7 @@ public:
void inventoryDraw();
void inventoryDone();
void inventoryReload();
- void inventorySwitch(int keycode);
+ void inventorySwitch(int action);
void dialogueMenu(int dialogueID);
int dialogueDraw();
diff --git a/engines/draci/metaengine.cpp b/engines/draci/metaengine.cpp
index 07f42da11c7..0fecc474733 100644
--- a/engines/draci/metaengine.cpp
+++ b/engines/draci/metaengine.cpp
@@ -22,8 +22,13 @@
#include "draci/draci.h"
#include "draci/saveload.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
#include "base/plugins.h"
#include "common/system.h"
+#include "common/translation.h"
#include "engines/advancedDetector.h"
#include "engines/metaengine.h"
@@ -39,6 +44,8 @@ public:
void removeSaveState(const char *target, int slot) const override;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
Common::Error createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override;
+
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool DraciMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -124,6 +131,90 @@ Common::Error DraciMetaEngine::createInstance(OSystem *syst, Engine **engine, co
return Common::kNoError;
}
+Common::KeymapArray DraciMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace Draci;
+
+ Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "draci-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("ESCAPE", _("Skip intro/Exit map or inventory"));
+ act->setCustomEngineActionEvent(kActionEscape);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("MAP", _("Open map"));
+ act->setCustomEngineActionEvent(kActionMap);
+ act->addDefaultInputMapping("m");
+ act->addDefaultInputMapping("JOY_A");
+ gameKeyMap->addAction(act);
+
+ // I18N: shows where the game actor is able to move
+ act = new Action("WALKMAP", _("Show walking map"));
+ act->setCustomEngineActionEvent(kActionShowWalkMap);
+ act->addDefaultInputMapping("w");
+ act->addDefaultInputMapping("JOY_LEFT_STICK");
+ gameKeyMap->addAction(act);
+
+ act = new Action("TOGGLEWALKSPEED", _("Toggle walk speed"));
+ act->setCustomEngineActionEvent(kActionToggleWalkSpeed);
+ act->addDefaultInputMapping("q");
+ act->addDefaultInputMapping("JOY_RIGHT_STICK");
+ gameKeyMap->addAction(act);
+
+ act = new Action("INV", _("Inventory"));
+ act->setCustomEngineActionEvent(kActionInventory);
+ act->addDefaultInputMapping("i");
+ act->addDefaultInputMapping("JOY_B");
+ gameKeyMap->addAction(act);
+
+ act = new Action("MAINMENU", _("Open main menu"));
+ act->setCustomEngineActionEvent(kActionOpenMainMenu);
+ act->addDefaultInputMapping("F5");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ gameKeyMap->addAction(act);
+
+ act = new Action("POINTERORITEM", _("Toggle between mouse pointer and the last game item"));
+ act->setCustomEngineActionEvent(kActionTogglePointerItem);
+ act->addDefaultInputMapping("SLASH");
+ act->addDefaultInputMapping("JOY_LEFT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("PREVITEM", _("Previous item in inventory"));
+ act->setCustomEngineActionEvent(kActionInvRotatePrevious);
+ act->addDefaultInputMapping("COMMA");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ gameKeyMap->addAction(act);
+
+ act = new Action("NEXTITEM", _("Next item in inventory"));
+ act->setCustomEngineActionEvent(kActionInvRotateNext);
+ act->addDefaultInputMapping("PERIOD");
+ act->addDefaultInputMapping("JOY_UP");
+ gameKeyMap->addAction(act);
+
+
+ KeymapArray keymaps(2);
+ keymaps[0] = engineKeyMap;
+ keymaps[1] = gameKeyMap;
+
+ return keymaps;
+}
+
#if PLUGIN_ENABLED_DYNAMIC(DRACI)
REGISTER_PLUGIN_DYNAMIC(DRACI, PLUGIN_TYPE_ENGINE, DraciMetaEngine);
#else
More information about the Scummvm-git-logs
mailing list