[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