class_name InteractiveSprite extends Area3D @onready var pass_to_actor = $UiWrapper/UiSprite/SubViewport/CollectableUi @onready var wrapper = $UiWrapper @onready var ui: CollectableUi = $UiWrapper/UiSprite/SubViewport.get_child(0) @onready var viewport:= $UiWrapper/UiSprite/SubViewport var distance_tween = Tween.new() var revealed: bool = false: set(reveal): revealed = reveal if reveal: wrapper.show() if distance_tween.is_running(): distance_tween.stop() distance_tween = get_tree().create_tween() distance_tween.tween_property($UiWrapper/Frame, "visibility_range_end", 3, 1) else: ui.vanish() if distance_tween.is_running(): distance_tween.stop() distance_tween = get_tree().create_tween() distance_tween.tween_property($UiWrapper/Frame, "visibility_range_end", 0.6, 1) await get_tree().create_timer(1).timeout if not ui.visible: wrapper.hide() var has_mouse: bool = false # Called when the node enters the scene tree for the first time. func _ready(): mouse_entered.connect(_on_mouse_entered) func _on_mouse_entered(): if not State.focus_locked: input_ray_pickable = false ui.is_collapsed = false has_mouse = true func _on_mouse_exited(): input_ray_pickable = true ui.is_collapsed = true has_mouse = false func try_reveal(for_player: Player) -> bool: print("reveal ui!") revealed = ui.try_reveal() if revealed: call_deferred("wait_for_ui_exit", for_player) return revealed func wait_for_ui_exit(for_player: Player): await for_player.ui_exited collapse() func collapse(): _on_mouse_exited() revealed = false func handle(event: InputEvent): viewport.push_input(event)