online multiplayer chess game (note server currently down)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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()

	if color.h == 0:
		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)
	else:
		var vlinex = color.s * rect_size.x

		draw_line(Vector2(vlinex, 0), Vector2(vlinex, rect_size.y), draw_color)

		var hliney = rect_size.y - color.v * rect_size.y

		draw_line(Vector2(0, hliney), Vector2(rect_size.x, hliney), draw_color)


func _hue_changed(hue: float) -> void:
	set_color(Color.from_hsv(hue, color.s, color.v), true)