2023-10-02 18:15:10 -04:00
|
|
|
extends Area3D
|
|
|
|
|
|
|
|
|
|
|
|
@onready
|
|
|
|
var _grab_sound: AudioStreamPlayer3D = $GrabSound
|
|
|
|
@onready
|
2023-10-02 20:16:42 -04:00
|
|
|
var _song: AudioStreamPlayer = $Song
|
|
|
|
@onready
|
|
|
|
var _anim: AnimationPlayer = $AnimationPlayer
|
2023-10-02 18:15:10 -04:00
|
|
|
|
2023-10-02 18:16:03 -04:00
|
|
|
var _activated = false
|
|
|
|
|
2023-10-02 18:15:10 -04:00
|
|
|
func _ready():
|
|
|
|
_grab_sound.finished.connect(_on_sound_finished)
|
2023-10-02 20:16:42 -04:00
|
|
|
_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))
|
2023-10-02 18:15:10 -04:00
|
|
|
|
|
|
|
|
|
|
|
func _on_body_entered(body):
|
2023-10-02 18:16:03 -04:00
|
|
|
if _activated: return
|
|
|
|
|
2023-10-02 18:15:10 -04:00
|
|
|
if body.is_in_group('Players'):
|
2023-10-02 18:16:03 -04:00
|
|
|
_activated = true
|
2023-10-02 18:15:10 -04:00
|
|
|
hide()
|
2023-10-02 20:16:42 -04:00
|
|
|
_anim.play('fade')
|
2023-10-02 18:15:10 -04:00
|
|
|
_grab_sound.play()
|
2023-10-02 20:16:42 -04:00
|
|
|
_song.play()
|
2023-10-02 18:15:10 -04:00
|
|
|
|
|
|
|
|
|
|
|
func _on_sound_finished():
|
|
|
|
# Make sure both sounds are done playing
|
2023-10-02 20:16:42 -04:00
|
|
|
if not _grab_sound.playing and not _song.playing:
|
2023-10-02 18:15:10 -04:00
|
|
|
queue_free()
|