mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-02-20 12:33:14 +00:00
Store layer effect data in pxo files
This commit is contained in:
parent
4f1705c1e1
commit
8c34532cda
2 changed files with 38 additions and 2 deletions
|
@ -206,12 +206,16 @@ func display_effects(cel: BaseCel) -> Image:
|
|||
## Returns a curated [Dictionary] containing the layer data.
|
||||
func serialize() -> Dictionary:
|
||||
assert(index == project.layers.find(self))
|
||||
var effect_data: Array[Dictionary] = []
|
||||
for effect in effects:
|
||||
effect_data.append(effect.serialize())
|
||||
var dict := {
|
||||
"name": name,
|
||||
"visible": visible,
|
||||
"locked": locked,
|
||||
"blend_mode": blend_mode,
|
||||
"parent": parent.index if is_instance_valid(parent) else -1
|
||||
"parent": parent.index if is_instance_valid(parent) else -1,
|
||||
"effects": effect_data
|
||||
}
|
||||
if not cel_link_sets.is_empty():
|
||||
var cels := [] # Cels array for easy finding of the frame index for link_set saving
|
||||
|
@ -246,6 +250,14 @@ func deserialize(dict: Dictionary) -> void:
|
|||
var linked_cel: BaseCel = link_set["cels"][0]
|
||||
cel.set_content(linked_cel.get_content(), linked_cel.image_texture)
|
||||
cel_link_sets.append(link_set)
|
||||
if dict.has("effects"):
|
||||
for effect_dict in dict["effects"]:
|
||||
if not typeof(effect_dict) == TYPE_DICTIONARY:
|
||||
print("Loading effect failed, not a dictionary.")
|
||||
continue
|
||||
var effect := LayerEffect.new()
|
||||
effect.deserialize(effect_dict)
|
||||
effects.append(effect)
|
||||
|
||||
|
||||
## Returns a layer type that is one of the [param LayerTypes]
|
||||
|
|
|
@ -7,7 +7,7 @@ var params := {}
|
|||
var enabled := true
|
||||
|
||||
|
||||
func _init(_name: String, _shader: Shader, _params := {}) -> void:
|
||||
func _init(_name := "", _shader: Shader = null, _params := {}) -> void:
|
||||
name = _name
|
||||
shader = _shader
|
||||
params = _params
|
||||
|
@ -15,3 +15,27 @@ func _init(_name: String, _shader: Shader, _params := {}) -> void:
|
|||
|
||||
func duplicate() -> LayerEffect:
|
||||
return LayerEffect.new(name, shader, params.duplicate())
|
||||
|
||||
|
||||
func serialize() -> Dictionary:
|
||||
var p_str := {}
|
||||
for param in params:
|
||||
p_str[param] = var_to_str(params[param])
|
||||
return {"name": name, "shader_path": shader.resource_path, "params": p_str, "enabled": enabled}
|
||||
|
||||
|
||||
func deserialize(dict: Dictionary) -> void:
|
||||
if dict.has("name"):
|
||||
name = dict["name"]
|
||||
if dict.has("shader_path"):
|
||||
var path: String = dict["shader_path"]
|
||||
var shader_to_load = load(path)
|
||||
if is_instance_valid(shader_to_load) and shader_to_load is Shader:
|
||||
shader = shader_to_load
|
||||
if dict.has("params"):
|
||||
for param in dict["params"]:
|
||||
if typeof(dict["params"][param]) == TYPE_STRING:
|
||||
dict["params"][param] = str_to_var(dict["params"][param])
|
||||
params = dict["params"]
|
||||
if dict.has("enabled"):
|
||||
enabled = dict["enabled"]
|
||||
|
|
Loading…
Add table
Reference in a new issue