48 lines
736 B
GDScript
48 lines
736 B
GDScript
extends AudioStreamPlayer
|
|
class_name AudioArrayPlayer
|
|
|
|
signal all_finished()
|
|
|
|
@export var queue: Array = []
|
|
|
|
@warning_ignore("native_method_override")
|
|
func stop():
|
|
queue.clear()
|
|
super.stop()
|
|
|
|
func _ready():
|
|
self.finished.connect(_finished)
|
|
|
|
func start():
|
|
if len(queue) > 0:
|
|
var new = queue[0]
|
|
if new is float:
|
|
get_tree().create_timer(new).timeout.connect(_finish_delay)
|
|
return
|
|
stream = new
|
|
if !playing:
|
|
play()
|
|
else:
|
|
all_finished.emit()
|
|
|
|
func _finish_delay():
|
|
next()
|
|
|
|
func next():
|
|
queue.pop_front()
|
|
start()
|
|
|
|
func _finished():
|
|
next()
|
|
|
|
|
|
func play_all(extra: Array = []):
|
|
add_streams(extra)
|
|
start()
|
|
|
|
func add_stream(new: AudioStream):
|
|
queue.append(new)
|
|
|
|
func add_streams(new: Array):
|
|
queue.append_array(new)
|