From 60d6fe67e2011e2f9e94e42ecffd1ee0b7c336a9 Mon Sep 17 00:00:00 2001 From: Onur Balci Date: Tue, 18 Mar 2025 14:11:24 +0000 Subject: [PATCH 1/2] Add sequence ease support --- .../LitMotion/Runtime/MotionSequenceBuilder.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs index c4494013..e4afd2ee 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs @@ -39,6 +39,7 @@ public static void Return(MotionSequenceBuilderSource source) MotionSequenceBuilderSource next; ushort version; MotionSequenceItem[] buffer; + Ease ease; int count; double tail; double lastTail; @@ -70,10 +71,16 @@ public void Join(MotionHandle handle) Insert(lastTail, handle); } + public void WithEase(Ease ease) + { + this.ease = ease; + } + public MotionHandle Schedule(Action> configuration) { var source = MotionSequenceSource.Rent(); var builder = LMotion.Create(0.0, duration, (float)duration) + .WithEase(ease) .WithOnComplete(source.OnCompleteDelegate) .WithOnCancel(source.OnCancelDelegate); @@ -148,6 +155,14 @@ public readonly MotionSequenceBuilder Join(MotionHandle handle) return this; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly MotionSequenceBuilder WithEase(Ease ease) + { + CheckIsDisposed(); + source.WithEase(ease); + return this; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public MotionHandle Run() { From b48161bcfdda3ff09ebb57bb32d7e7284190d2ac Mon Sep 17 00:00:00 2001 From: Onur Balci Date: Wed, 26 Mar 2025 11:39:01 +0000 Subject: [PATCH 2/2] Add sequence test --- .../LitMotion/Tests/Runtime/SequenceTest.cs | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs index 6a629b87..dd41452d 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs @@ -193,5 +193,41 @@ public void Test_Error_UseMotionHandleInSequence() handle.Time = 0; }, "Cannot access the motion in sequence."); } + + [UnityTest] + public IEnumerator Test_SequenceWithEase() + { + var x1 = 0f; + var x2 = 0f; + Ease ease = Ease.InExpo; + + var motionHandle = LSequence.Create() + .Append(LMotion.Create(0f, 1f, 5f).Bind(v => x1 = v)) + .Append(LMotion.Create(0f, 1f, 5f).Bind(v => x2 = v)) + .WithEase(ease) + .Run(); + + motionHandle.Preserve(); + + for (int i = 1; i <= 10; i++) + { + yield return new WaitForSeconds(1f); + float sequenceProgress = (float)motionHandle.Time / 10f; + float sequenceEasedTime = EaseUtility.Evaluate(sequenceProgress, ease); + Assert.AreEqual(GetX1Time(sequenceEasedTime), x1, 0.01f, $"iteration: {i}"); + Assert.AreEqual(GetX2Time(sequenceEasedTime), x2, 0.01f, $"iteration: {i}"); + } + yield break; + + float GetX1Time(float time) + { + return Mathf.Clamp01(time / 0.5f); + } + + float GetX2Time(float time) + { + return Mathf.Clamp01((time - 0.5f) / 0.5f); + } + } } }