[Scummvm-git-logs] scummvm master -> f080bd9f520cb27a23ae68c99503f9d3f77e1d78
yuv422
yuv422 at users.noreply.github.com
Fri Aug 28 13:44:57 UTC 2020
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:
f080bd9f52 DRAGONS: Add keymapper input support
Commit: f080bd9f520cb27a23ae68c99503f9d3f77e1d78
https://github.com/scummvm/scummvm/commit/f080bd9f520cb27a23ae68c99503f9d3f77e1d78
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-08-28T23:41:12+10:00
Commit Message:
DRAGONS: Add keymapper input support
Changed paths:
engines/dragons/POTFILES
engines/dragons/detection.cpp
engines/dragons/dragons.cpp
engines/dragons/dragons.h
engines/dragons/strplayer.cpp
diff --git a/engines/dragons/POTFILES b/engines/dragons/POTFILES
index 59ef65c1fe..4015396618 100644
--- a/engines/dragons/POTFILES
+++ b/engines/dragons/POTFILES
@@ -1,2 +1,3 @@
engines/dragons/detection.cpp
engines/dragons/dragons.cpp
+engines/dragons/detection.cpp
diff --git a/engines/dragons/detection.cpp b/engines/dragons/detection.cpp
index 595f4acf03..c2407eb0af 100644
--- a/engines/dragons/detection.cpp
+++ b/engines/dragons/detection.cpp
@@ -25,6 +25,9 @@
#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"
#include "graphics/thumbnail.h"
@@ -134,6 +137,7 @@ public:
virtual SaveStateList listSaves(const char *target) const;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const;
virtual void removeSaveState(const char *target, int slot) const;
+ Common::KeymapArray initKeymaps(const char *target) const override;
};
bool DragonsMetaEngine::hasFeature(MetaEngineFeature f) const {
@@ -222,6 +226,109 @@ bool DragonsMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADG
return desc != 0;
}
+Common::KeymapArray DragonsMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+
+ Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "dragons", "Blazing Dragons");
+
+ Action *act;
+
+ act = new Action("LCLK", _("Action"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionSelect);
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ engineKeyMap->addAction(act);
+
+ act = new Action("CHANGECOMMAND", _("Change Command"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionChangeCommand);
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeyMap->addAction(act);
+
+ act = new Action("INVENTORY", _("Inventory"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionInventory);
+ act->addDefaultInputMapping("i");
+ engineKeyMap->addAction(act);
+
+ act = new Action("ENTER", _("Enter"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionEnter);
+ act->addDefaultInputMapping("RETURN");
+ act->addDefaultInputMapping("KP_ENTER");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionMoveUp, _("Up"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionUp);
+ act->addDefaultInputMapping("UP");
+ act->addDefaultInputMapping("JOY_UP");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionMoveDown, _("Down"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionDown);
+ act->addDefaultInputMapping("DOWN");
+ act->addDefaultInputMapping("JOY_DOWN");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionMoveLeft, _("Left"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionLeft);
+ act->addDefaultInputMapping("LEFT");
+ act->addDefaultInputMapping("JOY_LEFT");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionMoveRight, _("Right"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionRight);
+ act->addDefaultInputMapping("RIGHT");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ engineKeyMap->addAction(act);
+
+ act = new Action("SQUARE", _("Square"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionSquare);
+ act->addDefaultInputMapping("a");
+ act->addDefaultInputMapping("JOY_X");
+ engineKeyMap->addAction(act);
+
+ act = new Action("TRIANGLE", _("Triangle"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionTriangle);
+ act->addDefaultInputMapping("w");
+ act->addDefaultInputMapping("JOY_Y");
+ engineKeyMap->addAction(act);
+
+ act = new Action("CIRCLE", _("Circle"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionCircle);
+ act->addDefaultInputMapping("d");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeyMap->addAction(act);
+
+ act = new Action("s", _("Cross"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionCross);
+ act->addDefaultInputMapping("s");
+ act->addDefaultInputMapping("JOY_A");
+ engineKeyMap->addAction(act);
+
+ act = new Action("L1", _("Left Shoulder"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionL1);
+ act->addDefaultInputMapping("o");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ engineKeyMap->addAction(act);
+
+ act = new Action("R1", _("Right Shoulder"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionR1);
+ act->addDefaultInputMapping("p");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ engineKeyMap->addAction(act);
+
+ act = new Action("DEBUGGFX", _("Debug Graphics"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionDebugGfx);
+ act->addDefaultInputMapping("TAB");
+ engineKeyMap->addAction(act);
+
+ act = new Action("QUIT", _("Quit Game"));
+ act->setCustomEngineActionEvent(Dragons::kDragonsActionQuit);
+ act->addDefaultInputMapping("C+q");
+ engineKeyMap->addAction(act);
+
+ return Keymap::arrayOf(engineKeyMap);
+}
+
#if PLUGIN_ENABLED_DYNAMIC(DRAGONS)
REGISTER_PLUGIN_DYNAMIC(DRAGONS, PLUGIN_TYPE_ENGINE, DragonsMetaEngine);
#else
diff --git a/engines/dragons/dragons.cpp b/engines/dragons/dragons.cpp
index b7abbef5e5..8130e5cd4b 100644
--- a/engines/dragons/dragons.cpp
+++ b/engines/dragons/dragons.cpp
@@ -148,79 +148,77 @@ void DragonsEngine::updateEvents() {
case Common::EVENT_MOUSEMOVE:
_cursor->updatePosition(event.mouse.x, event.mouse.y);
break;
- case Common::EVENT_LBUTTONUP:
- _leftMouseButtonUp = true;
- _leftMouseButtonDown = false;
- break;
- case Common::EVENT_LBUTTONDOWN:
- _leftMouseButtonDown = true;
- break;
- case Common::EVENT_RBUTTONUP:
- _rightMouseButtonUp = true;
- break;
case Common::EVENT_WHEELDOWN:
_mouseWheel = MOUSE_WHEEL_DOWN;
break;
case Common::EVENT_WHEELUP:
_mouseWheel = MOUSE_WHEEL_UP;
break;
- case Common::EVENT_KEYUP:
- if (event.kbd.keycode == Common::KEYCODE_i) {
- _iKeyUp = true;
- } else if (event.kbd.keycode == Common::KEYCODE_DOWN) {
- _downKeyUp = true;
- _downKeyDown = false;
- } else if (event.kbd.keycode == Common::KEYCODE_UP) {
- _upKeyUp = true;
- _upKeyDown = false;
- } else if (event.kbd.keycode == Common::KEYCODE_RETURN ||
- event.kbd.keycode == Common::KEYCODE_KP_ENTER) {
- _enterKeyUp = true;
- } else if (event.kbd.keycode == Common::KEYCODE_LEFT) {
- _leftKeyUp = true;
- _leftKeyDown = false;
- } else if (event.kbd.keycode == Common::KEYCODE_RIGHT) {
- _rightKeyUp = true;
- _rightKeyDown = false;
- } else if (event.kbd.keycode == Common::KEYCODE_w) {
- _wKeyDown = false;
- } else if (event.kbd.keycode == Common::KEYCODE_a) {
- _aKeyDown = false;
- } else if (event.kbd.keycode == Common::KEYCODE_s) {
- _sKeyDown = false;
- } else if (event.kbd.keycode == Common::KEYCODE_d) {
- _dKeyDown = false;
- } else if (event.kbd.keycode == Common::KEYCODE_o) {
- _oKeyDown = false;
- } else if (event.kbd.keycode == Common::KEYCODE_p) {
- _pKeyDown = false;
- }
- break;
- case Common::EVENT_KEYDOWN:
- if (event.kbd.keycode == Common::KEYCODE_LEFT) {
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ if (event.customType == Dragons::kDragonsActionLeft) {
_leftKeyDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_RIGHT) {
+ } else if (event.customType == Dragons::kDragonsActionRight) {
_rightKeyDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_UP) {
+ } else if (event.customType == Dragons::kDragonsActionUp) {
_upKeyDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_DOWN) {
+ } else if (event.customType == Dragons::kDragonsActionDown) {
_downKeyDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_w) {
- _wKeyDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_a) {
+ } else if (event.customType == Dragons::kDragonsActionSquare) {
_aKeyDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_s) {
- _sKeyDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_d) {
+ } else if (event.customType == Dragons::kDragonsActionTriangle) {
+ _wKeyDown = true;
+ } else if (event.customType == Dragons::kDragonsActionCircle) {
_dKeyDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_o) {
+ } else if (event.customType == Dragons::kDragonsActionCross) {
+ _sKeyDown = true;
+ } else if (event.customType == Dragons::kDragonsActionL1) {
_oKeyDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_p) {
+ } else if (event.customType == Dragons::kDragonsActionR1) {
_pKeyDown = true;
- } else if (event.kbd.keycode == Common::KEYCODE_TAB) {
+ } else if (event.customType == Dragons::kDragonsActionSelect) {
+ _leftMouseButtonDown = true;
+ } else if (event.customType == Dragons::kDragonsActionDebugGfx) {
_debugMode = !_debugMode;
}
break;
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+ if (event.customType == Dragons::kDragonsActionLeft) {
+ _leftKeyUp = true;
+ _leftKeyDown = false;
+ } else if (event.customType == Dragons::kDragonsActionRight) {
+ _rightKeyUp = true;
+ _rightKeyDown = false;
+ } else if (event.customType == Dragons::kDragonsActionUp) {
+ _upKeyUp = true;
+ _upKeyDown = false;
+ } else if (event.customType == Dragons::kDragonsActionDown) {
+ _downKeyUp = true;
+ _downKeyDown = false;
+ } else if (event.customType == Dragons::kDragonsActionSquare) {
+ _aKeyDown = false;
+ } else if (event.customType == Dragons::kDragonsActionTriangle) {
+ _wKeyDown = false;
+ } else if (event.customType == Dragons::kDragonsActionCircle) {
+ _dKeyDown = false;
+ } else if (event.customType == Dragons::kDragonsActionCross) {
+ _sKeyDown = false;
+ } else if (event.customType == Dragons::kDragonsActionL1) {
+ _oKeyDown = false;
+ } else if (event.customType == Dragons::kDragonsActionR1) {
+ _pKeyDown = false;
+ } else if (event.customType == Dragons::kDragonsActionSelect) {
+ _leftMouseButtonUp = true;
+ _leftMouseButtonDown = false;
+ } else if (event.customType == Dragons::kDragonsActionChangeCommand) {
+ _rightMouseButtonUp = true;
+ } else if (event.customType == Dragons::kDragonsActionInventory) {
+ _iKeyUp = true;
+ } else if (event.customType == Dragons::kDragonsActionEnter) {
+ _enterKeyUp = true;
+ } else if (event.customType == Dragons::kDragonsActionQuit) {
+ quitGame();
+ }
+ break;
default:
break;
}
diff --git a/engines/dragons/dragons.h b/engines/dragons/dragons.h
index a8671545f1..cabdd9170a 100644
--- a/engines/dragons/dragons.h
+++ b/engines/dragons/dragons.h
@@ -109,6 +109,29 @@ struct PaletteCyclingInstruction {
int16 updateCounter;
};
+enum DragonsAction {
+ kDragonsActionNone,
+ kDragonsActionUp,
+ kDragonsActionDown,
+ kDragonsActionLeft,
+ kDragonsActionRight,
+ kDragonsActionSquare,
+ kDragonsActionTriangle,
+ kDragonsActionCircle,
+ kDragonsActionCross,
+ kDragonsActionL1,
+ kDragonsActionR1,
+ kDragonsActionSelect,
+ kDragonsActionChangeCommand,
+ kDragonsActionInventory,
+ kDragonsActionEnter,
+ kDragonsActionMenu,
+ kDragonsActionPause,
+ kDragonsActionDebug,
+ kDragonsActionDebugGfx,
+ kDragonsActionQuit
+};
+
class BigfileArchive;
class BackgroundResourceLoader;
class Cursor;
diff --git a/engines/dragons/strplayer.cpp b/engines/dragons/strplayer.cpp
index dc367f4400..9f83e8da1f 100644
--- a/engines/dragons/strplayer.cpp
+++ b/engines/dragons/strplayer.cpp
@@ -50,7 +50,8 @@ void StrPlayer::playVideo(const Common::String &filename) {
Common::Event event;
while (_vm->_system->getEventManager()->pollEvent(event)) {
- if ((event.type == Common::EVENT_KEYDOWN && event.kbd.keycode == Common::KEYCODE_ESCAPE) || event.type == Common::EVENT_LBUTTONUP) {
+ if (event.type == Common::EVENT_CUSTOM_ENGINE_ACTION_END
+ && (event.customType == Dragons::kDragonsActionSelect || event.customType == Dragons::kDragonsActionEnter)) {
skipped = true;
}
}
More information about the Scummvm-git-logs
mailing list