1
0
Fork 0
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:
Emmanouil Papadeas 2023-12-01 03:12:55 +02:00
parent 4f1705c1e1
commit 8c34532cda
2 changed files with 38 additions and 2 deletions

View file

@ -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]

View file

@ -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"]