Fixed deadzone issues with InputResource's axis update routine.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user