fix: input F1..F25 key codes & add binding 'chunks.reload'

This commit is contained in:
MihailRis 2024-06-05 19:29:35 +03:00
parent d316a5f818
commit ad62b759fb
8 changed files with 18 additions and 4 deletions

View File

@ -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"

View File

@ -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

View File

@ -60,6 +60,7 @@ settings.UI Sounds=Звуки Интерфейса
settings.V-Sync=Вертикальная Синхронизация
# Управление
chunks.reload=Перезагрузить Чанки
devtools.console=Консоль
movement.forward=Вперёд
movement.back=Назад

View File

@ -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";

View File

@ -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> 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<TextureAnimator>();
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) {

View File

@ -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<int>(code));
}

View File

@ -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);

View File

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