protected override void OnOutroComplete() { // Determine where to go next if (m_newLevel && Game.User.Progress.IsLevelCompleted(Level.Info.ID)) { m_playthrough.JustCompletedLevel = m_playthrough.Level; } else { m_playthrough.JustCompletedLevel = -1; } if ((m_newLevel || m_playthrough.Level == m_playthrough.Campaign.Levels.Count - 1) && ProgressUtils.IsCampaignCompleted(m_playthrough.Campaign, m_mod, Game.User)) { m_playthrough.CampaignCompleted = true; } else if (m_newLevel) { // Find the next unlocked uncompleted level for (int i = m_playthrough.Level + 1; i < m_playthrough.Campaign.Levels.Count; ++i) { if (!ProgressUtils.IsLevelCompleted(m_playthrough.Campaign, m_mod, i, Game.User) && ProgressUtils.IsLevelUnlocked(m_playthrough.Campaign, m_mod, i, Game.User)) { m_playthrough.Level = i; break; } } } // Go there var outroPath = Level.Info.OutroPath; if (outroPath != null) { // Go to outro WipeToState(new CutsceneState(Game, m_mod, outroPath, CutsceneContext.LevelOutro, m_playthrough)); } else if (m_playthrough.CampaignCompleted) { // Go to Game Over WipeToState(new GameOverState(Game, m_mod, m_playthrough)); } else { // Go to level select BackToMenu(m_playthrough.Level); } }
private bool IsLevelUnlocked(Campaign campaign, Mod mod, int levelIndex, int ignoreLevel = -1) { return(m_editor || ProgressUtils.IsLevelUnlocked(campaign, mod, levelIndex, Game.User, ignoreLevel)); }