concurrent

This commit is contained in:
2025-01-05 16:08:11 -06:00
parent 0554f5719d
commit 9dce4bf2c7
4 changed files with 84 additions and 4 deletions

View File

@@ -0,0 +1,75 @@
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;

View File

@@ -3,6 +3,7 @@ class_name CutscenePrintEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var text:String = ""
func _init(text:String) -> void:
super._init()
self.text = text
func start() -> void:

View File

@@ -2,8 +2,9 @@ class_name CutsceneWaitEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var wait:float = 0.0
func _init(wait:float) -> void:
self.wait = wait
func _init(time:float) -> void:
super._init()
self.wait = time
func update(delta:float) -> void:
self.wait -= delta

View File

@@ -1,10 +1,13 @@
class_name TestCutscene extends "res://scripts/Cutscene/Cutscene.gd"
const CutscenePrintEvent = preload("res://scripts/Cutscene/Event/CutscenePrintEvent.gd");
const CutsceneWaitEvent = preload("res://scripts/Cutscene/Event/CutsceneWaitEvent.gd");
const CutsceneConcurrentEvent = preload("res://scripts/Cutscene/Event/CutsceneConcurrentEvent.gd");
func setupCutscene() -> void:
add([
CutsceneWaitEvent.new(4.0),
CutscenePrintEvent.new("Hello, World!")
CutsceneConcurrentEvent.new(CutsceneConcurrentEvent.ConcurrentType.PARALLEL, [
CutscenePrintEvent.new("Hello, World1"),
CutscenePrintEvent.new("Hello, World2")
])
]);
pass