You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
1.0 KiB
33 lines
1.0 KiB
class_name Layers |
|
|
|
static var LOOKUP: Dictionary[String, Definition] |
|
static func _static_init() -> void: |
|
for e in ProjectSettings.get_global_class_list(): |
|
var value_script := load(e.path) as GDScript |
|
if not value_script: continue # not a script |
|
var layer_script := value_script.get_script_constant_map().get("Layer") as GDScript |
|
if not layer_script: continue # doesn't have an inner class called "Layer" |
|
LOOKUP[e.class.to_lower()] = Definition.new(value_script, layer_script) |
|
|
|
|
|
static func lookup(layer_name: String) -> Definition: |
|
return LOOKUP.get(layer_name.to_lower()) |
|
|
|
static func load(layer_name: String, buffer: StreamBuffer) -> Node: |
|
var definition := lookup(layer_name) |
|
if not definition: return null |
|
var layer: Node = definition.layer.load(buffer) |
|
layer.name = layer_name |
|
return layer |
|
|
|
|
|
class Definition: |
|
var value: GDScript |
|
var layer: GDScript |
|
|
|
var default: Variant: |
|
get: return value.DEFAULT |
|
|
|
func _init(value: GDScript, layer: GDScript) -> void: |
|
self.value = value |
|
self.layer = layer
|
|
|