private void OnEnable()
    {
        saveDataAccessor = new SaveDataAccessor();
        currentlySelectedModeIndex = (int)saveDataAccessor.GetDataValue<Theme.ColorMode>(SaveKeys.SELECTED_COLOR_MODE);

        HighlightButton(currentlySelectedModeIndex);
    }
Example #2
0
    public static void ClearChallenges()
    {
        SaveDataAccessor saveDataAccessor = new SaveDataAccessor();

        saveDataAccessor.SetData(SaveKeys.COMPLETED_CHALLENGES_SAVE_KEY, null);
        DataTracker.dataTracker.SaveData();
    }
    private void SubscribeChallenges(int pack, int level)
    {
        packIndex           = pack;
        levelIndex          = level;
        currentChallengeLog = GetCurrentChallengeLog(packIndex, levelIndex);

        if (currentChallengeLog != null)
        {
            SaveDataAccessor       saveDataAccessor    = new SaveDataAccessor();
            Dictionary <int, bool> challengeDictionary = saveDataAccessor.GetDataValue <Dictionary <int, bool> >(SaveKeys.COMPLETED_CHALLENGES_SAVE_KEY);

            int challengeCount = currentChallengeLog.GetChallengeCount();
            currentChallenges = new List <IChallenge>();

            for (int i = 0; i < challengeCount; i++)
            {
                int challengeKey = Challenge.GetChallengeKey(packIndex, levelIndex, i);
                if (challengeDictionary == null || !challengeDictionary.ContainsKey(challengeKey) || challengeDictionary[challengeKey] == false)
                {
                    IChallenge challenge = currentChallengeLog.GetChallengeData(i) as IChallenge;
                    challenge.SetUpChallenge();

                    currentChallenges.Add(challenge);
                }
            }
        }
    }
    public override void DisableInstructions()
    {
        SaveDataAccessor saveDataAccessor = new SaveDataAccessor();

        saveDataAccessor.SetData(SaveKeys.DEFEAT_TUTORIAL_COMPLETE, true);
        DataTracker.dataTracker.SaveData();

        base.DisableInstructions();
    }
Example #5
0
    public void SetTheme()
    {
        SaveDataAccessor saveDataAccessor = new SaveDataAccessor();

        saveDataAccessor.SetData(SaveKeys.SELECTED_THEME_KEY, themeToPreview.name);
        DataTracker.dataTracker.SaveData();

        ThemeManager.SetTheme(themeToPreview);
        ThemeManager.InvokeUpdateMethod();
    }
    public void NavigateToTransformerInstructions()
    {
        SaveDataAccessor saveDataAccessor  = new SaveDataAccessor();
        bool             tutorialCompleted = saveDataAccessor.GetDataValue <bool>(SaveKeys.TRANSFORMER_TUTORIAL_COMPLETE);

        if (!tutorialCompleted)
        {
            menuSwipeController.TransitionToPanel(7);
            saveDataAccessor.SetData(SaveKeys.TRANSFORMER_TUTORIAL_COMPLETE, true);
            DataTracker.dataTracker.SaveData();
        }
    }
Example #7
0
    public void CheckGameState()
    {
        if (!CheckForVictory(gameBoardParent, solutionBoardParent))
        {
            SaveDataAccessor saveDataAccessor = new SaveDataAccessor();
            if (!saveDataAccessor.GetDataValue <bool>(SaveKeys.DEFEAT_TUTORIAL_COMPLETE))
            {
                CheckForDefeat(gameBoardParent, solutionBoardParent);
            }
        }

        onUpdateBoard?.Invoke();
    }
    private void Awake()
    {
        menuSwipeController.SetCurrentPanel(lastSelectPackIndex);

        SaveDataAccessor      saveDataAccessor = new SaveDataAccessor();
        Dictionary <int, int> completedLevels  = saveDataAccessor.GetDataValue <Dictionary <int, int> >(SaveKeys.COMPLETED_LEVELS_SAVE_KEY);

        int highestDisplayedPackUnlock = saveDataAccessor.GetDataValue <int>(SaveKeys.HIGHEST_DISPLAYED_PACK_UNLOCK);
        int highestCompletedPackLevel;
        int lastUnlock = 0;

        PackButton     currentPackButton;
        Queue <Action> buttonActions = new Queue <Action>();

        for (int i = 0; i < packButtonParent.childCount; i++)
        {
            if (completedLevels == null)
            {
                highestCompletedPackLevel = 0;
            }
            else if (completedLevels.TryGetValue(i + 0, out int highestLeve))
            {
                highestCompletedPackLevel = highestLeve;
            }
            else
            {
                highestCompletedPackLevel = 0;
            }

            currentPackButton = packButtonParent.GetChild(i).GetComponent <PackButton>();

            Action buttonAction = currentPackButton.CheckForUnlock(highestCompletedPackLevel, highestDisplayedPackUnlock, out bool displayUnlock);
            if (buttonAction != null && displayUnlock)
            {
                buttonActions.Enqueue(menuSwipeController.BeginRightTransition);
                buttonActions.Enqueue(buttonAction);

                lastUnlock = i;
            }
        }

        if (lastUnlock > highestDisplayedPackUnlock)
        {
            saveDataAccessor.SetData(SaveKeys.HIGHEST_DISPLAYED_PACK_UNLOCK, lastUnlock);
            DataTracker.dataTracker.SaveData();
        }

        StartCoroutine(SetButtonStates(buttonActions));
    }
Example #9
0
    public void BeginPlay()
    {
        SaveDataAccessor saveDataAccessor = new SaveDataAccessor();

        if (!saveDataAccessor.GetDataValue <bool>(SaveKeys.INITIAL_TUTORIAL_COMPLETE))
        {
            NavigateToTutorial();
        }
        else
        {
            targetSceneName = playMenu;
        }

        onExitFinish += SceneManager.LoadScene;
        sceneAnimator.SetTrigger("Exit");
    }
Example #10
0
    public void SetText(int packIndex, int levelIndex)
    {
        SaveDataAccessor        saveDataAccessor = new SaveDataAccessor();
        Dictionary <int, float> bestLevelTimes   = saveDataAccessor.GetDataValue <Dictionary <int, float> >(SaveKeys.BEST_LEVEL_TIMES);

        int levelKey = GameManager.GetLevelKey(packIndex + 1, levelIndex + 1);

        if (bestLevelTimes != null && bestLevelTimes.ContainsKey(levelKey))
        {
            string timerText = GameTime.GetGameTimeFormat(bestLevelTimes[levelKey]);
            bestTimeText.text = timerText;
        }
        else
        {
            bestTimeText.text = "--:--.--";
        }
    }
Example #11
0
    public static void SetAllChallengesToComplete()
    {
        SaveDataAccessor       saveDataAccessor    = new SaveDataAccessor();
        Dictionary <int, bool> completedChallenges = saveDataAccessor.GetDataValue <Dictionary <int, bool> >(SaveKeys.COMPLETED_CHALLENGES_SAVE_KEY);

        if (completedChallenges == null)
        {
            completedChallenges = new Dictionary <int, bool>();
        }

        string baseChallengeLogs = "Assets/Resources/ChallengeLogs/";

        ChallengeLog[] packLogs;
        string[]       levelPackDirectories = Directory.GetDirectories(baseChallengeLogs);

        for (int i = 0; i < levelPackDirectories.Length; i++)
        {
            packLogs = Resources.LoadAll <ChallengeLog>($"ChallengeLogs/Level_Pack_{i + 1}/");
            if (packLogs != null)
            {
                ChallengeLog currentLog;
                for (int j = 0; j < packLogs.Length; j++)
                {
                    currentLog = packLogs[j];
                    Debug.Log($"{currentLog.name} has {currentLog.GetChallengeCount()} challenges");
                    for (int h = 0; h < currentLog.GetChallengeCount(); h++)
                    {
                        int levelIndex = Int32.Parse(currentLog.name.Split('_')[1]);
                        Debug.Log($"Setting Challenge {h + 1} for Level_{i + 1}-{levelIndex}");
                        int key = Challenge.GetChallengeKey(i + 1, levelIndex, h);
                        if (completedChallenges.TryGetValue(key, out bool val))
                        {
                            completedChallenges[key] = true;
                        }
                        else
                        {
                            completedChallenges.Add(key, true);
                        }
                    }
                }
            }
        }

        saveDataAccessor.SetData(SaveKeys.COMPLETED_CHALLENGES_SAVE_KEY, completedChallenges);
        DataTracker.dataTracker.SaveData();
    }
Example #12
0
    public void SetCompletionPercentage()
    {
        int packIndex = transform.GetSiblingIndex();

        ChallengeLog[] packLogs = Resources.LoadAll <ChallengeLog>($"ChallengeLogs/Level_Pack_{packIndex + 1}/");

        SaveDataAccessor       saveDataAccessor    = new SaveDataAccessor();
        Dictionary <int, bool> completedChallenges = saveDataAccessor.GetDataValue <Dictionary <int, bool> >(SaveKeys.COMPLETED_CHALLENGES_SAVE_KEY);

        float amountOfChallenges      = 0;
        float completedChallengeCount = 0;

        if (packLogs != null && packLogs.Length > 0 && completedChallenges != null && completedChallenges.Count > 0)
        {
            ChallengeLog currentLog;
            int          currentChallengeCount;

            for (int index = 0; index < packLogs.Length; index++)
            {
                currentLog = packLogs[index];
                int levelIndex = Int32.Parse(currentLog.name.Split('_')[1]);

                currentChallengeCount = currentLog.GetChallengeCount();
                amountOfChallenges   += currentChallengeCount;

                for (int challengeIndex = 0; challengeIndex < currentChallengeCount; challengeIndex++)
                {
                    int challengeKey = Challenge.GetChallengeKey(packIndex + 1, levelIndex, challengeIndex);
                    if (completedChallenges.TryGetValue(challengeKey, out bool result))
                    {
                        if (result == true)
                        {
                            completedChallengeCount++;
                        }
                    }
                }
            }

            completionText.text = $"{((completedChallengeCount / amountOfChallenges) * 100).ToString("F0")}%";
        }
        else
        {
            completionText.text = "--%";
        }
    }
Example #13
0
    public static void SetHighestPackLevel(int packIndex, int levelIndex)
    {
        if (packIndex < 1 || levelIndex < 1)
        {
            Debug.LogError("Indexes Out Of Range, Try again (Indexes start from 1)");
            return;
        }

        SaveDataAccessor saveDataAccessor = new SaveDataAccessor();

        #region Save Completed Level Index
        Dictionary <int, int> completedLevels = saveDataAccessor.GetDataValue <Dictionary <int, int> >(SaveKeys.COMPLETED_LEVELS_SAVE_KEY);

        if (completedLevels == null)
        {
            completedLevels = new Dictionary <int, int>();
            completedLevels.Add(packIndex, levelIndex);

            saveDataAccessor.SetData(SaveKeys.COMPLETED_LEVELS_SAVE_KEY, completedLevels);
            DataTracker.dataTracker.SaveData();
        }
        else if (!completedLevels.ContainsKey(packIndex))
        {
            completedLevels.Add(packIndex, levelIndex);

            saveDataAccessor.SetData(SaveKeys.COMPLETED_LEVELS_SAVE_KEY, completedLevels);
            DataTracker.dataTracker.SaveData();
        }
        else
        {
            int highestCompletedLevel = completedLevels[packIndex];
            if (levelIndex > highestCompletedLevel)
            {
                completedLevels[packIndex] = levelIndex;
                saveDataAccessor.SetData(SaveKeys.COMPLETED_LEVELS_SAVE_KEY, completedLevels);
                DataTracker.dataTracker.SaveData();
            }
        }
        #endregion
    }
Example #14
0
    public void UpdateChallengeEntry(Challenge challengeData, int packIndex, int levelIndex)
    {
        challengeText.text = $"- {challengeData.challengeDescription}";

        SaveDataAccessor       saveDataAccessor    = new SaveDataAccessor();
        Dictionary <int, bool> challengeDictionary = saveDataAccessor.GetDataValue <Dictionary <int, bool> >($"CompletedChallenges");

        if (challengeDictionary != null)
        {
            if (challengeDictionary.TryGetValue(Challenge.GetChallengeKey(packIndex, levelIndex, challengeIndex), out bool challengeCompleted))
            {
                if (challengeCompleted)
                {
                    starThemeElement.SetElementToHighlighted();
                    return;
                }
            }
        }

        starThemeElement.SetElementToNormal();
        return;
    }
Example #15
0
    private void OnEnable()
    {
        saveDataAccessor = new SaveDataAccessor();
        availableThemes  = Resources.LoadAll <Theme>("Themes");
        string currentlySelectedThemeName = ThemeManager.GetCurrentTheme().name;

        int counter = 0;

        foreach (Theme theme in availableThemes)
        {
            if (theme.name == currentlySelectedThemeName)
            {
                currentlySelectedTheme      = theme;
                currentlySelectedThemeIndex = counter;
                selectedThemeTitleText.text = theme.name;
            }
            else
            {
                counter++;
            }
        }
    }
    public void CheckChallengesForCompletion()
    {
        if (currentChallengeLog != null)
        {
            SaveDataAccessor       saveDataAccessor    = new SaveDataAccessor();
            Dictionary <int, bool> challengeDictionary = saveDataAccessor.GetDataValue <Dictionary <int, bool> >(SaveKeys.COMPLETED_CHALLENGES_SAVE_KEY);
            int challengeCount = currentChallengeLog.GetChallengeCount();
            for (int i = 0; i < challengeCount; i++)
            {
                IChallenge challenge = currentChallengeLog.GetChallengeData(i) as IChallenge;
                if (challenge != null)
                {
                    int challengeKey = Challenge.GetChallengeKey(packIndex, levelIndex, i);
                    if (challenge.CheckForCompletedChallenge())
                    {
                        if (challengeDictionary == null)
                        {
                            challengeDictionary = new Dictionary <int, bool>();
                            challengeDictionary.Add(challengeKey, true);

                            saveDataAccessor.SetData(SaveKeys.COMPLETED_CHALLENGES_SAVE_KEY, challengeDictionary);
                            DataTracker.dataTracker.SaveData();
                        }
                        else if (!challengeDictionary.ContainsKey(challengeKey))
                        {
                            challengeDictionary.Add(challengeKey, true);

                            saveDataAccessor.SetData(SaveKeys.COMPLETED_CHALLENGES_SAVE_KEY, challengeDictionary);
                            DataTracker.dataTracker.SaveData();
                        }
                        else
                        {
                            challengeDictionary[challengeKey] = true;
                        }
                    }
                }
            }
        }
    }
Example #17
0
    public static void UnlockAllLevels()
    {
        SaveDataAccessor saveDataAccessor = new SaveDataAccessor();

        #region Save Completed Level Index
        Dictionary <int, int> completedLevels = saveDataAccessor.GetDataValue <Dictionary <int, int> >(SaveKeys.COMPLETED_LEVELS_SAVE_KEY);
        int highestLevelIndex = 99;

        for (int packIndex = 1; packIndex <= 3; packIndex++)
        {
            if (completedLevels == null)
            {
                completedLevels = new Dictionary <int, int>();
                completedLevels.Add(packIndex, highestLevelIndex);

                saveDataAccessor.SetData(SaveKeys.COMPLETED_LEVELS_SAVE_KEY, completedLevels);
                DataTracker.dataTracker.SaveData();
            }
            else if (!completedLevels.ContainsKey(packIndex))
            {
                completedLevels.Add(packIndex, highestLevelIndex);

                saveDataAccessor.SetData(SaveKeys.COMPLETED_LEVELS_SAVE_KEY, completedLevels);
                DataTracker.dataTracker.SaveData();
            }
            else
            {
                int highestCompletedLevel = completedLevels[packIndex];
                if (highestLevelIndex > highestCompletedLevel)
                {
                    completedLevels[packIndex] = highestLevelIndex;
                    saveDataAccessor.SetData(SaveKeys.COMPLETED_LEVELS_SAVE_KEY, completedLevels);
                    DataTracker.dataTracker.SaveData();
                }
            }
        }
        #endregion
    }
Example #18
0
    public bool CheckForCompletedUnlocks(int packIndex, int levelIndex)
    {
        SaveDataAccessor       saveDataAccessor = new SaveDataAccessor();
        Dictionary <int, bool> unlockDictionary = saveDataAccessor.GetDataValue <Dictionary <int, bool> >(SaveKeys.UNLOCK_SAVE_KEY);

        notificationsToCreate = new Queue <Unlock>();
        int counter = 0;

        for (int i = 0; i < unlockSettings.unlocks.Count; i++)
        {
            IUnlock unlockInterface = unlockSettings.unlocks[i] as IUnlock;
            if (unlockInterface.CheckForCompletion(packIndex, levelIndex))
            {
                if (unlockDictionary == null)
                {
                    unlockDictionary = new Dictionary <int, bool>();
                    unlockDictionary.Add(i, true);

                    saveDataAccessor.SetData(SaveKeys.UNLOCK_SAVE_KEY, unlockDictionary);
                    DataTracker.dataTracker.SaveData();

                    AddNotificationToQueue(unlockSettings.unlocks[i]);
                    counter++;
                }
                else if (!unlockDictionary.ContainsKey(i))
                {
                    unlockDictionary[i] = true;
                    saveDataAccessor.SetData(SaveKeys.UNLOCK_SAVE_KEY, unlockDictionary);
                    DataTracker.dataTracker.SaveData();

                    AddNotificationToQueue(unlockSettings.unlocks[i]);
                    counter++;
                }
            }
        }

        return(counter > 0);
    }
Example #19
0
    private void OnGUI()
    {
        if (DataTracker.gameData == null)
        {
            EditorGUILayout.LabelField("No Game Data is Available", EditorStyles.boldLabel, GUILayout.Width(300));
            return;
        }

        SaveDataAccessor       saveDataAccessor    = new SaveDataAccessor();
        Dictionary <int, bool> completedChallenges = saveDataAccessor.GetDataValue <Dictionary <int, bool> >(SaveKeys.COMPLETED_CHALLENGES_SAVE_KEY);

        if (completedChallenges == null)
        {
            return;
        }

        scrollView = EditorGUILayout.BeginScrollView(scrollView);
        foreach (KeyValuePair <int, bool> entry in completedChallenges)
        {
            EditorGUILayout.LabelField($"{entry.Key}: {entry.Value}");
        }
        EditorGUILayout.EndScrollView();
    }
Example #20
0
    public void UnlockLevelButton()
    {
        locked = false;
        GetComponent <Button>().interactable = true;

        SaveDataAccessor saveDataAccessor = new SaveDataAccessor();
        ChallengeLog     challengeLog     = ChallengeManager.GetCurrentChallengeLog(manager.levelPackIndex + 1, buttonIndex + 1);

        Dictionary <int, bool> completedChallenges = saveDataAccessor.GetDataValue <Dictionary <int, bool> >(SaveKeys.COMPLETED_CHALLENGES_SAVE_KEY);

        if (challengeLog != null && completedChallenges != null)
        {
            for (int i = 0; i < challengeLog.GetChallengeCount(); i++)
            {
                int challengeKey = Challenge.GetChallengeKey(manager.levelPackIndex + 1, buttonIndex + 1, i);
                if (completedChallenges.TryGetValue(challengeKey, out bool challengeResult))
                {
                    if (!challengeResult)
                    {
                        completionIcon.SetActive(false);
                        return;
                    }
                }
                else
                {
                    completionIcon.SetActive(false);
                    return;
                }
            }

            completionIcon.SetActive(true);
        }
        else
        {
            completionIcon.SetActive(false);
        }
    }
Example #21
0
    private void Awake()
    {
        SaveDataAccessor      saveDataAccessor      = new SaveDataAccessor();
        Dictionary <int, int> displayedLevelUnlocks = saveDataAccessor.GetDataValue <Dictionary <int, int> >(SaveKeys.HIGHEST_DISPLAYED_LEVEL_UNLOCK);
        Dictionary <int, int> completedLevels       = saveDataAccessor.GetDataValue <Dictionary <int, int> >(SaveKeys.COMPLETED_LEVELS_SAVE_KEY);

        int highestDisplayedUnlock;

        if (displayedLevelUnlocks != null)
        {
            highestDisplayedUnlock = displayedLevelUnlocks.TryGetValue(levelPackIndex + 1, out int hdu) ? hdu : 0;
        }
        else
        {
            highestDisplayedUnlock = 0;
        }

        int highestLevelUnlocked;

        if (completedLevels != null)
        {
            highestLevelUnlocked = completedLevels.TryGetValue(levelPackIndex + 1, out int hlu) ? hlu : 0;
        }
        else
        {
            highestLevelUnlocked = 0;
        }

        Queue <Action> buttonActions = new Queue <Action>();
        LevelButton    currentLevelButton;
        int            currentPackTracker = 0, lastPanelToUnlockALevel = 0;

        foreach (Transform panelParent in levelSelectParentList)
        {
            for (int i = 0; i < panelParent.childCount; i++)
            {
                currentLevelButton = panelParent.GetChild(i).GetComponent <LevelButton>();

                Action newAction = currentLevelButton.SetLevelButtonState(highestLevelUnlocked, highestDisplayedUnlock, out bool displayUnlock);
                if (newAction != null)
                {
                    buttonActions.Enqueue(newAction);
                }

                if (currentPackTracker > lastPanelToUnlockALevel && displayUnlock)
                {
                    lastPanelToUnlockALevel = currentPackTracker;
                    buttonActions.Enqueue(levelSelectPanelController.BeginRightTransition);
                    buttonActions.Enqueue(levelSelectPanelController.DisableInput);
                }
            }

            buttonActions.Enqueue(levelSelectPanelController.EnableInput);
            currentPackTracker++;
        }

        #region Save Displayed Level Unlock Value
        if (displayedLevelUnlocks == null)
        {
            displayedLevelUnlocks = new Dictionary <int, int>();
            displayedLevelUnlocks.Add(levelPackIndex + 1, highestLevelUnlocked);

            saveDataAccessor.SetData(SaveKeys.HIGHEST_DISPLAYED_LEVEL_UNLOCK, displayedLevelUnlocks);
            DataTracker.dataTracker.SaveData();
        }
        else if (!displayedLevelUnlocks.ContainsKey(levelPackIndex + 1))
        {
            displayedLevelUnlocks.Add(levelPackIndex + 1, highestLevelUnlocked);

            saveDataAccessor.SetData(SaveKeys.HIGHEST_DISPLAYED_LEVEL_UNLOCK, displayedLevelUnlocks);
            DataTracker.dataTracker.SaveData();
        }
        else if (highestLevelUnlocked > highestDisplayedUnlock)
        {
            displayedLevelUnlocks[levelPackIndex + 1] = highestLevelUnlocked;

            saveDataAccessor.SetData(SaveKeys.HIGHEST_DISPLAYED_LEVEL_UNLOCK, displayedLevelUnlocks);
            DataTracker.dataTracker.SaveData();
        }
        #endregion

        StartCoroutine(SetButtonStates(buttonActions));
    }
Example #22
0
    public void CompleteLevel()
    {
        onVictory?.Invoke();
        DisplayVictoryScreen();

        SaveDataAccessor saveDataAccessor = new SaveDataAccessor();

        #region Save Completed Level Index
        Dictionary <int, int> completedLevels = saveDataAccessor.GetDataValue <Dictionary <int, int> >(SaveKeys.COMPLETED_LEVELS_SAVE_KEY);

        if (completedLevels == null)
        {
            completedLevels = new Dictionary <int, int>();
            completedLevels.Add(currentPackIndex, currentLevelIndex);

            saveDataAccessor.SetData(SaveKeys.COMPLETED_LEVELS_SAVE_KEY, completedLevels);
            DataTracker.dataTracker.SaveData();
        }
        else if (!completedLevels.ContainsKey(currentPackIndex))
        {
            completedLevels.Add(currentPackIndex, currentLevelIndex);

            saveDataAccessor.SetData(SaveKeys.COMPLETED_LEVELS_SAVE_KEY, completedLevels);
            DataTracker.dataTracker.SaveData();
        }
        else
        {
            int highestCompletedLevel = completedLevels[currentPackIndex];
            if (currentLevelIndex > highestCompletedLevel)
            {
                completedLevels[currentPackIndex] = currentLevelIndex;
                saveDataAccessor.SetData(SaveKeys.COMPLETED_LEVELS_SAVE_KEY, completedLevels);
                DataTracker.dataTracker.SaveData();
            }
        }
        #endregion

        #region Save Level Time
        Dictionary <int, float> bestLevelTimes = saveDataAccessor.GetDataValue <Dictionary <int, float> >(SaveKeys.BEST_LEVEL_TIMES);
        int levelKey = GetLevelKey(currentPackIndex, currentLevelIndex);
        if (bestLevelTimes == null)
        {
            bestLevelTimes = new Dictionary <int, float>();
            bestLevelTimes.Add(levelKey, levelTimer);

            saveDataAccessor.SetData(SaveKeys.BEST_LEVEL_TIMES, bestLevelTimes);
            DataTracker.dataTracker.SaveData();
        }
        else if (!bestLevelTimes.ContainsKey(levelKey))
        {
            bestLevelTimes.Add(levelKey, levelTimer);

            saveDataAccessor.SetData(SaveKeys.BEST_LEVEL_TIMES, bestLevelTimes);
            DataTracker.dataTracker.SaveData();
        }
        else if (bestLevelTimes[levelKey] > levelTimer)
        {
            bestLevelTimes[levelKey] = levelTimer;
            saveDataAccessor.SetData(SaveKeys.BEST_LEVEL_TIMES, bestLevelTimes);
            DataTracker.dataTracker.SaveData();
        }
        #endregion
    }