online multiplayer chess game (note server currently down)
add a little move progress bar for stockfish
| -rw-r--r-- | ui/board/Game.tscn | 4 | ||||
| -rw-r--r-- | ui/menus/local_multiplayer/LocalMultiplayer.gd | 31 | ||||
| -rw-r--r-- | ui/menus/sidebarright/UserPanel.gd | 17 | ||||
| -rw-r--r-- | ui/menus/sidebarright/UserPanel.tscn | 20 |
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 |