feat: plan deterministic generated conversations

This commit is contained in:
Rijad Zuzo
2026-08-12 20:32:53 +02:00
parent 4b58c534d0
commit 41b37a4962
28 changed files with 1694 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
class_name ConversationAct
extends RefCounted
var _act_id: StringName
var _intent_id: StringName
var _speaker: WorldEntityRef
var _listener: WorldEntityRef
var _causal_topic_ids: Array[StringName] = []
var _reason_trace: Array[StringName] = []
func _init(
act_id: StringName = &"",
intent_id: StringName = &"",
speaker: WorldEntityRef = null,
listener: WorldEntityRef = null,
causal_topic_ids: Array[StringName] = [],
reason_trace: Array[StringName] = []
) -> void:
_act_id = act_id
_intent_id = intent_id
_speaker = ConversationSemantic.duplicate_entity(speaker)
_listener = ConversationSemantic.duplicate_entity(listener)
_causal_topic_ids = causal_topic_ids.duplicate()
_reason_trace = reason_trace.duplicate()
func is_valid() -> bool:
return (
ConversationSemantic.is_valid_id(_act_id)
and ConversationSemantic.is_valid_id(_intent_id)
and _speaker != null
and _speaker.is_valid()
and _listener != null
and _listener.is_valid()
and not _speaker.equals(_listener)
and ConversationSemantic.normalize_id_array(_causal_topic_ids) != null
and ConversationSemantic.normalize_trace(_reason_trace) != null
)
func get_act_id() -> StringName:
return _act_id
func get_intent_id() -> StringName:
return _intent_id
func get_speaker() -> WorldEntityRef:
return ConversationSemantic.duplicate_entity(_speaker)
func get_listener() -> WorldEntityRef:
return ConversationSemantic.duplicate_entity(_listener)
func get_causal_topic_ids() -> Array[StringName]:
return _causal_topic_ids.duplicate()
func get_reason_trace() -> Array[StringName]:
return _reason_trace.duplicate()
func copy() -> ConversationAct:
return ConversationAct.new(
_act_id, _intent_id, _speaker, _listener, _causal_topic_ids, _reason_trace
)