Refactor cutscene queue

This commit is contained in:
2026-01-11 16:40:54 -06:00
parent 99ecc2cfc7
commit 6ecbc33cc2
16 changed files with 190 additions and 32 deletions

View File

@@ -1,25 +1,55 @@
class_name CutsceneSingleton extends Node
class_name Cutscene
const CUTSCENE_CONTINUE = -1
const CUTSCENE_END = -2
const CUTSCENE_ADD_END = -1
const CUTSCENE_ADD_NEXT = -2
var running:bool = false
var index:int = 0
var queue:Array[Dictionary] = []
func setConversation(conversation:Array[ConversationElement]) -> void:
var functions:Array[Callable] = []
# Accepts;
# function:Callable - The function to add
# position:int - Where to add the function (default: end)
# data:Dictionary - Data to pass to the function when called
func addCallable(params:Dictionary) -> int:
assert(params.has("function"))
if !params.has("position"):
params["position"] = CUTSCENE_ADD_END
params['cutscene'] = self
if params["position"] == CUTSCENE_ADD_END || params["position"] >= queue.size():
queue.append(params)
return queue.size() - 1
elif params["position"] == CUTSCENE_ADD_NEXT:
queue.insert(index + 1, params)
return index + 1
queue.insert(params["position"], params)
return params["position"]
func addConversation(conversation:Array[ConversationElement]) -> Array[int]:
var indexes:Array[int] = []
for element in conversation:
functions.append(element.sceneItem)
setScene(functions)
indexes.append(addCallable({ 'function': element.start }))
return indexes
func setScene(functions:Array[Callable]) -> void:
if functions.size() == 0:
func start() -> void:
if queue.size() == 0:
return
assert(!running)
running = true
var index = 0
index = 0
while true:
var result = await functions[index].call()
var queueItem = queue[index]
var result = await queueItem['function'].call(queueItem)
match result:
CUTSCENE_CONTINUE:
@@ -31,7 +61,7 @@ func setScene(functions:Array[Callable]) -> void:
_:
index = result
if index >= functions.size() || index < 0:
if index >= queue.size() || index < 0:
break
running = false

View File

@@ -0,0 +1 @@
class_name CutsceneSingleton extends Node

View File

@@ -0,0 +1 @@
uid://dtq6p6mop3xfo

View File

@@ -0,0 +1,7 @@
class_name CutsceneBattleAction
static func playerDecision(_params:Dictionary) -> int:
BATTLE.battleScene.actionBox.visible = true
var move = await BATTLE.battleScene.actionBox.decisionMade
BATTLE.battleScene.actionBox.visible = false
return Cutscene.CUTSCENE_CONTINUE

View File

@@ -0,0 +1 @@
uid://cj38yci04aylm

View File

@@ -4,6 +4,6 @@ class_name ConversationElement
@export_node_path("Entity") var entity:NodePath
@export_multiline var label: String
func sceneItem() -> int:
func start(_params:Dictionary) -> int:
await UI.TEXTBOX.setTextAndWait(label)
return CutsceneSingleton.CUTSCENE_CONTINUE
return Cutscene.CUTSCENE_CONTINUE