online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/barbutton/drawbutton.gd')
-rw-r--r--ui/barbutton/drawbutton.gd59
1 files changed, 59 insertions, 0 deletions
diff --git a/ui/barbutton/drawbutton.gd b/ui/barbutton/drawbutton.gd
new file mode 100644
index 0000000..c5fb8ef
--- /dev/null
+++ b/ui/barbutton/drawbutton.gd
@@ -0,0 +1,59 @@
+extends BarTextureButton
+class_name DrawButton, "res://assets/ui/draw.png"
+
+export(NodePath) onready var status = get_node(status) as StatusLabel
+export(NodePath) onready var confirmbar = get_node(confirmbar) as Confirm
+
+var waiting_on_answer := false
+
+
+func _ready() -> void:
+ Globals.network.connect("request", self, "draw_request")
+ Globals.network.connect("request_result", self, "_on_draw_result")
+
+
+func draw_request(what: Dictionary):
+ if what.type == Network.REQUESTHEADERS.draw:
+ if "questions" in what:
+ Log.err("Draw request without prompt")
+ return
+ confirmbar.confirm(self, what.question, 20)
+ waiting_on_answer = true
+
+
+func drawed() -> GDScriptFunctionState:
+ return Globals.grid.drawed("mutual agreement")
+
+
+func stoplooking() -> void:
+ _handle_confirm(false)
+
+
+func _pressed() -> void:
+ if waiting_on_answer:
+ _handle_confirm(true)
+ confirmbar.stop_looking()
+ else:
+ disabled = true
+ Globals.network.send_request_packet(
+ Network.REQUESTHEADERS.draw, "Your opponent wishes to draw, do you accept?"
+ )
+ status.set_text("Draw request sent")
+
+
+func _on_draw_result(accepted: Dictionary) -> void: # called from _handle_confirm
+ disabled = false
+ if accepted.type == Network.REQUESTHEADERS.draw:
+ if accepted.answer:
+ drawed()
+ else:
+ status.set_text("Your opponent has rejected the draw request.")
+
+
+func _handle_confirm(yes: bool) -> void: # called from confirmbar.confirmed
+ if waiting_on_answer:
+ disabled = false
+ waiting_on_answer = false
+ Globals.network.send_request_answer_packet(Network.REQUESTHEADERS.draw, yes)
+ if yes:
+ drawed()