@tool class_name LevelSet extends Resource @export var title: String @export_tool_button("Update Levels") var _update_action = update_level_info @export_dir var levels_dir: String: set(value): levels_dir = value if Engine.is_editor_hint(): update_level_info() @export var levels: Array[LevelEntry] = [] func update_level_info(): levels.clear() if levels_dir.is_empty() or not DirAccess.dir_exists_absolute(levels_dir): notify_property_list_changed() return var dir = DirAccess.open(levels_dir) var files = Array(dir.get_files()).filter( func(path: String): return path.ends_with(".tscn") or path.ends_with(".scn") ) as Array[String] for file in files: var packed_scene = load(levels_dir + "/" + file) as PackedScene if packed_scene: var level = packed_scene.instantiate() if level is Level: var entry = LevelEntry.new() entry.resource_name = level.info.title entry.info = level.info entry.scene = packed_scene levels.append(entry) level.free() notify_property_list_changed() if Engine.is_editor_hint(): ResourceSaver.save(self, resource_path) class LevelEntry extends Resource: @export var info: LevelInfo @export var scene: PackedScene