online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/menus/sidebarright/rematchbutton.gd')
-rw-r--r--ui/menus/sidebarright/rematchbutton.gd56
1 files changed, 56 insertions, 0 deletions
diff --git a/ui/menus/sidebarright/rematchbutton.gd b/ui/menus/sidebarright/rematchbutton.gd
new file mode 100644
index 0000000..1d85759
--- /dev/null
+++ b/ui/menus/sidebarright/rematchbutton.gd
@@ -0,0 +1,56 @@
+extends ConfirmButton
+class_name RematchButton
+
+const request_message = "%s requested a rematch"
+const declined_message = "rematch declined"
+
+onready var status := get_node("%Status") as StatusLabel
+
+
+func _ready() -> void:
+ PacketHandler.connect("rematch_result", self, "signal_recieved")
+
+
+func _pressed() -> void:
+ if Globals.spectating:
+ return
+ if waiting_on_answer:
+ _confirmed(true)
+ else:
+ var msg = request_message % Utils.expand_color(Globals.grid.team)
+ var pckt = {gamecode = PacketHandler.game_code, question = msg}
+ PacketHandler.send_packet(pckt, PacketHandler.HEADERS.rematch)
+ Globals.chat.server(msg)
+ set_disabled(true)
+
+
+func signal_recieved(sig: Dictionary) -> void:
+ if "question" in sig:
+ Globals.chat.server(sig.question)
+ confirm()
+ else:
+ set_disabled(false)
+ if sig.accepted:
+ rematch()
+ else:
+ # declined signal reception
+ Globals.chat.server(declined_message)
+
+
+func _confirmed(what: bool) -> void:
+ ._confirmed(what)
+ var pckt = {gamecode = PacketHandler.game_code, accepted = what}
+ PacketHandler.send_packet(pckt, PacketHandler.HEADERS.rematch)
+ if what:
+ rematch()
+ else:
+ # pressed no reception
+ Globals.chat.server(declined_message)
+
+
+func rematch():
+ Globals.chat.server("reloaded")
+ status.clear_text()
+ Globals.grid.reload()
+ get_tree().call_group("showongameover", "hide") # they go back to hidden now.
+ get_tree().call_group("hideongameover", "show") # and vice versa