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
61 lines
1.6 KiB
@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
|