Exemple #1
0
        internal static void BeforeFrame()
        {
            double realTime = RealTime;

            PreviousFrameDuration  = FrameDuration;
            FrameDuration          = (float)(realTime - FrameStartTime);
            PreviousFrameStartTime = FrameStartTime;
            FrameStartTime         = realTime;
            int num = 0;

            while (num < m_delayedExecutionsRequests.Count)
            {
                DelayedExecutionRequest delayedExecutionRequest = m_delayedExecutionsRequests[num];
                if ((delayedExecutionRequest.Time >= 0.0 && FrameStartTime >= delayedExecutionRequest.Time) || (delayedExecutionRequest.FramesCount >= 0 && FrameIndex >= delayedExecutionRequest.FramesCount))
                {
                    m_delayedExecutionsRequests.RemoveAt(num);
                    delayedExecutionRequest.Action();
                }
                else
                {
                    num++;
                }
            }
        }
        public void NextFrame()
        {
            m_prevGameTimeDelta = m_gameTimeDelta;
            if (!FixedTimeStep.HasValue)
            {
                m_gameTimeDelta = MathUtils.Min(Time.FrameDuration * m_gameTimeFactor, 0.1f);
            }
            else
            {
                m_gameTimeDelta = MathUtils.Min(FixedTimeStep.Value * m_gameTimeFactor, 0.1f);
            }
            m_gameTime += m_gameTimeDelta;
            int num = 0;

            while (num < m_delayedExecutionsRequests.Count)
            {
                DelayedExecutionRequest delayedExecutionRequest = m_delayedExecutionsRequests[num];
                if (delayedExecutionRequest.GameTime >= 0.0 && GameTime >= delayedExecutionRequest.GameTime)
                {
                    m_delayedExecutionsRequests.RemoveAt(num);
                    delayedExecutionRequest.Action();
                }
                else
                {
                    num++;
                }
            }
            int num2 = 0;
            int num3 = 0;

            foreach (ComponentPlayer componentPlayer in m_subsystemPlayers.ComponentPlayers)
            {
                if (componentPlayer.ComponentHealth.Health == 0f)
                {
                    num3++;
                }
                else if (componentPlayer.ComponentSleep.SleepFactor == 1f)
                {
                    num2++;
                }
            }
            if (num2 + num3 == m_subsystemPlayers.ComponentPlayers.Count && num2 >= 1)
            {
                FixedTimeStep = 0.05f;
                m_subsystemUpdate.UpdatesPerFrame = 20;
            }
            else
            {
                FixedTimeStep = null;
                m_subsystemUpdate.UpdatesPerFrame = 1;
            }
            bool flag = true;

            foreach (ComponentPlayer componentPlayer2 in m_subsystemPlayers.ComponentPlayers)
            {
                if (!componentPlayer2.ComponentGui.IsGameMenuDialogVisible())
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
            {
                GameTimeFactor = 0f;
            }
            else if (GameTimeFactor == 0f)
            {
                GameTimeFactor = 1f;
            }
        }