online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/Lobby.gd')
| -rw-r--r-- | ui/Lobby.gd | 177 |
1 files changed, 31 insertions, 146 deletions
diff --git a/ui/Lobby.gd b/ui/Lobby.gd index e4da73d..3217b41 100644 --- a/ui/Lobby.gd +++ b/ui/Lobby.gd @@ -1,26 +1,26 @@ extends Control -onready var address: LineEdit = $Back/Center/HBox/VBox/Address -onready var buttons = $Back/Center/HBox/VBox/buttons -onready var status_ok = $Back/Center/HBox/VBox/StatusOK -onready var status_fail = $Back/Center/HBox/VBox/StatusFail +onready var address: LineEdit = $Darken/Center/HBox/VBox/Address +onready var buttons = $Darken/Center/HBox/VBox/buttons +onready var status_ok = $Darken/Center/HBox/VBox/StatusOK +onready var status_fail = $Darken/Center/HBox/VBox/StatusFail func toggle(onoff) -> void: visible = onoff - if onoff: - for i in get_tree().get_nodes_in_group("control"): - i.mouse_filter = MOUSE_FILTER_STOP - else: - for i in get_tree().get_nodes_in_group("control"): - i.mouse_filter = MOUSE_FILTER_IGNORE -func _handle_game_over(error = "game over", isok = true) -> void: - set_buttons() - Globals.reset_vars() - end_game() - _set_status(error, isok) +func _ready(): + PacketHandler.connect("set_back_button", $Darken/Center/HBox/VBox/backbutton, "set_disabled") + PacketHandler.connect("set_status", self, "_set_status") + PacketHandler.connect("set_buttons", self, "_set_buttons") + PacketHandler.connect("set_visible", self, "toggle") + _set_status(PacketHandler.status[0], PacketHandler.status[1]) + if !Utils.internet_available(): + _set_status("no internet", false) + _set_buttons(false) + else: + _set_buttons(PacketHandler.status[2]) func _set_status(text, isok) -> void: # Simple way to show status. @@ -34,16 +34,20 @@ func _set_status(text, isok) -> void: # Simple way to show status. status_fail.visible = len(status_fail.text) > 0 +func _set_buttons(enabled = true) -> void: + for c in buttons.get_children(): + c.disabled = !enabled + address.editable = enabled + + func _on_join_pressed() -> void: - Globals.network.game_code = validate_text() - Globals.network.send_packet(Globals.network.game_code, Globals.network.HEADERS.joinrequest) - set_buttons(false) + validate_text() + PacketHandler.requestjoin() func _on_HostButton_pressed() -> void: - Globals.network.game_code = validate_text() - Globals.network.send_packet(Globals.network.game_code, Globals.network.HEADERS.hostrequest) - set_buttons(false) + validate_text() + PacketHandler.requesthost() func validate_text(text = address.get_text()) -> String: @@ -52,133 +56,14 @@ func validate_text(text = address.get_text()) -> String: text = text.replace(" ", "_") address.text = text address.caret_position = pos + Globals.network.game_code = text return text -func _ready() -> void: - get_tree().set_auto_accept_quit(false) - Events.connect("go_back", self, "_handle_game_over") - if !is_instance_valid(Globals.network): - if Utils.internet_available(): - _set_status("Connecting...", true) - var net = Network.new() - net.connect("move_data", self, "_on_data") - net.connect("join_result", self, "_on_join_result") - net.connect("host_result", self, "_on_host_result") - net.connect("game_over", self, "_handle_game_over") - net.connect("start_game", self, "_start_game") - net.connect("connection_established", self, "network_ready") - add_child(net) - Globals.network = net - else: - set_buttons(false) - _set_status("No internet connection", false) - - -func network_ready(): - set_buttons(true) - _set_status("", true) - - -func end_game() -> void: - if get_tree().get_root().has_node("Board"): - get_tree().get_root().get_node("Board").queue_free() - toggle(true) - - -func create_world() -> void: - var board = load("res://Board.tscn").instance() - get_tree().get_root().add_child(board) - toggle(false) - - -func _start_game() -> void: - create_world() - - -func _on_join_result(accepted: String) -> void: - Globals.team = false - if accepted == "Y": - _set_status("Joined!", true) - Globals.network.send_packet("", Globals.network.HEADERS.startgame) - else: - _set_status(accepted, false) - set_buttons() - - -func set_buttons(enabled = true) -> void: - for c in buttons.get_children(): - c.disabled = !enabled - address.editable = enabled - - -func _on_host_result(accepted: String) -> void: - Globals.team = true - if accepted == "Y": - _set_status("Hosted!", true) - else: - _set_status(accepted, false) - set_buttons() - - -func add_turn() -> void: - Events.emit_signal("just_before_turn_over") - Globals.add_turn() - Globals.turn = not Globals.turn - Events.emit_signal("turn_over") - - -func _on_data(data: Dictionary) -> void: - Log.debug([data, " recieved"]) - Globals.fullmove = data["fullmove"] - Globals.turn = data["turn"] - Globals.halfmove = data["halfmove"] - Events.emit_signal("data_recieved") - match data["movetype"]: - Network.MOVEHEADERS.passant: - # en passant - var end_pos = dict2vec(data["positions"][1]) - var start_piece = Piece.at_pos(dict2vec(data["positions"][0])) - Piece.at_pos(dict2vec(data["positions"][2])).took() # kill the unfortunate - start_piece.passant(end_pos) - Network.MOVEHEADERS.move: - var start_piece = Piece.at_pos(dict2vec(data["positions"][0])) - var end_pos = dict2vec(data["positions"][1]) - var end_piece = Piece.at_pos(end_pos) - if end_piece != null: - start_piece.take(end_piece) - else: - start_piece.moveto(end_pos) - Network.MOVEHEADERS.castle: - var king = Piece.at_pos(dict2vec(data["positions"]["king"])) - var rook = Piece.at_pos(dict2vec(data["positions"]["rook"])) - rook.moveto(dict2vec(data["positions"]["rookdestination"]), true, false, true) - Utils.add_move(king.castle(dict2vec(data["positions"]["kingdestination"]))) - Network.MOVEHEADERS.promote: - var dict_data = data["positions"] # positions is a dict for readability sometimes - var pawn = Piece.at_pos(dict2vec(dict_data["start_position"])) - var dest = dict2vec(dict_data["destination"]) - if Piece.at_pos(dest) != null: - Piece.at_pos(dest).took() # move the pawn to the new place, killing if necessary - pawn.clear_clicked() - Globals.grid.make_piece(dest, Pawn.piece(dict_data["become"]), dict_data["white"]) # create the promotion - pawn.took() # kill the pawn - Utils.add_move(dict_data["notation"]) # add a move - Globals.grid.print_matrix_pretty(Globals.grid.matrix) - - -func dict2vec(dict: Dictionary) -> Vector2: - return Vector2(dict["x"], dict["y"]) - - -func _notification(what: int) -> void: - if what == MainLoop.NOTIFICATION_WM_QUIT_REQUEST or what == MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST: - if get_tree().get_root().has_node("Board"): - Globals.network.send_packet(Globals.network.game_code, Globals.network.HEADERS.stopgame) - yield(get_tree(), "idle_frame") # wait for the packet to send - get_tree().quit() - - func _on_Address_text_entered(new_text: String): validate_text(new_text) - Globals.network.game_code = new_text + + +func _on_backbutton_pressed(): + PacketHandler.return() + get_tree().change_scene("res://ui/StartMenu.tscn") |