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}};