You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.6 KiB

6 months ago
@tool
extends ResourceFormatSaver
class_name DialogicTimelineFormatSaver
func _get_recognized_extensions(resource: Resource) -> PackedStringArray:
return PackedStringArray(["dtl"])
# Return true if this resource should be loaded as a DialogicTimeline
func _recognize(resource: Resource) -> bool:
# Cast instead of using "is" keyword in case is a subclass
resource = resource as DialogicTimeline
if resource:
return true
return false
# Save the resource
func _save(resource: Resource, path: String = '', flags: int = 0) -> Error:
if resource.get_meta("timeline_not_saved", false):
var timeline_as_text :String = ""
# if events are resources, create text
if resource.events_processed:
var indent := 0
for idx in range(0, len(resource.events)):
if resource.events[idx]:
var event : DialogicEvent = resource.events[idx]
if event.event_name == 'End Branch':
indent -=1
continue
for i in event.empty_lines_above:
timeline_as_text += '\t'.repeat(indent) + '\n'
if event != null:
timeline_as_text += "\t".repeat(indent)+ event.event_node_as_text + "\n"
if event.can_contain_events:
indent += 1
if indent < 0:
indent = 0
# if events are string lines, just save them
else:
for event in resource.events:
timeline_as_text += event + "\n"
# Now do the actual saving
var file := FileAccess.open(path, FileAccess.WRITE)
if !file:
print("[Dialogic] Error opening file:", FileAccess.get_open_error())
return ERR_CANT_OPEN
file.store_string(timeline_as_text)
file.close()
return OK