diff --git a/res/config/bindings.toml b/res/config/bindings.toml index d0a7e1e9..e13be068 100644 --- a/res/config/bindings.toml +++ b/res/config/bindings.toml @@ -1,4 +1,5 @@ devtools.console="key:grave-accent" +chunks.reload="key:f5" movement.forward="key:w" movement.back="key:s" movement.left="key:a" diff --git a/res/texts/en_US.txt b/res/texts/en_US.txt index 8681a069..4b8d5e5e 100644 --- a/res/texts/en_US.txt +++ b/res/texts/en_US.txt @@ -13,6 +13,7 @@ graphics.gamma.tooltip=Lighting brightness curve graphics.backlight.tooltip=Backlight to prevent total darkness # Bindings +chunks.reload=Reload Chunks devtools.console=Console movement.forward=Forward movement.back=Back diff --git a/res/texts/ru_RU.txt b/res/texts/ru_RU.txt index a1b7f3be..f4cdfbc0 100644 --- a/res/texts/ru_RU.txt +++ b/res/texts/ru_RU.txt @@ -60,6 +60,7 @@ settings.UI Sounds=Звуки Интерфейса settings.V-Sync=Вертикальная Синхронизация # Управление +chunks.reload=Перезагрузить Чанки devtools.console=Консоль movement.forward=Вперёд movement.back=Назад diff --git a/src/core_defs.hpp b/src/core_defs.hpp index 884cda26..d57435ad 100644 --- a/src/core_defs.hpp +++ b/src/core_defs.hpp @@ -10,6 +10,7 @@ inline const std::string TEXTURE_NOTFOUND = "notfound"; // built-in bindings inline const std::string BIND_DEVTOOLS_CONSOLE = "devtools.console"; +inline const std::string BIND_CHUNKS_RELOAD = "chunks.reload"; inline const std::string BIND_MOVE_FORWARD = "movement.forward"; inline const std::string BIND_MOVE_BACK = "movement.back"; inline const std::string BIND_MOVE_LEFT = "movement.left"; diff --git a/src/frontend/screens/LevelScreen.cpp b/src/frontend/screens/LevelScreen.cpp index 5814f3bf..d740ce19 100644 --- a/src/frontend/screens/LevelScreen.cpp +++ b/src/frontend/screens/LevelScreen.cpp @@ -1,5 +1,6 @@ #include "LevelScreen.hpp" +#include "../../core_defs.hpp" #include "../hud.hpp" #include "../LevelFrontend.hpp" #include "../../audio/audio.hpp" @@ -47,6 +48,9 @@ LevelScreen::LevelScreen(Engine* engine, std::unique_ptr level) keepAlive(settings.camera.fov.observe([=](double value) { controller->getPlayer()->camera->setFov(glm::radians(value)); })); + keepAlive(Events::getBinding(BIND_CHUNKS_RELOAD).onactived.add([=](){ + controller->getLevel()->chunks->saveAndClear(); + })); animator = std::make_unique(); animator->addAnimations(assets->getAnimations()); @@ -114,9 +118,6 @@ void LevelScreen::updateHotkeys() { if (Events::jpressed(keycode::F3)) { controller->getPlayer()->debug = !controller->getPlayer()->debug; } - if (Events::jpressed(keycode::F5)) { - controller->getLevel()->chunks->saveAndClear(); - } } void LevelScreen::update(float delta) { diff --git a/src/window/Events.cpp b/src/window/Events.cpp index f2c47a29..1aab7881 100644 --- a/src/window/Events.cpp +++ b/src/window/Events.cpp @@ -98,6 +98,14 @@ void Events::pollEvents() { } } +Binding& Events::getBinding(const std::string& name) { + auto found = bindings.find(name); + if (found == bindings.end()) { + throw std::runtime_error("binding '"+name+"' does not exists"); + } + return found->second; +} + void Events::bind(const std::string& name, inputtype type, keycode code) { bind(name, type, static_cast(code)); } diff --git a/src/window/Events.hpp b/src/window/Events.hpp index 04bdcfe0..97405d2c 100644 --- a/src/window/Events.hpp +++ b/src/window/Events.hpp @@ -38,6 +38,7 @@ public: static void toggleCursor(); + static Binding& getBinding(const std::string& name); static void bind(const std::string& name, inputtype type, keycode code); static void bind(const std::string& name, inputtype type, mousecode code); static void bind(const std::string& name, inputtype type, int code); diff --git a/src/window/input.cpp b/src/window/input.cpp index 481e4a79..cfb06e84 100644 --- a/src/window/input.cpp +++ b/src/window/input.cpp @@ -77,7 +77,7 @@ void input_util::initialize() { keycodes[std::to_string(i)] = GLFW_KEY_0+i; } for (int i = 0; i < 25; i++) { - keycodes["f"+std::to_string(i)] = GLFW_KEY_F1+i; + keycodes["f"+std::to_string(i+1)] = GLFW_KEY_F1+i; } for (char i = 'a'; i <= 'z'; i++) { keycodes[std::string({i})] = GLFW_KEY_A-'a'+i;