online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/board/Arrows.gd')
| -rw-r--r-- | ui/board/Arrows.gd | 50 |
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 |