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 )