mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-04 01:07:22 +00:00
HOPKINS: Add keymapper support
This commit is contained in:
parent
409e069a51
commit
268cb21764
@ -30,6 +30,8 @@
|
||||
#include "common/textconsole.h"
|
||||
#include "graphics/cursorman.h"
|
||||
|
||||
#include "backends/keymapper/keymapper.h"
|
||||
|
||||
namespace Hopkins {
|
||||
|
||||
EventsManager::EventsManager(HopkinsEngine *vm) {
|
||||
@ -251,9 +253,11 @@ void EventsManager::pollEvents() {
|
||||
case Common::EVENT_RETURN_TO_LAUNCHER:
|
||||
return;
|
||||
|
||||
case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
|
||||
handleKey(event);
|
||||
return;
|
||||
case Common::EVENT_KEYDOWN:
|
||||
_keyState[(byte)toupper(event.kbd.ascii)] = true;
|
||||
handleKey(event);
|
||||
return;
|
||||
case Common::EVENT_KEYUP:
|
||||
_keyState[(byte)toupper(event.kbd.ascii)] = false;
|
||||
@ -281,15 +285,15 @@ void EventsManager::pollEvents() {
|
||||
}
|
||||
|
||||
void EventsManager::handleKey(const Common::Event &event) {
|
||||
_escKeyFl = (event.kbd.keycode == Common::KEYCODE_ESCAPE);
|
||||
_escKeyFl = (event.customType == kActionEscape);
|
||||
|
||||
if (event.kbd.keycode == Common::KEYCODE_i || event.kbd.keycode == Common::KEYCODE_TAB)
|
||||
if (event.customType == kActionInventory)
|
||||
_gameKey = KEY_INVENTORY;
|
||||
else if (event.kbd.keycode == Common::KEYCODE_F5)
|
||||
else if (event.customType == kActionSave)
|
||||
_gameKey = KEY_SAVE;
|
||||
else if (event.kbd.keycode == Common::KEYCODE_F7)
|
||||
else if (event.customType == kActionLoad)
|
||||
_gameKey = KEY_LOAD;
|
||||
else if (event.kbd.keycode == Common::KEYCODE_F1 || event.kbd.keycode == Common::KEYCODE_o)
|
||||
else if (event.customType == kActionOptions)
|
||||
_gameKey = KEY_OPTIONS;
|
||||
}
|
||||
|
||||
@ -298,6 +302,10 @@ void EventsManager::handleKey(const Common::Event &event) {
|
||||
* @return Keypress, or -1 if game quit was requested
|
||||
*/
|
||||
int EventsManager::waitKeyPress() {
|
||||
|
||||
Common::Keymapper *keymapper = _vm->getEventManager()->getKeymapper();
|
||||
keymapper->getKeymap("game-shortcuts")->setEnabled(false);
|
||||
|
||||
char foundChar = '\0';
|
||||
|
||||
while (!foundChar) {
|
||||
@ -338,6 +346,8 @@ int EventsManager::waitKeyPress() {
|
||||
g_system->delayMillis(10);
|
||||
}
|
||||
|
||||
keymapper->getKeymap("game-shortcuts")->setEnabled(true);
|
||||
|
||||
// Return character
|
||||
return foundChar;
|
||||
}
|
||||
|
@ -61,6 +61,15 @@ namespace Hopkins {
|
||||
#define SCREEN_WIDTH 640
|
||||
#define SCREEN_HEIGHT 480
|
||||
|
||||
enum HOPKINSAction {
|
||||
kActionNone,
|
||||
kActionEscape,
|
||||
kActionInventory,
|
||||
kActionSave,
|
||||
kActionLoad,
|
||||
kActionOptions
|
||||
};
|
||||
|
||||
enum HopkinsDebugChannels {
|
||||
kDebugPath = 1 << 0,
|
||||
kDebugGraphics = 1 << 1
|
||||
|
@ -30,6 +30,10 @@
|
||||
#include "common/system.h"
|
||||
#include "graphics/surface.h"
|
||||
|
||||
#include "backends/keymapper/action.h"
|
||||
#include "backends/keymapper/keymapper.h"
|
||||
#include "backends/keymapper/standard-actions.h"
|
||||
|
||||
#include "hopkins/detection.h"
|
||||
|
||||
#define MAX_SAVES 99
|
||||
@ -103,6 +107,8 @@ public:
|
||||
int getMaximumSaveSlot() const override;
|
||||
void 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 HopkinsMetaEngine::hasFeature(MetaEngineFeature f) const {
|
||||
@ -195,6 +201,68 @@ SaveStateDescriptor HopkinsMetaEngine::querySaveMetaInfos(const char *target, in
|
||||
return SaveStateDescriptor();
|
||||
}
|
||||
|
||||
Common::KeymapArray HopkinsMetaEngine::initKeymaps(const char *target) const {
|
||||
using namespace Common;
|
||||
using namespace Hopkins;
|
||||
|
||||
Keymap *engineKeyMap = new Keymap(Keymap::kKeymapTypeGame, "hopkins-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", _("Exit/Skip"));
|
||||
act->setCustomEngineActionEvent(kActionEscape);
|
||||
act->addDefaultInputMapping("ESCAPE");
|
||||
act->addDefaultInputMapping("JOY_BACK");
|
||||
gameKeyMap->addAction(act);
|
||||
|
||||
act = new Action("INVENTORY", _("Open inventory"));
|
||||
act->setCustomEngineActionEvent(kActionInventory);
|
||||
act->addDefaultInputMapping("i");
|
||||
act->addDefaultInputMapping("TAB");
|
||||
act->addDefaultInputMapping("JOY_X");
|
||||
gameKeyMap->addAction(act);
|
||||
|
||||
act = new Action("SAVE", _("Save game"));
|
||||
act->setCustomEngineActionEvent(kActionSave);
|
||||
act->addDefaultInputMapping("F5");
|
||||
act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
|
||||
gameKeyMap->addAction(act);
|
||||
|
||||
act = new Action("LOAD", _("Load game"));
|
||||
act->setCustomEngineActionEvent(kActionLoad);
|
||||
act->addDefaultInputMapping("F7");
|
||||
act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
|
||||
gameKeyMap->addAction(act);
|
||||
|
||||
act = new Action("OPTIONS", _("Option dialog"));
|
||||
act->setCustomEngineActionEvent(kActionOptions);
|
||||
act->addDefaultInputMapping("o");
|
||||
act->addDefaultInputMapping("F1");
|
||||
act->addDefaultInputMapping("JOY_Y");
|
||||
gameKeyMap->addAction(act);
|
||||
|
||||
|
||||
|
||||
KeymapArray keymaps(2);
|
||||
keymaps[0] = engineKeyMap;
|
||||
keymaps[1] = gameKeyMap;
|
||||
|
||||
return keymaps;
|
||||
}
|
||||
|
||||
#if PLUGIN_ENABLED_DYNAMIC(HOPKINS)
|
||||
REGISTER_PLUGIN_DYNAMIC(HOPKINS, PLUGIN_TYPE_ENGINE, HopkinsMetaEngine);
|
||||
#else
|
||||
|
Loading…
x
Reference in New Issue
Block a user