tool extends Resource class SettingEntry: var folder : String = "" var header : String = "" var name : String = "" var type : String = "" var folders : Array = Array() func get_folder_count() -> int: return folders.size() func folder_get(index : int) -> SettingEntry: return folders[index] func folder_get_folder(index : int) -> String: return folders[index].folder func folder_get_header(index : int) -> String: return folders[index].header func folder_get_name(index : int) -> String: return folders[index].name func folder_get_type(index : int) -> String: return folders[index].type func _get(property : StringName): var sprop : String = property if sprop == "folder_count": return folders.size() if sprop.begins_with("folders/"): var sindex : String = sprop.get_slice("/", 1) if sindex == "": return null var index : int = sindex.to_int() if index < 0 || index >= folders.size(): return null var p : String = sprop.get_slice("/", 2) if p == "folder": return folders[index].folder elif p == "header": return folders[index].header elif p == "name": return folders[index].name elif p == "type": return folders[index].type else: return null return null func _set(property : StringName, val) -> bool: var sprop : String = property if property == "folder_count": set_folder_count(val) return true if sprop.begins_with("folders/"): var sindex : String = sprop.get_slice("/", 1) if sindex == "": return false var index : int = sindex.to_int() if index < 0: return false if index >= folders.size(): return false var p : String = sprop.get_slice("/", 2) if p == "folder": folders[index].folder = val return true elif p == "header": folders[index].header = val return true elif p == "name": folders[index].name = val return true elif p == "type": folders[index].type = val return true return false func _get_property_list() -> Array: var props : Array = Array() props.append({ "name": "folder_count", "type": TYPE_INT, }) for i in range(folders.size()): props.append({ "name": "folders/" + str(i) + "/folder", "type": TYPE_STRING, }) props.append({ "name": "folders/" + str(i) + "/header", "type": TYPE_STRING, }) props.append({ "name": "folders/" + str(i) + "/name", "type": TYPE_STRING, }) props.append({ "name": "folders/" + str(i) + "/type", "type": TYPE_STRING, }) return props func apply_folder_size(val : int) -> void: folders.resize(val) for i in range(folders.size()): if !folders[i]: folders[i] = SettingEntry.new() func set_folder_count(val : int) -> void: apply_folder_size(val) emit_changed() property_list_changed_notify()