diff options
author | groud <gilles.roudiere@gmail.com> | 2018-04-25 22:29:39 +0200 |
---|---|---|
committer | groud <gilles.roudiere@gmail.com> | 2018-04-25 22:32:09 +0200 |
commit | 0aa8b35ee689fc8b3813ab3d35c85f9cf97775a9 (patch) | |
tree | d01588ab07c3f4c33e2ec1d9f58517f23d40a8b8 /core/os | |
parent | 6faa96fb89ab33fe3a6b37eecca1c7cf2934ff75 (diff) |
Fixing input strength and the impossibility to erase action events
Diffstat (limited to 'core/os')
-rw-r--r-- | core/os/input_event.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/core/os/input_event.cpp b/core/os/input_event.cpp index 5003be77ab..4ebb821a2f 100644 --- a/core/os/input_event.cpp +++ b/core/os/input_event.cpp @@ -656,12 +656,14 @@ bool InputEventJoypadMotion::action_match(const Ref<InputEvent> &p_event, bool * if (jm.is_null()) return false; - bool match = (axis == jm->axis && (((axis_value < 0) == (jm->axis_value < 0)) || jm->axis_value == 0)); + bool match = (axis == jm->axis); // Matches even if not in the same direction, but returns a "not pressed" event. if (match) { + bool same_direction = (((axis_value < 0) == (jm->axis_value < 0)) || jm->axis_value == 0); + bool pressed = same_direction ? Math::abs(jm->get_axis_value()) >= p_deadzone : false; if (p_pressed != NULL) - *p_pressed = Math::abs(jm->get_axis_value()) >= p_deadzone; + *p_pressed = pressed; if (p_strength != NULL) - *p_strength = (*p_pressed) ? Math::inverse_lerp(p_deadzone, 1.0f, Math::abs(jm->get_axis_value())) : 0.0f; + *p_strength = pressed ? CLAMP(Math::inverse_lerp(p_deadzone, 1.0f, Math::abs(jm->get_axis_value())), 0.0f, 1.0f) : 0.0f; } return match; } |