online multiplayer chess game (note server currently down)
add a little move progress bar for stockfish
bendn 2022-10-04
parent 1e7798b · commit 2c22440
-rw-r--r--ui/board/Game.tscn4
-rw-r--r--ui/menus/local_multiplayer/LocalMultiplayer.gd31
-rw-r--r--ui/menus/sidebarright/UserPanel.gd17
-rw-r--r--ui/menus/sidebarright/UserPanel.tscn20
4 files changed, 67 insertions, 5 deletions
diff --git a/ui/board/Game.tscn b/ui/board/Game.tscn
index f5a0712..f1b59b1 100644
--- a/ui/board/Game.tscn
+++ b/ui/board/Game.tscn
@@ -93,6 +93,6 @@ alignment = 1
unique_name_in_owner = true
anchor_right = 0.0
anchor_bottom = 0.0
-margin_top = 220.0
+margin_top = 216.0
margin_right = 320.0
-margin_bottom = 560.0
+margin_bottom = 564.0
diff --git a/ui/menus/local_multiplayer/LocalMultiplayer.gd b/ui/menus/local_multiplayer/LocalMultiplayer.gd
index 652a22f..62ac0e8 100644
--- a/ui/menus/local_multiplayer/LocalMultiplayer.gd
+++ b/ui/menus/local_multiplayer/LocalMultiplayer.gd
@@ -33,26 +33,44 @@ func create(moves: PoolStringArray, player1_color: bool, players: PoolIntArray,
board_engine_bridge = BoardEngineBridge.new(b, [Chess.__swap_color(b.team)], get_tree(), engine_depth)
ui._on_info(BoardEngineBridge.info)
board_engine_bridge.connect("nps", self, "set_nps", [1 if player1_color == true else 0])
+ board_engine_bridge.connect("depth", self, "set_thinking", [1 if player1_color == true else 0])
MODES.EVE:
b.team = b.chess.turn
Globals.spectating = true
board_engine_bridge = BoardEngineBridge.new(b, ["w", "b"], get_tree(), engine_depth)
ui._spectate_info({white = BoardEngineBridge.info, black = BoardEngineBridge.info})
board_engine_bridge.connect("nps", self, "set_nps")
+ board_engine_bridge.connect("depth", self, "set_thinking")
get_tree().call_group("backbutton", "queue_free")
yield(get_tree(), "idle_frame")
+ if mode in [MODES.EVE, MODES.PVE]:
+ for panel in ui.panels:
+ panel.thinking_display.max_value = engine_depth
+
b.load_pgn(moves.join(" ")) # load_pgn emits Events.turn_over
b.auto_flip()
Globals.chat.hide()
in_game = true
-func set_nps(nps: int, on: int = 0 if board_engine_bridge.stockfish.game.turn == "w" else 1) -> void:
+func flip_int(i: int) -> int:
+ return 1 if i == 0 else 0
+
+
+func set_nps(nps: int, on: int = 0 if board_engine_bridge.turn == "w" else 1) -> void:
if is_instance_valid(ui.panels[on]):
ui.panels[on].nps = nps
- ui.panels[1 if on == 0 else 0].nps = 0 # turn it off
+ ui.panels[flip_int(on)].nps = 0 # turn it off
+
+
+# thinking: depth
+func set_thinking(thinking: int, on: int = 0 if board_engine_bridge.turn == "w" else 1):
+ if is_instance_valid(ui.panels[on]):
+ if thinking == 0 || ui.panels[on].thinking < thinking: # depth can go down too
+ ui.panels[on].thinking = thinking
+ ui.panels[flip_int(on)].thinking = 0
func assign_mode(players: PoolIntArray) -> void:
@@ -97,6 +115,7 @@ func go_back(_reason: String, _isok: bool) -> void:
class BoardEngineBridge:
extends Reference
signal nps(nps)
+ signal depth(depth)
const info := {name = "Stockfish", country = "antartica"}
@@ -107,6 +126,11 @@ class BoardEngineBridge:
var depth: int
var searching: bool = false
+ var turn: String = "" setget , get_turn
+
+ func get_turn() -> String:
+ return stockfish.game.turn
+
func _init(board: Grid, teams: PoolStringArray, _tree: SceneTree, _depth: int) -> void:
depth = _depth
tree = _tree
@@ -127,6 +151,8 @@ class BoardEngineBridge:
return
if info.get("nps", false):
emit_signal("nps", info.nps)
+ if info.get("depth", false):
+ emit_signal("depth", info.depth)
if info.get("pv", false):
var bm = stockfish.game.__move_from_uci(info.pv[0])
clear_arrows()
@@ -154,6 +180,7 @@ class BoardEngineBridge:
yield(tree, "idle_frame")
var move: String = yield(bestmove(), "completed")
emit_signal("nps", 0)
+ emit_signal("depth", 0)
b.move(move, false, false)
func set_engine_position():
diff --git a/ui/menus/sidebarright/UserPanel.gd b/ui/menus/sidebarright/UserPanel.gd
index 6eab5ce..df0e26c 100644
--- a/ui/menus/sidebarright/UserPanel.gd
+++ b/ui/menus/sidebarright/UserPanel.gd
@@ -4,10 +4,12 @@ class_name UserPanel
onready var flag_display = $"%Flag"
onready var name_display = $"%Name"
onready var nps_display = $"%Nps"
+onready var thinking_display = $"%ThinkingProgress"
var flag := "rainbow" setget set_flag
var _name := "name" setget set_name
var nps := 0 setget set_nps
+var thinking := 0 setget set_thinking
func set_flag(newflag: String) -> void:
@@ -21,9 +23,24 @@ func set_name(newname: String) -> void:
func set_nps(new_nps: int) -> void:
+ if nps == new_nps:
+ return
if new_nps == 0:
nps_display.hide()
else:
nps_display.show()
nps_display.text = "%dn/s" % new_nps
nps = new_nps
+
+
+func set_thinking(new_thinking: int) -> void:
+ if new_thinking == thinking:
+ return
+ if new_thinking == 0:
+ thinking_display.hide()
+ thinking_display.value = 0
+ else:
+ thinking_display.show()
+ create_tween().tween_property(thinking_display, "value", float(new_thinking), .25)
+
+ thinking = new_thinking
diff --git a/ui/menus/sidebarright/UserPanel.tscn b/ui/menus/sidebarright/UserPanel.tscn
index 5fdd56a..17c1cb7 100644
--- a/ui/menus/sidebarright/UserPanel.tscn
+++ b/ui/menus/sidebarright/UserPanel.tscn
@@ -1,10 +1,16 @@
-[gd_scene load_steps=5 format=2]
+[gd_scene load_steps=7 format=2]
[ext_resource path="res://ui/ubuntu-bold-regular.tres" type="DynamicFont" id=1]
[ext_resource path="res://assets/flags/rainbow.png" type="Texture" id=2]
[ext_resource path="res://ui/theme/main.theme" type="Theme" id=3]
[ext_resource path="res://ui/menus/sidebarright/UserPanel.gd" type="Script" id=4]
+[sub_resource type="StyleBoxFlat" id=1]
+bg_color = Color( 0.372549, 0.564706, 0.152941, 1 )
+
+[sub_resource type="StyleBoxFlat" id=2]
+bg_color = Color( 0, 0, 0, 0 )
+
[node name="UserPanel" type="MarginContainer" groups=["userpanel"]]
anchor_right = 1.0
anchor_bottom = 1.0
@@ -56,3 +62,15 @@ margin_bottom = 53.0
custom_fonts/font = ExtResource( 1 )
text = "000004n/s"
valign = 1
+
+[node name="ThinkingProgress" type="ProgressBar" parent="V"]
+unique_name_in_owner = true
+visible = false
+margin_top = 30.0
+margin_right = 1422.0
+margin_bottom = 64.0
+rect_min_size = Vector2( 0, 10 )
+custom_styles/fg = SubResource( 1 )
+custom_styles/bg = SubResource( 2 )
+step = 1.0
+percent_visible = false