Merge pull request #447 from aaronfranke/multitouch

Multitouch View tweaks
This commit is contained in:
Aaron Franke
2020-03-15 12:05:55 -04:00
committed by GitHub
3 changed files with 16 additions and 20 deletions

View File

@@ -1,38 +1,33 @@
extends Node
# This will track the position of every pointer in its public `state` property, which is a
# Dictionary, in which each key is a pointer id (integer) and each value its position (Vector2).
# It works by listening to input events not handled by other means.
# It also remaps the pointer indices coming from the OS to the lowest available to be friendlier.
# It can be conveniently setup as a singleton.
extends Node
var state = {}
var _os2own = {}
func _unhandled_input(event):
if event is InputEventScreenTouch:
if event.pressed:
# Down
if !_os2own.has(event.index): # Defensively discard index if already known
if event.pressed: # Down.
if !_os2own.has(event.index): # Defensively discard index if already known.
var ptr_id = _find_free_pointer_id()
state[ptr_id] = event.position
_os2own[event.index] = ptr_id
else:
# Up
if _os2own.has(event.index): # Defensively discard index if not known
else: # Up.
if _os2own.has(event.index): # Defensively discard index if not known.
var ptr_id = _os2own[event.index]
state.erase(ptr_id)
_os2own.erase(event.index)
return true
elif event is InputEventScreenDrag:
# Move
if _os2own.has(event.index): # Defensively discard index if not known
get_tree().set_input_as_handled()
elif event is InputEventScreenDrag: # Movement.
if _os2own.has(event.index): # Defensively discard index if not known.
var ptr_id = _os2own[event.index]
state[ptr_id] = event.position
return true
get_tree().set_input_as_handled()
return false
func _find_free_pointer_id():
var used = state.keys()
@@ -40,4 +35,3 @@ func _find_free_pointer_id():
while i in used:
i += 1
return i

View File

@@ -27,6 +27,10 @@ TouchHelper="*res://TouchHelper.gd"
singletons=[ ]
[input_devices]
pointing/emulate_touch_from_mouse=true
[rendering]
quality/driver/driver_name="GLES2"

View File

@@ -20,15 +20,13 @@ func _unhandled_input(event):
var ptr_id = _os2own[event.index]
state.erase(ptr_id)
_os2own.erase(event.index)
return true
get_tree().set_input_as_handled()
elif event is InputEventScreenDrag: # Movement.
if _os2own.has(event.index): # Defensively discard index if not known.
var ptr_id = _os2own[event.index]
state[ptr_id] = event.position
return true
return false
get_tree().set_input_as_handled()
func _find_free_pointer_id():