class_name LayerEffect extends RefCounted var name := "" var shader: Shader var params := {} var enabled := true func _init(_name := "", _shader: Shader = null, _params := {}) -> void: name = _name shader = _shader params = _params 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"]