online multiplayer chess game (note server currently down)
| -rw-r--r-- | godot.lock | 4 | ||||
| -rw-r--r-- | godot.package | 2 | ||||
| -rw-r--r-- | networking/PacketHandler.gd | 4 | ||||
| -rw-r--r-- | ui/board/Board.tscn | 1 | ||||
| -rw-r--r-- | ui/board/Game.gd | 4 | ||||
| -rw-r--r-- | ui/menus/local_multiplayer/LocalMultiplayer.gd | 38 | ||||
| -rw-r--r-- | ui/menus/sidebarright/OpeningLabel.gd | 2 | ||||
| -rw-r--r-- | ui/menus/sidebarright/SidebarRight.tscn | 19 | ||||
| -rw-r--r-- | ui/menus/sidebarright/UserPanel.gd | 16 | ||||
| -rw-r--r-- | ui/menus/sidebarright/UserPanel.tscn | 30 | ||||
| -rw-r--r-- | ui/menus/startmenu/StartMenu.gd | 2 | ||||
| -rw-r--r-- | ui/menus/startmenu/StartMenu.tscn | 8 |
12 files changed, 86 insertions, 44 deletions
@@ -4,7 +4,7 @@ "integrity": "sha512-/YOAd1+K4JlKvPTmpX8B7VWxGtFrxKq4R0A6u5qOaaVPK6uGsl4dGZaIHpxuqcurEcwPEOabkoShXKZaOXB0lw==" }, "@bendn/stockfish.gd": { - "version": "2.0.0", - "integrity": "sha512-ks0zjROWWATbU1FpKlp3Lm9Cxz7GWNnRWhiE1+Ogks+CD7UX5GL+E85mVxp8dv+gsB3mcn2ZSrbn59XQT1IcvA==" + "version": "2.1.2", + "integrity": "sha512-QvJ/d8rRaaz2Q0EchaA4ub2quqAsiQowIRyBhGe7HG4OCnANbhFaoN9id1tSbUG70G+ZIQ7ZZQVQmIBKKQJX7A==" } }
\ No newline at end of file diff --git a/godot.package b/godot.package index 5b64564..e42658e 100644 --- a/godot.package +++ b/godot.package @@ -2,6 +2,6 @@ "name": "chess", "packages": { "@bendn/gdcli": "1.2.5", - "@bendn/stockfish.gd": "2.0.0" + "@bendn/stockfish.gd": "2.1.2" } }
\ No newline at end of file diff --git a/networking/PacketHandler.gd b/networking/PacketHandler.gd index 2a55dd7..a0852ee 100644 --- a/networking/PacketHandler.gd +++ b/networking/PacketHandler.gd @@ -199,8 +199,8 @@ func go_back(error: String, isok: bool) -> void: func _start_game() -> void: set_hosting(false) Log.debug("Created board") - var ui: Control = load("res://ui/board/Game.tscn").instance() - var b: Grid = ui.get_board() + var ui: GameUI = load("res://ui/board/Game.tscn").instance() + var b: Grid = ui.get_board() as Grid b.team = Globals.team Log.debug("Set board team to %s" % Utils.expand_color(b.team)) get_tree().get_root().add_child(ui) diff --git a/ui/board/Board.tscn b/ui/board/Board.tscn index 4166345..a9871dc 100644 --- a/ui/board/Board.tscn +++ b/ui/board/Board.tscn @@ -52,6 +52,7 @@ transparent_bg = true handle_input_locally = false disable_3d = true usage = 0 +render_target_update_mode = 3 shadow_atlas_quad_0 = 0 shadow_atlas_quad_1 = 0 shadow_atlas_quad_2 = 0 diff --git a/ui/board/Game.gd b/ui/board/Game.gd index 14ab685..cfb1765 100644 --- a/ui/board/Game.gd +++ b/ui/board/Game.gd @@ -29,8 +29,8 @@ func set_status(text: String, length := 5) -> void: status.set_text(text, length) -func get_board() -> AspectRatioContainer: - return $"%Board" as AspectRatioContainer +func get_board() -> Control: + return $"%Board" as Control func _spectate_info(info: Dictionary) -> void: diff --git a/ui/menus/local_multiplayer/LocalMultiplayer.gd b/ui/menus/local_multiplayer/LocalMultiplayer.gd index ca4ef2c..383d8a6 100644 --- a/ui/menus/local_multiplayer/LocalMultiplayer.gd +++ b/ui/menus/local_multiplayer/LocalMultiplayer.gd @@ -11,28 +11,33 @@ var mode: int = -1 var board_engine_bridge: BoardEngineBridge = null +var ui: GameUI + func create(moves: PoolStringArray, player1_color: bool, players: PoolIntArray, engine_depth: int) -> void: assign_mode(players) Globals.local = true - var ui: Control = load("res://ui/board/Game.tscn").instance() - var b: Grid = ui.get_board() + ui = load("res://ui/board/Game.tscn").instance() + var b: Grid = ui.get_board() as Grid b.local = true Log.debug("Set board team to %s" % Utils.expand_color(b.team)) get_tree().get_root().add_child(ui) PacketHandler.lobby.toggle(false) - match mode: MODES.PVP: pass # nothing to do ? MODES.PVE: b.team = "w" if player1_color == true else "b" 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]) MODES.EVE: b.team = b.chess.turn Globals.spectating = true board_engine_bridge = BoardEngineBridge.new(b, ["w", "b"], get_tree(), engine_depth) - get_tree().call_group("userpanel", "hide") + ui._spectate_info({white = BoardEngineBridge.info, black = BoardEngineBridge.info}) + board_engine_bridge.connect("nps", self, "set_nps") + get_tree().call_group("backbutton", "queue_free") yield(get_tree(), "idle_frame") @@ -42,6 +47,12 @@ func create(moves: PoolStringArray, player1_color: bool, players: PoolIntArray, in_game = true +func set_nps(nps: int, on: int = 0 if board_engine_bridge.stockfish.game.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 + + func assign_mode(players: PoolIntArray) -> void: if players.count(HUMAN) == 2: mode = MODES.PVP @@ -83,15 +94,19 @@ func go_back(_reason: String, _isok: bool) -> void: class BoardEngineBridge: extends Reference + signal nps(nps) + const info := {name = "Stockfish", country = "antartica"} + + var curr_bestmove: Dictionary var b: Grid var stockfish: Stockfish var playing := PoolStringArray() var tree: SceneTree var depth: int + var searching: bool = false func _init(board: Grid, teams: PoolStringArray, _tree: SceneTree, _depth: int) -> void: - connect_signals() depth = _depth tree = _tree playing = teams @@ -99,10 +114,20 @@ class BoardEngineBridge: var loader = StockfishLoader.new() stockfish = loader.load_stockfish() stockfish.game = b.chess + connect_signals() func connect_signals(): + stockfish.connect("info", self, "_info") Events.connect("turn_over", self, "turn_over") + func _info(info: Dictionary): + if searching == false: + return + 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]) + func turn_over(): set_engine_position() if stockfish.game.turn in playing: @@ -110,7 +135,10 @@ 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) func set_engine_position(): diff --git a/ui/menus/sidebarright/OpeningLabel.gd b/ui/menus/sidebarright/OpeningLabel.gd index fab5f11..4b3b0d6 100644 --- a/ui/menus/sidebarright/OpeningLabel.gd +++ b/ui/menus/sidebarright/OpeningLabel.gd @@ -45,4 +45,4 @@ func _request_completed(result, _response_code, _headers, byte_body): func set_text(_text := ""): visible = _text != "" - text = _text + text = _text.strip_edges() diff --git a/ui/menus/sidebarright/SidebarRight.tscn b/ui/menus/sidebarright/SidebarRight.tscn index 14d932c..c96de9a 100644 --- a/ui/menus/sidebarright/SidebarRight.tscn +++ b/ui/menus/sidebarright/SidebarRight.tscn @@ -68,33 +68,26 @@ alignment = 1 [node name="OpeningLabel" type="Label" parent="V"] visible = false -margin_top = 213.0 +margin_top = 217.0 margin_right = 1402.0 -margin_bottom = 238.0 +margin_bottom = 242.0 rect_min_size = Vector2( 0, 25 ) custom_fonts/font = ExtResource( 8 ) valign = 1 autowrap = true script = ExtResource( 10 ) -[node name="Spacer" type="Control" parent="V" groups=["showiflocalmultiplayer"]] -visible = false -margin_top = 226.0 -margin_right = 1402.0 -margin_bottom = 226.0 -rect_min_size = Vector2( 0, 10 ) - [node name="BlackPanel" parent="V" instance=ExtResource( 22 )] anchor_right = 0.0 anchor_bottom = 0.0 -margin_top = 226.0 +margin_top = 230.0 margin_right = 1402.0 margin_bottom = 270.0 [node name="BlackMaterialLabel" type="HBoxContainer" parent="V/BlackPanel"] margin_top = 2.0 margin_right = 1402.0 -margin_bottom = 42.0 +margin_bottom = 38.0 alignment = 2 script = ExtResource( 12 ) @@ -201,12 +194,12 @@ anchor_right = 0.0 anchor_bottom = 0.0 margin_top = 520.0 margin_right = 1402.0 -margin_bottom = 564.0 +margin_bottom = 560.0 [node name="WhiteMaterialLabel" type="HBoxContainer" parent="V/WhitePanel"] margin_top = 2.0 margin_right = 1402.0 -margin_bottom = 42.0 +margin_bottom = 38.0 alignment = 2 script = ExtResource( 12 ) diff --git a/ui/menus/sidebarright/UserPanel.gd b/ui/menus/sidebarright/UserPanel.gd index 0967e53..6eab5ce 100644 --- a/ui/menus/sidebarright/UserPanel.gd +++ b/ui/menus/sidebarright/UserPanel.gd @@ -3,21 +3,27 @@ class_name UserPanel onready var flag_display = $"%Flag" onready var name_display = $"%Name" +onready var nps_display = $"%Nps" var flag := "rainbow" setget set_flag var _name := "name" setget set_name +var nps := 0 setget set_nps -func set_flag(newflag: String): +func set_flag(newflag: String) -> void: flag = newflag flag_display.texture = load("res://assets/flags/%s.png" % flag) -func set_name(newname: String): +func set_name(newname: String) -> void: _name = newname name_display.text = _name -func hide_children(): - flag_display.hide() - name_display.hide() +func set_nps(new_nps: int) -> void: + if new_nps == 0: + nps_display.hide() + else: + nps_display.show() + nps_display.text = "%dn/s" % new_nps + nps = new_nps diff --git a/ui/menus/sidebarright/UserPanel.tscn b/ui/menus/sidebarright/UserPanel.tscn index d2d5f76..5fdd56a 100644 --- a/ui/menus/sidebarright/UserPanel.tscn +++ b/ui/menus/sidebarright/UserPanel.tscn @@ -14,31 +14,45 @@ custom_constants/margin_top = 2 custom_constants/margin_bottom = 2 script = ExtResource( 4 ) -[node name="H" type="HBoxContainer" parent="."] +[node name="V" type="VBoxContainer" parent="."] margin_top = 2.0 margin_right = 1422.0 margin_bottom = 798.0 +custom_constants/separation = 0 + +[node name="H" type="HBoxContainer" parent="V"] +margin_right = 1422.0 +margin_bottom = 30.0 custom_constants/separation = 10 -[node name="Name" type="Label" parent="H"] +[node name="Name" type="Label" parent="V/H"] unique_name_in_owner = true -margin_top = 378.0 margin_right = 52.0 -margin_bottom = 418.0 -rect_min_size = Vector2( 0, 40 ) +margin_bottom = 30.0 +rect_min_size = Vector2( 0, 30 ) custom_fonts/font = ExtResource( 1 ) text = "name" valign = 1 -[node name="Flag" type="TextureRect" parent="H"] +[node name="Flag" type="TextureRect" parent="V/H"] unique_name_in_owner = true margin_left = 62.0 -margin_top = 388.0 +margin_top = 5.0 margin_right = 88.0 -margin_bottom = 408.0 +margin_bottom = 25.0 rect_min_size = Vector2( 26, 20 ) size_flags_horizontal = 4 size_flags_vertical = 4 texture = ExtResource( 2 ) expand = true stretch_mode = 6 + +[node name="Nps" type="Label" parent="V"] +unique_name_in_owner = true +visible = false +margin_top = 30.0 +margin_right = 1422.0 +margin_bottom = 53.0 +custom_fonts/font = ExtResource( 1 ) +text = "000004n/s" +valign = 1 diff --git a/ui/menus/startmenu/StartMenu.gd b/ui/menus/startmenu/StartMenu.gd index c64c9c2..93d10aa 100644 --- a/ui/menus/startmenu/StartMenu.gd +++ b/ui/menus/startmenu/StartMenu.gd @@ -3,7 +3,7 @@ extends Control func _ready() -> void: if OS.has_feature("web"): - get_node("%").queue_free() + get_node("% exit").queue_free() func _on_quit_pressed() -> void: diff --git a/ui/menus/startmenu/StartMenu.tscn b/ui/menus/startmenu/StartMenu.tscn index 5483ee1..f90aa05 100644 --- a/ui/menus/startmenu/StartMenu.tscn +++ b/ui/menus/startmenu/StartMenu.tscn @@ -29,10 +29,10 @@ mouse_filter = 2 theme = ExtResource( 2 ) [node name="tabs" type="TabContainer" parent="CenterContainer"] -margin_left = 253.0 -margin_top = 89.0 -margin_right = 1169.0 -margin_bottom = 711.0 +margin_left = 201.0 +margin_top = 84.0 +margin_right = 1221.0 +margin_bottom = 716.0 rect_min_size = Vector2( 2, 2 ) mouse_filter = 1 size_flags_horizontal = 0 |