47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
| ## An intermediate representation of a dialogue line before it gets compiled.
 | |
| class_name DMTreeLine extends RefCounted
 | |
| 
 | |
| 
 | |
| ## The line number where this dialogue was found (after imported files have had their content imported).
 | |
| var line_number: int = 0
 | |
| ## The parent [DMTreeLine] of this line.
 | |
| ## This is stored as a Weak Reference so that this RefCounted can elegantly free itself.
 | |
| ## Without it being a Weak Reference, this can easily cause a cyclical reference that keeps this resource alive.
 | |
| var parent: WeakRef
 | |
| ## The ID of this line.
 | |
| var id: String
 | |
| ## The type of this line (as a [String] defined in [DMConstants].
 | |
| var type: String = ""
 | |
| ## Is this line part of a randomised group?
 | |
| var is_random: bool = false
 | |
| ## The indent count for this line.
 | |
| var indent: int = 0
 | |
| ## The text of this line.
 | |
| var text: String = ""
 | |
| ## The child [DMTreeLine]s of this line.
 | |
| var children: Array[DMTreeLine] = []
 | |
| ## Any doc comments attached to this line.
 | |
| var notes: String = ""
 | |
| ## Is this a dialogue line that is the child of another dialogue line?
 | |
| var is_nested_dialogue: bool = false
 | |
| 
 | |
| 
 | |
| func _init(initial_id: String) -> void:
 | |
| 	id = initial_id
 | |
| 
 | |
| 
 | |
| func _to_string() -> String:
 | |
| 	var tabs = []
 | |
| 	tabs.resize(indent)
 | |
| 	tabs.fill("\t")
 | |
| 	tabs = "".join(tabs)
 | |
| 
 | |
| 	return tabs.join([tabs + "{\n",
 | |
| 		"\tid: %s\n" % [id],
 | |
| 		"\ttype: %s\n" % [type],
 | |
| 		"\tis_random: %s\n" % ["true" if is_random else "false"],
 | |
| 		"\ttext: %s\n" % [text],
 | |
| 		"\tnotes: %s\n" % [notes],
 | |
| 		"\tchildren: []\n" if children.size() == 0 else "\tchildren: [\n" + ",\n".join(children.map(func(child): return str(child))) + "]\n",
 | |
| 	"}"])
 |