online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/Lobby.gd')
-rw-r--r--ui/Lobby.gd177
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")