online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/board/Arrows.gd')
-rw-r--r--ui/board/Arrows.gd50
1 files changed, 37 insertions, 13 deletions
diff --git a/ui/board/Arrows.gd b/ui/board/Arrows.gd
index 2f84bd2..c871c71 100644
--- a/ui/board/Arrows.gd
+++ b/ui/board/Arrows.gd
@@ -1,11 +1,14 @@
extends Control
-var arrows := []
+var arrows := [] # [from, to, color]
+var circles := [] # [position, color]
var first: Vector2
var ev: Vector2
var b: Grid
-const w = 20
+const w = 15
+
+export(Color) var red_overlay
func _setup(_b: Grid):
@@ -29,24 +32,44 @@ func _draw():
var s = b.piece_size
var c = b.overlay_color
if first:
+ var shift = Input.is_action_pressed("shift")
var loc_m = ((get_local_mouse_position() / s) - Vector2(.5, .5)).round()
loc_m = Vector2(clamp(loc_m.x, 0, 7), clamp(loc_m.y, 0, 7))
var m_pos = (loc_m * s) + s / 2
- if Input.is_action_pressed("rclick"): # dragging
- draw_line(first, m_pos, c, w, true)
- draw_triangle(first.angle_to_point(m_pos), m_pos, c)
+ var clr = red_overlay if shift else c
+ if Input.is_action_pressed("rclick"): # previews
+ if first != m_pos:
+ draw_line(first, m_pos, clr, w, true)
+ draw_triangle(first.angle_to_point(m_pos), m_pos, clr)
+ else:
+ draw_arc(first, (s.x / 2) - 5, 0, PI * 2, 40, clr, 10, true)
else:
+ var flag := true # no for-else :c
if first != m_pos:
- var arr: PoolVector2Array = [first, m_pos]
- if arrows.find(arr) == -1:
+ var arr := [first, m_pos, clr]
+ for i in range(len(arrows)):
+ if arrows[i][0] == first and arrows[i][1] == m_pos:
+ arrows.remove(i)
+ flag = false
+ break
+ if flag:
arrows.append(arr)
- else:
- arrows.erase(arr) # redoing == kill
+ else:
+ var arr := [first, clr]
+ for i in range(len(circles)):
+ if circles[i][0] == arr[0]:
+ circles.remove(i)
+ flag = false
+ break
+ if flag:
+ circles.append(arr)
first = Vector2.ZERO
- for arrow in arrows:
- draw_line(arrow[0], arrow[1], c, w, true)
- draw_triangle(arrow[0].angle_to_point(arrow[1]), arrow[1], c)
+ for a in arrows:
+ draw_line(a[0], a[1], a[2], w, true)
+ draw_triangle(a[0].angle_to_point(a[1]), a[1], a[2])
+ for ci in circles:
+ draw_arc(ci[0], (s.x / 2) - 5, 0, PI * 2, 40, ci[1], 10, true)
# r: the radians of rotation.
@@ -54,11 +77,12 @@ func draw_triangle(r: float, p: Vector2, c: Color) -> void:
var tri: PoolVector2Array = [Vector2(-24, 0), Vector2(0, -40), Vector2(24, 0)]
for i in range(len(tri)):
tri[i] = tri[i].rotated(r - PI / 2) + p
- draw_colored_polygon(tri, c)
+ draw_primitive(tri, [c, c, c], [])
func clear_arrows():
arrows.resize(0)
+ circles.resize(0)
first = Vector2.ZERO