public void LoadLevel(bool refreshLevelColors)
    {
        var realLevelNum = PlayerDataController.data.levelNum;
        var fakeLevelNum = (realLevelNum) % levels.Length;

        if (GameManager.instance.getNextShapeCor != null)
        {
            GameManager.instance.StopCoroutine(GameManager.instance.getNextShapeCor);
        }


        GameManager.emptyCellSlots = 81;
        Player.main.ApplyAndResetGoldInfo();
        if (activeLevel != null)
        {
            Destroy(activeLevel);
        }

        activeLevel     = Instantiate(levels[fakeLevelNum]);
        activeLevelData = activeLevel.GetComponent <LevelData>();
        if (refreshLevelColors)
        {
            PartTheme newPartTheme = FlatHelper.GetRandomEnumType <PartTheme>();
            while (newPartTheme == lastPartTheme)
            {
                newPartTheme = FlatHelper.GetRandomEnumType <PartTheme>();
            }
            var loadedTheme = Resources.LoadAll("Parts/" + newPartTheme.ToString(), typeof(Sprite));
            lastPartTheme                    = newPartTheme;
            activeLevelData.partTheme        = newPartTheme;
            activeLevelData.levelPartSprites = new List <Sprite>();
            foreach (var theme in loadedTheme)
            {
                activeLevelData.levelPartSprites.Add(theme as Sprite);
            }
            PlayerDataController.SaveData("levelPartTheme", (int)newPartTheme);
        }
        else
        {
            lastPartTheme = activeLevelData.partTheme;
        }

        GridConstructer.instance.Init(activeLevelData, false);
        PlayerDataController.SaveData("isBonusLevel", false);

        levelText.text = "LEVEL " + realLevelNum;

        if (PlayerDataController.data.isLevelCompleted)
        {
            PlayerDataController.ResetLevelData();
            foreach (var mission in activeLevelData.missions)
            {
                SaveMissionProgress(mission);
            }

            GameManager.instance.GameModeType    = activeLevelData.startingMode;
            GameManager.instance.getNextShapeCor = GameManager.instance.StartCoroutine(GameManager.instance.GetNextShapes());
            GameManager.instance.CheckEmptyCellCount();
            UIManager.instance.OpenScreen((int)UIManager.Screens.LevelInfoUI);
        }
        else
        {
            LoadLevelDataFromSave();
        }



        // AdManager.instance.ShowIntersititial("", (name, state) =>
        // {
        //     //state check
        // }, (name, state) =>
        // {
        //     //complete check
        // });
    }