online multiplayer chess game (note server currently down)
Diffstat (limited to 'networking/PacketHandler.gd')
| -rw-r--r-- | networking/PacketHandler.gd | 54 |
1 files changed, 16 insertions, 38 deletions
diff --git a/networking/PacketHandler.gd b/networking/PacketHandler.gd index eb96f08..28ee0e8 100644 --- a/networking/PacketHandler.gd +++ b/networking/PacketHandler.gd @@ -98,65 +98,43 @@ func _start_game() -> void: func _on_data(data: String) -> void: Globals.add_turn() Log.debug([data, " recieved"]) - Utils.add_move(data) + var san_to_add := data var mov = SanParse.parse(data) match mov.move_kind.type: Move.MoveKind.CASTLE: - var side = 7 if Globals.turn else 0 + var side = 0 if Globals.turn else 7 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: + Move.MoveKind.CASTLETYPES.KING_SIDE: rook = Piece.at_pos(Vector2(7, side)) rook_goto = Vector2(5, side) king_goto = Vector2(6, side) - Move.CASTLETYPES.QUEEN_SIDE: + Move.MoveKind.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. + # this handles promotion, taking, enpassant, and moves. mov.make_long() var positions = mov.move_kind.data - if mov.promotion != -1: - var promote_to = SanParse.from_str(mov.promotion) + if mov.promotion != -1: # promotion part + Globals.grid.print_matrix_pretty(Globals.grid.matrix) + var promote_to = Utils.to_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]) + elif mov.is_capture: # taking part + if Piece.at_pos(positions[1]): + Piece.at_pos(positions[0]).take(Piece.at_pos(positions[1])) + elif mov.piece == SanParser.PAWN: # enpassant part + var pawn: Pawn = Piece.at_pos(positions[0]) + pawn.passant(positions[1]) + san_to_add += " e.p." 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") + Utils.add_move(san_to_add) |