Files
Dawn-Godot/scripts/Cutscene/Event/CutsceneConcurrentEvent.gd
2025-01-05 16:08:11 -06:00

75 lines
1.5 KiB
GDScript

class_name CutsceneConcurrentEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
enum ConcurrentType {
SEQUENTIAL,
PARALLEL,
FIRST_DONE
}
var events:Array[CutsceneEvent] = []
var type:ConcurrentType = ConcurrentType.SEQUENTIAL
var current:int = 0
func _init(t:ConcurrentType, evts:Array[CutsceneEvent]) -> void:
super._init();
self.events = evts;
self.type = t;
func update(delta:float) -> void:
if self.type == ConcurrentType.PARALLEL:
for event in self.events:
if !event.started:
event.start()
event.started = true
if !event.isDone():
event.update(delta)
if event.isDone():
event.end()
elif self.type == ConcurrentType.FIRST_DONE:
for event in self.events:
if !event.started:
event.start()
event.started = true
if !event.isDone():
event.update(delta)
if event.isDone():
event.end()
break
elif self.type == ConcurrentType.SEQUENTIAL:
if self.current >= self.events.size():
return;
var evt = self.events[self.current]
if !evt.started:
evt.start()
evt.started = true
if !evt.isDone():
evt.update(delta)
if evt.isDone():
evt.end()
self.current += 1
func isDone() -> bool:
if self.type == ConcurrentType.SEQUENTIAL:
return self.current >= self.events.size();
elif self.type == ConcurrentType.PARALLEL:
for evt in self.events:
if !evt.isDone():
return false;
return true;
elif self.type == ConcurrentType.FIRST_DONE:
for evt in self.events:
if evt.isDone():
return true;
return false;
printerr("Invalid ConcurrentType")
return false;