Exemplo n.º 1
0
    void Update()
    {
        if (m_IsPaused || m_IsShowingTutorial)
        {
            return;
        }

        m_CurrentMonthTimeRemaining -= Time.deltaTime;
        if (m_CurrentMonthTimeRemaining <= 0)
        {
            if (m_CurrentMonth == 11)
            {
                m_CurrentYear++;
            }

            m_CurrentMonth = (m_CurrentMonth + 1) % 12;
            m_TotalMonths++;
            m_ResourceListView.UpdateDate(m_CurrentMonth, m_CurrentYear); // TODO: WE NEED YEARS!!!!
            m_CurrentMonthTimeRemaining = SecondsPerMonth;

            if (StatsManagerObj.Villagers.Count <= 0)
            {
                SoundManager.GetComponent <AudioSource>().volume = 0;
                Instantiate(GameOver, Canvas).GetComponent <GameOverView>();
                m_WindowsOpen++;
            }
        }

        if (m_CurrentMonth == m_NextArrival)
        {
            m_WindowsOpen++;

            Villager[] arrivals = GenerateVillagers();

            RecruitMenuView recruitView = Instantiate(RecruitMenu, Canvas).GetComponent <RecruitMenuView>();
            recruitView.SetRecruitCount((int)m_VillagerLimit - (int)StatsManagerObj.Villagers.Count);
            recruitView.AddVillagerViews(arrivals);
            recruitView.OnRecruit        += StatsManagerObj.Recruit;
            recruitView.OnRecruitFulfill += () => { CalculateNextArrival();
                                                    CalculateLimits();
                                                    CalculateSacrificePeriod();
                                                    UpdateResourceView();
                                                    m_WindowsOpen--; };
            return;
        }

        if (m_CurrentMonth == m_NextSacrifice)
        {
            m_WindowsOpen++;

            SacrificeMenuView sacrificeView = Instantiate(SacrificeMenu, Canvas).GetComponent <SacrificeMenuView>();

            // Only send the first 8 villagers (UI limitation).
            for (int i = 0; i < Mathf.Min(StatsManagerObj.Villagers.Count, 8); i++)
            {
                sacrificeView.AddVillagerView(StatsManagerObj.Villagers[i], i);
            }

            sacrificeView.SetSacrificeCount((int)m_MaxSacrifices);
            sacrificeView.OnSacrifice        += StatsManagerObj.Sacrifice;
            sacrificeView.OnSacrificeFulfill += () => {
                m_NextSacrifice = (m_CurrentMonth + m_SacrificePeriod) % 12;
                m_WindowsOpen--;
                SacrificeResult sacrificeResult = CalculateSacrificeOutcome(sacrificeView.GetSacrificeCountLeft());
                StatsManagerObj.ApplyModifier(sacrificeResult.Modifiers);
                CalculateSacrificePeriod();
                CalculateLimits();
                UpdateResourceView();
                SacrificeResultView resultView = Instantiate(SacrificeResult, Canvas).GetComponent <SacrificeResultView>();
                m_WindowsOpen++;
                resultView.Initialize(sacrificeResult.Title, sacrificeResult.Icon, sacrificeResult.Text);
                resultView.OnWindowClose += () => m_WindowsOpen--;
            };
        }
    }