Refactor conversation stuff

This commit is contained in:
2026-01-14 23:20:56 -06:00
parent d916e65990
commit 5af98a69a2
18 changed files with 136 additions and 35 deletions

View File

@@ -34,12 +34,21 @@ func addCallable(params:Dictionary) -> int:
return params["position"]
func addConversation(conversation:Array[ConversationElement]) -> Array[int]:
func addCallables(params:Dictionary) -> Array[int]:
assert(params.has("functions"))
var indexes:Array[int] = []
for element in conversation:
indexes.append(addCallable({ 'function': element.start }))
for element in params['functions']:
var newDict = element.merged(params, false)
newDict.erase('functions')
indexes.append(addCallable(newDict))
return indexes
func addConversation(resources:Array[ConversationResource]) -> Array[int]:
var callables:Array[Dictionary] = []
for resource in resources:
callables.append(resource.toCallable())
return addCallables({ 'functions': callables })
func start() -> void:
if queue.size() == 0:
return
@@ -47,7 +56,7 @@ func start() -> void:
assert(!running)
running = true
index = 0
while true:
while index < queue.size():
var queueItem = queue[index]
var result = await queueItem['function'].call(queueItem)
@@ -61,7 +70,7 @@ func start() -> void:
_:
index = result
if index >= queue.size() || index < 0:
if index < 0:
break
running = false

View File

@@ -0,0 +1,12 @@
class_name ConversationAction
static func textboxCallable(params:Dictionary) -> int:
assert(params.has('label'))
await UI.TEXTBOX.setTextAndWait(params['label'])
return Cutscene.CUTSCENE_CONTINUE
static func getTextboxCallable(label:String) -> Dictionary:
return {
"function": textboxCallable,
"label": label
}

View File

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

View File

@@ -1,9 +0,0 @@
extends Resource
class_name ConversationElement
@export_node_path("Entity") var entity:NodePath
@export_multiline var label: String
func start(_params:Dictionary) -> int:
await UI.TEXTBOX.setTextAndWait(label)
return Cutscene.CUTSCENE_CONTINUE

View File

@@ -0,0 +1,9 @@
extends Resource
class_name ConversationResource
const ConversationAction = preload("res://cutscene/conversation/ConversationAction.gd")
@export_node_path("Entity") var entity:NodePath
@export_multiline var label: String
func toCallable() -> Dictionary:
return ConversationAction.getTextboxCallable(label)

View File

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

View File

@@ -0,0 +1,16 @@
class_name ItemAction
const ConversationAction = preload("res://cutscene/conversation/ConversationAction.gd")
static func itemGetCallable(params:Dictionary) -> int:
assert(params.has('stack'))
PARTY.BACKPACK.addStack(params['stack'])
params['cutscene'].addCallable(ConversationAction.getTextboxCallable('TEST').merged({
'position': Cutscene.CUTSCENE_ADD_NEXT,
}))
return Cutscene.CUTSCENE_CONTINUE
static func getItemCallable(itemStack:ItemStack) -> Dictionary:
return {
"function": itemGetCallable,
"stack": itemStack
}

View File

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