[Scummvm-git-logs] scummvm master -> 44f7f801a1394dbea21fbb887fa7b498d6b03714
sev-
sev at scummvm.org
Thu Aug 27 08:35:04 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:
44f7f801a1 HDB: Add keymapper support
Commit: 44f7f801a1394dbea21fbb887fa7b498d6b03714
https://github.com/scummvm/scummvm/commit/44f7f801a1394dbea21fbb887fa7b498d6b03714
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2020-08-27T10:34:59+02:00
Commit Message:
HDB: Add keymapper support
Changed paths:
engines/hdb/detection.cpp
engines/hdb/hdb.cpp
engines/hdb/input.cpp
engines/hdb/input.h
engines/hdb/menu.cpp
engines/hdb/menu.h
diff --git a/engines/hdb/detection.cpp b/engines/hdb/detection.cpp
index 49491f9555..438ec89e03 100644
--- a/engines/hdb/detection.cpp
+++ b/engines/hdb/detection.cpp
@@ -25,10 +25,15 @@
#include "common/debug.h"
#include "common/translation.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
#include "engines/advancedDetector.h"
#include "graphics/thumbnail.h"
#include "hdb/hdb.h"
+#include "hdb/input.h"
namespace HDB {
@@ -186,6 +191,7 @@ public:
void removeSaveState(const char *target, int slot) const override;
SaveStateList listSaves(const char *target) const override;
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
+ Common::KeymapArray initKeymaps(const char *target) const override;
bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override;
};
@@ -286,6 +292,90 @@ SaveStateDescriptor HDBMetaEngine::querySaveMetaInfos(const char *target, int sl
return SaveStateDescriptor();
}
+Common::KeymapArray HDBMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace HDB;
+
+ Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "hdb", "Hyperspace Delivery Boy!");
+
+ Action *act;
+
+ act = new Action("LCLK", _("Left Click"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionMoveUp, _("Move up"));
+ act->setCustomEngineActionEvent(kHDBActionUp);
+ act->addDefaultInputMapping("UP");
+ act->addDefaultInputMapping("JOY_UP");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionMoveDown, _("Move down"));
+ act->setCustomEngineActionEvent(kHDBActionDown);
+ act->addDefaultInputMapping("DOWN");
+ act->addDefaultInputMapping("JOY_DOWN");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionMoveLeft, _("Move left"));
+ act->setCustomEngineActionEvent(kHDBActionLeft);
+ act->addDefaultInputMapping("LEFT");
+ act->addDefaultInputMapping("JOY_LEFT");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionMoveRight, _("Move right"));
+ act->setCustomEngineActionEvent(kHDBActionRight);
+ act->addDefaultInputMapping("RIGHT");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ engineKeyMap->addAction(act);
+
+ act = new Action("USE", _("Use"));
+ act->setCustomEngineActionEvent(kHDBActionUse);
+ act->addDefaultInputMapping("RETURN");
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ engineKeyMap->addAction(act);
+
+ act = new Action("CLEAR", _("Clear waypoints"));
+ act->setCustomEngineActionEvent(kHDBActionClearWaypoints);
+ act->addDefaultInputMapping("MOUSE_MIDDLE");
+ act->addDefaultInputMapping("JOY_X");
+ engineKeyMap->addAction(act);
+
+#if 0
+ act = new Action("INV", _("Inventory"));
+ act->setCustomEngineActionEvent(kHDBActionInventory);
+ act->addDefaultInputMapping("SPACE");
+ act->addDefaultInputMapping("JOY_Y");
+ engineKeyMap->addAction(act);
+#endif
+
+ act = new Action(kStandardActionPause, _("Pause"));
+ act->setCustomEngineActionEvent(kHDBActionPause);
+ act->addDefaultInputMapping("p");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ engineKeyMap->addAction(act);
+
+ act = new Action(kStandardActionOpenMainMenu, _("Menu"));
+ act->setCustomEngineActionEvent(kHDBActionMenu);
+ act->addDefaultInputMapping("ESCAPE");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ engineKeyMap->addAction(act);
+
+ act = new Action("DEBUG", _("Debug"));
+ act->setCustomEngineActionEvent(kHDBActionDebug);
+ act->addDefaultInputMapping("F1");
+ engineKeyMap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setCustomEngineActionEvent(kHDBActionQuit);
+ act->addDefaultInputMapping("F10");
+ engineKeyMap->addAction(act);
+
+ return Keymap::arrayOf(engineKeyMap);
+}
+
bool HDBMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
if (desc) {
*engine = new HDB::HDBGame(syst, desc);
diff --git a/engines/hdb/hdb.cpp b/engines/hdb/hdb.cpp
index 6a62f66c87..048490dac8 100644
--- a/engines/hdb/hdb.cpp
+++ b/engines/hdb/hdb.cpp
@@ -975,28 +975,16 @@ Common::Error HDBGame::run() {
_input->updateMouse(event.mouse.x, event.mouse.y);
break;
case Common::EVENT_LBUTTONDOWN:
- _input->updateMouseButtons(1, 0, 0);
+ _input->updateMouseButtons(true);
break;
case Common::EVENT_LBUTTONUP:
- _input->updateMouseButtons(-1, 0, 0);
+ _input->updateMouseButtons(false);
break;
- case Common::EVENT_MBUTTONDOWN:
- _input->updateMouseButtons(0, 1, 0);
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ _input->updateActions(event, true, true);
break;
- case Common::EVENT_MBUTTONUP:
- _input->updateMouseButtons(0, -1, 0);
- break;
- case Common::EVENT_RBUTTONDOWN:
- _input->updateMouseButtons(0, 0, 1);
- break;
- case Common::EVENT_RBUTTONUP:
- _input->updateMouseButtons(0, 0, -1);
- break;
- case Common::EVENT_KEYDOWN:
- _input->updateKeys(event, true);
- break;
- case Common::EVENT_KEYUP:
- _input->updateKeys(event, false);
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+ _input->updateActions(event, false, true);
break;
default:
break;
diff --git a/engines/hdb/input.cpp b/engines/hdb/input.cpp
index 6ea04141bc..7088431928 100644
--- a/engines/hdb/input.cpp
+++ b/engines/hdb/input.cpp
@@ -35,20 +35,8 @@ void Input::init() {
_stylusDown = false;
_buttons = 0;
- _keyUp = Common::KEYCODE_UP;
- _keyDown = Common::KEYCODE_DOWN;
- _keyLeft = Common::KEYCODE_LEFT;
- _keyRight = Common::KEYCODE_RIGHT;
- _keyMenu = Common::KEYCODE_ESCAPE;
- _keyUse = Common::KEYCODE_RETURN;
- _keyInv = Common::KEYCODE_SPACE;
- _keyDebug = Common::KEYCODE_F1;
- _keyQuit = Common::KEYCODE_F10;
-
_mouseX = g_hdb->_screenWidth / 2;
_mouseY = g_hdb->_screenHeight / 2;
-
- _mouseLButton = _mouseMButton = _mouseRButton = 0;
}
void Input::setButtons(uint16 b) {
@@ -278,9 +266,6 @@ void Input::stylusDown(int x, int y) {
return;
time = delay;
- _stylusDown = true;
- _stylusDownX = x;
- _stylusDownY = y;
GameState gs = g_hdb->getGameState();
switch (gs) {
@@ -352,8 +337,8 @@ void Input::stylusDown(int x, int y) {
int mx, my;
g_hdb->_map->getMapXY(&mx, &my);
- mx = ((mx + _stylusDownX) / kTileWidth) * kTileWidth;
- my = ((my + _stylusDownY) / kTileHeight) * kTileHeight;
+ mx = ((mx + x) / kTileWidth) * kTileWidth;
+ my = ((my + y) / kTileHeight) * kTileHeight;
g_hdb->_ai->setPlayerXY(mx, my);
g_hdb->startMoveMap(x, y);
@@ -418,10 +403,6 @@ void Input::stylusDown(int x, int y) {
}
}
-void Input::stylusUp(int x, int y) {
- _stylusDown = false;
-}
-
void Input::stylusMove(int x, int y) {
// In a cinematic?
if (g_hdb->_ai->playerLocked() || g_hdb->_ai->playerDead())
@@ -449,18 +430,16 @@ void Input::updateMouse(int newX, int newY) {
g_hdb->_gfx->showPointer(true);
// Check if LButton is being dragged
- if (_mouseLButton)
+ if (_stylusDown)
stylusMove(_mouseX, _mouseY);
}
-void Input::updateMouseButtons(int l, int m, int r) {
- _mouseLButton += l;
- _mouseMButton += m;
- _mouseRButton += r;
+void Input::updateMouseButtons(bool isDown) {
+ _stylusDown = isDown;
// Check if LButton has been pressed
// Check if LButton has been lifted
- if (_mouseLButton) {
+ if (isDown) {
if (g_hdb->isPPC()) {
stylusDown(_mouseX, _mouseY);
return;
@@ -476,36 +455,13 @@ void Input::updateMouseButtons(int l, int m, int r) {
}
stylusDown(_mouseX, _mouseY);
}
- } else if (!_mouseLButton) {
- stylusUp(_mouseX, _mouseY);
- }
-
- // Check if MButton has been pressed
- if (_mouseMButton) {
- if (g_hdb->getPause() && g_hdb->getGameState() == GAME_PLAY)
- return;
-
- g_hdb->_ai->clearWaypoints();
- g_hdb->_sound->playSound(SND_POP);
- }
-
- // Check if RButton has been pressed
- if (_mouseRButton) {
- if (g_hdb->getPause() && g_hdb->getGameState() == GAME_PLAY)
- return;
-
- uint16 buttons = getButtons() | kButtonB;
- setButtons(buttons);
- } else if (!_mouseRButton) {
- uint16 buttons = getButtons() & ~kButtonB;
- setButtons(buttons);
}
}
-void Input::updateKeys(Common::Event event, bool keyDown) {
+void Input::updateActions(Common::Event event, bool keyDown, bool fromMouse) {
static bool current = false, last = false;
- if (keyDown && event.kbd.keycode == _keyQuit) {
+ if (keyDown && event.customType == kHDBActionQuit) {
g_hdb->quitGame();
return;
}
@@ -514,7 +470,7 @@ void Input::updateKeys(Common::Event event, bool keyDown) {
// PAUSE key pressed?
last = current;
- if (keyDown && event.kbd.keycode == Common::KEYCODE_p && g_hdb->getGameState() == GAME_PLAY) {
+ if (keyDown && event.customType == kHDBActionPause && g_hdb->getGameState() == GAME_PLAY) {
current = true;
if (!last) {
g_hdb->togglePause();
@@ -524,50 +480,56 @@ void Input::updateKeys(Common::Event event, bool keyDown) {
current = false;
if (!g_hdb->getPause()) {
- if (event.kbd.keycode == _keyUp) {
+ if (event.customType == kHDBActionUp) {
if (keyDown) {
buttons |= kButtonUp;
- if (g_hdb->_gfx->getPointer())
+ if (g_hdb->_gfx->getPointer() && !fromMouse)
g_hdb->_gfx->showPointer(false);
} else {
buttons &= ~kButtonUp;
}
- } else if (event.kbd.keycode == _keyDown) {
+ } else if (event.customType == kHDBActionDown) {
if (keyDown) {
buttons |= kButtonDown;
- if (g_hdb->_gfx->getPointer())
+ if (g_hdb->_gfx->getPointer() && !fromMouse)
g_hdb->_gfx->showPointer(false);
} else {
buttons &= ~kButtonDown;
}
- } else if (event.kbd.keycode == _keyLeft) {
+ } else if (event.customType == kHDBActionLeft) {
if (keyDown) {
buttons |= kButtonLeft;
- if (g_hdb->_gfx->getPointer())
+ if (g_hdb->_gfx->getPointer() && !fromMouse)
g_hdb->_gfx->showPointer(false);
} else {
buttons &= ~kButtonLeft;
}
- } else if (event.kbd.keycode == _keyRight) {
+ } else if (event.customType == kHDBActionRight) {
if (keyDown) {
buttons |= kButtonRight;
- if (g_hdb->_gfx->getPointer())
+ if (g_hdb->_gfx->getPointer() && !fromMouse)
g_hdb->_gfx->showPointer(false);
} else {
buttons &= ~kButtonRight;
}
- } else if (event.kbd.keycode == _keyUse) {
+ } else if (event.customType == kHDBActionUse) {
if (keyDown) {
buttons |= kButtonB;
- if (g_hdb->_gfx->getPointer())
+ if (g_hdb->_gfx->getPointer() && !fromMouse)
g_hdb->_gfx->showPointer(false);
} else {
buttons &= ~kButtonB;
}
+ } else if (event.customType == kHDBActionClearWaypoints) {
+ if (keyDown) {
+ g_hdb->_ai->clearWaypoints();
+ g_hdb->_sound->playSound(SND_POP);
+ }
}
+ // TODO: Inventory key
}
- if (event.kbd.keycode == _keyMenu) {
+ if (event.customType == kHDBActionMenu) {
if (keyDown) {
buttons |= kButtonA;
g_hdb->_gfx->showPointer(true);
@@ -576,7 +538,7 @@ void Input::updateKeys(Common::Event event, bool keyDown) {
buttons &= ~kButtonA;
g_hdb->_menu->setMenuKey(0);
}
- } else if (event.kbd.keycode == _keyDebug) {
+ } else if (event.customType == kHDBActionDebug) {
if (keyDown)
buttons |= kButtonExit;
else
diff --git a/engines/hdb/input.h b/engines/hdb/input.h
index e870435497..5229055333 100644
--- a/engines/hdb/input.h
+++ b/engines/hdb/input.h
@@ -39,6 +39,21 @@ enum Button {
kButtonExit = 2 << 8
};
+enum HDBAction {
+ kHDBActionNone,
+ kHDBActionUp,
+ kHDBActionDown,
+ kHDBActionLeft,
+ kHDBActionRight,
+ kHDBActionUse,
+ kHDBActionClearWaypoints,
+ kHDBActionInventory,
+ kHDBActionMenu,
+ kHDBActionPause,
+ kHDBActionDebug,
+ kHDBActionQuit
+};
+
class Input {
public:
@@ -51,8 +66,8 @@ public:
void stylusMove(int x, int y);
void updateMouse(int newX, int newY);
- void updateMouseButtons(int l, int m, int r);
- void updateKeys(Common::Event event, bool keyDown);
+ void updateMouseButtons(bool isDown);
+ void updateActions(Common::Event event, bool keyDown, bool fromMouse);
int getMouseX() {
return _mouseX;
@@ -61,29 +76,11 @@ public:
return _mouseY;
}
- void assignKey(int whichKey, Common::KeyCode keyPressed) {
- switch (whichKey) {
- case 0: _keyUp = keyPressed; return;
- case 1: _keyDown = keyPressed; return;
- case 2: _keyLeft = keyPressed; return;
- case 3: _keyRight = keyPressed; return;
- case 4: _keyUse = keyPressed; return;
- default: break;
- }
- }
-
private:
uint16 _buttons; // Flags for buttons
bool _stylusDown;
- int _stylusDownX, _stylusDownY;
int _mouseX, _mouseY;
- int _mouseLButton, _mouseMButton, _mouseRButton;
-
- // Definable Keys
- Common::KeyCode _keyUp, _keyDown, _keyLeft, _keyRight;
- Common::KeyCode _keyInv, _keyUse, _keyMenu, _keyDebug;
- Common::KeyCode _keyQuit;
};
} // End of Namespace
diff --git a/engines/hdb/menu.cpp b/engines/hdb/menu.cpp
index 37ee05bd24..4c9e20d662 100644
--- a/engines/hdb/menu.cpp
+++ b/engines/hdb/menu.cpp
@@ -189,12 +189,6 @@ Menu::Menu() {
_nebulaY = 0; // Used as a flag
_fStars[0].y = 0; // Used as a flag
- _keyAssignUp = Common::KEYCODE_UP;
- _keyAssignDown = Common::KEYCODE_DOWN;
- _keyAssignLeft = Common::KEYCODE_LEFT;
- _keyAssignRight = Common::KEYCODE_RIGHT;
- _keyAssignUse = Common::KEYCODE_RETURN;
-
_gCheckEmpty = nullptr;
_gCheckOff = nullptr;
_gCheckOn = nullptr;
@@ -353,46 +347,6 @@ void Menu::readConfig() {
needFlush = true;
}
- if (ConfMan.hasKey(CONFIG_KEY_UP)) {
- _keyAssignUp = (Common::KeyCode)ConfMan.getInt(CONFIG_KEY_UP);
- g_hdb->_input->assignKey(0, _keyAssignUp);
- } else {
- ConfMan.setInt(CONFIG_KEY_UP, _keyAssignUp);
- needFlush = true;
- }
-
- if (ConfMan.hasKey(CONFIG_KEY_DOWN)) {
- _keyAssignDown = (Common::KeyCode)ConfMan.getInt(CONFIG_KEY_DOWN);
- g_hdb->_input->assignKey(1, _keyAssignDown);
- } else {
- ConfMan.setInt(CONFIG_KEY_DOWN, _keyAssignDown);
- needFlush = true;
- }
-
- if (ConfMan.hasKey(CONFIG_KEY_LEFT)) {
- _keyAssignLeft = (Common::KeyCode)ConfMan.getInt(CONFIG_KEY_LEFT);
- g_hdb->_input->assignKey(2, _keyAssignLeft);
- } else {
- ConfMan.setInt(CONFIG_KEY_LEFT, _keyAssignLeft);
- needFlush = true;
- }
-
- if (ConfMan.hasKey(CONFIG_KEY_RIGHT)) {
- _keyAssignRight = (Common::KeyCode)ConfMan.getInt(CONFIG_KEY_RIGHT);
- g_hdb->_input->assignKey(3, _keyAssignRight);
- } else {
- ConfMan.setInt(CONFIG_KEY_RIGHT, _keyAssignRight);
- needFlush = true;
- }
-
- if (ConfMan.hasKey(CONFIG_KEY_USE)) {
- _keyAssignUse = (Common::KeyCode)ConfMan.getInt(CONFIG_KEY_USE);
- g_hdb->_input->assignKey(4, _keyAssignUse);
- } else {
- ConfMan.setInt(CONFIG_KEY_USE, _keyAssignUse);
- needFlush = true;
- }
-
if (ConfMan.hasKey(CONFIG_CHEAT)) {
g_hdb->setCheatingOn();
debug("Cheating enabled");
@@ -412,12 +366,6 @@ void Menu::writeConfig() {
value = g_hdb->getStarsMonkeystone21();
ConfMan.setInt(CONFIG_MSTONE21, value);
- ConfMan.setInt(CONFIG_KEY_UP, _keyAssignUp);
- ConfMan.setInt(CONFIG_KEY_DOWN, _keyAssignDown);
- ConfMan.setInt(CONFIG_KEY_LEFT, _keyAssignLeft);
- ConfMan.setInt(CONFIG_KEY_RIGHT, _keyAssignRight);
- ConfMan.setInt(CONFIG_KEY_USE, _keyAssignUse);
-
if (g_hdb->getCheatingOn())
ConfMan.set(CONFIG_CHEAT, "1");
diff --git a/engines/hdb/menu.h b/engines/hdb/menu.h
index f5b97cecc8..5d61e5a2e1 100644
--- a/engines/hdb/menu.h
+++ b/engines/hdb/menu.h
@@ -37,12 +37,6 @@ namespace HDB {
#define CONFIG_SOUNDCACHE "sound_cache_max"
#define CONFIG_GFXCACHE "gfx_cache_max"
#define CONFIG_CHEAT "hypercheat"
-
-#define CONFIG_KEY_UP "keyup"
-#define CONFIG_KEY_DOWN "keydown"
-#define CONFIG_KEY_LEFT "keyleft"
-#define CONFIG_KEY_RIGHT "keyright"
-#define CONFIG_KEY_USE "keyuse"
#define CONFIG_VOICES "voices"
#define TITLE_DELAY1 2 // time to wait before OOH OOH
@@ -209,7 +203,6 @@ public:
int _optionsScrollX, _optionsXV, _oBannerY;
int _nextScreen;
- Common::KeyCode _keyAssignUp, _keyAssignDown, _keyAssignLeft, _keyAssignRight, _keyAssignUse;
Picture *_contArrowUp, *_contArrowDown, *_contArrowLeft, *_contArrowRight, *_contAssign, *_warpPlaque;
Picture *_sliderLeft, *_sliderMid, *_sliderRight, *_sliderKnob;
More information about the Scummvm-git-logs
mailing list