extends Control
class_name ColorSelect
var color: Color setget set_color
var last_clicked_pos := Vector2.ZERO
onready var shader_holder := $ShaderHolder
signal color_changed(color)
func set_color(newcolor: Color, sig := false) -> void:
if newcolor != color:
color = newcolor
shader_holder.material.set_shader_param("hue", color.h)
update()
if sig:
emit_signal("color_changed", color)
func _gui_input(event: InputEvent) -> void:
if Input.is_action_pressed("click") and event is InputEventMouse:
last_clicked_pos = event.position
var saturation := clamp(last_clicked_pos.x / rect_size.x, 0, 1)
var value := clamp(1 - (last_clicked_pos.y / rect_size.y), 0, 1)
set_color(Color.from_hsv(color.h, saturation, value), true)
func _draw() -> void:
var draw_color := color.inverted()
var vlinex := clamp(last_clicked_pos.x, 0, rect_size.x)
draw_line(Vector2(vlinex, 0), Vector2(vlinex, rect_size.x), draw_color)
var hliney = clamp(last_clicked_pos.y, 0, rect_size.y)
draw_line(Vector2(0, hliney), Vector2(rect_size.x, hliney), draw_color)
func _hue_changed(hue: float) -> void:
color.h = hue
set_color(color, true)