diff --git a/compile_flags.txt b/compile_flags.txt new file mode 100644 index 00000000..4564e418 --- /dev/null +++ b/compile_flags.txt @@ -0,0 +1 @@ +-Isrc \ No newline at end of file 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/res/layouts/pages/settings_controls.xml b/res/layouts/pages/settings_controls.xml index d61e3e5b..c52abbbb 100644 --- a/res/layouts/pages/settings_controls.xml +++ b/res/layouts/pages/settings_controls.xml @@ -4,7 +4,10 @@ min='0.1' max='10' value='2' step='0.1' consumer='change_sensitivity'> - + + + + diff --git a/res/layouts/pages/settings_controls.xml.lua b/res/layouts/pages/settings_controls.xml.lua index c7c8632c..e975d9c4 100644 --- a/res/layouts/pages/settings_controls.xml.lua +++ b/res/layouts/pages/settings_controls.xml.lua @@ -1,3 +1,32 @@ + +function refresh_search() + local search_text = document.search_textbox.text + local search_key = document.search_key_checkbox.checked + + local panel = document.bindings_panel + local bindings = input.get_bindings() + panel:clear() + + table.sort(bindings, function(a, b) return a > b end) + if search_text ~= "" then + for i,name in ipairs(bindings) do + local _name = gui.str(name) + if ((_name:lower():find(search_text:lower()) and not search_key) or + (input.get_binding_text(name):lower():find(search_text:lower()) and search_key)) then + panel:add(gui.template("binding", { + id=name, name=_name + })) + end + end + else + for i,name in ipairs(bindings) do + panel:add(gui.template("binding", { + id=name, name=gui.str(name) + })) + end + end +end + function refresh_sensitivity() document.sensitivity_label.text = string.format( "%s: %s", @@ -15,6 +44,11 @@ function on_open() document.sensitivity_track.value = core.get_setting("camera.sensitivity") refresh_sensitivity() + document.search_panel:add(string.format( + "%s", + gui.str("controls.key.tooltip", "settings"), gui.str("Key", "settings") + )) + local panel = document.bindings_panel local bindings = input.get_bindings() table.sort(bindings, function(a, b) return a > b end) diff --git a/res/texts/en_US.txt b/res/texts/en_US.txt index de5d950a..3f6d1c74 100644 --- a/res/texts/en_US.txt +++ b/res/texts/en_US.txt @@ -14,6 +14,7 @@ world.generators.flat=Flat # Tooltips graphics.gamma.tooltip=Lighting brightness curve graphics.backlight.tooltip=Backlight to prevent total darkness +controls.key.tooltip=Search by attached button name # Bindings chunks.reload=Reload Chunks diff --git a/res/texts/ru_RU.txt b/res/texts/ru_RU.txt index cd2168b2..c318af01 100644 --- a/res/texts/ru_RU.txt +++ b/res/texts/ru_RU.txt @@ -20,6 +20,7 @@ pack.remove-confirm=Удалить весь поставляемый паком/ # Подсказки graphics.gamma.tooltip=Кривая яркости освещения graphics.backlight.tooltip=Подсветка, предотвращающая полную темноту +controls.key.tooltip=Поиск по привязвнной кнопки управления # Меню menu.Apply=Применить @@ -70,6 +71,7 @@ settings.Music=Музыка settings.Regular Sounds=Обычные Звуки settings.UI Sounds=Звуки Интерфейса settings.V-Sync=Вертикальная Синхронизация +settings.Key=Кнопка # Управление chunks.reload=Перезагрузить Чанки diff --git a/run.sh b/run.sh index 3dd27618..332323b0 100755 --- a/run.sh +++ b/run.sh @@ -1,6 +1,6 @@ mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release .. -cmake --build . -j 16 +cmake --build . -j$(nproc) cd .. build/VoxelEngine diff --git a/src/content/ContentPack.hpp b/src/content/ContentPack.hpp index 7b7b19e8..082d2eea 100644 --- a/src/content/ContentPack.hpp +++ b/src/content/ContentPack.hpp @@ -79,6 +79,7 @@ struct ContentPack { case ContentType::ENTITY: return ContentPack::ENTITIES_FOLDER; case ContentType::GENERATOR: return ContentPack::GENERATORS_FOLDER; case ContentType::NONE: return fs::u8path(""); + default: return fs::u8path(""); } } }; 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}};