75 lines
1.5 KiB
GDScript
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; |