示例#1
0
        public void Test06()
        {
            MarsTime         deimosRise = new MarsTime(12, 32);
            MarsTime         deimosSet  = new MarsTime(17, 06);
            MarsTime         phobosRise = new MarsTime(17, 06);
            MarsTime         phobosSet  = new MarsTime(19, 78);
            MarsTimeInterval deimos     = new MarsTimeInterval(deimosRise, deimosSet);
            MarsTimeInterval phobos     = new MarsTimeInterval(phobosRise, phobosSet);

            Assert.Equal(1, MoonVisibilityCalculator.GetOverlapMinutes(deimos, phobos));
        }
示例#2
0
        public void Test07()
        {
            MarsTime         deimosRise = new MarsTime(22, 11);
            MarsTime         deimosSet  = new MarsTime(0, 36);
            MarsTime         phobosRise = new MarsTime(7, 00);
            MarsTime         phobosSet  = new MarsTime(22, 11);
            MarsTimeInterval deimos     = new MarsTimeInterval(deimosRise, deimosSet);
            MarsTimeInterval phobos     = new MarsTimeInterval(phobosRise, phobosSet);

            Assert.Equal(1, MoonVisibilityCalculator.GetOverlapMinutes(deimos, phobos));
        }
示例#3
0
        public void Test04()
        {
            MarsTime         deimosRise = new MarsTime(14, 00);
            MarsTime         deimosSet  = new MarsTime(22, 40);
            MarsTime         phobosRise = new MarsTime(10, 20);
            MarsTime         phobosSet  = new MarsTime(22, 07);
            MarsTimeInterval deimos     = new MarsTimeInterval(deimosRise, deimosSet);
            MarsTimeInterval phobos     = new MarsTimeInterval(phobosRise, phobosSet);

            Assert.Equal(807, MoonVisibilityCalculator.GetOverlapMinutes(deimos, phobos));
        }
示例#4
0
        public void Test05()
        {
            MarsTime         deimosRise = new MarsTime(18, 55);
            MarsTime         deimosSet  = new MarsTime(4, 97);
            MarsTime         phobosRise = new MarsTime(10, 39);
            MarsTime         phobosSet  = new MarsTime(4, 00);
            MarsTimeInterval deimos     = new MarsTimeInterval(deimosRise, deimosSet);
            MarsTimeInterval phobos     = new MarsTimeInterval(phobosRise, phobosSet);

            Assert.Equal(1045, MoonVisibilityCalculator.GetOverlapMinutes(deimos, phobos));
        }
示例#5
0
        public void Test14()
        {
            MarsTime         deimosRise = new MarsTime(10, 00);
            MarsTime         deimosSet  = new MarsTime(13, 00);
            MarsTime         phobosRise = new MarsTime(15, 00);
            MarsTime         phobosSet  = new MarsTime(18, 00);
            MarsTimeInterval deimos     = new MarsTimeInterval(deimosRise, deimosSet);
            MarsTimeInterval phobos     = new MarsTimeInterval(phobosRise, phobosSet);

            Assert.Equal(0, MoonVisibilityCalculator.GetOverlapMinutes(deimos, phobos));
        }
示例#6
0
        public void Test02()
        {
            MarsTime         deimosRise = new MarsTime(24, 53);
            MarsTime         deimosSet  = new MarsTime(7, 12);
            MarsTime         phobosRise = new MarsTime(5, 12);
            MarsTime         phobosSet  = new MarsTime(8, 45);
            MarsTimeInterval deimos     = new MarsTimeInterval(deimosRise, deimosSet);
            MarsTimeInterval phobos     = new MarsTimeInterval(phobosRise, phobosSet);

            Assert.Equal(200, MoonVisibilityCalculator.GetOverlapMinutes(deimos, phobos));
        }
示例#7
0
        public void Test01()
        {
            MarsTime         deimosRise = new MarsTime(13, 91);
            MarsTime         deimosSet  = new MarsTime(23, 05);
            MarsTime         phobosRise = new MarsTime(22, 05);
            MarsTime         phobosSet  = new MarsTime(24, 45);
            MarsTimeInterval deimos     = new MarsTimeInterval(deimosRise, deimosSet);
            MarsTimeInterval phobos     = new MarsTimeInterval(phobosRise, phobosSet);

            Assert.Equal(100, MoonVisibilityCalculator.GetOverlapMinutes(deimos, phobos));
        }
        void PauseMarsTime()
        {
            Assert.False(m_PausedThisFrame, "Mars Update occurred while Mars Time is paused");

            m_PausedThisFrame = true;
            MarsTime.Pause();
            Assert.Zero(MarsTime.TimeScale);
            Assert.True(MarsTime.Paused);
            m_TimeAtLastTimeScaleChange     = Time.time;
            m_MarsTimeAtLastTimeScaleChange = MarsTime.Time;
        }
        void OnPaused(PlayableDirector director)
        {
            m_Paused  = true;
            IsSyncing = false;
            if (m_ControlsMarsLifecycle)
            {
                MarsTime.Pause();
            }

            Paused?.Invoke();
        }
        void OnResumed(PlayableDirector director)
        {
            if (m_ControlsMarsLifecycle)
            {
                MarsTime.Play();
            }

            PlaybackPauseTime = m_Duration;
            m_Paused          = false;
            Played?.Invoke();
        }
        protected override void Update()
        {
            if (IsTestFinished)
            {
                return;
            }

            Assert.AreEqual(Time.deltaTime * MarsTime.TimeScale, MarsTime.ScaledDeltaTime, k_TimeCheckTolerance);

            var time        = Time.time;
            var endMarsTime = m_MarsTimeAtLastTimeScaleChange + (time - m_TimeAtLastTimeScaleChange) * MarsTime.TimeScale;

            if ((MarsTime.Time + m_MarsTimeStep > endMarsTime) && !MarsTime.Paused && (m_SkippedFrames < k_MaxSkippedFrames))
            {
                // Sometimes there will be no MarsUpdates in a frame due to small deltaTime. Since we test setting MarsTime
                // properties from MarsUpdate, we skip frames where there will be no MarsUpdates (unless paused).
                // Eventually there should be a frame with a MarsUpdate, when the difference in time from the start
                // is larger than MarsTime.TimeStep.
                m_SkippedFrames++;
                return;
            }

            switch (m_CurrentFrame)
            {
            case 0:
                // Test setting time scale from Mars Update
                MarsTime.MarsUpdate += SetFastTimeScale;
                break;

            case 4:
                // Test pausing from Mars Update
                MarsTime.MarsUpdate += PauseMarsTime;
                break;

            case 8:
                MarsTime.Play();
                Assert.AreEqual(1f, MarsTime.TimeScale, k_TimeScaleCheckTolerance);
                Assert.False(MarsTime.Paused);
                break;

            case 10:
                // Test setting time scale before MarsTimeModule updates.
                // Directly setting time scale to 0 should pause Mars Time, but not immediately
                MarsTime.TimeScale = 0f;
                Assert.AreEqual(0f, MarsTime.TimeScale, k_TimeScaleCheckTolerance);
                Assert.False(MarsTime.Paused);
                break;

            case 12:
                // Test setting time scale to positive value to unpause next frame
                MarsTime.TimeScale = k_SlowTimeScale;
                Assert.AreEqual(k_SlowTimeScale, MarsTime.TimeScale, k_TimeScaleCheckTolerance);

                // Paused should still be false because we did not call Play
                Assert.True(MarsTime.Paused);
                break;

            case 16:
                // Setting a negative time scale should log an error and have no effect on MarsTime.TimeScale, as
                // is the case with Time.timeScale
                LogAssert.Expect(LogType.Error, MarsTimeModule.NegativeTimeScaleMessage);
                MarsTime.TimeScale = k_NegativeTimeScale;
                Assert.AreEqual(k_SlowTimeScale, MarsTime.TimeScale, k_TimeScaleCheckTolerance);
                break;

            case 20:
                // Calling Play() while Paused is false should do nothing
                MarsTime.Play();
                Assert.AreEqual(k_SlowTimeScale, MarsTime.TimeScale, k_TimeScaleCheckTolerance);
                break;
            }

            base.Update();

            var timeSinceLastTimeScaleChange = time - m_TimeAtLastTimeScaleChange;
            var timeScaleChanged             = false;

            switch (m_CurrentFrame)
            {
            case 0:
                // We changed to fast time scale this frame but it should only have an effect starting next frame, not this one.
                // Mars Time should be close to the unscaled difference in time from the start.
                AssertMarsTimeIsCloseToTime(timeSinceLastTimeScaleChange);
                timeScaleChanged = true;
                break;

            case 1:
            case 2:
            case 3:
                // Test that fast time scale is applied to Mars Time updates
                AssertMarsTimeIsCloseToTime(m_MarsTimeAtLastTimeScaleChange + timeSinceLastTimeScaleChange * k_FastTimeScale);
                break;

            case 4:
                MarsTime.MarsUpdate -= PauseMarsTime;
                break;

            case 5:
            case 6:
            case 7:
                // Test that Mars Time does not advance while paused
                AssertMarsTimeHasNotChanged();
                break;

            case 8:
                // Even though Paused is false, Mars Time should not have changed after update since the call to Play happened this frame
                AssertMarsTimeHasNotChanged();
                timeScaleChanged = true;
                break;

            case 9:
                // Mars Time should update at the same pace as Time.time after calling Play
                AssertMarsTimeIsCloseToTime(m_MarsTimeAtLastTimeScaleChange + timeSinceLastTimeScaleChange);
                break;

            case 10:
                // Time scale was set to 0 but not through Pause.
                // Mars Time should have advanced this frame, but Paused should be true so that time does not advance next frame.
                AssertMarsTimeIsCloseToTime(m_MarsTimeAtLastTimeScaleChange + timeSinceLastTimeScaleChange);
                Assert.True(MarsTime.Paused);
                timeScaleChanged = true;
                break;

            case 11:
                AssertMarsTimeHasNotChanged();
                Assert.True(MarsTime.Paused);
                break;

            case 12:
                // Time scale was set to a positive value.  Time should not have advanced this frame but should advance next frame.
                AssertMarsTimeHasNotChanged();
                Assert.False(MarsTime.Paused);
                timeScaleChanged = true;
                break;

            default:
                // Test that slow time scale is applied to Mars Time updates
                AssertMarsTimeIsCloseToTime(m_MarsTimeAtLastTimeScaleChange + timeSinceLastTimeScaleChange * k_SlowTimeScale);
                Assert.False(MarsTime.Paused);
                break;
            }

            if (timeScaleChanged)
            {
                m_TimeAtLastTimeScaleChange     = time;
                m_MarsTimeAtLastTimeScaleChange = MarsTime.Time;
            }

            m_CurrentFrame++;
        }