diff --git a/doc/en/scripting/user-input.md b/doc/en/scripting/user-input.md index dc10d145..07070750 100644 --- a/doc/en/scripting/user-input.md +++ b/doc/en/scripting/user-input.md @@ -60,6 +60,12 @@ input.get_bindings() -> strings array Returns all binding names. +```python +input.get_binding_text(bindname: str) -> str +``` + +Returns text representation of button by binding name. + ```python input.is_pressed(code: str) -> bool ``` diff --git a/doc/ru/scripting/user-input.md b/doc/ru/scripting/user-input.md index 6a4af8d5..2b0c9f5c 100644 --- a/doc/ru/scripting/user-input.md +++ b/doc/ru/scripting/user-input.md @@ -58,6 +58,12 @@ input.get_bindings() -> массив строк Возвращает названия всех доступных привязок. +```python +input.get_binding_text(bindname: str) -> str +``` + +Возвращает текстовое представление кнопки по имени привязки. + ```python input.is_active(bindname: str) -> bool ``` diff --git a/src/logic/scripting/lua/libs/libinput.cpp b/src/logic/scripting/lua/libs/libinput.cpp index bfa0af2d..84dde256 100644 --- a/src/logic/scripting/lua/libs/libinput.cpp +++ b/src/logic/scripting/lua/libs/libinput.cpp @@ -64,6 +64,20 @@ static int l_get_bindings(lua::State* L) { return 1; } +static int l_get_binding_text(lua::State* L) { + auto bindname = lua::require_string(L, 1); + auto index = Events::bindings.find(bindname); + + if (index == Events::bindings.end()) { + throw std::runtime_error("unknown binding " + util::quote(bindname)); + lua::pushstring(L, ""); + } else { + lua::pushstring(L, index->second.text()); + } + + return 1; +} + static int l_is_active(lua::State* L) { auto bindname = lua::require_string(L, 1); const auto& bind = Events::bindings.find(bindname); @@ -101,6 +115,7 @@ const luaL_Reg inputlib[] = { {"add_callback", lua::wrap}, {"get_mouse_pos", lua::wrap}, {"get_bindings", lua::wrap}, + {"get_binding_text", lua::wrap}, {"is_active", lua::wrap}, {"is_pressed", lua::wrap}, {NULL, NULL}};