concurrent
This commit is contained in:
75
scripts/Cutscene/Event/CutsceneConcurrentEvent.gd
Normal file
75
scripts/Cutscene/Event/CutsceneConcurrentEvent.gd
Normal 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;
|
@@ -3,6 +3,7 @@ class_name CutscenePrintEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
|
|||||||
var text:String = ""
|
var text:String = ""
|
||||||
|
|
||||||
func _init(text:String) -> void:
|
func _init(text:String) -> void:
|
||||||
|
super._init()
|
||||||
self.text = text
|
self.text = text
|
||||||
|
|
||||||
func start() -> void:
|
func start() -> void:
|
||||||
|
@@ -2,8 +2,9 @@ class_name CutsceneWaitEvent extends "res://scripts/Cutscene/CutsceneEvent.gd"
|
|||||||
|
|
||||||
var wait:float = 0.0
|
var wait:float = 0.0
|
||||||
|
|
||||||
func _init(wait:float) -> void:
|
func _init(time:float) -> void:
|
||||||
self.wait = wait
|
super._init()
|
||||||
|
self.wait = time
|
||||||
|
|
||||||
func update(delta:float) -> void:
|
func update(delta:float) -> void:
|
||||||
self.wait -= delta
|
self.wait -= delta
|
||||||
|
@@ -1,10 +1,13 @@
|
|||||||
class_name TestCutscene extends "res://scripts/Cutscene/Cutscene.gd"
|
class_name TestCutscene extends "res://scripts/Cutscene/Cutscene.gd"
|
||||||
const CutscenePrintEvent = preload("res://scripts/Cutscene/Event/CutscenePrintEvent.gd");
|
const CutscenePrintEvent = preload("res://scripts/Cutscene/Event/CutscenePrintEvent.gd");
|
||||||
const CutsceneWaitEvent = preload("res://scripts/Cutscene/Event/CutsceneWaitEvent.gd");
|
const CutsceneWaitEvent = preload("res://scripts/Cutscene/Event/CutsceneWaitEvent.gd");
|
||||||
|
const CutsceneConcurrentEvent = preload("res://scripts/Cutscene/Event/CutsceneConcurrentEvent.gd");
|
||||||
|
|
||||||
func setupCutscene() -> void:
|
func setupCutscene() -> void:
|
||||||
add([
|
add([
|
||||||
CutsceneWaitEvent.new(4.0),
|
CutsceneConcurrentEvent.new(CutsceneConcurrentEvent.ConcurrentType.PARALLEL, [
|
||||||
CutscenePrintEvent.new("Hello, World!")
|
CutscenePrintEvent.new("Hello, World1"),
|
||||||
|
CutscenePrintEvent.new("Hello, World2")
|
||||||
|
])
|
||||||
]);
|
]);
|
||||||
pass
|
pass
|
Reference in New Issue
Block a user