frame-of-mind/src/base-environments/youth_room/Collectable.gd

62 lines
1.6 KiB
GDScript

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)