From 6642760206ec7e9c3c43a427de87b1ae3778cd29 Mon Sep 17 00:00:00 2001 From: Jamie Greunbaum Date: Sat, 19 Sep 2026 02:12:31 -0400 Subject: [PATCH] Fixed deadzone issues with InputResource's axis update routine. --- src/liborng/resources/input_resource.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/liborng/resources/input_resource.cpp b/src/liborng/resources/input_resource.cpp index 50ccf75..d9d8768 100644 --- a/src/liborng/resources/input_resource.cpp +++ b/src/liborng/resources/input_resource.cpp @@ -50,14 +50,15 @@ void InputResource::update_axes(const float delta) const StringName prefix = StringName("_on_") + axis->get_axis_name(); const float axis_deadzone = axis->get_deadzone(); - Vector3 current_input = axis->get_last_axis_input(); + Vector3 last_input = axis->get_last_axis_input(); + Vector3 current_input = Vector3(); const StringName &signal_1d = prefix + INPUTAXIS_ONE_DIMENSIONAL_SUFFIX + INPUTHANDLER_SUFFIX_SIGNAL; if (this->has_signal(signal_1d)) { float x_axis = axis->get_x_axis(); - if (UtilityFunctions::absf(x_axis) < axis_deadzone) x_axis = 0.0f; - if (current_input.x != x_axis || current_input.length() > SMALL_NUMBER) + if (UtilityFunctions::absf(x_axis) <= axis_deadzone) x_axis = 0.0f; + if (last_input.x != x_axis || UtilityFunctions::absf(x_axis) > axis_deadzone) this->emit_signal(signal_1d, delta, x_axis); current_input.x = x_axis; } @@ -66,9 +67,8 @@ void InputResource::update_axes(const float delta) if (this->has_signal(signal_2d)) { Vector2 &vector = axis->get_lateral_vector(); - if (UtilityFunctions::absf(vector.x) < axis_deadzone) vector.x = 0.0f; - if (UtilityFunctions::absf(vector.y) < axis_deadzone) vector.y = 0.0f; - if ((current_input.x != vector.x || current_input.z != vector.y) || current_input.length() > SMALL_NUMBER) + if (vector.length() <= axis_deadzone) vector = Vector2(); + if ((last_input.x != vector.x || last_input.z != vector.y) || last_input.length() > axis_deadzone) this->emit_signal(signal_2d, delta, vector); current_input.x = vector.x; current_input.z = vector.y; } @@ -77,10 +77,8 @@ void InputResource::update_axes(const float delta) if (this->has_signal(signal_3d)) { Vector3 &vector = axis->get_spherical_vector(); - if (UtilityFunctions::absf(vector.x) < axis_deadzone) vector.x = 0.0f; - if (UtilityFunctions::absf(vector.y) < axis_deadzone) vector.y = 0.0f; - if (UtilityFunctions::absf(vector.z) < axis_deadzone) vector.z = 0.0f; - if (current_input != vector || current_input.length() > SMALL_NUMBER) + if (vector.length() <= axis_deadzone) vector = Vector3(); + if (last_input != vector || last_input.length() > axis_deadzone) this->emit_signal(signal_3d, delta, vector); current_input = vector; }