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 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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user