GodotProjects/Sprout/addons/dialogic/Resources/timeline.gd
2023-01-03 16:54:53 -07:00

104 lines
2.1 KiB
GDScript

@tool
extends Resource
class_name DialogicTimeline
@export var dialogic_version:String
var events:Array = []:
get:
return events
set(value):
emit_changed()
notify_property_list_changed()
events = value
var events_processed:bool = false
func set_events(_events:Array) -> void:
events = _events
emit_changed()
notify_property_list_changed()
func add_event(event, at_position:int =-1) -> void:
var idx : int = at_position if at_position > -1 else events.size()
events.insert(idx, event)
emit_changed()
notify_property_list_changed()
func erase_event(event) -> void:
events.erase(event)
emit_changed()
notify_property_list_changed()
func remove_event(position:int) -> void:
events.erase(position)
emit_changed()
notify_property_list_changed()
func get_event(index):
if index >= len(events):
return null
return events[index]
func get_events() -> Array:
return events.duplicate()
func _set(property, value):
if str(property).begins_with("event/"):
var event_idx:int = str(property).split("/", true, 2)[1].to_int()
if event_idx < events.size():
events[event_idx] = value
else:
events.insert(event_idx, value)
emit_changed()
notify_property_list_changed()
if property == "events":
set_events(value)
return true
return false
func _get(property):
if str(property).begins_with("event/"):
var event_idx:int = str(property).split("/", true, 2)[1].to_int()
if event_idx < len(events):
return events[event_idx]
return true
func _init() -> void:
events = []
resource_name = get_class()
func _to_string() -> String:
return "[{class}:{file}]".format({"class":get_class(), "file":resource_path})
func get_class() -> String: return "Timeline"
func _get_property_list() -> Array:
var p : Array = []
var usage = PROPERTY_USAGE_SCRIPT_VARIABLE
usage |= PROPERTY_USAGE_NO_EDITOR
usage |= PROPERTY_USAGE_EDITOR # Comment this line to hide events from editor
if events != null:
for event_idx in events.size():
p.append(
{
"name":"event/{idx}".format({"idx":event_idx}),
"type":TYPE_OBJECT,
"usage":PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_SCRIPT_VARIABLE
}
)
return p