Пример #1
0
        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);
            }
        }
Пример #2
0
 private bool IsLevelUnlocked(Campaign campaign, Mod mod, int levelIndex, int ignoreLevel = -1)
 {
     return(m_editor || ProgressUtils.IsLevelUnlocked(campaign, mod, levelIndex, Game.User, ignoreLevel));
 }