public virtual void switchEmptyFrameLocation(int row, int col)
    {
        if (frameManager.Frames[row, col] != null)
        {
            if (isActiveFrame(row, col))
            {
                Vector2 heroRelativePos = frameManager.Frames[row, col].transform.position - frameManager.hero.gameObject.transform.position;
                frameManager.hero.gameObject.transform.position = (Vector2)frameManager.Frames[frameManager.EmptyFrame.row, frameManager.EmptyFrame.col].gameObject.transform.position - heroRelativePos;
                frameManager.SwitchActiveFramePositionToEmptyFramePosition();
            }

            if (isVirginFrame(row, col))
            {
                Vector2 virginRelativePos = frameManager.Frames[row, col].transform.position - frameManager.Virgin.gameObject.transform.position;
                frameManager.Virgin.gameObject.transform.position = (Vector2)frameManager.Frames[frameManager.EmptyFrame.row, frameManager.EmptyFrame.col].gameObject.transform.position - virginRelativePos;
                frameManager.SwitchVirginFramePositionToEmptyFramePosition();
            }

            if (isPuzzleFrame(row, col))
            {
                frameManager.SwitchPuzzleFramePositionToEmptyFramePosition();
            }

            frameManager.SwitchFramePositionWithEmptyFramePosition(row, col);
        }
    }