[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