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
extends Control
class_name SliderButton

signal toggled(enabled)

export(bool) var enabled = true setget set_enabled  # true is to the right
export(Color) var on_color := Color.green
export(Color) var off_color := Color.red
var pos: float = 1  # 0-1


func set_enabled(new_enabled: bool) -> void:
	enabled = new_enabled
	emit_signal("toggled", enabled)
	set_process(true)


func _gui_input(event):
	if event is InputEventMouseButton and event.pressed:
		set_enabled(!enabled)


func _draw():
	var x: float = lerp(rect_size.y / 2, rect_size.x - rect_size.y / 2, pos)
	var c: Color = lerp(off_color, on_color, pos)
	draw_circle(Vector2(x, rect_size.y / 2), (rect_size.y / 2) + .3, c)


func _process(_delta):
	update()
	if enabled and pos <= 1:
		pos = lerp(pos, 1, 0.1)
	elif !enabled and pos >= 0:
		pos = lerp(pos, 0, 0.1)
	if is_equal_approx(pos, 1) or is_equal_approx(pos, 0):
		set_process(false)