47 lines
1.2 KiB
GDScript
47 lines
1.2 KiB
GDScript
@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
|