diff --git a/CMakeLists.txt b/CMakeLists.txt index b478a799eb..47e50e769a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,7 +81,7 @@ message(STATUS "Configuring OpenMW...") set(OPENMW_VERSION_MAJOR 0) set(OPENMW_VERSION_MINOR 49) set(OPENMW_VERSION_RELEASE 0) -set(OPENMW_LUA_API_REVISION 59) +set(OPENMW_LUA_API_REVISION 60) set(OPENMW_POSTPROCESSING_API_REVISION 1) set(OPENMW_VERSION_COMMITHASH "") diff --git a/apps/openmw/mwbase/inputmanager.hpp b/apps/openmw/mwbase/inputmanager.hpp index f52f9ea454..5ee20476b3 100644 --- a/apps/openmw/mwbase/inputmanager.hpp +++ b/apps/openmw/mwbase/inputmanager.hpp @@ -45,6 +45,7 @@ namespace MWBase virtual void processChangedSettings(const std::set>& changed) = 0; virtual void setDragDrop(bool dragDrop) = 0; + virtual bool isGamepadGuiCursorEnabled() = 0; virtual void setGamepadGuiCursorEnabled(bool enabled) = 0; virtual void toggleControlSwitch(std::string_view sw, bool value) = 0; diff --git a/apps/openmw/mwinput/inputmanagerimp.cpp b/apps/openmw/mwinput/inputmanagerimp.cpp index f9ca0a3432..d0d6e7023d 100644 --- a/apps/openmw/mwinput/inputmanagerimp.cpp +++ b/apps/openmw/mwinput/inputmanagerimp.cpp @@ -102,6 +102,11 @@ namespace MWInput mControllerManager->setGamepadGuiCursorEnabled(enabled); } + bool InputManager::isGamepadGuiCursorEnabled() + { + return mControllerManager->gamepadGuiCursorEnabled(); + } + void InputManager::changeInputMode(bool guiMode) { mControllerManager->setGuiCursorEnabled(guiMode); diff --git a/apps/openmw/mwinput/inputmanagerimp.hpp b/apps/openmw/mwinput/inputmanagerimp.hpp index c5de579961..f8f1411ebf 100644 --- a/apps/openmw/mwinput/inputmanagerimp.hpp +++ b/apps/openmw/mwinput/inputmanagerimp.hpp @@ -68,6 +68,7 @@ namespace MWInput void setDragDrop(bool dragDrop) override; void setGamepadGuiCursorEnabled(bool enabled) override; + bool isGamepadGuiCursorEnabled() override; void toggleControlSwitch(std::string_view sw, bool value) override; bool getControlSwitch(std::string_view sw) override; diff --git a/apps/openmw/mwlua/inputbindings.cpp b/apps/openmw/mwlua/inputbindings.cpp index 09a5a0babb..dbe79ca377 100644 --- a/apps/openmw/mwlua/inputbindings.cpp +++ b/apps/openmw/mwlua/inputbindings.cpp @@ -10,6 +10,7 @@ #include "../mwbase/environment.hpp" #include "../mwbase/inputmanager.hpp" +#include "../mwbase/windowmanager.hpp" #include "../mwinput/actions.hpp" #include "luamanagerimp.hpp" @@ -208,6 +209,11 @@ namespace MWLua }; api["isMouseButtonPressed"] = [](int button) -> bool { return SDL_GetMouseState(nullptr, nullptr) & SDL_BUTTON(button); }; + api["_isGamepadCursorActive"] = [input]() -> bool { return input->isGamepadGuiCursorEnabled(); }; + api["_setGamepadCursorActive"] = [input](bool v) { + input->setGamepadGuiCursorEnabled(v); + MWBase::Environment::get().getWindowManager()->setCursorActive(v); + }; api["getMouseMoveX"] = [input]() { return input->getMouseMoveX(); }; api["getMouseMoveY"] = [input]() { return input->getMouseMoveY(); }; api["getAxisValue"] = [input](int axis) { diff --git a/docs/source/luadoc_data_paths.sh b/docs/source/luadoc_data_paths.sh index 7f32348b38..6b41723f54 100755 --- a/docs/source/luadoc_data_paths.sh +++ b/docs/source/luadoc_data_paths.sh @@ -4,6 +4,7 @@ paths=( scripts/omw/ai.lua scripts/omw/input/playercontrols.lua scripts/omw/mechanics/animationcontroller.lua + scripts/omw/input/gamepadcontrols.lua scripts/omw/camera/camera.lua scripts/omw/mwui/init.lua scripts/omw/settings/player.lua diff --git a/docs/source/reference/lua-scripting/api.rst b/docs/source/reference/lua-scripting/api.rst index fb354a10a7..d4f4c91044 100644 --- a/docs/source/reference/lua-scripting/api.rst +++ b/docs/source/reference/lua-scripting/api.rst @@ -39,6 +39,7 @@ Lua API reference interface_animation interface_camera interface_controls + interface_gamepadcontrols interface_item_usage interface_mwui interface_settings diff --git a/docs/source/reference/lua-scripting/interface_gamepadcontrols.rst b/docs/source/reference/lua-scripting/interface_gamepadcontrols.rst new file mode 100644 index 0000000000..f89738b25b --- /dev/null +++ b/docs/source/reference/lua-scripting/interface_gamepadcontrols.rst @@ -0,0 +1,8 @@ +Interface GamepadControls +========================= + +.. include:: version.rst + +.. raw:: html + :file: generated_html/scripts_omw_input_gamepadcontrols.html + diff --git a/docs/source/reference/lua-scripting/tables/interfaces.rst b/docs/source/reference/lua-scripting/tables/interfaces.rst index f2e5921b02..42a9cd70ba 100644 --- a/docs/source/reference/lua-scripting/tables/interfaces.rst +++ b/docs/source/reference/lua-scripting/tables/interfaces.rst @@ -21,6 +21,10 @@ - by player scripts - | Allows to alter behavior of the built-in script | that handles player controls. + * - :ref:`Controls ` + - by player scripts + - | Allows to alter behavior of the built-in script + | that handles player gamepad controls. * - :ref:`ItemUsage ` - by global scripts - | Allows to extend or override built-in item usage diff --git a/files/data/CMakeLists.txt b/files/data/CMakeLists.txt index 0addb6d1ae..662f00fd84 100644 --- a/files/data/CMakeLists.txt +++ b/files/data/CMakeLists.txt @@ -98,7 +98,8 @@ set(BUILTIN_DATA_FILES scripts/omw/input/playercontrols.lua scripts/omw/input/actionbindings.lua scripts/omw/input/smoothmovement.lua - + scripts/omw/input/gamepadcontrols.lua + shaders/adjustments.omwfx shaders/bloomlinear.omwfx shaders/debug.omwfx diff --git a/files/data/builtin.omwscripts b/files/data/builtin.omwscripts index 81fb76f023..c38c3d243d 100644 --- a/files/data/builtin.omwscripts +++ b/files/data/builtin.omwscripts @@ -20,6 +20,7 @@ PLAYER: scripts/omw/input/playercontrols.lua PLAYER: scripts/omw/camera/camera.lua PLAYER: scripts/omw/input/actionbindings.lua PLAYER: scripts/omw/input/smoothmovement.lua +PLAYER: scripts/omw/input/gamepadcontrols.lua NPC,CREATURE: scripts/omw/ai.lua # User interface diff --git a/files/data/scripts/omw/input/gamepadcontrols.lua b/files/data/scripts/omw/input/gamepadcontrols.lua new file mode 100644 index 0000000000..0af17efa39 --- /dev/null +++ b/files/data/scripts/omw/input/gamepadcontrols.lua @@ -0,0 +1,29 @@ +local input = require('openmw.input') + +return { + + interfaceName = 'GamepadControls', + --- + -- Gamepad control interface + -- @module GamepadControls + + interface = { + --- Interface version + -- @field [parent=#GamepadControls] #number version + version = 0, + + --- Checks if the gamepad cursor is active. If it is active, the left stick can move the cursor, and A will be interpreted as a mouse click. + -- @function [parent=#GamepadControls] isGamepadCursorActive + -- @return #boolean + isGamepadCursorActive = function() + return input._isGamepadCursorActive() + end, + + --- Set if the gamepad cursor is active. If it is active, the left stick can move the cursor, and A will be interpreted as a mouse click. + -- @function [parent=#GamepadControls] setGamepadCursorActive + -- @param #boolean value + setGamepadCursorActive = function(state) + input._setGamepadCursorActive(state) + end, + } +}