extends Area3D @onready var _grab_sound: AudioStreamPlayer3D = $GrabSound @onready var _song: AudioStreamPlayer = $Song @onready var _anim: AnimationPlayer = $AnimationPlayer var _activated = false func _ready(): _grab_sound.finished.connect(_on_sound_finished) _song.finished.connect(_on_sound_finished) var animation: Animation = _anim.get_animation('fade') var track = animation.find_track('Song:volume_db', Animation.TrackType.TYPE_BEZIER) var time = _song.stream.get_length() animation.length = time animation.bezier_track_insert_key(track, time, -80, Vector2(-0.25, 0)) func _on_body_entered(body): if _activated: return if body.is_in_group('Players'): _activated = true hide() _anim.play('fade') _grab_sound.play() _song.play() func _on_sound_finished(): # Make sure both sounds are done playing if not _grab_sound.playing and not _song.playing: queue_free()