From 2464ad00db239b05ac1eeffeacedb9ea5e9704b6 Mon Sep 17 00:00:00 2001 From: Sofia Date: Sun, 26 Jul 2026 02:17:29 +0300 Subject: [PATCH] Allow remapping keybinds correctly --- rust/src/game_settings.rs | 16 +++++++++++- rust/src/ui/settings.rs | 55 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 67 insertions(+), 4 deletions(-) diff --git a/rust/src/game_settings.rs b/rust/src/game_settings.rs index 47188a4..7209d83 100644 --- a/rust/src/game_settings.rs +++ b/rust/src/game_settings.rs @@ -6,7 +6,7 @@ use std::{ use godot::{ classes::{ AudioServer, FileAccess, InputEvent, InputEventKey, InputEventMouse, InputEventMouseButton, - file_access::ModeFlags, + InputMap, file_access::ModeFlags, }, global::{Key, MouseButton}, prelude::*, @@ -177,6 +177,15 @@ impl GameSettingsManager { set_bus_volume(MUSIC_BUS, settings.volume.music()); set_bus_volume(ANNOUNCER_BUS, settings.volume.announcer()); + set_keybind("right", settings.keybinds.move_right); + set_keybind("left", settings.keybinds.move_left); + set_keybind("forward", settings.keybinds.move_forward); + set_keybind("backward", settings.keybinds.move_backward); + set_keybind("weapon_1", settings.keybinds.select_raygun); + set_keybind("weapon_2", settings.keybinds.select_shotgun); + set_keybind("shoot", settings.keybinds.shoot); + set_keybind("punch", settings.keybinds.melee); + self.settings = settings; if let Some(mut file) = FileAccess::open("user://config.toml", ModeFlags::WRITE) { if let Ok(serialized) = toml::to_string(&self.settings) { @@ -226,3 +235,8 @@ fn set_bus_volume(bus: &str, volume: f32) { let idx = AudioServer::singleton().get_bus_index(bus); AudioServer::singleton().set_bus_volume_linear(idx, volume); } + +fn set_keybind(action: &str, keybind: Keybind) { + InputMap::singleton().action_erase_events(action); + InputMap::singleton().action_add_event(action, &keybind.into_event()); +} diff --git a/rust/src/ui/settings.rs b/rust/src/ui/settings.rs index 6b5b69d..10aed6e 100644 --- a/rust/src/ui/settings.rs +++ b/rust/src/ui/settings.rs @@ -2,8 +2,8 @@ use std::collections::HashMap; use godot::{ classes::{ - Button, Control, GridContainer, IPanelContainer, InputEvent, InputEventKey, InputMap, - Label, LineEdit, PanelContainer, control::SizeFlags, + Button, Control, GridContainer, IPanelContainer, InputEvent, InputEventKey, + InputEventMouseButton, InputMap, Label, LineEdit, PanelContainer, control::SizeFlags, }, prelude::*, }; @@ -110,6 +110,8 @@ pub struct SettingsPanel { settings: HashMap, + keybind_button: Option<(Setting, Gd