online multiplayer chess game (note server currently down)
Diffstat (limited to 'networking/PacketHandler.gd')
| -rw-r--r-- | networking/PacketHandler.gd | 102 |
1 files changed, 63 insertions, 39 deletions
diff --git a/networking/PacketHandler.gd b/networking/PacketHandler.gd index 9cb6bbd..eb96f08 100644 --- a/networking/PacketHandler.gd +++ b/networking/PacketHandler.gd @@ -95,44 +95,68 @@ func _start_game() -> void: lobby.set_buttons(false) -func _on_data(data: Dictionary) -> void: +func _on_data(data: String) -> void: Globals.add_turn() Log.debug([data, " recieved"]) - Events.emit_signal("data_recieved") - match data["type"]: - 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: Dictionary = data["positions"] # positions is a dict for readability sometimes - var pawn: 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) - _: - Log.err("Wtf") - - -static func dict2vec(dict: Dictionary) -> Vector2: - return Vector2(dict["x"], dict["y"]) + Utils.add_move(data) + var mov = SanParse.parse(data) + match mov.move_kind.type: + Move.MoveKind.CASTLE: + var side = 7 if Globals.turn else 0 + var rook: Rook + var rook_goto: Vector2 + var kingpos = Vector2(4, side) + var king: King = Piece.at_pos(kingpos) + var king_goto: Vector2 + match mov.move_kind.data: + Move.CASTLETYPES.KING_SIDE: + rook = Piece.at_pos(Vector2(7, side)) + rook_goto = Vector2(5, side) + king_goto = Vector2(6, side) + Move.CASTLETYPES.QUEEN_SIDE: + rook = Piece.at_pos(Vector2(0, side)) + rook_goto = Vector2(3, side) + king_goto = Vector2(2, side) + _: + Log.error("Invalid castle type") + return + rook.moveto(rook_goto) + king.castle(king_goto) + Move.MoveKind.NORMAL: + # this needs to handle enpassant, taking, and promotion. + mov.make_long() + var positions = mov.move_kind.data + if mov.promotion != -1: + var promote_to = SanParse.from_str(mov.promotion) + Piece.at_pos(positions[0]).promote_to(promote_to, mov.is_capture, positions[1]) + + elif mov.is_capture: + Piece.at_pos(positions[0]).take(Piece.at_pos(positions[1])) + + elif not Piece.at_pos(positions[1]) and mov.piece == SanParser.PAWN: # if not positions[1] and piece is pawn: enpassant! + var pawn: Pawn = Piece.at_pos(positions[0]) + pawn.passant(positions[1]) + else: # a very normal move + Piece.at_pos(positions[0]).moveto(positions[1]) + + # Events.emit_signal("data_recieved") + # match data["type"]: + # 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.promote: + # var dict_data: Dictionary = data["positions"] # positions is a dict for readability sometimes + # _: + # Log.err("Wtf") |