diff options
author | Pedro J. Estébanez <pedrojrulez@gmail.com> | 2019-03-05 22:31:02 +0100 |
---|---|---|
committer | Pedro J. Estébanez <pedrojrulez@gmail.com> | 2019-03-05 22:33:34 +0100 |
commit | 82902656ac6c60c40979e9cb513b65d96119f917 (patch) | |
tree | ea78cf3be02c52c9bd1819c8409cc2d2c9af65a7 /main | |
parent | f43ee4aff8e5f72c24cfbd8f1ff90703714857e0 (diff) |
Improve/fix picking
Acknowledge mouse button events as position tellers (to make picking more solid; for instance, the touch mouse is raised with a mouse unpressed event that may have a more current position)
Forget mouse position for physics if touch mouse raised (because the position known as last is no longer meaningful)
Remove needless check for mouse over/exit (now there's code to inject an spurious move for cases where camera/objects have moved)
Restrict 2D mouse over/exit to mouse events (including emulated from touch; true touches shouldn't trigger the signals)
Fixes #26460.
Diffstat (limited to 'main')
-rw-r--r-- | main/input_default.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/main/input_default.cpp b/main/input_default.cpp index e8133f9eba..65910b34bc 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -355,6 +355,7 @@ void InputDefault::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool Ref<InputEventMouseButton> button_event; button_event.instance(); + button_event->set_device(-1); button_event->set_position(st->get_position()); button_event->set_global_position(st->get_position()); button_event->set_pressed(st->is_pressed()); @@ -383,6 +384,7 @@ void InputDefault::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool Ref<InputEventMouseMotion> motion_event; motion_event.instance(); + motion_event->set_device(-1); motion_event->set_position(sd->get_position()); motion_event->set_global_position(sd->get_position()); motion_event->set_relative(sd->get_relative()); @@ -600,6 +602,7 @@ void InputDefault::ensure_touch_mouse_raised() { Ref<InputEventMouseButton> button_event; button_event.instance(); + button_event->set_device(-1); button_event->set_position(mouse_pos); button_event->set_global_position(mouse_pos); button_event->set_pressed(false); |