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 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 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;