From eda8c8c06c5ea630350b11f30ca07c240601909e Mon Sep 17 00:00:00 2001 From: CrispyPin Date: Sun, 6 Jun 2021 22:46:52 +0200 Subject: [PATCH] update grab visualisation properly if overlay was already touched when setting changed --- .../interaction/overlay_interaction.gd | 20 +++++++++++++++---- ovr-utils/overlay_manager.gd | 1 + ovr-utils/overlay_scripts/main_menu.gd | 1 + 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/ovr-utils/addons/openvr_overlay/interaction/overlay_interaction.gd b/ovr-utils/addons/openvr_overlay/interaction/overlay_interaction.gd index e8881e4..13ea563 100644 --- a/ovr-utils/addons/openvr_overlay/interaction/overlay_interaction.gd +++ b/ovr-utils/addons/openvr_overlay/interaction/overlay_interaction.gd @@ -7,9 +7,9 @@ signal trigger_off# trigger released var touch_state := false var trigger_state := false -var grab_mode := false +var grab_mode := false setget set_grab_mode -# controller that currently the trigger down +# controller that currently has the trigger down var active_controller := "" # reference to the area node thats used for touch var _overlay_area = preload("res://addons/openvr_overlay/interaction/OverlayArea.tscn").instance() @@ -35,6 +35,8 @@ func _ready() -> void: get_parent().connect("offset_changed", self, "_update_offset") get_parent().connect("target_changed", self, "_update_target") + OverlayManager.connect("grab_mode_changed", self, "update_selection") + _update_width() _update_offset() _update_target() @@ -57,7 +59,7 @@ func _on_OverlayArea_entered(body: Node) -> void: return touch_state = true active_controller = body.get_parent().name - get_parent().get_node("OverlayViewport/Selected").visible = Settings.s.grab_mode or grab_mode + update_selection() emit_signal("touch_on") @@ -67,10 +69,20 @@ func _on_OverlayArea_exited(body: Node) -> void: # TODO revert to other controller if both were touching (edge case) active_controller = "" touch_state = false - get_parent().get_node("OverlayViewport/Selected").visible = false + update_selection() emit_signal("touch_off") +func update_selection(): + var sel = touch_state and (Settings.s.grab_mode or grab_mode) + get_parent().get_node("OverlayViewport/Selected").visible = sel + + +func set_grab_mode(state: bool) -> void: + grab_mode = state + update_selection() + + func _update_width(): var ratio = OverlayInit.ovr_interface.get_render_targetsize() var extents = get_parent().width_meters * 0.5 diff --git a/ovr-utils/overlay_manager.gd b/ovr-utils/overlay_manager.gd index 4ecc9b0..46575bc 100644 --- a/ovr-utils/overlay_manager.gd +++ b/ovr-utils/overlay_manager.gd @@ -2,6 +2,7 @@ extends Node signal added_overlay signal removed_overlay +signal grab_mode_changed var loaded := false diff --git a/ovr-utils/overlay_scripts/main_menu.gd b/ovr-utils/overlay_scripts/main_menu.gd index 0dd56f1..d10b4dc 100644 --- a/ovr-utils/overlay_scripts/main_menu.gd +++ b/ovr-utils/overlay_scripts/main_menu.gd @@ -22,6 +22,7 @@ func _remove_overlay_from_list(name): func _on_GrabMode_toggled(state: bool) -> void: Settings.s.grab_mode = state + OverlayManager.emit_signal("grab_mode_changed") func _on_ShowOverlays_toggled(state: bool) -> void: