From 684d154a6db9c4b73b2b42a9049fe3ca58954517 Mon Sep 17 00:00:00 2001 From: codemob <69110900+codemob-dev@users.noreply.github.com> Date: Sun, 13 Jul 2025 06:19:58 -0400 Subject: [PATCH] Added invert mouse Y setting (#1666) Fixes #1296. --- src/graphics/Window.zig | 6 +++++- src/gui/windows/controls.zig | 8 ++++++++ src/settings.zig | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/graphics/Window.zig b/src/graphics/Window.zig index 881dae64..ffb61d10 100644 --- a/src/graphics/Window.zig +++ b/src/graphics/Window.zig @@ -489,7 +489,11 @@ pub const GLFWCallbacks = struct { // MARK: GLFWCallbacks @floatCast(y), }; if(grabbed and !ignoreDataAfterRecentGrab) { - deltas[deltaBufferPosition] += (newPos - currentPos)*@as(Vec2f, @splat(main.settings.mouseSensitivity)); + var newDelta = (newPos - currentPos)*@as(Vec2f, @splat(main.settings.mouseSensitivity)); + if(settings.invertMouseY) { + newDelta[1] *= -1; + } + deltas[deltaBufferPosition] += newDelta; var averagedDelta: Vec2f = Vec2f{0, 0}; for(deltas) |delta| { averagedDelta += delta; diff --git a/src/gui/windows/controls.zig b/src/gui/windows/controls.zig index 11114170..9db2ee3e 100644 --- a/src/gui/windows/controls.zig +++ b/src/gui/windows/controls.zig @@ -7,6 +7,7 @@ const gui = @import("../gui.zig"); const GuiComponent = gui.GuiComponent; const GuiWindow = gui.GuiWindow; const Button = @import("../components/Button.zig"); +const CheckBox = @import("../components/CheckBox.zig"); const HorizontalList = @import("../components/HorizontalList.zig"); const Label = @import("../components/Label.zig"); const VerticalList = @import("../components/VerticalList.zig"); @@ -56,6 +57,11 @@ fn updateSensitivity(sensitivity: f32) void { main.settings.save(); } +fn invertMouseYCallback(newValue: bool) void { + main.settings.invertMouseY = newValue; + main.settings.save(); +} + fn updateDeadzone(deadzone: f32) void { main.settings.controllerAxisDeadzone = deadzone; } @@ -89,6 +95,8 @@ pub fn onOpen() void { const list = VerticalList.init(.{padding, 16 + padding}, 364, 8); list.add(Button.initText(.{0, 0}, 128, if(editingKeyboard) "Gamepad" else "Keyboard", .{.callback = &toggleKeyboard})); list.add(ContinuousSlider.init(.{0, 0}, 256, 0, 5, if(editingKeyboard) main.settings.mouseSensitivity else main.settings.controllerSensitivity, &updateSensitivity, &sensitivityFormatter)); + list.add(CheckBox.init(.{0, 0}, 256, "Invert mouse Y", main.settings.invertMouseY, &invertMouseYCallback)); + if(!editingKeyboard) { list.add(ContinuousSlider.init(.{0, 0}, 256, 0, 5, main.settings.controllerAxisDeadzone, &updateDeadzone, &deadzoneFormatter)); } diff --git a/src/settings.zig b/src/settings.zig index a83ea283..85a157b7 100644 --- a/src/settings.zig +++ b/src/settings.zig @@ -26,6 +26,8 @@ pub var fov: f32 = 70; pub var mouseSensitivity: f32 = 1; pub var controllerSensitivity: f32 = 1; +pub var invertMouseY: bool = false; + pub var renderDistance: u16 = 7; pub var highestLod: u3 = highestSupportedLod;