diff --git a/res/layouts/pages/settings.xml b/res/layouts/pages/settings.xml index 5e0ea285..223a7f96 100644 --- a/res/layouts/pages/settings.xml +++ b/res/layouts/pages/settings.xml @@ -1,6 +1,7 @@ + diff --git a/res/layouts/pages/settings.xml.lua b/res/layouts/pages/settings.xml.lua index f21f25c3..345d5620 100644 --- a/res/layouts/pages/settings.xml.lua +++ b/res/layouts/pages/settings.xml.lua @@ -8,6 +8,7 @@ end function set_page(btn, page) document.s_aud.enabled = true + document.s_dsp.enabled = true document.s_gfx.enabled = true document.s_ctl.enabled = true document[btn].enabled = false diff --git a/res/layouts/pages/settings_display.xml b/res/layouts/pages/settings_display.xml new file mode 100644 index 00000000..2aa3aeca --- /dev/null +++ b/res/layouts/pages/settings_display.xml @@ -0,0 +1,2 @@ + + diff --git a/res/layouts/pages/settings_display.xml.lua b/res/layouts/pages/settings_display.xml.lua new file mode 100644 index 00000000..e861deb3 --- /dev/null +++ b/res/layouts/pages/settings_display.xml.lua @@ -0,0 +1,43 @@ +function create_setting(id, name, step, postfix, tooltip) + local info = core.get_setting_info(id) + postfix = postfix or "" + tooltip = tooltip or "" + document.root:add(gui.template("track_setting", { + id=id, + name=gui.str(name, "settings"), + value=core.get_setting(id), + min=info.min, + max=info.max, + step=step, + postfix=postfix, + tooltip=tooltip + })) + update_setting(core.get_setting(id), id, name, postfix) +end + +function update_setting(x, id, name, postfix) + core.set_setting(id, x) + -- updating label + document[id..".L"].text = string.format( + "%s: %s%s", + gui.str(name, "settings"), + core.str_setting(id), + postfix + ) +end + +function create_checkbox(id, name, tooltip) + tooltip = tooltip or '' + document.root:add(string.format( + "%s", + id, core.str_setting(id), gui.str(tooltip, "settings"), gui.str(name, "settings") + )) +end + +function on_open() + create_setting("camera.fov", "FOV", 1, "°") + create_checkbox("display.fullscreen", "Fullscreen") + create_checkbox("display.vsync", "V-Sync") + create_checkbox("camera.shaking", "Camera Shaking") + create_checkbox("camera.inertia", "Camera Inertia") +end diff --git a/res/layouts/pages/settings_graphics.xml.lua b/res/layouts/pages/settings_graphics.xml.lua index 179d8df8..de00c87b 100644 --- a/res/layouts/pages/settings_graphics.xml.lua +++ b/res/layouts/pages/settings_graphics.xml.lua @@ -39,9 +39,5 @@ function on_open() create_setting("chunks.load-speed", "Load Speed", 1) create_setting("graphics.fog-curve", "Fog Curve", 0.1) create_setting("graphics.gamma", "Gamma", 0.05, "", "graphics.gamma.tooltip") - create_setting("camera.fov", "FOV", 1, "°") - create_checkbox("display.fullscreen", "Fullscreen") - create_checkbox("display.vsync", "V-Sync") create_checkbox("graphics.backlight", "Backlight", "graphics.backlight.tooltip") - create_checkbox("camera.shaking", "Camera Shaking") end diff --git a/res/texts/ru_RU.txt b/res/texts/ru_RU.txt index d04997f9..b02c8b25 100644 --- a/res/texts/ru_RU.txt +++ b/res/texts/ru_RU.txt @@ -28,6 +28,7 @@ menu.Content Error=Ошибка Контента menu.Content=Контент menu.Continue=Продолжить menu.Controls=Управление +menu.Display=Дисплей menu.Graphics=Графика menu.missing-content=Отсутствует Контент! menu.New World=Новый Мир @@ -50,6 +51,7 @@ world.delete-confirm=Удалить мир безвозвратно? settings.Ambient=Фон settings.Backlight=Подсветка settings.Camera Shaking=Тряска Камеры +settings.Camera Inertia=Инерция Камеры settings.Fog Curve=Кривая Тумана settings.FOV=Поле Зрения settings.Fullscreen=Полный экран diff --git a/src/files/settings_io.cpp b/src/files/settings_io.cpp index 373dc45c..28c62acf 100644 --- a/src/files/settings_io.cpp +++ b/src/files/settings_io.cpp @@ -56,6 +56,7 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) { builder.add("fov", &settings.camera.fov); builder.add("fov-effects", &settings.camera.fovEffects); builder.add("shaking", &settings.camera.shaking); + builder.add("inertia", &settings.camera.inertia); builder.section("chunks"); builder.add("load-distance", &settings.chunks.loadDistance); diff --git a/src/logic/PlayerController.cpp b/src/logic/PlayerController.cpp index 6bb8ccc4..aeca1f17 100644 --- a/src/logic/PlayerController.cpp +++ b/src/logic/PlayerController.cpp @@ -98,7 +98,9 @@ glm::vec3 CameraControl::updateCameraShaking(const Hitbox& hitbox, float delta) offset += camera->right * glm::sin(shakeTimer) * oh * shake; offset += camera->up * glm::abs(glm::cos(shakeTimer)) * ov * shake; - offset -= glm::min(interpVel * 0.05f, 1.0f); + if (settings.inertia.get()) { + offset -= glm::min(interpVel * 0.05f, 1.0f); + } return offset; } diff --git a/src/settings.hpp b/src/settings.hpp index 250d0e4b..8a8ad0cb 100644 --- a/src/settings.hpp +++ b/src/settings.hpp @@ -46,6 +46,8 @@ struct CameraSettings { FlagSetting fovEffects {true}; /// @brief Camera movement shake FlagSetting shaking {true}; + /// @brief Camera movement inertia effect + FlagSetting inertia {true}; /// @brief Camera field of view NumberSetting fov {90.0f, 10, 120}; /// @brief Camera sensitivity