Пример #1
0
    public override AffectedPiece CreateAffected()
    {
        AffectedKingRook aff = new AffectedKingRook();

        aff.wasMoved = wasMoved;
        return(aff);
    }
    static void Castling(TaskCompletionSource <bool> tcs, bool skipMovement)
    {
        Piece            king         = Board.instance.selectedPiece;
        AffectedKingRook affectedKing = new AffectedKingRook();

        affectedKing.from  = king.tile;
        king.tile.content  = null;
        affectedKing.piece = king;

        Piece rook = Board.instance.tiles[Board.instance.selectedMove.pos].content;

        rook.tile.content = null;
        AffectedKingRook affectedRook = new AffectedKingRook();

        affectedRook.from  = rook.tile;
        affectedKing.piece = rook;

        Vector2Int direction = rook.tile.pos - king.tile.pos;

        if (direction.x > 0)
        {
            king.tile = Board.instance.tiles[new Vector2Int(king.tile.pos.x + 2, king.tile.pos.y)];
            rook.tile = Board.instance.tiles[new Vector2Int(king.tile.pos.x - 1, king.tile.pos.y)];
        }
        else
        {
            king.tile = Board.instance.tiles[new Vector2Int(king.tile.pos.x - 2, king.tile.pos.y)];
            rook.tile = Board.instance.tiles[new Vector2Int(king.tile.pos.x + 1, king.tile.pos.y)];
        }
        king.tile.content = king;
        affectedKing.to   = king.tile;
        changes.Add(affectedKing);
        rook.tile.content = rook;
        affectedRook.to   = rook.tile;
        changes.Add(affectedRook);

        king.wasMoved = true;
        rook.wasMoved = true;

        if (skipMovement)
        {
            tcs.SetResult(true);
        }
        else
        {
            LeanTween.move(king.gameObject, new Vector3(king.tile.pos.x, king.tile.pos.y, 0), 1.5f).
            setOnComplete(() =>
            {
                tcs.SetResult(true);
            });

            LeanTween.move(rook.gameObject, new Vector3(rook.tile.pos.x, rook.tile.pos.y, 0), 1.4f);
        }
    }