示例#1
0
        /// <summary>
        /// Called before each game simulation tick. A tick contains multiple frames.
        /// Performs the dispatching for this simulation phase.
        /// </summary>
        public override void OnBeforeSimulationTick()
        {
            if (SimulationManager.instance.SimulationPaused || SimulationManager.instance.ForcedSimulationPaused)
            {
                wasPaused = true;
                return;
            }

            WeatherInfo?.Update();

            bool updateFrameLength = TimeAdjustment?.Update(wasPaused) ?? false;

            wasPaused = false;

            if (CitizenProcessor != null)
            {
                if (updateFrameLength)
                {
                    CitizenProcessor.UpdateFrameDuration();
                }

                CitizenProcessor.ProcessTick();
            }

            if (updateFrameLength)
            {
                Buildings?.UpdateFrameDuration();
                Statistics?.RefreshUnits();
                VanillaEvents.ProcessUpdatedTimeSpeed(TimeAdjustment.GetOriginalTime);
            }

            EventManager?.ProcessEvents();

            if (DayTimeSimulation == null || CitizenProcessor == null)
            {
                return;
            }

            DateTime currentDateTime = SimulationManager.instance.m_currentGameTime;

            if (currentDateTime.Hour != lastHandledDate.Hour || lastHandledDate == default)
            {
                int triggerHour = lastHandledDate == default
                    ? 0
                    : currentDateTime.Hour;

                lastHandledDate = currentDateTime;
                CitizenProcessor.TriggerHour(triggerHour);
                if (triggerHour == 0)
                {
                    DayTimeSimulation.Process(currentDateTime);
                    OnNewDay(this);
                }
            }
        }
示例#2
0
        /// <summary>
        /// Called after each game simulation tick. A tick contains multiple frames.
        /// Performs the dispatching for this simulation phase.
        /// </summary>
        public override void OnAfterSimulationTick()
        {
            EventManager?.ProcessEvents();
            TimeAdjustment?.Update();

            DateTime currentDate = SimulationManager.instance.m_currentGameTime.Date;

            if (currentDate != lastHandledDate)
            {
                lastHandledDate = currentDate;
                DayTimeSimulation?.Process(currentDate);
                OnNewDay(this);
            }
        }
示例#3
0
        /// <summary>
        /// Called before each game simulation tick. A tick contains multiple frames.
        /// Performs the dispatching for this simulation phase.
        /// </summary>
        public override void OnBeforeSimulationTick()
        {
            WeatherInfo?.Update();
            EventManager?.ProcessEvents();

            bool updateFrameLength = TimeAdjustment?.Update() ?? false;

            if (CitizenProcessor != null)
            {
                if (updateFrameLength)
                {
                    CitizenProcessor.UpdateFrameDuration();
                }

                CitizenProcessor.ProcessTick();
            }

            if (updateFrameLength)
            {
                Buildings?.UpdateFrameDuration();
            }

            if (DayTimeSimulation == null || CitizenProcessor == null)
            {
                return;
            }

            DateTime currentDate = SimulationManager.instance.m_currentGameTime.Date;

            if (currentDate != lastHandledDate)
            {
                lastHandledDate = currentDate;
                DayTimeSimulation.Process(currentDate);
                CitizenProcessor.StartNewDay();
                OnNewDay(this);
            }
        }
示例#4
0
        /// <summary>
        /// Called before each game simulation tick. A tick contains multiple frames.
        /// Performs the dispatching for this simulation phase.
        /// </summary>
        public override void OnBeforeSimulationTick()
        {
            WeatherInfo?.Update();
            EventManager?.ProcessEvents();

            if (CitizenProcessor != null)
            {
                CitizenProcessor.ProcessTick();
                if (TimeAdjustment != null && TimeAdjustment.Update())
                {
                    CitizenProcessor.SetFrameDuration(TimeAdjustment.HoursPerFrame);
                }
            }

            DateTime currentDate = SimulationManager.instance.m_currentGameTime.Date;

            if (currentDate != lastHandledDate)
            {
                lastHandledDate = currentDate;
                DayTimeSimulation?.Process(currentDate);
                CitizenProcessor?.StartNewDay();
                OnNewDay(this);
            }
        }
示例#5
0
 /// <summary>Called by the simulation manager when an update is required.</summary>
 /// <param name="realTimeDelta">The real time delta time.</param>
 /// <param name="simulationTimeDelta">The simulation delta time.</param>
 public override void OnUpdate(float realTimeDelta, float simulationTimeDelta)
 {
     TimeAdjustment?.UpdateSunPosition();
 }