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