| 1234567891011121314151617181920212223242526272829303132333435363738 |
- extends Sprite2D
- class_name SpriteElement
- func _ready() -> void:
- var shader_material = ShaderMaterial.new()
- var shader = load("res://Resources/Shader/TexturePalette.gdshader")
- if shader:
- shader_material.shader = shader
- # 将着色器材质设置为当前精灵的材质
- material = shader_material
- else:
- push_error("TexturePalette.gdshader 未找到!")
- func _process(_delta: float) -> void:
- pass
- func set_shader_param(palette_setting):
- var palette_count = palette_setting.size()
-
- var basic_colors = []
- var modulate_colors = []
- var tolerances = []
- var blend_modes = []
-
- for setting in palette_setting:
- var color = setting["BasicColor"]
- basic_colors.append(Color(color["R"], color["G"], color["B"], color["A"]))
- color = setting["ModulateColor"]
- modulate_colors.append(Color(color["R"], color["G"], color["B"], color["A"]))
- tolerances.append(setting["Tolerance"])
- blend_modes.append(int(setting["BlendMode"]))
-
- material.set_shader_parameter("PaletteCount", palette_count)
- material.set_shader_parameter("BasicColor", PackedColorArray(basic_colors))
- material.set_shader_parameter("ModulateColor", PackedColorArray(modulate_colors))
- material.set_shader_parameter("Tolerance", PackedFloat32Array(tolerances))
- material.set_shader_parameter("BlendMode", PackedInt32Array(blend_modes))
- queue_redraw()
|