[Scummvm-git-logs] scummvm master -> a43a1a69704e45b438d26bf0486e8a3227638182
dreammaster
paulfgilbert at gmail.com
Sun Mar 8 06:17:59 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:
a43a1a6970 ULTIMA8: Disable keymappings whilst game menu is being shown
Commit: a43a1a69704e45b438d26bf0486e8a3227638182
https://github.com/scummvm/scummvm/commit/a43a1a69704e45b438d26bf0486e8a3227638182
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2020-03-07T22:17:44-08:00
Commit Message:
ULTIMA8: Disable keymappings whilst game menu is being shown
Changed paths:
engines/ultima/ultima8/gumps/menu_gump.cpp
engines/ultima/ultima8/meta_engine.cpp
engines/ultima/ultima8/meta_engine.h
engines/ultima/ultima8/ultima8.cpp
engines/ultima/ultima8/ultima8.h
diff --git a/engines/ultima/ultima8/gumps/menu_gump.cpp b/engines/ultima/ultima8/gumps/menu_gump.cpp
index b5bb8aaa8c..cdbf81bb68 100644
--- a/engines/ultima/ultima8/gumps/menu_gump.cpp
+++ b/engines/ultima/ultima8/gumps/menu_gump.cpp
@@ -22,7 +22,6 @@
#include "ultima/ultima8/misc/pent_include.h"
#include "ultima/ultima8/gumps/menu_gump.h"
-
#include "ultima/ultima8/games/game_data.h"
#include "ultima/ultima8/graphics/gump_shape_archive.h"
#include "ultima/ultima8/graphics/shape.h"
@@ -46,9 +45,9 @@
#include "ultima/ultima8/gumps/widgets/edit_widget.h"
#include "ultima/ultima8/gumps/u8_save_gump.h"
#include "ultima/ultima8/world/get_object.h"
-
#include "ultima/ultima8/filesys/idata_source.h"
#include "ultima/ultima8/filesys/odata_source.h"
+#include "ultima/ultima8/meta_engine.h"
namespace Ultima {
namespace Ultima8 {
@@ -79,11 +78,15 @@ MenuGump::MenuGump(bool nameEntryMode_)
PaletteManager *palman = PaletteManager::get_instance();
palman->getTransformMatrix(_oldPalTransform, PaletteManager::Pal_Game);
palman->untransformPalette(PaletteManager::Pal_Game);
+
+ MetaEngine::setGameMenuActive(true);
}
MenuGump::~MenuGump() {
+ MetaEngine::setGameMenuActive(false);
}
+
void MenuGump::Close(bool no_del) {
// Restore old music state and palette.
// Music state can be changed by the Intro and Credits
@@ -262,9 +265,15 @@ bool MenuGump::OnTextInput(int unicode) {
//static
void MenuGump::showMenu() {
- ModalGump *gump = new MenuGump();
- gump->InitGump(0);
- gump->setRelativePosition(CENTER);
+ Gump *gump = Ultima8Engine::get_instance()->getMenuGump();
+
+ if (gump) {
+ gump->Close();
+ } else {
+ gump = new MenuGump();
+ gump->InitGump(0);
+ gump->setRelativePosition(CENTER);
+ }
}
//static
diff --git a/engines/ultima/ultima8/meta_engine.cpp b/engines/ultima/ultima8/meta_engine.cpp
index fe4f3d2297..251348b915 100644
--- a/engines/ultima/ultima8/meta_engine.cpp
+++ b/engines/ultima/ultima8/meta_engine.cpp
@@ -22,6 +22,7 @@
#include "ultima/ultima8/meta_engine.h"
#include "ultima/ultima8/misc/debugger.h"
+#include "ultima/ultima8/ultima8.h"
#include "common/translation.h"
#include "backends/keymapper/action.h"
@@ -86,7 +87,7 @@ static const KeybindingRecord DEBUG_KEYS[] = {
#endif
-Common::KeymapArray MetaEngine::initKeymaps() {
+Common::KeymapArray MetaEngine::initKeymaps(bool isMenuActive) {
Common::KeymapArray keymapArray;
// Core keymaps
@@ -94,39 +95,54 @@ Common::KeymapArray MetaEngine::initKeymaps() {
keymapArray.push_back(keyMap);
for (const KeybindingRecord *r = KEYS; r->_id; ++r) {
- Common::Action *act = new Common::Action(r->_id, _(r->_desc));
- act->setCustomEngineActionEvent(r->_action);
- act->addDefaultInputMapping(r->_key);
- keyMap->addAction(act);
+ if (!isMenuActive || !strcmp(r->_id, "MENU")) {
+ Common::Action *act = new Common::Action(r->_id, _(r->_desc));
+ act->setCustomEngineActionEvent(r->_action);
+ act->addDefaultInputMapping(r->_key);
+ keyMap->addAction(act);
+ }
}
- // Cheat keymaps
- keyMap = new Common::Keymap(Common::Keymap::kKeymapTypeGame, "ultima8_cheats", _("Ultima VIII Cheats"));
- keymapArray.push_back(keyMap);
+ if (!isMenuActive) {
+ // Cheat keymaps
+ keyMap = new Common::Keymap(Common::Keymap::kKeymapTypeGame, "ultima8_cheats", _("Ultima VIII Cheats"));
+ keymapArray.push_back(keyMap);
- for (const KeybindingRecord *r = CHEAT_KEYS; r->_id; ++r) {
- Common::Action *act = new Common::Action(r->_id, _(r->_desc));
- act->setCustomEngineActionEvent(r->_action);
- act->addDefaultInputMapping(r->_key);
- keyMap->addAction(act);
- }
+ for (const KeybindingRecord *r = CHEAT_KEYS; r->_id; ++r) {
+ Common::Action *act = new Common::Action(r->_id, _(r->_desc));
+ act->setCustomEngineActionEvent(r->_action);
+ act->addDefaultInputMapping(r->_key);
+ keyMap->addAction(act);
+ }
#ifndef RELEASE_BUILD
- // Debug keymaps
- keyMap = new Common::Keymap(Common::Keymap::kKeymapTypeGame, "ultima8_debug", _("Ultima VIII Debug"));
- keymapArray.push_back(keyMap);
-
- for (const KeybindingRecord *r = DEBUG_KEYS; r->_id; ++r) {
- Common::Action *act = new Common::Action(r->_id, _(r->_desc));
- act->setCustomEngineActionEvent(r->_action);
- act->addDefaultInputMapping(r->_key);
- keyMap->addAction(act);
- }
+ // Debug keymaps
+ keyMap = new Common::Keymap(Common::Keymap::kKeymapTypeGame, "ultima8_debug", _("Ultima VIII Debug"));
+ keymapArray.push_back(keyMap);
+
+ for (const KeybindingRecord *r = DEBUG_KEYS; r->_id; ++r) {
+ Common::Action *act = new Common::Action(r->_id, _(r->_desc));
+ act->setCustomEngineActionEvent(r->_action);
+ act->addDefaultInputMapping(r->_key);
+ keyMap->addAction(act);
+ }
#endif
+ }
return keymapArray;
}
+void MetaEngine::setGameMenuActive(bool isActive) {
+ Common::Keymapper *const mapper = g_engine->getEventManager()->getKeymapper();
+ mapper->cleanupGameKeymaps();
+
+ Common::KeymapArray arr = initKeymaps(isActive);
+
+ for (uint idx = 0; idx < arr.size(); ++idx)
+ mapper->addGameKeymap(arr[idx]);
+}
+
+
void MetaEngine::pressAction(KeybindingAction keyAction) {
Common::String methodName = getMethod(keyAction, true);
if (!methodName.empty())
diff --git a/engines/ultima/ultima8/meta_engine.h b/engines/ultima/ultima8/meta_engine.h
index dd004ff262..abf33bfeb6 100644
--- a/engines/ultima/ultima8/meta_engine.h
+++ b/engines/ultima/ultima8/meta_engine.h
@@ -54,7 +54,7 @@ public:
/**
* Initialize keymaps
*/
- static Common::KeymapArray initKeymaps();
+ static Common::KeymapArray initKeymaps(bool isMenuActive = false);
/**
* Execute an engine keymap press action
@@ -65,6 +65,11 @@ public:
* Execute an engine keymap release action
*/
static void releaseAction(KeybindingAction keyAction);
+
+ /**
+ * Enables/disables keymaps based on whether the in-game menu is active
+ */
+ static void setGameMenuActive(bool isActive);
};
} // End of namespace Ultima8
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 48724af59c..60a52f85ef 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -737,7 +737,6 @@ void Ultima8Engine::handleEvent(const Common::Event &event) {
HID_Key key = HID_LAST;
uint16 evn = HID_EVENT_LAST;
bool handled = false;
- KeybindingAction keybindAction = ACTION_NONE;
switch (event.type) {
case Common::EVENT_KEYDOWN:
@@ -786,6 +785,14 @@ void Ultima8Engine::handleEvent(const Common::Event &event) {
_mouse->setMouseCoords(event.mouse.x, event.mouse.y);
break;
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
+ MetaEngine::pressAction((KeybindingAction)event.customType);
+ return;
+
+ case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
+ MetaEngine::releaseAction((KeybindingAction)event.customType);
+ return;
+
case Common::EVENT_QUIT:
_isRunning = false;
break;
@@ -842,38 +849,12 @@ void Ultima8Engine::handleEvent(const Common::Event &event) {
gump->OnKeyUp(event.kbd.keycode);
return;
- case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
- if ((KeybindingAction)event.customType == ACTION_MENU) {
- // When any gump is already open, the game menu action acts to close the gump
- gump->OnKeyDown(Common::KEYCODE_ESCAPE, 0);
- }
- break;
-
default:
break;
}
}
}
- if (!gump) {
- // Handling for keybinding actions, which only happens if no gump is open
- switch (event.type) {
- case Common::EVENT_CUSTOM_ENGINE_ACTION_START:
- keybindAction = (KeybindingAction)event.customType;
- if (keybindAction != ACTION_NONE)
- MetaEngine::pressAction(keybindAction);
- break;
-
- case Common::EVENT_CUSTOM_ENGINE_ACTION_END:
- keybindAction = (KeybindingAction)event.customType;
- if (keybindAction != ACTION_NONE)
- MetaEngine::releaseAction(keybindAction);
- break;
- default:
- break;
- }
- }
-
// Old style input begins here
switch (event.type) {
@@ -1584,5 +1565,12 @@ void Ultima8Engine::showSplashScreen() {
g_system->delayMillis(2000);
}
+Gump *Ultima8Engine::getMenuGump() const {
+ if (_textModes.empty())
+ return nullptr;
+
+ return p_dynamic_cast<Gump *>(_objectManager->getObject(_textModes.front()));
+}
+
} // End of namespace Ultima8
} // End of namespace Ultima
diff --git a/engines/ultima/ultima8/ultima8.h b/engines/ultima/ultima8/ultima8.h
index 82433f2916..4970d53878 100644
--- a/engines/ultima/ultima8/ultima8.h
+++ b/engines/ultima/ultima8/ultima8.h
@@ -59,6 +59,7 @@ class UCMachine;
class Game;
class Gump;
class GameMapGump;
+class MenuGump;
class ScalerGump;
class InverterGump;
class RenderSurface;
@@ -346,6 +347,7 @@ public:
void makeCheater() {
_hasCheated = true;
}
+ Gump *getMenuGump() const;
};
} // End of namespace Ultima8
More information about the Scummvm-git-logs
mailing list