static void NormalMove(TaskCompletionSource <bool> tcs, bool skipMovement)
    {
        Piece         piece       = Board.instance.selectedPiece;
        AffectedPiece pieceMoving = piece.CreateAffected();

        pieceMoving.piece = piece;
        pieceMoving.from  = piece.tile;
        pieceMoving.to    = Board.instance.tiles[Board.instance.selectedMove.pos];
        changes.Insert(0, pieceMoving);

        piece.tile.content = null;
        piece.tile         = pieceMoving.to;

        if (piece.tile.content != null)
        {
            Piece         deadPiece   = piece.tile.content;
            AffectedEnemy pieceKilled = new AffectedEnemy();
            pieceKilled.piece = deadPiece;
            pieceKilled.from  = pieceKilled.to = piece.tile;
            changes.Add(pieceKilled);
            deadPiece.gameObject.SetActive(false);
            pieceKilled.index = deadPiece.team.IndexOf(deadPiece);
            deadPiece.team.RemoveAt(pieceKilled.index);
        }
        piece.tile.content = piece;
        piece.wasMoved     = true;

        if (skipMovement)
        {
            piece.wasMoved = true;
            // Vector3 v3Pos = new Vector3(Board.instance.selectedMove.pos.x, Board.instance.selectedMove.pos.y, 0);
            //piece.transform.position = v3Pos;
            tcs.SetResult(true);
        }
        else
        {
            Vector3 v3Pos  = new Vector3(Board.instance.selectedMove.pos.x, Board.instance.selectedMove.pos.y, 0);
            float   timing = Vector3.Distance
                                 (piece.transform.position, v3Pos) * 0.5f;

            LeanTween.move(piece.gameObject, v3Pos, timing).
            setOnComplete(() =>
            {
                tcs.SetResult(true);
            });
        }
    }
    static void EnPassant(TaskCompletionSource <bool> tcs, bool skipMovement)
    {
        Piece      pawn      = Board.instance.selectedPiece;
        Vector2Int direction = pawn.maxTeam ?
                               new Vector2Int(0, -1) :
                               new Vector2Int(0, 1);


        Tile          enemy         = Board.instance.tiles[Board.instance.selectedMove.pos + direction];
        AffectedEnemy affectedEnemy = new AffectedEnemy();

        affectedEnemy.from  = affectedEnemy.to = enemy;
        affectedEnemy.piece = enemy.content;
        affectedEnemy.index = affectedEnemy.piece.team.IndexOf(affectedEnemy.piece);
        affectedEnemy.piece.team.RemoveAt(affectedEnemy.index);
        changes.Add(affectedEnemy);
        enemy.content.gameObject.SetActive(false);
        enemy.content = null;

        NormalMove(tcs, skipMovement);
    }