public void Update_Time_UpdateValue() { var sinceSceneStart = 0f; var ctx = Substitute.For <IWorldContext>(); ctx.LogSystem.Returns(Substitute.For <ILogSystem>()); var time = Substitute.For <ITime>(); time.SinceSceneStart.Returns(c => { var r = sinceSceneStart; sinceSceneStart += 2.5f; return(r); }); ctx.Time.Returns(time); var owner = new Transform(ctx); float currentValue = 0; var target = new FloatAnimation <Transform>(owner, 1, 3, 5, v => currentValue = v); target.Play(); Assert.AreEqual(0, currentValue); target.Pause(); target.Update(); Assert.AreEqual(0, currentValue); target.Resume(); sinceSceneStart -= 2.5f; target.Update(); Assert.AreEqual(2, currentValue); target.Update(); Assert.AreEqual(3, currentValue); Assert.AreEqual(AnimationState.Playing, target.State); target.Reset(); target.Play(); Assert.AreEqual(1, currentValue); Assert.AreEqual(AnimationState.Playing, target.State); target.Update(); target.Update(); target.Update(); Assert.AreEqual(3, currentValue); Assert.AreEqual(AnimationState.Stopped, target.State); }
public void Update_PlayStartedTimeGreaterThanSinceSceneStart_DoNotUpdate() { var sinceSceneStart = 0f; var ctx = Substitute.For <IWorldContext>(); ctx.LogSystem.Returns(Substitute.For <ILogSystem>()); var time = Substitute.For <ITime>(); time.SinceSceneStart.Returns(c => sinceSceneStart); ctx.Time.Returns(time); var owner = new Transform(ctx); float currentValue = 0; var target = new FloatAnimation <Transform>(owner, 1, 3, 5, v => currentValue = v); var hasStarted = false; var hasEnded = false; target.Started += (sender, e) => hasStarted = true; target.Ended += (sender, e) => hasEnded = true; target.Play(); sinceSceneStart = 0; target.Update(); Assert.AreEqual(1, currentValue); Assert.IsTrue(hasStarted); Assert.IsFalse(hasEnded); sinceSceneStart = 2.5f; target.Update(); Assert.AreEqual(2, currentValue); sinceSceneStart = -1f; target.Update(); Assert.AreEqual(2, currentValue); sinceSceneStart = 2.5f; target.Enabled = false; sinceSceneStart = 5f; target.Update(); Assert.AreEqual(2, currentValue); Assert.IsFalse(hasEnded); sinceSceneStart = 3f; target.Enabled = true; sinceSceneStart = 5.51f; target.Update(); Assert.AreEqual(3, currentValue); Assert.AreEqual(AnimationState.Stopped, target.State); Assert.IsTrue(hasEnded); }