start of level system
This commit is contained in:
parent
c18a7746f7
commit
ab2d42ccd9
11 changed files with 342 additions and 4 deletions
|
@ -1,2 +1,47 @@
|
|||
@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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue