sprite_element.gd 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. extends Sprite2D
  2. class_name SpriteElement
  3. func _ready() -> void:
  4. var shader_material = ShaderMaterial.new()
  5. var shader = load("res://Resources/Shader/TexturePalette.gdshader")
  6. if shader:
  7. shader_material.shader = shader
  8. # 将着色器材质设置为当前精灵的材质
  9. material = shader_material
  10. else:
  11. push_error("TexturePalette.gdshader 未找到!")
  12. func _process(_delta: float) -> void:
  13. pass
  14. func set_shader_param(palette_setting):
  15. var palette_count = palette_setting.size()
  16. var basic_colors = []
  17. var modulate_colors = []
  18. var tolerances = []
  19. var blend_modes = []
  20. for setting in palette_setting:
  21. var color = setting["BasicColor"]
  22. basic_colors.append(Color(color["R"], color["G"], color["B"], color["A"]))
  23. color = setting["ModulateColor"]
  24. modulate_colors.append(Color(color["R"], color["G"], color["B"], color["A"]))
  25. tolerances.append(setting["Tolerance"])
  26. blend_modes.append(int(setting["BlendMode"]))
  27. material.set_shader_parameter("PaletteCount", palette_count)
  28. material.set_shader_parameter("BasicColor", PackedColorArray(basic_colors))
  29. material.set_shader_parameter("ModulateColor", PackedColorArray(modulate_colors))
  30. material.set_shader_parameter("Tolerance", PackedFloat32Array(tolerances))
  31. material.set_shader_parameter("BlendMode", PackedInt32Array(blend_modes))
  32. queue_redraw()