mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-02-25 23:13:14 +00:00
The amount of image/layer effects keeps getting bigger and bigger, especially now that users can load their own effects. At some point, it might also be a good idea to refactor the code so that image and layer effect code combines. Image effects could use ShaderLoader.gd to generate their UI, like layer effects do.
43 lines
1.1 KiB
GDScript
43 lines
1.1 KiB
GDScript
class_name LayerEffect
|
|
extends RefCounted
|
|
|
|
var name := ""
|
|
var shader: Shader
|
|
var category := ""
|
|
var params := {}
|
|
var enabled := true
|
|
|
|
|
|
func _init(_name := "", _shader: Shader = null, _category := "", _params := {}) -> void:
|
|
name = _name
|
|
shader = _shader
|
|
category = _category
|
|
params = _params
|
|
|
|
|
|
func duplicate() -> LayerEffect:
|
|
return LayerEffect.new(name, shader, category, 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"]
|