99 lines
3.1 KiB
GDScript
99 lines
3.1 KiB
GDScript
## A line of dialogue returned from [code]DialogueManager[/code].
|
|
class_name DialogueLine extends RefCounted
|
|
|
|
|
|
const _DialogueConstants = preload("./constants.gd")
|
|
|
|
|
|
## The ID of this line
|
|
var id: String
|
|
|
|
## The internal type of this dialogue object. One of [code]TYPE_DIALOGUE[/code] or [code]TYPE_MUTATION[/code]
|
|
var type: String = _DialogueConstants.TYPE_DIALOGUE
|
|
|
|
## The next line ID after this line.
|
|
var next_id: String = ""
|
|
|
|
## The character name that is saying this line.
|
|
var character: String = ""
|
|
|
|
## A dictionary of variable replacements fo the character name. Generally for internal use only.
|
|
var character_replacements: Array[Dictionary] = []
|
|
|
|
## The dialogue being spoken.
|
|
var text: String = ""
|
|
|
|
## A dictionary of replacements for the text. Generally for internal use only.
|
|
var text_replacements: Array[Dictionary] = []
|
|
|
|
## The key to use for translating this line.
|
|
var translation_key: String = ""
|
|
|
|
## A map for when and for how long to pause while typing out the dialogue text.
|
|
var pauses: Dictionary = {}
|
|
|
|
## A map for speed changes when typing out the dialogue text.
|
|
var speeds: Dictionary = {}
|
|
|
|
## A map of any mutations to run while typing out the dialogue text.
|
|
var inline_mutations: Array[Array] = []
|
|
|
|
## A list of responses attached to this line of dialogue.
|
|
var responses: Array = []
|
|
|
|
## A list of any extra game states to check when resolving variables and mutations.
|
|
var extra_game_states: Array = []
|
|
|
|
## How long to show this line before advancing to the next. Either a float (of seconds), [code]"auto"[/code], or [code]null[/code].
|
|
var time: String = ""
|
|
|
|
## Any #tags that were included in the line
|
|
var tags: PackedStringArray = []
|
|
|
|
## The mutation details if this is a mutation line (where [code]type == TYPE_MUTATION[/code]).
|
|
var mutation: Dictionary = {}
|
|
|
|
## The conditions to check before including this line in the flow of dialogue. If failed the line will be skipped over.
|
|
var conditions: Dictionary = {}
|
|
|
|
|
|
func _init(data: Dictionary = {}) -> void:
|
|
if data.size() > 0:
|
|
id = data.id
|
|
next_id = data.next_id
|
|
type = data.type
|
|
extra_game_states = data.get("extra_game_states", [])
|
|
|
|
match type:
|
|
_DialogueConstants.TYPE_DIALOGUE:
|
|
character = data.character
|
|
character_replacements = data.get("character_replacements", [] as Array[Dictionary])
|
|
text = data.text
|
|
text_replacements = data.get("text_replacements", [] as Array[Dictionary])
|
|
translation_key = data.get("translation_key", data.text)
|
|
pauses = data.get("pauses", {})
|
|
speeds = data.get("speeds", {})
|
|
inline_mutations = data.get("inline_mutations", [] as Array[Array])
|
|
time = data.get("time", "")
|
|
tags = data.get("tags", [])
|
|
|
|
_DialogueConstants.TYPE_MUTATION:
|
|
mutation = data.mutation
|
|
|
|
|
|
func _to_string() -> String:
|
|
match type:
|
|
_DialogueConstants.TYPE_DIALOGUE:
|
|
return "<DialogueLine character=\"%s\" text=\"%s\">" % [character, text]
|
|
_DialogueConstants.TYPE_MUTATION:
|
|
return "<DialogueLine mutation>"
|
|
return ""
|
|
|
|
|
|
func get_tag_value(tag_name: String) -> String:
|
|
var wrapped := "%s=" % tag_name
|
|
for t in tags:
|
|
if t.begins_with(wrapped):
|
|
return t.replace(wrapped, "").strip_edges()
|
|
return ""
|