[Scummvm-git-logs] scummvm master -> 6ed8dea8297480d4c42ed0d38a23734df48067e6
bgK
bastien.bouclet at gmail.com
Sun Mar 15 16:35:14 UTC 2020
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
496edf905f ZVISION: Add keymapper support
db87cb0c63 ZVISION: Use custom engine actions for the menubar shortcuts
6ed8dea829 ZVISION: Disable the keymap when InputControl is focused
Commit: 496edf905f3e5c5c485b4f167f1e664918393658
https://github.com/scummvm/scummvm/commit/496edf905f3e5c5c485b4f167f1e664918393658
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2020-03-15T17:35:09+01:00
Commit Message:
ZVISION: Add keymapper support
Changed paths:
engines/zvision/core/events.cpp
engines/zvision/detection.cpp
engines/zvision/graphics/render_manager.cpp
engines/zvision/video/video.cpp
engines/zvision/zvision.cpp
engines/zvision/zvision.h
diff --git a/engines/zvision/core/events.cpp b/engines/zvision/core/events.cpp
index 4ef551af94..070a313d09 100644
--- a/engines/zvision/core/events.cpp
+++ b/engines/zvision/core/events.cpp
@@ -222,25 +222,25 @@ void ZVision::processEvents() {
onMouseMove(_event.mouse);
break;
- case Common::EVENT_KEYDOWN: {
- switch (_event.kbd.keycode) {
- case Common::KEYCODE_LEFT:
- case Common::KEYCODE_RIGHT:
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ switch ((ZVisionAction)_event.customType) {
+ case kZVisionActionLeft:
+ case kZVisionActionRight:
if (_renderManager->getRenderTable()->getRenderState() == RenderTable::PANORAMA)
- _keyboardVelocity = (_event.kbd.keycode == Common::KEYCODE_LEFT ?
+ _keyboardVelocity = (_event.customType == kZVisionActionLeft ?
-_scriptManager->getStateValue(StateKey_KbdRotateSpeed) :
_scriptManager->getStateValue(StateKey_KbdRotateSpeed)) * 2;
break;
- case Common::KEYCODE_UP:
- case Common::KEYCODE_DOWN:
+ case kZVisionActionUp:
+ case kZVisionActionDown:
if (_renderManager->getRenderTable()->getRenderState() == RenderTable::TILT)
- _keyboardVelocity = (_event.kbd.keycode == Common::KEYCODE_UP ?
+ _keyboardVelocity = (_event.customType == kZVisionActionUp ?
-_scriptManager->getStateValue(StateKey_KbdRotateSpeed) :
_scriptManager->getStateValue(StateKey_KbdRotateSpeed)) * 2;
break;
- case Common::KEYCODE_F10: {
+ case kZVisionActionShowFPS: {
Common::String fpsStr = Common::String::format("FPS: %d", getFPS());
_renderManager->showDebugMsg(fpsStr);
}
@@ -248,7 +248,26 @@ void ZVision::processEvents() {
default:
break;
}
+ break;
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+ switch ((ZVisionAction)_event.customType) {
+ case kZVisionActionLeft:
+ case kZVisionActionRight:
+ if (_renderManager->getRenderTable()->getRenderState() == RenderTable::PANORAMA)
+ _keyboardVelocity = 0;
+ break;
+ case kZVisionActionUp:
+ case kZVisionActionDown:
+ if (_renderManager->getRenderTable()->getRenderState() == RenderTable::TILT)
+ _keyboardVelocity = 0;
+ break;
+ default:
+ break;
+ }
+ break;
+
+ case Common::EVENT_KEYDOWN: {
uint8 vkKey = getZvisionKey(_event.kbd.keycode);
_scriptManager->setStateValue(StateKey_KeyPress, vkKey);
@@ -260,20 +279,6 @@ void ZVision::processEvents() {
break;
case Common::EVENT_KEYUP:
_scriptManager->addEvent(_event);
- switch (_event.kbd.keycode) {
- case Common::KEYCODE_LEFT:
- case Common::KEYCODE_RIGHT:
- if (_renderManager->getRenderTable()->getRenderState() == RenderTable::PANORAMA)
- _keyboardVelocity = 0;
- break;
- case Common::KEYCODE_UP:
- case Common::KEYCODE_DOWN:
- if (_renderManager->getRenderTable()->getRenderState() == RenderTable::TILT)
- _keyboardVelocity = 0;
- break;
- default:
- break;
- }
break;
default:
break;
diff --git a/engines/zvision/detection.cpp b/engines/zvision/detection.cpp
index 6b01fe97bd..8199dbfe46 100644
--- a/engines/zvision/detection.cpp
+++ b/engines/zvision/detection.cpp
@@ -30,6 +30,10 @@
#include "zvision/file/save_manager.h"
#include "zvision/scripting/script_manager.h"
+#include "backends/keymapper/action.h"
+#include "backends/keymapper/keymapper.h"
+#include "backends/keymapper/standard-actions.h"
+
#include "common/translation.h"
#include "common/savefile.h"
#include "common/str-array.h"
@@ -76,6 +80,7 @@ public:
}
bool hasFeature(MetaEngineFeature f) const override;
+ Common::KeymapArray initKeymaps(const char *target) const override;
bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const override;
SaveStateList listSaves(const char *target) const override;
int getMaximumSaveSlot() const override;
@@ -120,6 +125,131 @@ bool ZVision::ZVision::canSaveGameStateCurrently() {
return !_videoIsPlaying && currentLocation.world != 'g' && !(currentLocation.room == 'j' || currentLocation.room == 'a');
}
+Common::KeymapArray ZVisionMetaEngine::initKeymaps(const char *target) const {
+ using namespace Common;
+ using namespace ZVision;
+
+ Keymap *mainKeymap = new Keymap(Keymap::kKeymapTypeGame, mainKeymapId, "Z-Vision");
+
+ Action *act;
+
+ act = new Action("LCLK", _("Left Click"));
+ act->setLeftClickEvent();
+ act->addDefaultInputMapping("MOUSE_LEFT");
+ act->addDefaultInputMapping("JOY_A");
+ mainKeymap->addAction(act);
+
+ act = new Action("RCLK", _("Right Click"));
+ act->setRightClickEvent();
+ act->addDefaultInputMapping("MOUSE_RIGHT");
+ act->addDefaultInputMapping("JOY_B");
+ mainKeymap->addAction(act);
+
+ act = new Action(kStandardActionMoveUp, _("Look Up"));
+ act->setCustomEngineActionEvent(kZVisionActionUp);
+ act->addDefaultInputMapping("UP");
+ act->addDefaultInputMapping("JOY_UP");
+ mainKeymap->addAction(act);
+
+ act = new Action(kStandardActionMoveDown, _("Look Down"));
+ act->setCustomEngineActionEvent(kZVisionActionDown);
+ act->addDefaultInputMapping("DOWN");
+ act->addDefaultInputMapping("JOY_DOWN");
+ mainKeymap->addAction(act);
+
+ act = new Action(kStandardActionMoveLeft, _("Turn Left"));
+ act->setCustomEngineActionEvent(kZVisionActionLeft);
+ act->addDefaultInputMapping("LEFT");
+ act->addDefaultInputMapping("JOY_LEFT");
+ mainKeymap->addAction(act);
+
+ act = new Action(kStandardActionMoveRight, _("Turn Right"));
+ act->setCustomEngineActionEvent(kZVisionActionRight);
+ act->addDefaultInputMapping("RIGHT");
+ act->addDefaultInputMapping("JOY_RIGHT");
+ mainKeymap->addAction(act);
+
+ act = new Action("FPS", _("Show FPS"));
+ act->setCustomEngineActionEvent(kZVisionActionShowFPS);
+ act->addDefaultInputMapping("F10");
+ mainKeymap->addAction(act);
+
+ act = new Action("HELP", _("Help"));
+ act->setKeyEvent(KEYCODE_F1);
+ act->addDefaultInputMapping("F1");
+ act->addDefaultInputMapping("JOY_LEFT_TRIGGER");
+ mainKeymap->addAction(act);
+
+ act = new Action("INV", _("Inventory"));
+ act->setKeyEvent(KEYCODE_F5);
+ act->addDefaultInputMapping("F5");
+ act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
+ mainKeymap->addAction(act);
+
+ act = new Action("SPELL", _("Spellbook"));
+ act->setKeyEvent(KEYCODE_F6);
+ act->addDefaultInputMapping("F6");
+ act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
+ mainKeymap->addAction(act);
+
+ act = new Action("SCORE", _("Score"));
+ act->setKeyEvent(KEYCODE_F7);
+ act->addDefaultInputMapping("F7");
+ act->addDefaultInputMapping("JOY_RIGHT_TRIGGER");
+ mainKeymap->addAction(act);
+
+ act = new Action("AWAY", _("Put away object"));
+ act->setKeyEvent(KEYCODE_F8);
+ act->addDefaultInputMapping("F8");
+ act->addDefaultInputMapping("JOY_X");
+ mainKeymap->addAction(act);
+
+ act = new Action("COIN", _("Extract coin"));
+ act->setKeyEvent(KEYCODE_F9);
+ act->addDefaultInputMapping("F9");
+ act->addDefaultInputMapping("JOY_Y");
+ mainKeymap->addAction(act);
+
+ act = new Action(kStandardActionSave, _("Save"));
+ act->setKeyEvent(KeyState(KEYCODE_s, 's', KBD_CTRL));
+ act->addDefaultInputMapping("C+s");
+ mainKeymap->addAction(act);
+
+ act = new Action(kStandardActionLoad, _("Restore"));
+ act->setKeyEvent(KeyState(KEYCODE_r, 'r', KBD_CTRL));
+ act->addDefaultInputMapping("C+r");
+ mainKeymap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setKeyEvent(KeyState(KEYCODE_q, 'q', KBD_CTRL));
+ act->addDefaultInputMapping("C+q");
+ mainKeymap->addAction(act);
+
+ act = new Action(kStandardActionOpenSettings, _("Preferences"));
+ act->setKeyEvent(KeyState(KEYCODE_p, 'p', KBD_CTRL));
+ act->addDefaultInputMapping("C+p");
+ mainKeymap->addAction(act);
+
+ Keymap *cutscenesKeymap = new Keymap(Keymap::kKeymapTypeGame, cutscenesKeymapId, "Z-Vision - Cutscenes");
+
+ act = new Action(kStandardActionSkip, _("Skip cutscene"));
+ act->setCustomEngineActionEvent(kZVisionActionSkipCutscene);
+ act->addDefaultInputMapping("SPACE");
+ act->addDefaultInputMapping("JOY_Y");
+ cutscenesKeymap->addAction(act);
+
+ act = new Action("QUIT", _("Quit"));
+ act->setCustomEngineActionEvent(kZVisionActionQuit);
+ act->addDefaultInputMapping("C+q");
+ cutscenesKeymap->addAction(act);
+
+ KeymapArray keymaps(2);
+ keymaps[0] = mainKeymap;
+ keymaps[1] = cutscenesKeymap;
+
+ return keymaps;
+}
+
bool ZVisionMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
const ZVision::ZVisionGameDescription *gd = (const ZVision::ZVisionGameDescription *)desc;
if (gd) {
diff --git a/engines/zvision/graphics/render_manager.cpp b/engines/zvision/graphics/render_manager.cpp
index f660e1496a..27418beb95 100644
--- a/engines/zvision/graphics/render_manager.cpp
+++ b/engines/zvision/graphics/render_manager.cpp
@@ -992,6 +992,7 @@ bool RenderManager::askQuestion(const Common::String &str) {
// Spanish: si/no
// French Nemesis: F4/any other key
// French ZGI: oui/non
+ // TODO: Handle this using the keymapper
switch (evnt.kbd.keycode) {
case Common::KEYCODE_y:
if (_engine->getLanguage() == Common::EN_ANY)
diff --git a/engines/zvision/video/video.cpp b/engines/zvision/video/video.cpp
index 6e756c0623..b197bb3267 100644
--- a/engines/zvision/video/video.cpp
+++ b/engines/zvision/video/video.cpp
@@ -29,6 +29,8 @@
#include "engines/util.h"
#include "graphics/surface.h"
+#include "backends/keymapper/keymap.h"
+
#include "zvision/zvision.h"
#include "zvision/core/clock.h"
#include "zvision/graphics/render_manager.h"
@@ -91,18 +93,20 @@ void ZVision::playVideo(Video::VideoDecoder &vid, const Common::Rect &destRect,
vid.start();
_videoIsPlaying = true;
+ _cutscenesKeymap->setEnabled(true);
+ _mainKeymap->setEnabled(false);
+
// Only continue while the video is still playing
while (!shouldQuit() && !vid.endOfVideo() && vid.isPlaying()) {
// Check for engine quit and video stop key presses
while (_eventMan->pollEvent(_event)) {
switch (_event.type) {
- case Common::EVENT_KEYDOWN:
- switch (_event.kbd.keycode) {
- case Common::KEYCODE_q:
- if (_event.kbd.hasFlags(Common::KBD_CTRL))
- quitGame();
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ switch ((ZVisionAction)_event.customType) {
+ case kZVisionActionQuit:
+ quitGame();
break;
- case Common::KEYCODE_SPACE:
+ case kZVisionActionSkipCutscene:
if (skippable) {
vid.stop();
}
@@ -137,6 +141,9 @@ void ZVision::playVideo(Video::VideoDecoder &vid, const Common::Rect &destRect,
_system->delayMillis(vid.getTimeToNextFrame() / 2);
}
+ _cutscenesKeymap->setEnabled(false);
+ _mainKeymap->setEnabled(true);
+
_videoIsPlaying = false;
_clock.start();
diff --git a/engines/zvision/zvision.cpp b/engines/zvision/zvision.cpp
index 2afb744f83..b1df50f28f 100644
--- a/engines/zvision/zvision.cpp
+++ b/engines/zvision/zvision.cpp
@@ -35,6 +35,9 @@
#include "zvision/text/truetype_font.h"
#include "zvision/sound/midi.h"
+#include "backends/keymapper/keymap.h"
+#include "backends/keymapper/keymapper.h"
+
#include "common/config-manager.h"
#include "common/str.h"
#include "common/debug.h"
@@ -76,6 +79,9 @@ struct zvisionIniSettings {
{"mpegmovies", StateKey_MPEGMovies, -1, true, true} // Zork: Grand Inquisitor DVD hi-res MPEG movies (0 = normal, 1 = hires, 2 = disable option)
};
+const char *mainKeymapId = "zvision";
+const char *cutscenesKeymapId = "zvision-cutscenes";
+
ZVision::ZVision(OSystem *syst, const ZVisionGameDescription *gameDesc)
: Engine(syst),
_gameDescription(gameDesc),
@@ -200,6 +206,12 @@ void ZVision::initialize() {
initScreen();
+ Common::Keymapper *keymapper = _system->getEventManager()->getKeymapper();
+ _mainKeymap = keymapper->getKeymap(mainKeymapId);
+ _mainKeymap->setEnabled(true);
+ _cutscenesKeymap = keymapper->getKeymap(cutscenesKeymapId);
+ _cutscenesKeymap->setEnabled(false);
+
// Register random source
_rnd = new Common::RandomSource("zvision");
diff --git a/engines/zvision/zvision.h b/engines/zvision/zvision.h
index 31ebaef4bb..291fe6789a 100644
--- a/engines/zvision/zvision.h
+++ b/engines/zvision/zvision.h
@@ -36,6 +36,10 @@
#include "gui/debugger.h"
+namespace Common {
+class Keymap;
+}
+
namespace Video {
class VideoDecoder;
}
@@ -96,6 +100,22 @@ enum ZVisionFeatures {
GF_DVD = (1 << 0) // ZGI DVD version
};
+enum ZVisionAction {
+ kZVisionActionNone,
+ kZVisionActionUp,
+ kZVisionActionDown,
+ kZVisionActionLeft,
+ kZVisionActionRight,
+ kZVisionActionShowFPS,
+ kZVisionActionSkipCutscene,
+ kZVisionActionQuit,
+
+ kZVisionActionCount
+};
+
+extern const char *mainKeymapId;
+extern const char *cutscenesKeymapId;
+
class ZVision : public Engine {
public:
ZVision(OSystem *syst, const ZVisionGameDescription *gameDesc);
@@ -139,6 +159,8 @@ private:
// To prevent allocation every time we process events
Common::Event _event;
+ Common::Keymap *_mainKeymap, *_cutscenesKeymap;
+
int _frameRenderDelay;
int _renderedFrameCount;
int _fps;
Commit: db87cb0c63582b82cf6e175f3fc52fe4265b0f9d
https://github.com/scummvm/scummvm/commit/db87cb0c63582b82cf6e175f3fc52fe4265b0f9d
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2020-03-15T17:35:09+01:00
Commit Message:
ZVISION: Use custom engine actions for the menubar shortcuts
Changed paths:
engines/zvision/core/events.cpp
engines/zvision/detection.cpp
engines/zvision/zvision.h
diff --git a/engines/zvision/core/events.cpp b/engines/zvision/core/events.cpp
index 070a313d09..955700ef04 100644
--- a/engines/zvision/core/events.cpp
+++ b/engines/zvision/core/events.cpp
@@ -68,31 +68,6 @@ uint8 ZVision::getBufferedKey(uint8 pos) {
return _cheatBuffer[KEYBUF_SIZE - pos - 1];
}
-void ZVision::shortKeys(Common::Event event) {
- if (event.kbd.hasFlags(Common::KBD_CTRL)) {
- switch (event.kbd.keycode) {
- case Common::KEYCODE_s:
- if (_menu->getEnable() & kMenubarSave)
- _scriptManager->changeLocation('g', 'j', 's', 'e', 0);
- break;
- case Common::KEYCODE_r:
- if (_menu->getEnable() & kMenubarRestore)
- _scriptManager->changeLocation('g', 'j', 'r', 'e', 0);
- break;
- case Common::KEYCODE_p:
- if (_menu->getEnable() & kMenubarSettings)
- _scriptManager->changeLocation('g', 'j', 'p', 'e', 0);
- break;
- case Common::KEYCODE_q:
- if (_menu->getEnable() & kMenubarExit)
- ifQuit();
- break;
- default:
- break;
- }
- }
-}
-
void ZVision::cheatCodes(uint8 key) {
Location loc = _scriptManager->getCurrentLocation();
// Do not process cheat codes while in the game menus
@@ -240,6 +215,26 @@ void ZVision::processEvents() {
_scriptManager->getStateValue(StateKey_KbdRotateSpeed)) * 2;
break;
+ case kZVisionActionSave:
+ if (_menu->getEnable() & kMenubarSave)
+ _scriptManager->changeLocation('g', 'j', 's', 'e', 0);
+ break;
+
+ case kZVisionActionRestore:
+ if (_menu->getEnable() & kMenubarRestore)
+ _scriptManager->changeLocation('g', 'j', 'r', 'e', 0);
+ break;
+
+ case kZVisionActionPreferences:
+ if (_menu->getEnable() & kMenubarSettings)
+ _scriptManager->changeLocation('g', 'j', 'p', 'e', 0);
+ break;
+
+ case kZVisionActionQuit:
+ if (_menu->getEnable() & kMenubarExit)
+ ifQuit();
+ break;
+
case kZVisionActionShowFPS: {
Common::String fpsStr = Common::String::format("FPS: %d", getFPS());
_renderManager->showDebugMsg(fpsStr);
@@ -273,7 +268,6 @@ void ZVision::processEvents() {
_scriptManager->setStateValue(StateKey_KeyPress, vkKey);
_scriptManager->addEvent(_event);
- shortKeys(_event);
cheatCodes(vkKey);
}
break;
diff --git a/engines/zvision/detection.cpp b/engines/zvision/detection.cpp
index 8199dbfe46..133967cd58 100644
--- a/engines/zvision/detection.cpp
+++ b/engines/zvision/detection.cpp
@@ -211,22 +211,22 @@ Common::KeymapArray ZVisionMetaEngine::initKeymaps(const char *target) const {
mainKeymap->addAction(act);
act = new Action(kStandardActionSave, _("Save"));
- act->setKeyEvent(KeyState(KEYCODE_s, 's', KBD_CTRL));
+ act->setCustomEngineActionEvent(kZVisionActionSave);
act->addDefaultInputMapping("C+s");
mainKeymap->addAction(act);
act = new Action(kStandardActionLoad, _("Restore"));
- act->setKeyEvent(KeyState(KEYCODE_r, 'r', KBD_CTRL));
+ act->setCustomEngineActionEvent(kZVisionActionRestore);
act->addDefaultInputMapping("C+r");
mainKeymap->addAction(act);
act = new Action("QUIT", _("Quit"));
- act->setKeyEvent(KeyState(KEYCODE_q, 'q', KBD_CTRL));
+ act->setCustomEngineActionEvent(kZVisionActionQuit);
act->addDefaultInputMapping("C+q");
mainKeymap->addAction(act);
act = new Action(kStandardActionOpenSettings, _("Preferences"));
- act->setKeyEvent(KeyState(KEYCODE_p, 'p', KBD_CTRL));
+ act->setCustomEngineActionEvent(kZVisionActionPreferences);
act->addDefaultInputMapping("C+p");
mainKeymap->addAction(act);
diff --git a/engines/zvision/zvision.h b/engines/zvision/zvision.h
index 291fe6789a..d920b37042 100644
--- a/engines/zvision/zvision.h
+++ b/engines/zvision/zvision.h
@@ -106,9 +106,12 @@ enum ZVisionAction {
kZVisionActionDown,
kZVisionActionLeft,
kZVisionActionRight,
+ kZVisionActionSave,
+ kZVisionActionRestore,
+ kZVisionActionQuit,
+ kZVisionActionPreferences,
kZVisionActionShowFPS,
kZVisionActionSkipCutscene,
- kZVisionActionQuit,
kZVisionActionCount
};
@@ -276,7 +279,6 @@ private:
void onMouseMove(const Common::Point &pos);
void registerDefaultSettings();
- void shortKeys(Common::Event);
void cheatCodes(uint8 key);
void pushKeyToCheatBuf(uint8 key);
Commit: 6ed8dea8297480d4c42ed0d38a23734df48067e6
https://github.com/scummvm/scummvm/commit/6ed8dea8297480d4c42ed0d38a23734df48067e6
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2020-03-15T17:35:09+01:00
Commit Message:
ZVISION: Disable the keymap when InputControl is focused
Changed paths:
engines/zvision/detection.cpp
engines/zvision/scripting/controls/input_control.cpp
engines/zvision/scripting/controls/input_control.h
engines/zvision/video/video.cpp
engines/zvision/zvision.cpp
engines/zvision/zvision.h
diff --git a/engines/zvision/detection.cpp b/engines/zvision/detection.cpp
index 133967cd58..2ad7e2aa40 100644
--- a/engines/zvision/detection.cpp
+++ b/engines/zvision/detection.cpp
@@ -145,90 +145,92 @@ Common::KeymapArray ZVisionMetaEngine::initKeymaps(const char *target) const {
act->addDefaultInputMapping("JOY_B");
mainKeymap->addAction(act);
+ Keymap *gameKeymap = new Keymap(Keymap::kKeymapTypeGame, gameKeymapId, "Z-Vision - Game");
+
act = new Action(kStandardActionMoveUp, _("Look Up"));
act->setCustomEngineActionEvent(kZVisionActionUp);
act->addDefaultInputMapping("UP");
act->addDefaultInputMapping("JOY_UP");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action(kStandardActionMoveDown, _("Look Down"));
act->setCustomEngineActionEvent(kZVisionActionDown);
act->addDefaultInputMapping("DOWN");
act->addDefaultInputMapping("JOY_DOWN");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action(kStandardActionMoveLeft, _("Turn Left"));
act->setCustomEngineActionEvent(kZVisionActionLeft);
act->addDefaultInputMapping("LEFT");
act->addDefaultInputMapping("JOY_LEFT");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action(kStandardActionMoveRight, _("Turn Right"));
act->setCustomEngineActionEvent(kZVisionActionRight);
act->addDefaultInputMapping("RIGHT");
act->addDefaultInputMapping("JOY_RIGHT");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action("FPS", _("Show FPS"));
act->setCustomEngineActionEvent(kZVisionActionShowFPS);
act->addDefaultInputMapping("F10");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action("HELP", _("Help"));
act->setKeyEvent(KEYCODE_F1);
act->addDefaultInputMapping("F1");
act->addDefaultInputMapping("JOY_LEFT_TRIGGER");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action("INV", _("Inventory"));
act->setKeyEvent(KEYCODE_F5);
act->addDefaultInputMapping("F5");
act->addDefaultInputMapping("JOY_LEFT_SHOULDER");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action("SPELL", _("Spellbook"));
act->setKeyEvent(KEYCODE_F6);
act->addDefaultInputMapping("F6");
act->addDefaultInputMapping("JOY_RIGHT_SHOULDER");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action("SCORE", _("Score"));
act->setKeyEvent(KEYCODE_F7);
act->addDefaultInputMapping("F7");
act->addDefaultInputMapping("JOY_RIGHT_TRIGGER");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action("AWAY", _("Put away object"));
act->setKeyEvent(KEYCODE_F8);
act->addDefaultInputMapping("F8");
act->addDefaultInputMapping("JOY_X");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action("COIN", _("Extract coin"));
act->setKeyEvent(KEYCODE_F9);
act->addDefaultInputMapping("F9");
act->addDefaultInputMapping("JOY_Y");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action(kStandardActionSave, _("Save"));
act->setCustomEngineActionEvent(kZVisionActionSave);
act->addDefaultInputMapping("C+s");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action(kStandardActionLoad, _("Restore"));
act->setCustomEngineActionEvent(kZVisionActionRestore);
act->addDefaultInputMapping("C+r");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action("QUIT", _("Quit"));
act->setCustomEngineActionEvent(kZVisionActionQuit);
act->addDefaultInputMapping("C+q");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
act = new Action(kStandardActionOpenSettings, _("Preferences"));
act->setCustomEngineActionEvent(kZVisionActionPreferences);
act->addDefaultInputMapping("C+p");
- mainKeymap->addAction(act);
+ gameKeymap->addAction(act);
Keymap *cutscenesKeymap = new Keymap(Keymap::kKeymapTypeGame, cutscenesKeymapId, "Z-Vision - Cutscenes");
@@ -243,9 +245,10 @@ Common::KeymapArray ZVisionMetaEngine::initKeymaps(const char *target) const {
act->addDefaultInputMapping("C+q");
cutscenesKeymap->addAction(act);
- KeymapArray keymaps(2);
+ KeymapArray keymaps(3);
keymaps[0] = mainKeymap;
- keymaps[1] = cutscenesKeymap;
+ keymaps[1] = gameKeymap;
+ keymaps[2] = cutscenesKeymap;
return keymaps;
}
diff --git a/engines/zvision/scripting/controls/input_control.cpp b/engines/zvision/scripting/controls/input_control.cpp
index 80710a2c50..2e8689e6ed 100644
--- a/engines/zvision/scripting/controls/input_control.cpp
+++ b/engines/zvision/scripting/controls/input_control.cpp
@@ -30,8 +30,11 @@
#include "zvision/text/string_manager.h"
#include "zvision/graphics/render_manager.h"
+#include "backends/keymapper/keymap.h"
+
#include "common/str.h"
#include "common/stream.h"
+#include "common/system.h"
#include "common/rect.h"
#include "video/video_decoder.h"
@@ -118,6 +121,23 @@ InputControl::InputControl(ZVision *engine, uint32 key, Common::SeekableReadStre
InputControl::~InputControl() {
_background->free();
delete _background;
+ unfocus();
+}
+
+void InputControl::focus() {
+ if (!_readOnly) {
+ _engine->getGameKeymap()->setEnabled(false);
+ }
+ _focused = true;
+ _textChanged = true;
+}
+
+void InputControl::unfocus() {
+ if (!_readOnly) {
+ _engine->getGameKeymap()->setEnabled(true);
+ }
+ _focused = false;
+ _textChanged = true;
}
bool InputControl::onMouseUp(const Common::Point &screenSpacePos, const Common::Point &backgroundImageSpacePos) {
diff --git a/engines/zvision/scripting/controls/input_control.h b/engines/zvision/scripting/controls/input_control.h
index 76f5433605..94e41fd6e7 100644
--- a/engines/zvision/scripting/controls/input_control.h
+++ b/engines/zvision/scripting/controls/input_control.h
@@ -59,14 +59,8 @@ private:
Video::VideoDecoder *_animation;
public:
- void focus() override {
- _focused = true;
- _textChanged = true;
- }
- void unfocus() override {
- _focused = false;
- _textChanged = true;
- }
+ void focus() override;
+ void unfocus() override;
bool onMouseUp(const Common::Point &screenSpacePos, const Common::Point &backgroundImageSpacePos) override;
bool onMouseMove(const Common::Point &screenSpacePos, const Common::Point &backgroundImageSpacePos) override;
bool onKeyDown(Common::KeyState keyState) override;
diff --git a/engines/zvision/video/video.cpp b/engines/zvision/video/video.cpp
index b197bb3267..4a2b7e2624 100644
--- a/engines/zvision/video/video.cpp
+++ b/engines/zvision/video/video.cpp
@@ -94,7 +94,7 @@ void ZVision::playVideo(Video::VideoDecoder &vid, const Common::Rect &destRect,
_videoIsPlaying = true;
_cutscenesKeymap->setEnabled(true);
- _mainKeymap->setEnabled(false);
+ _gameKeymap->setEnabled(false);
// Only continue while the video is still playing
while (!shouldQuit() && !vid.endOfVideo() && vid.isPlaying()) {
@@ -142,7 +142,7 @@ void ZVision::playVideo(Video::VideoDecoder &vid, const Common::Rect &destRect,
}
_cutscenesKeymap->setEnabled(false);
- _mainKeymap->setEnabled(true);
+ _gameKeymap->setEnabled(true);
_videoIsPlaying = false;
_clock.start();
diff --git a/engines/zvision/zvision.cpp b/engines/zvision/zvision.cpp
index b1df50f28f..842529ba48 100644
--- a/engines/zvision/zvision.cpp
+++ b/engines/zvision/zvision.cpp
@@ -80,6 +80,7 @@ struct zvisionIniSettings {
};
const char *mainKeymapId = "zvision";
+const char *gameKeymapId = "zvision-game";
const char *cutscenesKeymapId = "zvision-cutscenes";
ZVision::ZVision(OSystem *syst, const ZVisionGameDescription *gameDesc)
@@ -207,8 +208,8 @@ void ZVision::initialize() {
initScreen();
Common::Keymapper *keymapper = _system->getEventManager()->getKeymapper();
- _mainKeymap = keymapper->getKeymap(mainKeymapId);
- _mainKeymap->setEnabled(true);
+ _gameKeymap = keymapper->getKeymap(gameKeymapId);
+ _gameKeymap->setEnabled(true);
_cutscenesKeymap = keymapper->getKeymap(cutscenesKeymapId);
_cutscenesKeymap->setEnabled(false);
diff --git a/engines/zvision/zvision.h b/engines/zvision/zvision.h
index d920b37042..7f4cc9a61d 100644
--- a/engines/zvision/zvision.h
+++ b/engines/zvision/zvision.h
@@ -117,6 +117,7 @@ enum ZVisionAction {
};
extern const char *mainKeymapId;
+extern const char *gameKeymapId;
extern const char *cutscenesKeymapId;
class ZVision : public Engine {
@@ -162,7 +163,7 @@ private:
// To prevent allocation every time we process events
Common::Event _event;
- Common::Keymap *_mainKeymap, *_cutscenesKeymap;
+ Common::Keymap *_gameKeymap, *_cutscenesKeymap;
int _frameRenderDelay;
int _renderedFrameCount;
@@ -210,6 +211,9 @@ public:
return _menu;
}
+ Common::Keymap *getGameKeymap() const {
+ return _gameKeymap;
+ }
Common::RandomSource *getRandomSource() const {
return _rnd;
}
More information about the Scummvm-git-logs
mailing list