online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/menus/sidebarright/undobutton.gd')
| -rw-r--r-- | ui/menus/sidebarright/undobutton.gd | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/ui/menus/sidebarright/undobutton.gd b/ui/menus/sidebarright/undobutton.gd new file mode 100644 index 0000000..1ad96ce --- /dev/null +++ b/ui/menus/sidebarright/undobutton.gd @@ -0,0 +1,67 @@ +extends ConfirmButton +class_name UndoButton + +export(NodePath) onready var status = get_node(status) as StatusLabel +const undo_request_message = "%s requested a undo" +const undo_declined_message = "undo declined" + + +func _ready() -> void: + if PacketHandler: + PacketHandler.connect("undo", self, "undo_signal_recieved") + + +func _pressed() -> void: + if Globals.spectating: + return + if waiting_on_answer: + _confirmed(true) + else: + if Utils.moves_list.size() == 0: + status.set_text("No moves to undo!") + return + elif Globals.turn == Globals.team: + status.set_text("It is your turn!") + return + PacketHandler.send_packet({gamecode = PacketHandler.game_code, question = ""}, PacketHandler.HEADERS.undo) + Globals.chat.server(undo_request_message % Globals.get_team()) + set_disabled(true) + + +func undo_signal_recieved(sig: Dictionary) -> void: + if "question" in sig: + Globals.chat.server(undo_request_message % Globals.str_bool(!Globals.team)) + confirm() + else: + set_disabled(false) + if sig.accepted: + undo() + else: + # declined signal reception + Globals.chat.server(undo_declined_message) + + +func _confirmed(what: bool) -> void: + ._confirmed(what) + PacketHandler.send_packet({gamecode = PacketHandler.game_code, accepted = what}, PacketHandler.HEADERS.undo) + if what: + undo() + else: + # pressed no reception + Globals.chat.server(undo_declined_message) + + +func undo(): + var numberex = SanParse.compile("([0-9]+)\\.", false) + var which_move = 0 + var mov = Utils.moves_list[-1] + var result = numberex.search(mov) + if result: + which_move = result.strings[1] + else: + result = numberex.search(Utils.moves_list[-2]) + which_move = result.strings[1] if result else 0 + var pgn = Utils.pop_move() + Globals.chat.server("Move (%s) %s undone" % [which_move, mov.split(" ")[-1]]) + Globals.grid.undo(pgn) + status.set_text("") |