Add cutscene change event

This commit is contained in:
2025-01-05 19:39:05 -06:00
parent 9dce4bf2c7
commit 4e52d1383b
7 changed files with 117 additions and 18 deletions

View File

@@ -6,7 +6,7 @@ func _init() -> void:
pass
func start() -> void:
pass
started = true
func update(delta:float) -> void:
pass
@@ -16,3 +16,6 @@ func isDone() -> bool:
func end() -> void:
pass
func reset() -> void:
started = false

View File

@@ -0,0 +1,18 @@
class_name CutsceneChangeEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var getCutscene:Callable
var cutsceneNext:Cutscene
func _init(getCutscene:Callable) -> void:
super._init();
self.getCutscene = getCutscene;
func start() -> void:
super.start();
self.cutsceneNext = self.getCutscene.call(self);
func end() -> void:
self.cutsceneNext.setupCutscene();
self.cutsceneNext.start();
var systems = get_tree().current_scene.get_node("Systems") as Systems;
systems.CUTSCENE.setCurrentCutscene(self.cutsceneNext);

View File

@@ -34,12 +34,11 @@ func update(delta:float) -> void:
event.start()
event.started = true
if !event.isDone():
event.update(delta)
event.update(delta)
if event.isDone():
event.end()
break
if event.isDone():
event.end()
break
elif self.type == ConcurrentType.SEQUENTIAL:
if self.current >= self.events.size():
@@ -50,12 +49,11 @@ func update(delta:float) -> void:
evt.start()
evt.started = true
if !evt.isDone():
evt.update(delta)
evt.update(delta)
if evt.isDone():
evt.end()
self.current += 1
if evt.isDone():
evt.end()
self.current += 1
func isDone() -> bool:
if self.type == ConcurrentType.SEQUENTIAL:
@@ -72,4 +70,4 @@ func isDone() -> bool:
return false;
printerr("Invalid ConcurrentType")
return false;
return false;

View File

@@ -0,0 +1,32 @@
class_name CutsceneIfEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var eventTrue:CutsceneEvent
var eventFalse:CutsceneEvent
var condition:Callable
var result:bool = false
func _init(cond:Callable, evtTrue:CutsceneEvent, evtFalse:CutsceneEvent) -> void:
super._init();
condition = cond;
eventTrue = evtTrue;
eventFalse = evtFalse;
func start() -> void:
super.start();
result = self.condition.call(self);
if result:
eventTrue.start();
else:
eventFalse.start();
func getEvent() -> CutsceneEvent:
if result:
return eventTrue;
return eventFalse;
func update(delta:float) -> void:
getEvent().update(delta);
func isDone() -> bool:
return getEvent().isDone();

View File

@@ -10,4 +10,4 @@ func update(delta:float) -> void:
self.wait -= delta
func isDone() -> bool:
return self.wait <= 0.0
return self.wait <= 0.0

View File

@@ -0,0 +1,43 @@
class_name CutsceneWhileEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
var events:Array[CutsceneEvent] = []
var callback:Callable
var current:int = 0
func _init(callback:Callable, evt:Array[CutsceneEvent]) -> void:
super._init();
self.events = evt;
self.callback = callback;
func shouldLoop() -> bool:
return self.callback.call(self)
func update(delta:float) -> void:
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
if self.current < self.events.size():
return
if !self.shouldLoop():
return
self.current = 0
for event in self.events:
event.reset()
func isDone() -> bool:
if self.shouldLoop():
return false;
return self.current >= self.events.size();

View File

@@ -2,12 +2,17 @@ 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");
const CutsceneIfEvent = preload("res://scripts/Cutscene/Event/CutsceneIfEvent.gd");
const CutsceneWhileEvent = preload("res://scripts/Cutscene/Event/CutsceneWhileEvent.gd");
func testIf() -> bool:
print("Test if");
return true;
func setupCutscene() -> void:
add([
CutsceneConcurrentEvent.new(CutsceneConcurrentEvent.ConcurrentType.PARALLEL, [
CutscenePrintEvent.new("Hello, World1"),
CutscenePrintEvent.new("Hello, World2")
])
CutsceneWhileEvent.new(testIf,[
CutscenePrintEvent.new("While")
]),
]);
pass
pass