online multiplayer chess game (note server currently down)
make stockfish show arrow of the current line
bendn 2022-10-04
parent 83456bc · commit 2a98b81
-rw-r--r--ui/board/Arrows.gd8
-rw-r--r--ui/menus/local_multiplayer/LocalMultiplayer.gd23
2 files changed, 24 insertions, 7 deletions
diff --git a/ui/board/Arrows.gd b/ui/board/Arrows.gd
index b0b559a..a1d577d 100644
--- a/ui/board/Arrows.gd
+++ b/ui/board/Arrows.gd
@@ -64,6 +64,10 @@ func shorten_arrows_at(v: Vector2) -> void:
arrow.dest = shorten(arrow.coord_dest, arrow.origin, shorten)
+func build_arrow(from: Vector2, to: Vector2, color: Color) -> Dictionary:
+ return {origin = from, dest = to, coord_dest = to, color = color}
+
+
func _draw():
if !b:
return
@@ -86,9 +90,7 @@ func _draw():
flag = false
break
if flag:
- arrows.append(
- {origin = arrow_origin, dest = mouse_position, color = clr, coord_dest = mouse_position}
- )
+ arrows.append(build_arrow(arrow_origin, mouse_position, clr))
shorten_arrows_at(mouse_position)
elif t <= .25:
for i in range(len(circles)):
diff --git a/ui/menus/local_multiplayer/LocalMultiplayer.gd b/ui/menus/local_multiplayer/LocalMultiplayer.gd
index 383d8a6..232eefb 100644
--- a/ui/menus/local_multiplayer/LocalMultiplayer.gd
+++ b/ui/menus/local_multiplayer/LocalMultiplayer.gd
@@ -98,7 +98,6 @@ class BoardEngineBridge:
const info := {name = "Stockfish", country = "antartica"}
- var curr_bestmove: Dictionary
var b: Grid
var stockfish: Stockfish
var playing := PoolStringArray()
@@ -118,6 +117,7 @@ class BoardEngineBridge:
func connect_signals():
stockfish.connect("info", self, "_info")
+ stockfish.connect("bestmove", self, "clear_arrows")
Events.connect("turn_over", self, "turn_over")
func _info(info: Dictionary):
@@ -126,7 +126,22 @@ class BoardEngineBridge:
if info.get("nps", false):
emit_signal("nps", info.nps)
if info.get("pv", false):
- curr_bestmove = stockfish.game.__move_from_uci(info.pv[0])
+ var bm = stockfish.game.__move_from_uci(info.pv[0])
+ clear_arrows()
+ var arrows := b.arrows
+ var arrow: Dictionary = arrows.build_arrow(
+ Chess.vecfrom0x88(bm.from), Chess.vecfrom0x88(bm.to), Color(0.286275, 0.564706, 0.768627)
+ )
+ arrow["engine_arrow"] = true
+ arrows.arrows.append(arrow)
+ arrows.shorten_arrows_at(Chess.vecfrom0x88(bm.to))
+
+ func clear_arrows(_arg = ""):
+ var good_array := []
+ for arrow in b.arrows.arrows:
+ if arrow.get("engine_arrow", false) == false:
+ good_array.append(arrow)
+ b.arrows.arrows = good_array
func turn_over():
set_engine_position()
@@ -135,9 +150,7 @@ class BoardEngineBridge:
func play_bestmove():
yield(tree, "idle_frame")
- searching = true
var move: String = yield(bestmove(), "completed")
- searching = false
emit_signal("nps", 0)
b.move(move, false, false)
@@ -146,7 +159,9 @@ class BoardEngineBridge:
func bestmove() -> String:
stockfish.go(depth)
+ searching = true
var bestmove = yield(stockfish, "bestmove")
+ searching = false
return bestmove.san
func kill() -> void: