Example #1
0
    private void Start()
    {
        bool anyLevelsCompleted = PlayerData
                                  .GetCompletionDatasWithType(LevelType.Enumerated)
                                  .Any(x => x.Completed);
        bool allLevelsCompleted = PlayerData
                                  .GetCompletionDatasWithType(LevelType.Enumerated)
                                  .All(x => x.Completed);
        LevelID firstIncompleteLevel = GetFirstIncompleteLevel();

        // If all levels are completed then unlock free play mode
        if (allLevelsCompleted && !PlayerData.FreePlayUnlocked)
        {
            // Unlock free play mode
            PlayerData.FreePlayUnlocked = true;
            PlayerData.Save();

            // Display a tutorial for free play
            tutorialManager.OpenTutorials(new TutorialData[] { freePlayTutorial }, true);
        }

        // Play button plays the first incomplete level, or goes to level selector if all are completed
        playButton.onClick.AddListener(() =>
        {
            if (firstIncompleteLevel.IsValid)
            {
                GameplayManager.PlayLevel(firstIncompleteLevel);
            }
            else
            {
                LevelSelector.SelectLevelsWithType(LevelType.Enumerated);
            }
        });

        // Level select button selects levels only if some have been completed
        levelSelectButton.interactable = anyLevelsCompleted;
        if (anyLevelsCompleted)
        {
            levelSelectButton.onClick.AddListener(() => LevelSelector.SelectLevelsWithType(LevelType.Enumerated));
        }

        // Free play only unlocked if all levels are completed
        freePlayButton.interactable = allLevelsCompleted;
        if (allLevelsCompleted)
        {
            freePlayButton.onClick.AddListener(() => LevelSelector.SelectLevelsWithType(LevelType.FreePlay));
        }

        // When delete data is confirmed, reload this scene
        deleteDataButton.OnConfirm.AddListener(() => SceneManager.LoadScene(SceneManager.GetActiveScene().name));
    }