From ac9cfc782a613663d6f8440a4a06bc3119fcabc9 Mon Sep 17 00:00:00 2001 From: Zackhasacat Date: Wed, 25 Oct 2023 12:34:56 +0000 Subject: [PATCH] Add functions to lua ui library to toggle HUD visibility, and check current status. --- apps/openmw/mwbase/windowmanager.hpp | 3 ++- apps/openmw/mwgui/windowmanagerimp.cpp | 4 ++-- apps/openmw/mwgui/windowmanagerimp.hpp | 3 ++- apps/openmw/mwinput/actionmanager.cpp | 2 +- apps/openmw/mwlua/uibindings.cpp | 5 ++++- apps/openmw/mwscript/guiextensions.cpp | 3 ++- files/data/scripts/omw/ui.lua | 15 ++++++++++++--- 7 files changed, 25 insertions(+), 10 deletions(-) diff --git a/apps/openmw/mwbase/windowmanager.hpp b/apps/openmw/mwbase/windowmanager.hpp index df6893c1ba..f225ebf24e 100644 --- a/apps/openmw/mwbase/windowmanager.hpp +++ b/apps/openmw/mwbase/windowmanager.hpp @@ -229,7 +229,8 @@ namespace MWBase virtual void unsetSelectedWeapon() = 0; virtual void showCrosshair(bool show) = 0; - virtual bool toggleHud() = 0; + virtual bool setHudVisibility(bool show) = 0; + virtual bool isHudVisible() const = 0; virtual void disallowMouse() = 0; virtual void allowMouse() = 0; diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index 94bac9e10e..adb5b186ce 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -1605,9 +1605,9 @@ namespace MWGui mQuickKeysMenu->activateQuickKey(index); } - bool WindowManager::toggleHud() + bool WindowManager::setHudVisibility(bool show) { - mHudEnabled = !mHudEnabled; + mHudEnabled = show; updateVisible(); mMessageBoxManager->setVisible(mHudEnabled); return mHudEnabled; diff --git a/apps/openmw/mwgui/windowmanagerimp.hpp b/apps/openmw/mwgui/windowmanagerimp.hpp index fae3bb1ec9..5cd1aa23e0 100644 --- a/apps/openmw/mwgui/windowmanagerimp.hpp +++ b/apps/openmw/mwgui/windowmanagerimp.hpp @@ -247,7 +247,8 @@ namespace MWGui void showCrosshair(bool show) override; /// Turn visibility of HUD on or off - bool toggleHud() override; + bool setHudVisibility(bool show) override; + bool isHudVisible() const override { return mHudEnabled; } void disallowMouse() override; void allowMouse() override; diff --git a/apps/openmw/mwinput/actionmanager.cpp b/apps/openmw/mwinput/actionmanager.cpp index 3fac540f5e..eb82c160f9 100644 --- a/apps/openmw/mwinput/actionmanager.cpp +++ b/apps/openmw/mwinput/actionmanager.cpp @@ -118,7 +118,7 @@ namespace MWInput quickKey(10); break; case A_ToggleHUD: - windowManager->toggleHud(); + windowManager->setHudVisibility(!windowManager->isHudVisible()); break; case A_ToggleDebug: windowManager->toggleDebugWindow(); diff --git a/apps/openmw/mwlua/uibindings.cpp b/apps/openmw/mwlua/uibindings.cpp index 04914dd881..79f5fac9a1 100644 --- a/apps/openmw/mwlua/uibindings.cpp +++ b/apps/openmw/mwlua/uibindings.cpp @@ -111,6 +111,10 @@ namespace MWLua }; sol::table api = context.mLua->newTable(); + api["_setHudVisibility"] = [luaManager = context.mLuaManager](bool state) { + luaManager->addAction([state] { MWBase::Environment::get().getWindowManager()->setHudVisibility(state); }); + }; + api["_isHudVisible"] = []() -> bool { return MWBase::Environment::get().getWindowManager()->isHudVisible(); }; api["showMessage"] = [luaManager = context.mLuaManager](std::string_view message) { luaManager->addUIMessage(message); }; api["CONSOLE_COLOR"] = LuaUtil::makeStrictReadOnly(context.mLua->tableFromPairs({ @@ -296,7 +300,6 @@ namespace MWLua }; // TODO - // api["_showHUD"] = [](bool) {}; // api["_showMouseCursor"] = [](bool) {}; return LuaUtil::makeReadOnly(api); diff --git a/apps/openmw/mwscript/guiextensions.cpp b/apps/openmw/mwscript/guiextensions.cpp index c1590941e6..07855f18ef 100644 --- a/apps/openmw/mwscript/guiextensions.cpp +++ b/apps/openmw/mwscript/guiextensions.cpp @@ -192,7 +192,8 @@ namespace MWScript public: void execute(Interpreter::Runtime& runtime) override { - bool state = MWBase::Environment::get().getWindowManager()->toggleHud(); + bool state = MWBase::Environment::get().getWindowManager()->setHudVisibility( + !MWBase::Environment::get().getWindowManager()->isHudVisible()); runtime.getContext().report(state ? "GUI -> On" : "GUI -> Off"); if (!state) diff --git a/files/data/scripts/omw/ui.lua b/files/data/scripts/omw/ui.lua index 6fd80bf394..48412f6a0f 100644 --- a/files/data/scripts/omw/ui.lua +++ b/files/data/scripts/omw/ui.lua @@ -226,12 +226,21 @@ return { -- @function [parent=#UI] setPauseOnMode -- @param #string mode Mode to configure -- @param #boolean shouldPause - setPauseOnMode = function(mode, shouldPause) modePause[mode] = shouldPause end + setPauseOnMode = function(mode, shouldPause) modePause[mode] = shouldPause end, + + --- Set whether the UI should be visible. + -- @function [parent=#UI] setHudVisibility + -- @param #boolean showHud + setHudVisibility = function(showHud) ui._setHudVisibility(showHud) end, + + --- + -- Returns if the player HUD is visible or not + -- @function [parent=#UI] isHudVisible + -- @return #bool + isHudVisible = function() return ui._isHudVisible() end, -- TODO -- registerHudElement = function(name, showFn, hideFn) end, - -- showHud = function(bool) end, - -- isHudVisible = function() end, -- showHudElement = function(name, bool) end, -- hudElements, -- map from element name to its visibility },