From ef744db9aece8c170f1c4c066f2737e85de6175a Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Wed, 19 Jan 2022 17:53:19 +0100 Subject: [PATCH] plugin: add touch support (finally) --- src/Main.tscn | 3 ++ .../openvr_overlay/OverlayInstance.tscn | 1 - .../openvr_overlay/OverlayTouchCursor.tscn | 7 ++++ .../interaction/overlay_cursor.gd | 37 ++++++++++++++----- .../interaction/overlay_interaction.gd | 15 ++++++-- src/addons/openvr_overlay/overlay_init.gd | 3 +- src/overlay_scripts/ui_demo.gd | 2 +- src/overlays/UI_demo.tscn | 15 +++++--- 8 files changed, 62 insertions(+), 21 deletions(-) create mode 100644 src/addons/openvr_overlay/OverlayTouchCursor.tscn diff --git a/src/Main.tscn b/src/Main.tscn index 0f1756c..123ab04 100644 --- a/src/Main.tscn +++ b/src/Main.tscn @@ -1,3 +1,6 @@ [gd_scene format=2] [node name="Main" type="Node"] +__meta__ = { +"_editor_description_": "Everything is loaded using autoloads so this scene is just a dummy" +} diff --git a/src/addons/openvr_overlay/OverlayInstance.tscn b/src/addons/openvr_overlay/OverlayInstance.tscn index 7509b4d..ede672e 100644 --- a/src/addons/openvr_overlay/OverlayInstance.tscn +++ b/src/addons/openvr_overlay/OverlayInstance.tscn @@ -22,7 +22,6 @@ script = ExtResource( 1 ) [node name="OverlayViewport" type="Viewport" parent="."] size = Vector2( 2048, 2048 ) transparent_bg = true -handle_input_locally = false hdr = false disable_3d = true usage = 0 diff --git a/src/addons/openvr_overlay/OverlayTouchCursor.tscn b/src/addons/openvr_overlay/OverlayTouchCursor.tscn new file mode 100644 index 0000000..3e0a574 --- /dev/null +++ b/src/addons/openvr_overlay/OverlayTouchCursor.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/openvr_overlay/interaction/overlay_cursor.gd" type="Script" id=1] + +[node name="OverlayTouchCursor" type="Node"] +script = ExtResource( 1 ) +is_touch = true diff --git a/src/addons/openvr_overlay/interaction/overlay_cursor.gd b/src/addons/openvr_overlay/interaction/overlay_cursor.gd index 9c4dc6e..c6a4f06 100644 --- a/src/addons/openvr_overlay/interaction/overlay_cursor.gd +++ b/src/addons/openvr_overlay/interaction/overlay_cursor.gd @@ -1,5 +1,6 @@ extends Node +export var is_touch := false onready var viewport: Viewport = get_node("../../OverlayViewport") onready var _i = get_parent() @@ -22,21 +23,38 @@ var cursor_nodes := { "right": preload("res://addons/openvr_overlay/interaction/Cursor.tscn").instance(), "left": preload("res://addons/openvr_overlay/interaction/Cursor.tscn").instance(), } - +var temp = 0 +var tstate = true func _ready() -> void: viewport.add_child(cursor_nodes.right) viewport.add_child(cursor_nodes.left) - get_parent().connect("trigger_on", self, "_trigger_on") - get_parent().connect("trigger_off", self, "_trigger_off") + if is_touch: + get_parent().connect("touch_on", self, "_trigger_on") + get_parent().connect("touch_off", self, "_trigger_off") + else: + get_parent().connect("trigger_on", self, "_trigger_on") + get_parent().connect("trigger_off", self, "_trigger_off") + - -func _process(_delta: float) -> void: - cursor_pos.right= get_canvas_pos("right") - cursor_pos.left= get_canvas_pos("left") +func _process(delta: float) -> void: + cursor_pos.right = get_canvas_pos("right") + cursor_pos.left = get_canvas_pos("left") _update_cursors() - _send_move_event() + #_send_move_event() prev_pos = cursor_pos.duplicate(true) +# if is_touch: +# temp += delta +# if temp > 0.5: +# temp = 0 +# var click_event = InputEventMouseButton.new() +# click_event.position = Vector2(240, 340) +# click_event.pressed = tstate +# tstate = !tstate +# click_event.button_index = 1 +# viewport.input(click_event) +# print("SENT EVENT ", click_event.position, " -- ", click_event.pressed) +## viewport. #get canvas position of controller @@ -65,7 +83,7 @@ func _update_cursors(): func _send_move_event(): if not active_side: return# only send move events while a cursor is held down - + var event = InputEventMouseMotion.new() event.position = prev_pos[active_side] event.relative = cursor_pos[active_side] - prev_pos[active_side] @@ -83,6 +101,7 @@ func _send_click_event(state: bool, controller: String): click_event.pressed = state click_event.button_index = 1 viewport.input(click_event) +# print("SENT EVENT ", click_event.position, " -- ", click_event.pressed) func _trigger_on(controller): diff --git a/src/addons/openvr_overlay/interaction/overlay_interaction.gd b/src/addons/openvr_overlay/interaction/overlay_interaction.gd index 945e69a..7fcdd26 100644 --- a/src/addons/openvr_overlay/interaction/overlay_interaction.gd +++ b/src/addons/openvr_overlay/interaction/overlay_interaction.gd @@ -62,11 +62,13 @@ func _ready() -> void: func _trigger_on(controller): if state[controller].near: state[controller].trigger = true +# print("TRIGGER ON ", controller) emit_signal("trigger_on", controller) func _trigger_off(controller): state[controller].trigger = false +# print("TRIGGER OFF ", controller) emit_signal("trigger_off", controller) @@ -76,6 +78,7 @@ func _on_Near_entered(body: Node) -> void: var hand = body.get_groups()[0] state[hand].near = true update_selection() +# print("NEAR ON ", hand) emit_signal("near_on") @@ -85,6 +88,7 @@ func _on_Near_exited(body: Node) -> void: var hand = body.get_groups()[0] state[hand].near = false +# print("NEAR OFF ", hand) update_selection() emit_signal("near_off") @@ -95,7 +99,8 @@ func _on_Touch_entered(body: Node) -> void: var hand = body.get_groups()[0] state[hand].touch = true update_selection() - emit_signal("touch_on") +# print("TOUCH ON ", hand) + emit_signal("touch_on", hand) func _on_Touch_exited(body: Node) -> void: @@ -103,9 +108,9 @@ func _on_Touch_exited(body: Node) -> void: return var hand = body.get_groups()[0] state[hand].touch = false - update_selection() - emit_signal("touch_off") +# print("TOUCH OFF ", hand) + emit_signal("touch_off", hand) func update_selection(): @@ -160,6 +165,10 @@ func spawn_modules(): var module = preload("res://addons/openvr_overlay/OverlayCursor.tscn") add_child(module.instance()) + # cursor module + if get_parent().get_property("has_touch"): + var module = preload("res://addons/openvr_overlay/OverlayTouchCursor.tscn") + add_child(module.instance()) func _on_RightHand_button_pressed(button: int) -> void: diff --git a/src/addons/openvr_overlay/overlay_init.gd b/src/addons/openvr_overlay/overlay_init.gd index a19e21b..ab9a09d 100644 --- a/src/addons/openvr_overlay/overlay_init.gd +++ b/src/addons/openvr_overlay/overlay_init.gd @@ -35,7 +35,8 @@ func _ready() -> void: ARVRServer.connect("tracker_added", self, "_tracker_added") ARVRServer.connect("tracker_removed", self, "_tracker_removed") update_hand_ids() - + #Input.set_use_accumulated_input(true) + func _tracker_added(tracker_name: String, type: int, id: int): update_hand_ids() diff --git a/src/overlay_scripts/ui_demo.gd b/src/overlay_scripts/ui_demo.gd index b93ebe6..9007f5b 100644 --- a/src/overlay_scripts/ui_demo.gd +++ b/src/overlay_scripts/ui_demo.gd @@ -12,7 +12,7 @@ var oinst func _ready() -> void: oinst = get_viewport().get_parent() - clicker = get_viewport().get_node("../OverlayInteraction/OverlayCursor") + clicker = get_viewport().get_node("../OverlayInteraction/OverlayTouchCursor") grabber = get_viewport().get_node("../OverlayInteraction/OverlayGrab") for t in oinst.TARGETS: $OptionButton.add_item(t) diff --git a/src/overlays/UI_demo.tscn b/src/overlays/UI_demo.tscn index 5c3dd30..3335a93 100644 --- a/src/overlays/UI_demo.tscn +++ b/src/overlays/UI_demo.tscn @@ -12,6 +12,10 @@ font_data = ExtResource( 2 ) [sub_resource type="Theme" id=2] default_font = SubResource( 1 ) +[sub_resource type="DynamicFont" id=5] +size = 64 +font_data = ExtResource( 3 ) + [sub_resource type="StyleBoxFlat" id=3] bg_color = Color( 0.419608, 0.419608, 0.419608, 1 ) border_width_left = 16 @@ -23,10 +27,6 @@ corner_detail = 1 [sub_resource type="StyleBoxFlat" id=4] -[sub_resource type="DynamicFont" id=5] -size = 64 -font_data = ExtResource( 3 ) - [node name="Control" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 @@ -57,10 +57,10 @@ __meta__ = { margin_left = 335.0 margin_right = 650.0 margin_bottom = 143.0 +custom_colors/font_color = Color( 0, 0, 0, 1 ) +custom_fonts/font = SubResource( 5 ) custom_styles/pressed = SubResource( 3 ) custom_styles/normal = SubResource( 4 ) -custom_fonts/font = SubResource( 5 ) -custom_colors/font_color = Color( 0, 0, 0, 1 ) text = "Drag" __meta__ = { "_edit_use_anchors_": false @@ -86,6 +86,9 @@ margin_top = 242.452 margin_right = 1051.0 margin_bottom = 433.452 text = "aaaaa" +__meta__ = { +"_edit_use_anchors_": false +} [node name="Button4" type="Button" parent="."] margin_left = 650.0