online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/slider_button/SliderButton.gd')
-rw-r--r--ui/slider_button/SliderButton.gd36
1 files changed, 36 insertions, 0 deletions
diff --git a/ui/slider_button/SliderButton.gd b/ui/slider_button/SliderButton.gd
new file mode 100644
index 0000000..f043a60
--- /dev/null
+++ b/ui/slider_button/SliderButton.gd
@@ -0,0 +1,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)