Fixed deadzone issues with InputResource's axis update routine.

This commit is contained in:
2026-09-19 02:12:31 -04:00
parent 5ccef7932e
commit 6642760206
+8 -10
View File
@@ -50,14 +50,15 @@ void InputResource::update_axes(const float delta)
const StringName prefix = StringName("_on_") + axis->get_axis_name(); const StringName prefix = StringName("_on_") + axis->get_axis_name();
const float axis_deadzone = axis->get_deadzone(); 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; const StringName &signal_1d = prefix + INPUTAXIS_ONE_DIMENSIONAL_SUFFIX + INPUTHANDLER_SUFFIX_SIGNAL;
if (this->has_signal(signal_1d)) if (this->has_signal(signal_1d))
{ {
float x_axis = axis->get_x_axis(); float x_axis = axis->get_x_axis();
if (UtilityFunctions::absf(x_axis) < axis_deadzone) x_axis = 0.0f; if (UtilityFunctions::absf(x_axis) <= axis_deadzone) x_axis = 0.0f;
if (current_input.x != x_axis || current_input.length() > SMALL_NUMBER) if (last_input.x != x_axis || UtilityFunctions::absf(x_axis) > axis_deadzone)
this->emit_signal(signal_1d, delta, x_axis); this->emit_signal(signal_1d, delta, x_axis);
current_input.x = x_axis; current_input.x = x_axis;
} }
@@ -66,9 +67,8 @@ void InputResource::update_axes(const float delta)
if (this->has_signal(signal_2d)) if (this->has_signal(signal_2d))
{ {
Vector2 &vector = axis->get_lateral_vector(); Vector2 &vector = axis->get_lateral_vector();
if (UtilityFunctions::absf(vector.x) < axis_deadzone) vector.x = 0.0f; if (vector.length() <= axis_deadzone) vector = Vector2();
if (UtilityFunctions::absf(vector.y) < axis_deadzone) vector.y = 0.0f; if ((last_input.x != vector.x || last_input.z != vector.y) || last_input.length() > axis_deadzone)
if ((current_input.x != vector.x || current_input.z != vector.y) || current_input.length() > SMALL_NUMBER)
this->emit_signal(signal_2d, delta, vector); this->emit_signal(signal_2d, delta, vector);
current_input.x = vector.x; current_input.z = vector.y; 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)) if (this->has_signal(signal_3d))
{ {
Vector3 &vector = axis->get_spherical_vector(); Vector3 &vector = axis->get_spherical_vector();
if (UtilityFunctions::absf(vector.x) < axis_deadzone) vector.x = 0.0f; if (vector.length() <= axis_deadzone) vector = Vector3();
if (UtilityFunctions::absf(vector.y) < axis_deadzone) vector.y = 0.0f; if (last_input != vector || last_input.length() > axis_deadzone)
if (UtilityFunctions::absf(vector.z) < axis_deadzone) vector.z = 0.0f;
if (current_input != vector || current_input.length() > SMALL_NUMBER)
this->emit_signal(signal_3d, delta, vector); this->emit_signal(signal_3d, delta, vector);
current_input = vector; current_input = vector;
} }