online multiplayer chess game (note server currently down)
add a nps display to stockfihs
bendn 2022-10-04
parent 25fc261 · commit 83456bc
-rw-r--r--godot.lock4
-rw-r--r--godot.package2
-rw-r--r--networking/PacketHandler.gd4
-rw-r--r--ui/board/Board.tscn1
-rw-r--r--ui/board/Game.gd4
-rw-r--r--ui/menus/local_multiplayer/LocalMultiplayer.gd38
-rw-r--r--ui/menus/sidebarright/OpeningLabel.gd2
-rw-r--r--ui/menus/sidebarright/SidebarRight.tscn19
-rw-r--r--ui/menus/sidebarright/UserPanel.gd16
-rw-r--r--ui/menus/sidebarright/UserPanel.tscn30
-rw-r--r--ui/menus/startmenu/StartMenu.gd2
-rw-r--r--ui/menus/startmenu/StartMenu.tscn8
12 files changed, 86 insertions, 44 deletions
diff --git a/godot.lock b/godot.lock
index 3d0d1f6..a1f5da7 100644
--- a/godot.lock
+++ b/godot.lock
@@ -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