From 63304712f3c84ec17b246c9043bf5784b1384e18 Mon Sep 17 00:00:00 2001 From: ChancellorIkseew Date: Sat, 2 Nov 2024 03:40:35 +1000 Subject: [PATCH] add lua function block/unbloc bindings --- src/logic/scripting/lua/libs/libinput.cpp | 22 ++++++++++++++++++++++ src/window/Events.cpp | 3 +++ src/window/input.hpp | 1 + 3 files changed, 26 insertions(+) diff --git a/src/logic/scripting/lua/libs/libinput.cpp b/src/logic/scripting/lua/libs/libinput.cpp index 53f1effd..99749d2e 100644 --- a/src/logic/scripting/lua/libs/libinput.cpp +++ b/src/logic/scripting/lua/libs/libinput.cpp @@ -133,6 +133,26 @@ static int l_reset_bindings(lua::State*) { return 0; } +static void enableBinding(std::string& bindname, bool enable) { + const auto& bind = Events::bindings.find(bindname); + if (bind == Events::bindings.end()) { + throw std::runtime_error("unknown binding " + util::quote(bindname)); + } + Events::bindings[bindname].enable = enable; +} + +static int l_enable_binding(lua::State* L) { + std::string bindname = lua::require_string(L, 1); + enableBinding(bindname, true); + return 0; +} + +static int l_disable_binding(lua::State* L) { + std::string bindname = lua::require_string(L, 1); + enableBinding(bindname, false); + return 0; +} + const luaL_Reg inputlib[] = { {"keycode", lua::wrap}, {"mousecode", lua::wrap}, @@ -143,4 +163,6 @@ const luaL_Reg inputlib[] = { {"is_active", lua::wrap}, {"is_pressed", lua::wrap}, {"reset_bindings", lua::wrap}, + {"enable_binding", lua::wrap}, + {"disable_binding", lua::wrap}, {NULL, NULL}}; diff --git a/src/window/Events.cpp b/src/window/Events.cpp index f310969b..625b0a53 100644 --- a/src/window/Events.cpp +++ b/src/window/Events.cpp @@ -78,6 +78,9 @@ void Events::pollEvents() { for (auto& entry : bindings) { auto& binding = entry.second; + if (!binding.enable) { + continue; + } binding.justChange = false; bool newstate = false; diff --git a/src/window/input.hpp b/src/window/input.hpp index a90c8fe0..06ed1511 100644 --- a/src/window/input.hpp +++ b/src/window/input.hpp @@ -137,6 +137,7 @@ struct Binding { int code; bool state = false; bool justChange = false; + bool enable = true; Binding() = default; Binding(inputtype type, int code) : type(type), code(code) {