From bb870eaf891cbebbc84162680f2a298562ddd352 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 18 Nov 2024 13:43:30 +0900 Subject: [PATCH 001/224] Add: linkToMotionCancellation --- .../UniTask/LitMotionUniTaskExtensions.cs | 18 ++++++++- .../UniTask/UniTaskMotionConfiguredSource.cs | 10 ++--- .../Tasks/AwaitableMotionConfiguredSource.cs | 4 +- .../Tasks/MotionConfiguredSourceBase.cs | 25 ++++++++----- .../Tasks/ValueTaskMotionConfiguredSource.cs | 4 +- .../Runtime/MotionHandleExtensions.cs | 37 +++++++++++++++++-- 6 files changed, 74 insertions(+), 24 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs index ae1473f6..aad590c4 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs @@ -18,7 +18,7 @@ public static class LitMotionUniTaskExtensions public static UniTask ToUniTask(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionConfiguredSource.Create(handle, CancelBehaviour.CancelAndCancelAwait, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionConfiguredSource.Create(handle, CancelBehaviour.CancelAndCancelAwait, true, cancellationToken, out var token), token); } /// @@ -31,7 +31,21 @@ public static UniTask ToUniTask(this MotionHandle handle, CancellationToken canc public static UniTask ToUniTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehaviour, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehaviour, true, cancellationToken, out var token), token); + } + + /// + /// Convert motion handle to UniTask. + /// + /// This motion handle + /// Behavior when canceling + /// Whether to link MotionHandle.Cancel() to task cancellation + /// CancellationToken + /// + public static UniTask ToUniTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken = default) + { + if (!handle.IsActive()) return UniTask.CompletedTask; + return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehaviour, linkToMotionCancellation, cancellationToken, out var token), token); } /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs index f2f814be..a13d579a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs @@ -5,7 +5,7 @@ namespace LitMotion { - internal sealed class UniTaskMotionConfiguredSource : MotionConfiguredSourceBase ,IUniTaskSource, ITaskPoolNode + internal sealed class UniTaskMotionConfiguredSource : MotionConfiguredSourceBase, IUniTaskSource, ITaskPoolNode { static UniTaskMotionConfiguredSource() { @@ -20,7 +20,7 @@ static UniTaskMotionConfiguredSource() UniTaskCompletionSourceCore core; - public static IUniTaskSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, CancellationToken cancellationToken, out short token) + public static IUniTaskSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { @@ -33,7 +33,7 @@ public static IUniTaskSource Create(MotionHandle motionHandle, CancelBehaviour c result = new UniTaskMotionConfiguredSource(); } - result.Initialize(motionHandle, cancelBehaviour, cancellationToken); + result.Initialize(motionHandle, cancelBehaviour, linkToMotionCancellation, cancellationToken); TaskTracker.TrackActiveTask(result, 3); @@ -50,7 +50,7 @@ protected override void SetTaskCompleted() { core.TrySetResult(AsyncUnit.Default); } - + public void GetResult(short token) { try @@ -82,7 +82,7 @@ bool TryReturn() { TaskTracker.RemoveTracking(this); core.Reset(); - + DisposeRegistration(); RestoreOriginalCallback(); ResetFields(); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs index 712f9a90..d5e01a31 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs @@ -44,7 +44,7 @@ public static AwaitableMotionConfiguredSource CanceledSource AwaitableMotionConfiguredSource() : base() { } - public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, CancellationToken cancellationToken) + public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { @@ -53,7 +53,7 @@ public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, } var result = new AwaitableMotionConfiguredSource(); - result.Initialize(motionHandle, cancelBehaviour, cancellationToken); + result.Initialize(motionHandle, cancelBehaviour, linkToMotionCancellation, cancellationToken); return result; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs index c91ce92a..564db3dd 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs @@ -16,9 +16,10 @@ public MotionConfiguredSourceBase() MotionHandle motionHandle; CancelBehaviour cancelBehaviour; + bool linkToMotionCancellation; CancellationToken cancellationToken; CancellationTokenRegistration cancellationRegistration; - bool canceled; + bool cancelAwait; Action originalCompleteAction; Action originalCancelAction; @@ -32,12 +33,16 @@ protected void OnCancelCallbackDelegate() { if (cancelBehaviour is CancelBehaviour.CancelAndCancelAwait or CancelBehaviour.CompleteAndCancelAwait or CancelBehaviour.CancelAwait) { - canceled = true; + cancelAwait = true; } } originalCancelAction?.Invoke(); - SetTaskCanceled(cancellationToken); + + if (linkToMotionCancellation) + { + SetTaskCanceled(cancellationToken); + } } protected void OnCompleteCallbackDelegate() @@ -46,13 +51,13 @@ protected void OnCompleteCallbackDelegate() { if (cancelBehaviour is CancelBehaviour.CancelAndCancelAwait or CancelBehaviour.CompleteAndCancelAwait or CancelBehaviour.CancelAwait) { - canceled = true; + cancelAwait = true; } } originalCompleteAction?.Invoke(); - if (canceled) + if (cancelAwait) { SetTaskCanceled(cancellationToken); } @@ -77,10 +82,11 @@ protected static void OnCanceledTokenReceived(MotionHandle motionHandle, CancelB } } - protected void Initialize(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, CancellationToken cancellationToken) + protected void Initialize(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken) { this.motionHandle = motionHandle; this.cancelBehaviour = cancelBehaviour; + this.linkToMotionCancellation = linkToMotionCancellation; this.cancellationToken = cancellationToken; ref var callbackData = ref MotionStorageManager.GetMotionCallbackDataRef(motionHandle); @@ -107,14 +113,14 @@ protected void Initialize(MotionHandle motionHandle, CancelBehaviour cancelBehav { default: case CancelBehaviour.CancelAndCancelAwait: - source.canceled = true; + source.cancelAwait = true; source.motionHandle.Cancel(); break; case CancelBehaviour.Cancel: source.motionHandle.Cancel(); break; case CancelBehaviour.CompleteAndCancelAwait: - source.canceled = true; + source.cancelAwait = true; source.motionHandle.Complete(); break; case CancelBehaviour.Complete: @@ -133,10 +139,11 @@ protected void ResetFields() { motionHandle = default; cancelBehaviour = default; + linkToMotionCancellation = default; cancellationToken = default; originalCompleteAction = default; originalCancelAction = default; - canceled = default; + cancelAwait = default; } protected void RestoreOriginalCallback() diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs index bce15930..924cf1bd 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs @@ -31,7 +31,7 @@ static ValueTaskMotionConfiguredSource FromCanceled(out short token) ValueTaskMotionConfiguredSource() : base() { } - public static IValueTaskSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, CancellationToken cancellationToken, out short token) + public static IValueTaskSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { @@ -44,7 +44,7 @@ public static IValueTaskSource Create(MotionHandle motionHandle, CancelBehaviour result = new ValueTaskMotionConfiguredSource(); } - result.Initialize(motionHandle, cancelBehaviour, cancellationToken); + result.Initialize(motionHandle, cancelBehaviour, linkToMotionCancellation, cancellationToken); token = result.core.Version; return result; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 5b2c7f50..ae1f1a48 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -158,7 +158,7 @@ public static MotionAwaiter GetAwaiter(this MotionHandle handle) public static ValueTask ToValueTask(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionConfiguredSource.Create(handle, CancelBehaviour.CancelAndCancelAwait, cancellationToken, out var token); + var source = ValueTaskMotionConfiguredSource.Create(handle, CancelBehaviour.CancelAndCancelAwait, true, cancellationToken, out var token); return new ValueTask(source, token); } @@ -172,7 +172,22 @@ public static ValueTask ToValueTask(this MotionHandle handle, CancellationToken public static ValueTask ToValueTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehaviour, cancellationToken, out var token); + var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehaviour, true, cancellationToken, out var token); + return new ValueTask(source, token); + } + + /// + /// Convert motion handle to ValueTask. + /// + /// This motion handle + /// Behavior when canceling + /// Whether to link MotionHandle.Cancel() to task cancellation + /// CancellationToken + /// + public static ValueTask ToValueTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken = default) + { + if (!handle.IsActive()) return default; + var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehaviour, linkToMotionCancellation, cancellationToken, out var token); return new ValueTask(source, token); } @@ -186,7 +201,7 @@ public static ValueTask ToValueTask(this MotionHandle handle, CancelBehaviour ca public static Awaitable ToAwaitable(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; - return AwaitableMotionConfiguredSource.Create(handle, CancelBehaviour.CancelAndCancelAwait, cancellationToken).Awaitable; + return AwaitableMotionConfiguredSource.Create(handle, CancelBehaviour.CancelAndCancelAwait, true, cancellationToken).Awaitable; } /// @@ -199,7 +214,21 @@ public static Awaitable ToAwaitable(this MotionHandle handle, CancellationToken public static Awaitable ToAwaitable(this MotionHandle handle, CancelBehaviour cancelBehaviour, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; - return AwaitableMotionConfiguredSource.Create(handle, cancelBehaviour, cancellationToken).Awaitable; + return AwaitableMotionConfiguredSource.Create(handle, cancelBehaviour, true, cancellationToken).Awaitable; + } + + /// + /// Convert motion handle to Awaitable. + /// + /// This motion handle + /// Behavior when canceling + /// Whether to link MotionHandle.Cancel() to task cancellation + /// CancellationToken + /// + public static Awaitable ToAwaitable(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken = default) + { + if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; + return AwaitableMotionConfiguredSource.Create(handle, cancelBehaviour, linkToMotionCancellation, cancellationToken).Awaitable; } #endif From c56b8fc947bfccde7d01fa02d22e2881a1aa8843 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 18 Nov 2024 14:13:23 +0900 Subject: [PATCH 002/224] Fix: cancellationToken callback --- .../Tasks/MotionConfiguredSourceBase.cs | 53 ++++++++----------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs index 564db3dd..ed5deac2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs @@ -19,45 +19,34 @@ public MotionConfiguredSourceBase() bool linkToMotionCancellation; CancellationToken cancellationToken; CancellationTokenRegistration cancellationRegistration; - bool cancelAwait; Action originalCompleteAction; Action originalCancelAction; + bool CancelAwait => cancelBehaviour is CancelBehaviour.CancelAndCancelAwait or CancelBehaviour.CompleteAndCancelAwait or CancelBehaviour.CancelAwait; + protected abstract void SetTaskCanceled(CancellationToken cancellationToken); protected abstract void SetTaskCompleted(); protected void OnCancelCallbackDelegate() { - if (cancellationToken.IsCancellationRequested) - { - if (cancelBehaviour is CancelBehaviour.CancelAndCancelAwait or CancelBehaviour.CompleteAndCancelAwait or CancelBehaviour.CancelAwait) - { - cancelAwait = true; - } - } - originalCancelAction?.Invoke(); - if (linkToMotionCancellation) + if ((cancellationToken.IsCancellationRequested && CancelAwait) || linkToMotionCancellation) { SetTaskCanceled(cancellationToken); } + else + { + SetTaskCompleted(); + } } protected void OnCompleteCallbackDelegate() { - if (cancellationToken.IsCancellationRequested) - { - if (cancelBehaviour is CancelBehaviour.CancelAndCancelAwait or CancelBehaviour.CompleteAndCancelAwait or CancelBehaviour.CancelAwait) - { - cancelAwait = true; - } - } - originalCompleteAction?.Invoke(); - if (cancelAwait) + if (cancellationToken.IsCancellationRequested && CancelAwait) { SetTaskCanceled(cancellationToken); } @@ -109,27 +98,31 @@ protected void Initialize(MotionHandle motionHandle, CancelBehaviour cancelBehav cancellationRegistration = RegisterWithoutCaptureExecutionContext(cancellationToken, static x => { var source = (MotionConfiguredSourceBase)x; + if (!source.motionHandle.IsActive()) return; + + source.RestoreOriginalCallback(); + switch (source.cancelBehaviour) { default: - case CancelBehaviour.CancelAndCancelAwait: - source.cancelAwait = true; - source.motionHandle.Cancel(); break; + case CancelBehaviour.CancelAndCancelAwait: case CancelBehaviour.Cancel: source.motionHandle.Cancel(); break; case CancelBehaviour.CompleteAndCancelAwait: - source.cancelAwait = true; - source.motionHandle.Complete(); - break; case CancelBehaviour.Complete: source.motionHandle.Complete(); break; - case CancelBehaviour.CancelAwait: - source.RestoreOriginalCallback(); - source.SetTaskCanceled(source.cancellationToken); - break; + } + + if (source.CancelAwait) + { + source.SetTaskCanceled(source.cancellationToken); + } + else + { + source.SetTaskCompleted(); } }, this); } @@ -143,12 +136,10 @@ protected void ResetFields() cancellationToken = default; originalCompleteAction = default; originalCancelAction = default; - cancelAwait = default; } protected void RestoreOriginalCallback() { - if (!motionHandle.IsActive()) return; ref var callbackData = ref MotionStorageManager.GetMotionCallbackDataRef(motionHandle); callbackData.OnCancelAction = originalCancelAction; callbackData.OnCompleteAction = originalCompleteAction; From 1e5ec2e5cc88e2277b5df834dcd5812e74ffcf76 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 18 Nov 2024 21:47:20 +0900 Subject: [PATCH 003/224] Rename: parameter name --- .../External/UniTask/LitMotionUniTaskExtensions.cs | 6 +++--- .../UniTask/UniTaskMotionConfiguredSource.cs | 4 ++-- .../Tasks/AwaitableMotionConfiguredSource.cs | 4 ++-- .../Internal/Tasks/MotionConfiguredSourceBase.cs | 10 +++++----- .../Tasks/ValueTaskMotionConfiguredSource.cs | 4 ++-- .../LitMotion/Runtime/MotionHandleExtensions.cs | 12 ++++++------ 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs index aad590c4..c464d061 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs @@ -39,13 +39,13 @@ public static UniTask ToUniTask(this MotionHandle handle, CancelBehaviour cancel /// /// This motion handle /// Behavior when canceling - /// Whether to link MotionHandle.Cancel() to task cancellation + /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static UniTask ToUniTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken = default) + public static UniTask ToUniTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehaviour, linkToMotionCancellation, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken, out var token), token); } /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs index a13d579a..1921767d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs @@ -20,7 +20,7 @@ static UniTaskMotionConfiguredSource() UniTaskCompletionSourceCore core; - public static IUniTaskSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken, out short token) + public static IUniTaskSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { @@ -33,7 +33,7 @@ public static IUniTaskSource Create(MotionHandle motionHandle, CancelBehaviour c result = new UniTaskMotionConfiguredSource(); } - result.Initialize(motionHandle, cancelBehaviour, linkToMotionCancellation, cancellationToken); + result.Initialize(motionHandle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken); TaskTracker.TrackActiveTask(result, 3); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs index d5e01a31..0680a171 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs @@ -44,7 +44,7 @@ public static AwaitableMotionConfiguredSource CanceledSource AwaitableMotionConfiguredSource() : base() { } - public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken) + public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { @@ -53,7 +53,7 @@ public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, } var result = new AwaitableMotionConfiguredSource(); - result.Initialize(motionHandle, cancelBehaviour, linkToMotionCancellation, cancellationToken); + result.Initialize(motionHandle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken); return result; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs index ed5deac2..7c729111 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs @@ -16,7 +16,7 @@ public MotionConfiguredSourceBase() MotionHandle motionHandle; CancelBehaviour cancelBehaviour; - bool linkToMotionCancellation; + bool cancelAwaitOnMotionCanceled; CancellationToken cancellationToken; CancellationTokenRegistration cancellationRegistration; @@ -32,7 +32,7 @@ protected void OnCancelCallbackDelegate() { originalCancelAction?.Invoke(); - if ((cancellationToken.IsCancellationRequested && CancelAwait) || linkToMotionCancellation) + if ((cancellationToken.IsCancellationRequested && CancelAwait) || cancelAwaitOnMotionCanceled) { SetTaskCanceled(cancellationToken); } @@ -71,11 +71,11 @@ protected static void OnCanceledTokenReceived(MotionHandle motionHandle, CancelB } } - protected void Initialize(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken) + protected void Initialize(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) { this.motionHandle = motionHandle; this.cancelBehaviour = cancelBehaviour; - this.linkToMotionCancellation = linkToMotionCancellation; + this.cancelAwaitOnMotionCanceled = cancelAwaitOnMotionCanceled; this.cancellationToken = cancellationToken; ref var callbackData = ref MotionStorageManager.GetMotionCallbackDataRef(motionHandle); @@ -132,7 +132,7 @@ protected void ResetFields() { motionHandle = default; cancelBehaviour = default; - linkToMotionCancellation = default; + cancelAwaitOnMotionCanceled = default; cancellationToken = default; originalCompleteAction = default; originalCancelAction = default; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs index 924cf1bd..eaf8603f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs @@ -31,7 +31,7 @@ static ValueTaskMotionConfiguredSource FromCanceled(out short token) ValueTaskMotionConfiguredSource() : base() { } - public static IValueTaskSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken, out short token) + public static IValueTaskSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { @@ -44,7 +44,7 @@ public static IValueTaskSource Create(MotionHandle motionHandle, CancelBehaviour result = new ValueTaskMotionConfiguredSource(); } - result.Initialize(motionHandle, cancelBehaviour, linkToMotionCancellation, cancellationToken); + result.Initialize(motionHandle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken); token = result.core.Version; return result; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index ae1f1a48..d72f2c89 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -181,13 +181,13 @@ public static ValueTask ToValueTask(this MotionHandle handle, CancelBehaviour ca /// /// This motion handle /// Behavior when canceling - /// Whether to link MotionHandle.Cancel() to task cancellation + /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static ValueTask ToValueTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken = default) + public static ValueTask ToValueTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehaviour, linkToMotionCancellation, cancellationToken, out var token); + var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken, out var token); return new ValueTask(source, token); } @@ -222,13 +222,13 @@ public static Awaitable ToAwaitable(this MotionHandle handle, CancelBehaviour ca /// /// This motion handle /// Behavior when canceling - /// Whether to link MotionHandle.Cancel() to task cancellation + /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static Awaitable ToAwaitable(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool linkToMotionCancellation, CancellationToken cancellationToken = default) + public static Awaitable ToAwaitable(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; - return AwaitableMotionConfiguredSource.Create(handle, cancelBehaviour, linkToMotionCancellation, cancellationToken).Awaitable; + return AwaitableMotionConfiguredSource.Create(handle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken).Awaitable; } #endif From a47b17bb0173e44ba9a67b6ca72318b216c09bf6 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 18 Nov 2024 21:58:58 +0900 Subject: [PATCH 004/224] Change: CancelBehaviour -> MotionCanceledBehavior --- .../UniTask/LitMotionUniTaskExtensions.cs | 14 +++---- .../UniTask/UniTaskMotionConfiguredSource.cs | 6 +-- .../Tasks/AwaitableMotionConfiguredSource.cs | 6 +-- .../Tasks/MotionConfiguredSourceBase.cs | 41 +++++++------------ .../Tasks/ValueTaskMotionConfiguredSource.cs | 6 +-- ...ehaviour.cs => MotionCanceledBehaviour.cs} | 6 +-- ...s.meta => MotionCanceledBehaviour.cs.meta} | 0 .../Runtime/MotionHandleExtensions.cs | 28 ++++++------- 8 files changed, 46 insertions(+), 61 deletions(-) rename src/LitMotion/Assets/LitMotion/Runtime/{CancelBehaviour.cs => MotionCanceledBehaviour.cs} (58%) rename src/LitMotion/Assets/LitMotion/Runtime/{CancelBehaviour.cs.meta => MotionCanceledBehaviour.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs index c464d061..4dc0ded8 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs @@ -18,34 +18,34 @@ public static class LitMotionUniTaskExtensions public static UniTask ToUniTask(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionConfiguredSource.Create(handle, CancelBehaviour.CancelAndCancelAwait, true, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionConfiguredSource.Create(handle, MotionCanceledBehavior.Cancel, true, cancellationToken, out var token), token); } /// /// Convert motion handle to UniTask. /// /// This motion handle - /// Behavior when canceling + /// Behavior when canceling /// CancellationToken /// - public static UniTask ToUniTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, CancellationToken cancellationToken = default) + public static UniTask ToUniTask(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehaviour, true, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehavior, true, cancellationToken, out var token), token); } /// /// Convert motion handle to UniTask. /// /// This motion handle - /// Behavior when canceling + /// Behavior when canceling /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static UniTask ToUniTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) + public static UniTask ToUniTask(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken, out var token), token); } /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs index 1921767d..8886e92c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs @@ -20,11 +20,11 @@ static UniTaskMotionConfiguredSource() UniTaskCompletionSourceCore core; - public static IUniTaskSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) + public static IUniTaskSource Create(MotionHandle motionHandle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { - OnCanceledTokenReceived(motionHandle, cancelBehaviour); + OnCanceledTokenReceived(motionHandle, cancelBehavior); return AutoResetUniTaskCompletionSource.CreateFromCanceled(cancellationToken, out token); } @@ -33,7 +33,7 @@ public static IUniTaskSource Create(MotionHandle motionHandle, CancelBehaviour c result = new UniTaskMotionConfiguredSource(); } - result.Initialize(motionHandle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken); + result.Initialize(motionHandle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken); TaskTracker.TrackActiveTask(result, 3); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs index 0680a171..c63d6428 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs @@ -44,16 +44,16 @@ public static AwaitableMotionConfiguredSource CanceledSource AwaitableMotionConfiguredSource() : base() { } - public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) + public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { - OnCanceledTokenReceived(motionHandle, cancelBehaviour); + OnCanceledTokenReceived(motionHandle, cancelBehavior); return CanceledSource; } var result = new AwaitableMotionConfiguredSource(); - result.Initialize(motionHandle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken); + result.Initialize(motionHandle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken); return result; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs index 7c729111..8e17394c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs @@ -15,7 +15,7 @@ public MotionConfiguredSourceBase() readonly Action onCompleteCallbackDelegate; MotionHandle motionHandle; - CancelBehaviour cancelBehaviour; + MotionCanceledBehavior cancelBehavior; bool cancelAwaitOnMotionCanceled; CancellationToken cancellationToken; CancellationTokenRegistration cancellationRegistration; @@ -23,8 +23,6 @@ public MotionConfiguredSourceBase() Action originalCompleteAction; Action originalCancelAction; - bool CancelAwait => cancelBehaviour is CancelBehaviour.CancelAndCancelAwait or CancelBehaviour.CompleteAndCancelAwait or CancelBehaviour.CancelAwait; - protected abstract void SetTaskCanceled(CancellationToken cancellationToken); protected abstract void SetTaskCompleted(); @@ -32,7 +30,7 @@ protected void OnCancelCallbackDelegate() { originalCancelAction?.Invoke(); - if ((cancellationToken.IsCancellationRequested && CancelAwait) || cancelAwaitOnMotionCanceled) + if (cancellationToken.IsCancellationRequested || cancelAwaitOnMotionCanceled) { SetTaskCanceled(cancellationToken); } @@ -46,7 +44,7 @@ protected void OnCompleteCallbackDelegate() { originalCompleteAction?.Invoke(); - if (cancellationToken.IsCancellationRequested && CancelAwait) + if (cancellationToken.IsCancellationRequested) { SetTaskCanceled(cancellationToken); } @@ -56,25 +54,23 @@ protected void OnCompleteCallbackDelegate() } } - protected static void OnCanceledTokenReceived(MotionHandle motionHandle, CancelBehaviour cancelBehaviour) + protected static void OnCanceledTokenReceived(MotionHandle motionHandle, MotionCanceledBehavior cancelBehavior) { - switch (cancelBehaviour) + switch (cancelBehavior) { - case CancelBehaviour.Cancel: - case CancelBehaviour.CancelAndCancelAwait: + case MotionCanceledBehavior.Cancel: motionHandle.Cancel(); break; - case CancelBehaviour.Complete: - case CancelBehaviour.CompleteAndCancelAwait: + case MotionCanceledBehavior.Complete: motionHandle.Complete(); break; } } - protected void Initialize(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) + protected void Initialize(MotionHandle motionHandle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) { this.motionHandle = motionHandle; - this.cancelBehaviour = cancelBehaviour; + this.cancelBehavior = cancelBehavior; this.cancelAwaitOnMotionCanceled = cancelAwaitOnMotionCanceled; this.cancellationToken = cancellationToken; @@ -102,28 +98,19 @@ protected void Initialize(MotionHandle motionHandle, CancelBehaviour cancelBehav source.RestoreOriginalCallback(); - switch (source.cancelBehaviour) + switch (source.cancelBehavior) { default: break; - case CancelBehaviour.CancelAndCancelAwait: - case CancelBehaviour.Cancel: + case MotionCanceledBehavior.Cancel: source.motionHandle.Cancel(); break; - case CancelBehaviour.CompleteAndCancelAwait: - case CancelBehaviour.Complete: + case MotionCanceledBehavior.Complete: source.motionHandle.Complete(); break; } - if (source.CancelAwait) - { - source.SetTaskCanceled(source.cancellationToken); - } - else - { - source.SetTaskCompleted(); - } + source.SetTaskCanceled(source.cancellationToken); }, this); } } @@ -131,7 +118,7 @@ protected void Initialize(MotionHandle motionHandle, CancelBehaviour cancelBehav protected void ResetFields() { motionHandle = default; - cancelBehaviour = default; + cancelBehavior = default; cancelAwaitOnMotionCanceled = default; cancellationToken = default; originalCompleteAction = default; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs index eaf8603f..f12da534 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs @@ -31,11 +31,11 @@ static ValueTaskMotionConfiguredSource FromCanceled(out short token) ValueTaskMotionConfiguredSource() : base() { } - public static IValueTaskSource Create(MotionHandle motionHandle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) + public static IValueTaskSource Create(MotionHandle motionHandle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { - OnCanceledTokenReceived(motionHandle, cancelBehaviour); + OnCanceledTokenReceived(motionHandle, cancelBehavior); return FromCanceled(out token); } @@ -44,7 +44,7 @@ public static IValueTaskSource Create(MotionHandle motionHandle, CancelBehaviour result = new ValueTaskMotionConfiguredSource(); } - result.Initialize(motionHandle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken); + result.Initialize(motionHandle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken); token = result.core.Version; return result; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/CancelBehaviour.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionCanceledBehaviour.cs similarity index 58% rename from src/LitMotion/Assets/LitMotion/Runtime/CancelBehaviour.cs rename to src/LitMotion/Assets/LitMotion/Runtime/MotionCanceledBehaviour.cs index d54b175f..a17157db 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/CancelBehaviour.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionCanceledBehaviour.cs @@ -3,11 +3,9 @@ namespace LitMotion /// /// Specifies the behavior when await is canceled. /// - public enum CancelBehaviour + public enum MotionCanceledBehavior : byte { - CancelAndCancelAwait, - CompleteAndCancelAwait, - CancelAwait, + None, Cancel, Complete } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/CancelBehaviour.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/MotionCanceledBehaviour.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/CancelBehaviour.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/MotionCanceledBehaviour.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index d72f2c89..bc9d94cd 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -158,7 +158,7 @@ public static MotionAwaiter GetAwaiter(this MotionHandle handle) public static ValueTask ToValueTask(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionConfiguredSource.Create(handle, CancelBehaviour.CancelAndCancelAwait, true, cancellationToken, out var token); + var source = ValueTaskMotionConfiguredSource.Create(handle, MotionCanceledBehavior.Cancel, true, cancellationToken, out var token); return new ValueTask(source, token); } @@ -166,13 +166,13 @@ public static ValueTask ToValueTask(this MotionHandle handle, CancellationToken /// Convert motion handle to ValueTask. /// /// This motion handle - /// Behavior when canceling + /// Behavior when canceling /// CancellationToken /// - public static ValueTask ToValueTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, CancellationToken cancellationToken = default) + public static ValueTask ToValueTask(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehaviour, true, cancellationToken, out var token); + var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehavior, true, cancellationToken, out var token); return new ValueTask(source, token); } @@ -180,14 +180,14 @@ public static ValueTask ToValueTask(this MotionHandle handle, CancelBehaviour ca /// Convert motion handle to ValueTask. /// /// This motion handle - /// Behavior when canceling + /// Behavior when canceling /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static ValueTask ToValueTask(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) + public static ValueTask ToValueTask(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken, out var token); + var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken, out var token); return new ValueTask(source, token); } @@ -201,34 +201,34 @@ public static ValueTask ToValueTask(this MotionHandle handle, CancelBehaviour ca public static Awaitable ToAwaitable(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; - return AwaitableMotionConfiguredSource.Create(handle, CancelBehaviour.CancelAndCancelAwait, true, cancellationToken).Awaitable; + return AwaitableMotionConfiguredSource.Create(handle, MotionCanceledBehavior.Cancel, true, cancellationToken).Awaitable; } /// /// Convert motion handle to Awaitable. /// /// This motion handle - /// Behavior when canceling + /// Behavior when canceling /// CancellationToken /// - public static Awaitable ToAwaitable(this MotionHandle handle, CancelBehaviour cancelBehaviour, CancellationToken cancellationToken = default) + public static Awaitable ToAwaitable(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; - return AwaitableMotionConfiguredSource.Create(handle, cancelBehaviour, true, cancellationToken).Awaitable; + return AwaitableMotionConfiguredSource.Create(handle, cancelBehavior, true, cancellationToken).Awaitable; } /// /// Convert motion handle to Awaitable. /// /// This motion handle - /// Behavior when canceling + /// Behavior when canceling /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static Awaitable ToAwaitable(this MotionHandle handle, CancelBehaviour cancelBehaviour, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) + public static Awaitable ToAwaitable(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; - return AwaitableMotionConfiguredSource.Create(handle, cancelBehaviour, cancelAwaitOnMotionCanceled, cancellationToken).Awaitable; + return AwaitableMotionConfiguredSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken).Awaitable; } #endif From d4346a8fbd54a417a4219b6dae98e0b917e74921 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 18 Nov 2024 22:04:08 +0900 Subject: [PATCH 005/224] Fix: add check --- .../Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs index 8e17394c..77d5b69e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs @@ -96,7 +96,7 @@ protected void Initialize(MotionHandle motionHandle, MotionCanceledBehavior canc var source = (MotionConfiguredSourceBase)x; if (!source.motionHandle.IsActive()) return; - source.RestoreOriginalCallback(); + source.RestoreOriginalCallback(false); switch (source.cancelBehavior) { @@ -125,8 +125,10 @@ protected void ResetFields() originalCancelAction = default; } - protected void RestoreOriginalCallback() + protected void RestoreOriginalCallback(bool checkIsActive = true) { + if (checkIsActive && !motionHandle.IsActive()) return; + ref var callbackData = ref MotionStorageManager.GetMotionCallbackDataRef(motionHandle); callbackData.OnCancelAction = originalCancelAction; callbackData.OnCompleteAction = originalCompleteAction; From 4e2b9e5d6329f7b738e998c34880602f821012c0 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 18 Nov 2024 22:04:19 +0900 Subject: [PATCH 006/224] Add: tests --- .../LitMotion/Tests/Runtime/AwaitableTest.cs | 27 ++++++++++++++++- .../LitMotion/Tests/Runtime/UniTaskTest.cs | 30 ++++++++++++------- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs index 173d6f5a..e69eab26 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs @@ -79,7 +79,7 @@ public async Task Test_Awaitable_CancelWhileAwait() var handle = LMotion.Create(0f, 10f, 1f) .WithOnCancel(() => canceled = true) .RunWithoutBinding(); - + _ = DelayedCall(0.2f, () => handle.Cancel()); try @@ -94,6 +94,31 @@ public async Task Test_Awaitable_CancelWhileAwait() Assert.Fail(); } + + [Test] + public async Task Test_Awaitable_CancelWhileAwait_WithoutCancelAwaitOnMotionCanceled() + { + var canceled = false; + + var handle = LMotion.Create(0f, 10f, 1f) + .WithOnCancel(() => canceled = true) + .RunWithoutBinding(); + + _ = DelayedCall(0.2f, () => handle.Cancel()); + + try + { + await handle.ToAwaitable(MotionCanceledBehavior.Cancel, false); + } + catch (OperationCanceledException) + { + Assert.Fail(); + return; + } + + Assert.IsTrue(canceled); + } + [Test] public async Task Test_CancelWhileAwait_WithCancelOnError() { diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs index 6dd96c29..07c001f4 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs @@ -41,7 +41,7 @@ public IEnumerator Test_ToUniTask_CompleteAndCancelAwait() => UniTask.ToCoroutin try { - await handle.ToUniTask(CancelBehaviour.CompleteAndCancelAwait, source.Token); + await handle.ToUniTask(MotionCanceledBehavior.Complete, source.Token); } catch (OperationCanceledException) { @@ -68,19 +68,13 @@ public IEnumerator Test_ToUniTask_CancelAwait() => UniTask.ToCoroutine(async () try { - await handle.ToUniTask(CancelBehaviour.CancelAwait, source.Token); + await handle.ToUniTask(MotionCanceledBehavior.Cancel, source.Token); } catch (OperationCanceledException) { - Assert.IsTrue(handle.IsActive()); - Assert.IsFalse(canceled); - Assert.IsFalse(completed); - - await UniTask.WaitForSeconds(1f); - Assert.IsFalse(handle.IsActive()); - Assert.IsFalse(canceled); - Assert.IsTrue(completed); + Assert.IsTrue(canceled); + Assert.IsFalse(completed); return; } @@ -134,6 +128,22 @@ public IEnumerator Test_CancelWhileAwait() => UniTask.ToCoroutine(async () => Assert.Fail(); }); + [UnityTest] + public IEnumerator Test_CancelWhileAwait_WithoutCancelAwaitOnMotionCanceled() => UniTask.ToCoroutine(async () => + { + var handle = LMotion.Create(0f, 10f, 1f).BindToUnityLogger(); + DelayedCall(0.2f, () => handle.Cancel()).Forget(); + try + { + await handle.ToUniTask(MotionCanceledBehavior.Cancel, false); + } + catch (OperationCanceledException) + { + Assert.Fail(); + return; + } + }); + [UnityTest] public IEnumerator Test_CancelWhileAwait_WithCancelOnError() => UniTask.ToCoroutine(async () => { From 58bcc53c0cd6cece19ec90022407b9491e500c81 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 18 Nov 2024 22:05:28 +0900 Subject: [PATCH 007/224] Rename: MotionCanceledBehavior -> MotionCancelBehavior --- .../External/UniTask/LitMotionUniTaskExtensions.cs | 6 +++--- .../UniTask/UniTaskMotionConfiguredSource.cs | 2 +- .../Tasks/AwaitableMotionConfiguredSource.cs | 2 +- .../Internal/Tasks/MotionConfiguredSourceBase.cs | 14 +++++++------- .../Tasks/ValueTaskMotionConfiguredSource.cs | 2 +- ...anceledBehaviour.cs => MotionCancelBehavior.cs} | 2 +- ...aviour.cs.meta => MotionCancelBehavior.cs.meta} | 0 .../LitMotion/Runtime/MotionHandleExtensions.cs | 12 ++++++------ .../LitMotion/Tests/Runtime/AwaitableTest.cs | 2 +- .../Assets/LitMotion/Tests/Runtime/UniTaskTest.cs | 6 +++--- 10 files changed, 24 insertions(+), 24 deletions(-) rename src/LitMotion/Assets/LitMotion/Runtime/{MotionCanceledBehaviour.cs => MotionCancelBehavior.cs} (79%) rename src/LitMotion/Assets/LitMotion/Runtime/{MotionCanceledBehaviour.cs.meta => MotionCancelBehavior.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs index 4dc0ded8..fa6d5f9a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs @@ -18,7 +18,7 @@ public static class LitMotionUniTaskExtensions public static UniTask ToUniTask(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionConfiguredSource.Create(handle, MotionCanceledBehavior.Cancel, true, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionConfiguredSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken, out var token), token); } /// @@ -28,7 +28,7 @@ public static UniTask ToUniTask(this MotionHandle handle, CancellationToken canc /// Behavior when canceling /// CancellationToken /// - public static UniTask ToUniTask(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, CancellationToken cancellationToken = default) + public static UniTask ToUniTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehavior, true, cancellationToken, out var token), token); @@ -42,7 +42,7 @@ public static UniTask ToUniTask(this MotionHandle handle, MotionCanceledBehavior /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static UniTask ToUniTask(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) + public static UniTask ToUniTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken, out var token), token); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs index 8886e92c..0158da05 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs @@ -20,7 +20,7 @@ static UniTaskMotionConfiguredSource() UniTaskCompletionSourceCore core; - public static IUniTaskSource Create(MotionHandle motionHandle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) + public static IUniTaskSource Create(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs index c63d6428..5f247e36 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs @@ -44,7 +44,7 @@ public static AwaitableMotionConfiguredSource CanceledSource AwaitableMotionConfiguredSource() : base() { } - public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) + public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs index 77d5b69e..014e32e3 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs @@ -15,7 +15,7 @@ public MotionConfiguredSourceBase() readonly Action onCompleteCallbackDelegate; MotionHandle motionHandle; - MotionCanceledBehavior cancelBehavior; + MotionCancelBehavior cancelBehavior; bool cancelAwaitOnMotionCanceled; CancellationToken cancellationToken; CancellationTokenRegistration cancellationRegistration; @@ -54,20 +54,20 @@ protected void OnCompleteCallbackDelegate() } } - protected static void OnCanceledTokenReceived(MotionHandle motionHandle, MotionCanceledBehavior cancelBehavior) + protected static void OnCanceledTokenReceived(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior) { switch (cancelBehavior) { - case MotionCanceledBehavior.Cancel: + case MotionCancelBehavior.Cancel: motionHandle.Cancel(); break; - case MotionCanceledBehavior.Complete: + case MotionCancelBehavior.Complete: motionHandle.Complete(); break; } } - protected void Initialize(MotionHandle motionHandle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) + protected void Initialize(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) { this.motionHandle = motionHandle; this.cancelBehavior = cancelBehavior; @@ -102,10 +102,10 @@ protected void Initialize(MotionHandle motionHandle, MotionCanceledBehavior canc { default: break; - case MotionCanceledBehavior.Cancel: + case MotionCancelBehavior.Cancel: source.motionHandle.Cancel(); break; - case MotionCanceledBehavior.Complete: + case MotionCancelBehavior.Complete: source.motionHandle.Complete(); break; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs index f12da534..4baba7ca 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs @@ -31,7 +31,7 @@ static ValueTaskMotionConfiguredSource FromCanceled(out short token) ValueTaskMotionConfiguredSource() : base() { } - public static IValueTaskSource Create(MotionHandle motionHandle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) + public static IValueTaskSource Create(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionCanceledBehaviour.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionCancelBehavior.cs similarity index 79% rename from src/LitMotion/Assets/LitMotion/Runtime/MotionCanceledBehaviour.cs rename to src/LitMotion/Assets/LitMotion/Runtime/MotionCancelBehavior.cs index a17157db..9826f50b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionCanceledBehaviour.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionCancelBehavior.cs @@ -3,7 +3,7 @@ namespace LitMotion /// /// Specifies the behavior when await is canceled. /// - public enum MotionCanceledBehavior : byte + public enum MotionCancelBehavior : byte { None, Cancel, diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionCanceledBehaviour.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/MotionCancelBehavior.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/MotionCanceledBehaviour.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/MotionCancelBehavior.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index bc9d94cd..0c35e97a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -158,7 +158,7 @@ public static MotionAwaiter GetAwaiter(this MotionHandle handle) public static ValueTask ToValueTask(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionConfiguredSource.Create(handle, MotionCanceledBehavior.Cancel, true, cancellationToken, out var token); + var source = ValueTaskMotionConfiguredSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken, out var token); return new ValueTask(source, token); } @@ -169,7 +169,7 @@ public static ValueTask ToValueTask(this MotionHandle handle, CancellationToken /// Behavior when canceling /// CancellationToken /// - public static ValueTask ToValueTask(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, CancellationToken cancellationToken = default) + public static ValueTask ToValueTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehavior, true, cancellationToken, out var token); @@ -184,7 +184,7 @@ public static ValueTask ToValueTask(this MotionHandle handle, MotionCanceledBeha /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static ValueTask ToValueTask(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) + public static ValueTask ToValueTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken, out var token); @@ -201,7 +201,7 @@ public static ValueTask ToValueTask(this MotionHandle handle, MotionCanceledBeha public static Awaitable ToAwaitable(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; - return AwaitableMotionConfiguredSource.Create(handle, MotionCanceledBehavior.Cancel, true, cancellationToken).Awaitable; + return AwaitableMotionConfiguredSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken).Awaitable; } /// @@ -211,7 +211,7 @@ public static Awaitable ToAwaitable(this MotionHandle handle, CancellationToken /// Behavior when canceling /// CancellationToken /// - public static Awaitable ToAwaitable(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, CancellationToken cancellationToken = default) + public static Awaitable ToAwaitable(this MotionHandle handle, MotionCancelBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; return AwaitableMotionConfiguredSource.Create(handle, cancelBehavior, true, cancellationToken).Awaitable; @@ -225,7 +225,7 @@ public static Awaitable ToAwaitable(this MotionHandle handle, MotionCanceledBeha /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static Awaitable ToAwaitable(this MotionHandle handle, MotionCanceledBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) + public static Awaitable ToAwaitable(this MotionHandle handle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; return AwaitableMotionConfiguredSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken).Awaitable; diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs index e69eab26..10372cce 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs @@ -108,7 +108,7 @@ public async Task Test_Awaitable_CancelWhileAwait_WithoutCancelAwaitOnMotionCanc try { - await handle.ToAwaitable(MotionCanceledBehavior.Cancel, false); + await handle.ToAwaitable(MotionCancelBehavior.Cancel, false); } catch (OperationCanceledException) { diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs index 07c001f4..f6795cad 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs @@ -41,7 +41,7 @@ public IEnumerator Test_ToUniTask_CompleteAndCancelAwait() => UniTask.ToCoroutin try { - await handle.ToUniTask(MotionCanceledBehavior.Complete, source.Token); + await handle.ToUniTask(MotionCancelBehavior.Complete, source.Token); } catch (OperationCanceledException) { @@ -68,7 +68,7 @@ public IEnumerator Test_ToUniTask_CancelAwait() => UniTask.ToCoroutine(async () try { - await handle.ToUniTask(MotionCanceledBehavior.Cancel, source.Token); + await handle.ToUniTask(MotionCancelBehavior.Cancel, source.Token); } catch (OperationCanceledException) { @@ -135,7 +135,7 @@ public IEnumerator Test_CancelWhileAwait_WithoutCancelAwaitOnMotionCanceled() => DelayedCall(0.2f, () => handle.Cancel()).Forget(); try { - await handle.ToUniTask(MotionCanceledBehavior.Cancel, false); + await handle.ToUniTask(MotionCancelBehavior.Cancel, false); } catch (OperationCanceledException) { From b59d98c737286673329887b82c937ff8f4cc19bc Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Tue, 19 Nov 2024 11:35:47 +0900 Subject: [PATCH 008/224] Add: SparseSet --- .../Runtime/Collections/SparseSet.cs | 275 ++++++++++++++++++ .../Runtime/Collections/SparseSet.cs.meta | 2 + .../LitMotion/Runtime/Internal/ArrayHelper.cs | 23 +- .../Runtime/Internal/Utf16StringHelper.cs | 44 +-- 4 files changed, 321 insertions(+), 23 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs b/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs new file mode 100644 index 00000000..50560627 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs @@ -0,0 +1,275 @@ +using System; +using System.Runtime.CompilerServices; + +namespace LitMotion.Collections +{ + public readonly struct SparseIndex : IEquatable + { + public int Index { get; } + public int Version { get; } + + public SparseIndex(int index, int version) + { + Index = index; + Version = version; + } + + public override bool Equals(object obj) + { + return obj is SparseIndex other && Equals(other); + } + + public bool Equals(SparseIndex other) + { + return Index == other.Index && Version == other.Version; + } + + public override int GetHashCode() + { + return HashCode.Combine(Index, Version); + } + } + + internal sealed class SparseSetSlotAllocator + { + public struct Slot : IEquatable + { + public int Next; + public int DenseIndex; + public int Version; + + public readonly bool Equals(Slot other) + { + return other.Next == Next && other.DenseIndex == DenseIndex && other.Version == Version; + } + + public override readonly bool Equals(object obj) + { + return obj is Slot entry && Equals(entry); + } + + public override readonly int GetHashCode() + { + return HashCode.Combine(Next, DenseIndex, Version); + } + } + + Slot[] slots; + int freeSlot = -1; + + public int Capacity => slots.Length; + + public SparseSetSlotAllocator(int initialCapacity = 32) + { + EnsureCapacity(initialCapacity); + } + + public void EnsureCapacity(int capacity) + { + int prevLength; + + if (slots == null) + { + slots = new Slot[capacity]; + prevLength = 0; + } + else + { + prevLength = slots.Length; + if (prevLength >= capacity) return; + + var newLength = prevLength; + while (newLength < capacity) + { + newLength *= 2; + } + + Array.Resize(ref slots, newLength); + } + + var span = slots.AsSpan(prevLength); + + for (int i = 0; i < span.Length; i++) + { + var index = prevLength + i; + span[i] = new() + { + Next = index == capacity - 1 ? freeSlot : index + 1, + DenseIndex = -1, + Version = 1 + }; + } + + freeSlot = prevLength; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public SparseIndex Alloc(int denseIndex) + { + if (freeSlot == -1) + { + EnsureCapacity(slots.Length * 2); + } + + var slotIndex = freeSlot; + + ref var slot = ref slots[slotIndex]; + slot.Next = -1; + slot.DenseIndex = denseIndex; + + freeSlot = slot.Next; + + return new SparseIndex(slotIndex, slot.Version); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void FreeUnchecked(SparseIndex index) + { + ref var slot = ref slots[index.Index]; + + slot.Next = freeSlot; + slot.Version++; + freeSlot = index.Index; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref Slot GetSlotRefUnchecked(int index) + { + return ref slots[index]; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Reset() + { + for (int i = 0; i < slots.Length; i++) + { + slots[i] = new() + { + Next = i == slots.Length - 1 ? -1 : i + 1, + DenseIndex = -1, + Version = 1 + }; + } + + freeSlot = 0; + } + } + + public sealed class SparseSet + { + readonly SparseSetSlotAllocator allocator; + + SparseIndex[] sparseIndexLookup; + T0[] array0; + T1[] array1; + T2[] array2; + int tail; + + public int Count => tail; + + public SparseSet(int initialCapacity = 32) + { + allocator = new(initialCapacity); + EnsureCapacity(initialCapacity); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void EnsureCapacity(int minimumCapacity) + { + ArrayHelper.EnsureCapacity(ref sparseIndexLookup, minimumCapacity); + ArrayHelper.EnsureCapacity(ref array0, minimumCapacity); + ArrayHelper.EnsureCapacity(ref array1, minimumCapacity); + allocator.EnsureCapacity(minimumCapacity); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public SparseIndex Add(T0 item0, T1 item1, T2 item2) + { + if (sparseIndexLookup.Length == tail) + { + EnsureCapacity(tail * 2); + } + + var index = allocator.Alloc(tail); + sparseIndexLookup[tail] = index; + array0[tail] = item0; + array1[tail] = item1; + array2[tail] = item2; + tail++; + + return index; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool IsActive(SparseIndex index) + { + ref var slot = ref allocator.GetSlotRefUnchecked(index.Index); + return slot.Version == index.Version; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public int SparseToDense(SparseIndex sparseIndex) + { + return allocator.GetSlotRefUnchecked(sparseIndex.Index).DenseIndex; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public SparseIndex DenseToSparse(int denseIndex) + { + return sparseIndexLookup[denseIndex]; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void RemoveUnchecked(SparseIndex index) + { + ref var slot = ref allocator.GetSlotRefUnchecked(index.Index); + RemoveCore(ref slot); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void RemoveCore(ref SparseSetSlotAllocator.Slot slot) + { + tail--; + var denseIndex = slot.DenseIndex; + + // remove (swap) elements + array0[denseIndex] = array0[tail]; + array0[tail] = default; + array1[denseIndex] = array1[tail]; + array1[tail] = default; + array2[denseIndex] = array2[tail]; + array2[tail] = default; + + // remove (swap) sparse index lookup + var prevSparseIndex = sparseIndexLookup[denseIndex]; + var currentSparseIndex = sparseIndexLookup[tail]; + sparseIndexLookup[denseIndex] = currentSparseIndex; + sparseIndexLookup[tail] = default; + + // update and free slot + if (currentSparseIndex.Version != 0) + { + slot.DenseIndex = denseIndex; + allocator.FreeUnchecked(prevSparseIndex); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public Span GetSpan0() + { + return array0.AsSpan(0, tail); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public Span GetSpan1() + { + return array1.AsSpan(0, tail); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public Span GetSpan2() + { + return array2.AsSpan(0, tail); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs.meta new file mode 100644 index 00000000..7787e5c2 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 09cee0647a5e94f67a091578bae6d247 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ArrayHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ArrayHelper.cs index a6750388..ff31db80 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ArrayHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ArrayHelper.cs @@ -8,7 +8,28 @@ internal static class ArrayHelper const int ArrayMaxSize = 0x7FFFFFC7; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void EnsureCapacity(ref char[] buffer, int minimumCapacity) + public static void EnsureCapacity(ref T[] array, int minimumCapacity) + { + if (array == null) + { + array = new T[minimumCapacity]; + } + else + { + var l = array.Length; + if (l >= minimumCapacity) return; + + while (l < minimumCapacity) + { + l *= 2; + } + + Array.Resize(ref array, l); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void EnsureBufferCapacity(ref char[] buffer, int minimumCapacity) { if (buffer == null) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Utf16StringHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Utf16StringHelper.cs index 19261674..e589ea23 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Utf16StringHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Utf16StringHelper.cs @@ -19,7 +19,7 @@ public static void WriteInt64(ref char[] buffer, ref int bufferOffset, long valu { if (value == long.MinValue) // -9223372036854775808 { - ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 20); + ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 20); buffer[bufferOffset++] = '-'; buffer[bufferOffset++] = '9'; buffer[bufferOffset++] = '2'; @@ -42,7 +42,7 @@ public static void WriteInt64(ref char[] buffer, ref int bufferOffset, long valu buffer[bufferOffset++] = '8'; } - ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 1); + ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 1); buffer[bufferOffset++] = '-'; num1 = unchecked(-value); } @@ -51,10 +51,10 @@ public static void WriteInt64(ref char[] buffer, ref int bufferOffset, long valu if (num1 < 10000) { - if (num1 < 10) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 1); goto L1; } - if (num1 < 100) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 2); goto L2; } - if (num1 < 1000) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 3); goto L3; } - ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 4); goto L4; + if (num1 < 10) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 1); goto L1; } + if (num1 < 100) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 2); goto L2; } + if (num1 < 1000) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 3); goto L3; } + ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 4); goto L4; } else { @@ -62,10 +62,10 @@ public static void WriteInt64(ref char[] buffer, ref int bufferOffset, long valu num1 -= num2 * 10000; if (num2 < 10000) { - if (num2 < 10) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 5); goto L5; } - if (num2 < 100) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 6); goto L6; } - if (num2 < 1000) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 7); goto L7; } - ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 8); goto L8; + if (num2 < 10) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 5); goto L5; } + if (num2 < 100) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 6); goto L6; } + if (num2 < 1000) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 7); goto L7; } + ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 8); goto L8; } else { @@ -73,10 +73,10 @@ public static void WriteInt64(ref char[] buffer, ref int bufferOffset, long valu num2 -= num3 * 10000; if (num3 < 10000) { - if (num3 < 10) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 9); goto L9; } - if (num3 < 100) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 10); goto L10; } - if (num3 < 1000) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 11); goto L11; } - ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 12); goto L12; + if (num3 < 10) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 9); goto L9; } + if (num3 < 100) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 10); goto L10; } + if (num3 < 1000) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 11); goto L11; } + ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 12); goto L12; } else { @@ -84,10 +84,10 @@ public static void WriteInt64(ref char[] buffer, ref int bufferOffset, long valu num3 -= num4 * 10000; if (num4 < 10000) { - if (num4 < 10) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 13); goto L13; } - if (num4 < 100) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 14); goto L14; } - if (num4 < 1000) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 15); goto L15; } - ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 16); goto L16; + if (num4 < 10) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 13); goto L13; } + if (num4 < 100) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 14); goto L14; } + if (num4 < 1000) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 15); goto L15; } + ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 16); goto L16; } else { @@ -95,10 +95,10 @@ public static void WriteInt64(ref char[] buffer, ref int bufferOffset, long valu num4 -= num5 * 10000; if (num5 < 10000) { - if (num5 < 10) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 17); goto L17; } - if (num5 < 100) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 18); goto L18; } - if (num5 < 1000) { ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 19); goto L19; } - ArrayHelper.EnsureCapacity(ref buffer, bufferOffset + 20); goto L20; + if (num5 < 10) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 17); goto L17; } + if (num5 < 100) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 18); goto L18; } + if (num5 < 1000) { ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 19); goto L19; } + ArrayHelper.EnsureBufferCapacity(ref buffer, bufferOffset + 20); goto L20; } L20: buffer[bufferOffset++] = (char)('0' + (div = (num5 * 8389L) >> 23)); From 48db73632b353e7f0bf5343a12c2849f0ddde46c Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 20 Nov 2024 21:27:14 +0900 Subject: [PATCH 009/224] Refactoring --- .../Editor/EditorUpdateMotionScheduler.cs | 4 +- .../Runtime/Collections/SparseSet.cs | 275 ----------- .../Runtime/Collections/SparseSet.cs.meta | 2 - .../External/R3/LitMotionR3Extensions.cs | 9 +- .../UniRx/LitMotionUniRxExtensions.cs | 9 +- .../LitMotion/Runtime/IMotionScheduler.cs | 5 +- .../LitMotion/Runtime/Internal/Entity.cs | 31 ++ .../LitMotion/Runtime/Internal/Entity.cs.meta | 2 + .../Runtime/Internal/EntityManager.cs | 134 ++++++ .../Runtime/Internal/EntityManager.cs.meta | 2 + ...onCallbackData.cs => ManagedMotionData.cs} | 8 +- ...Data.cs.meta => ManagedMotionData.cs.meta} | 0 .../LitMotion/Runtime/Internal/MotionData.cs | 11 - .../Runtime/Internal/MotionManager.cs | 77 +++ .../Runtime/Internal/MotionManager.cs.meta | 2 + .../Runtime/Internal/MotionStorage.cs | 440 ++++++++---------- .../Runtime/Internal/MotionStorage.cs.meta | 11 +- .../Runtime/Internal/MotionStorageManager.cs | 70 --- .../Internal/MotionStorageManager.cs.meta | 11 - .../Tasks/MotionConfiguredSourceBase.cs | 16 +- .../Runtime/Internal/UpdateRunner.cs | 25 +- .../LitMotion/Runtime/LMotion.Create.cs | 6 +- .../Runtime/ManualMotionDispatcher.cs | 14 +- .../Assets/LitMotion/Runtime/MotionAwaiter.cs | 6 +- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 172 ++++--- .../Runtime/MotionBuilderExtensions.cs | 22 +- .../LitMotion/Runtime/MotionDispatcher.cs | 32 +- .../Assets/LitMotion/Runtime/MotionHandle.cs | 4 +- .../Runtime/MotionHandleExtensions.cs | 6 +- .../Assets/LitMotion/Runtime/MotionTracker.cs | 12 +- .../Schedulers/ManualMotionScheduler.cs | 4 +- .../Schedulers/PlayerLoopMotionScheduler.cs | 11 +- 32 files changed, 603 insertions(+), 830 deletions(-) delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs.meta rename src/LitMotion/Assets/LitMotion/Runtime/Internal/{MotionCallbackData.cs => ManagedMotionData.cs} (86%) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/{MotionCallbackData.cs.meta => ManagedMotionData.cs.meta} (100%) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs.meta delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorageManager.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorageManager.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Editor/EditorUpdateMotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Editor/EditorUpdateMotionScheduler.cs index 7a75351e..bb51b299 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/EditorUpdateMotionScheduler.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/EditorUpdateMotionScheduler.cs @@ -6,12 +6,12 @@ internal sealed class EditorUpdateMotionScheduler : IMotionScheduler { public double Time => EditorApplication.timeSinceStartup; - public MotionHandle Schedule(ref MotionData data, ref MotionCallbackData callbackData) + public MotionHandle Schedule(ref MotionBuilder builder) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { - return EditorMotionDispatcher.Schedule(data, callbackData); + return EditorMotionDispatcher.Schedule(ref builder); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs b/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs deleted file mode 100644 index 50560627..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs +++ /dev/null @@ -1,275 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace LitMotion.Collections -{ - public readonly struct SparseIndex : IEquatable - { - public int Index { get; } - public int Version { get; } - - public SparseIndex(int index, int version) - { - Index = index; - Version = version; - } - - public override bool Equals(object obj) - { - return obj is SparseIndex other && Equals(other); - } - - public bool Equals(SparseIndex other) - { - return Index == other.Index && Version == other.Version; - } - - public override int GetHashCode() - { - return HashCode.Combine(Index, Version); - } - } - - internal sealed class SparseSetSlotAllocator - { - public struct Slot : IEquatable - { - public int Next; - public int DenseIndex; - public int Version; - - public readonly bool Equals(Slot other) - { - return other.Next == Next && other.DenseIndex == DenseIndex && other.Version == Version; - } - - public override readonly bool Equals(object obj) - { - return obj is Slot entry && Equals(entry); - } - - public override readonly int GetHashCode() - { - return HashCode.Combine(Next, DenseIndex, Version); - } - } - - Slot[] slots; - int freeSlot = -1; - - public int Capacity => slots.Length; - - public SparseSetSlotAllocator(int initialCapacity = 32) - { - EnsureCapacity(initialCapacity); - } - - public void EnsureCapacity(int capacity) - { - int prevLength; - - if (slots == null) - { - slots = new Slot[capacity]; - prevLength = 0; - } - else - { - prevLength = slots.Length; - if (prevLength >= capacity) return; - - var newLength = prevLength; - while (newLength < capacity) - { - newLength *= 2; - } - - Array.Resize(ref slots, newLength); - } - - var span = slots.AsSpan(prevLength); - - for (int i = 0; i < span.Length; i++) - { - var index = prevLength + i; - span[i] = new() - { - Next = index == capacity - 1 ? freeSlot : index + 1, - DenseIndex = -1, - Version = 1 - }; - } - - freeSlot = prevLength; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public SparseIndex Alloc(int denseIndex) - { - if (freeSlot == -1) - { - EnsureCapacity(slots.Length * 2); - } - - var slotIndex = freeSlot; - - ref var slot = ref slots[slotIndex]; - slot.Next = -1; - slot.DenseIndex = denseIndex; - - freeSlot = slot.Next; - - return new SparseIndex(slotIndex, slot.Version); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void FreeUnchecked(SparseIndex index) - { - ref var slot = ref slots[index.Index]; - - slot.Next = freeSlot; - slot.Version++; - freeSlot = index.Index; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public ref Slot GetSlotRefUnchecked(int index) - { - return ref slots[index]; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Reset() - { - for (int i = 0; i < slots.Length; i++) - { - slots[i] = new() - { - Next = i == slots.Length - 1 ? -1 : i + 1, - DenseIndex = -1, - Version = 1 - }; - } - - freeSlot = 0; - } - } - - public sealed class SparseSet - { - readonly SparseSetSlotAllocator allocator; - - SparseIndex[] sparseIndexLookup; - T0[] array0; - T1[] array1; - T2[] array2; - int tail; - - public int Count => tail; - - public SparseSet(int initialCapacity = 32) - { - allocator = new(initialCapacity); - EnsureCapacity(initialCapacity); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void EnsureCapacity(int minimumCapacity) - { - ArrayHelper.EnsureCapacity(ref sparseIndexLookup, minimumCapacity); - ArrayHelper.EnsureCapacity(ref array0, minimumCapacity); - ArrayHelper.EnsureCapacity(ref array1, minimumCapacity); - allocator.EnsureCapacity(minimumCapacity); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public SparseIndex Add(T0 item0, T1 item1, T2 item2) - { - if (sparseIndexLookup.Length == tail) - { - EnsureCapacity(tail * 2); - } - - var index = allocator.Alloc(tail); - sparseIndexLookup[tail] = index; - array0[tail] = item0; - array1[tail] = item1; - array2[tail] = item2; - tail++; - - return index; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool IsActive(SparseIndex index) - { - ref var slot = ref allocator.GetSlotRefUnchecked(index.Index); - return slot.Version == index.Version; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public int SparseToDense(SparseIndex sparseIndex) - { - return allocator.GetSlotRefUnchecked(sparseIndex.Index).DenseIndex; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public SparseIndex DenseToSparse(int denseIndex) - { - return sparseIndexLookup[denseIndex]; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void RemoveUnchecked(SparseIndex index) - { - ref var slot = ref allocator.GetSlotRefUnchecked(index.Index); - RemoveCore(ref slot); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - void RemoveCore(ref SparseSetSlotAllocator.Slot slot) - { - tail--; - var denseIndex = slot.DenseIndex; - - // remove (swap) elements - array0[denseIndex] = array0[tail]; - array0[tail] = default; - array1[denseIndex] = array1[tail]; - array1[tail] = default; - array2[denseIndex] = array2[tail]; - array2[tail] = default; - - // remove (swap) sparse index lookup - var prevSparseIndex = sparseIndexLookup[denseIndex]; - var currentSparseIndex = sparseIndexLookup[tail]; - sparseIndexLookup[denseIndex] = currentSparseIndex; - sparseIndexLookup[tail] = default; - - // update and free slot - if (currentSparseIndex.Version != 0) - { - slot.DenseIndex = denseIndex; - allocator.FreeUnchecked(prevSparseIndex); - } - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Span GetSpan0() - { - return array0.AsSpan(0, tail); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Span GetSpan1() - { - return array1.AsSpan(0, tail); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Span GetSpan2() - { - return array2.AsSpan(0, tail); - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs.meta deleted file mode 100644 index 7787e5c2..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Collections/SparseSet.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 09cee0647a5e94f67a091578bae6d247 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs index b4d1b284..26675947 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs @@ -20,12 +20,9 @@ public static Observable ToObservable(this M { var subject = new Subject(); builder.SetCallbackData(subject, static (x, subject) => subject.OnNext(x)); - builder.buffer.CallbackData.OnCompleteAction += () => subject.OnCompleted(); - builder.buffer.CallbackData.OnCancelAction += () => subject.OnCompleted(); - var scheduler = builder.buffer.Scheduler; - builder.SetMotionData(); - - builder.Schedule(scheduler, ref builder.buffer.Data, ref builder.buffer.CallbackData); + builder.buffer.OnCompleteAction += () => subject.OnCompleted(); + builder.buffer.OnCancelAction += () => subject.OnCompleted(); + builder.ScheduleCore(); return subject; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs index 53bc46c9..4fd8505b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs @@ -24,12 +24,9 @@ public static IObservable ToObservable(this { var subject = new Subject(); builder.SetCallbackData(subject, static (x, subject) => subject.OnNext(x)); - builder.buffer.CallbackData.OnCompleteAction += () => subject.OnCompleted(); - builder.buffer.CallbackData.OnCancelAction += () => subject.OnCompleted(); - var scheduler = builder.buffer.Scheduler; - builder.SetMotionData(); - - builder.Schedule(scheduler, ref builder.buffer.Data, ref builder.buffer.CallbackData); + builder.buffer.OnCompleteAction += () => subject.OnCompleted(); + builder.buffer.OnCancelAction += () => subject.OnCompleted(); + builder.ScheduleCore(); return subject; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/IMotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Runtime/IMotionScheduler.cs index c955ddaf..ce029cc1 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/IMotionScheduler.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/IMotionScheduler.cs @@ -11,10 +11,9 @@ public interface IMotionScheduler /// The type of value to animate /// The type of special parameters given to the motion data /// The type of adapter that support value animation - /// Motion data - /// Motion callback data + /// Motion builder /// Motion handle - MotionHandle Schedule(ref MotionData data, ref MotionCallbackData callbackData) + MotionHandle Schedule(ref MotionBuilder builder) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs new file mode 100644 index 00000000..a722404d --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs @@ -0,0 +1,31 @@ +using System; + +namespace LitMotion +{ + internal readonly struct Entity : IEquatable + { + public int Index { get; } + public int Version { get; } + + public Entity(int index, int version) + { + Index = index; + Version = version; + } + + public override bool Equals(object obj) + { + return obj is Entity other && Equals(other); + } + + public bool Equals(Entity other) + { + return Index == other.Index && Version == other.Version; + } + + public override int GetHashCode() + { + return HashCode.Combine(Index, Version); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs.meta new file mode 100644 index 00000000..5f561eda --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 9992c7f5c60f54947b71ec4cf4d81ac6 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs new file mode 100644 index 00000000..3abaa417 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs @@ -0,0 +1,134 @@ +using System; +using System.Runtime.CompilerServices; + +namespace LitMotion +{ + internal sealed class EntityManager + { + public struct Slot : IEquatable + { + public int Next; + public int DenseIndex; + public int Version; + + public readonly bool Equals(Slot other) + { + return other.Next == Next && other.DenseIndex == DenseIndex && other.Version == Version; + } + + public override readonly bool Equals(object obj) + { + return obj is Slot entry && Equals(entry); + } + + public override readonly int GetHashCode() + { + return HashCode.Combine(Next, DenseIndex, Version); + } + } + + Slot[] slots; + int freeSlot = -1; + + public int Capacity => slots.Length; + + public EntityManager(int initialCapacity = 32) + { + EnsureCapacity(initialCapacity); + } + + public void EnsureCapacity(int capacity) + { + int prevLength; + + if (slots == null) + { + slots = new Slot[capacity]; + prevLength = 0; + } + else + { + prevLength = slots.Length; + if (prevLength >= capacity) return; + + var newLength = prevLength; + while (newLength < capacity) + { + newLength *= 2; + } + + Array.Resize(ref slots, newLength); + } + + var span = slots.AsSpan(prevLength); + + for (int i = 0; i < span.Length; i++) + { + var index = prevLength + i; + span[i] = new() + { + Next = index == capacity - 1 ? freeSlot : index + 1, + DenseIndex = -1, + Version = 1 + }; + } + + freeSlot = prevLength; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public Entity Create(int denseIndex) + { + if (freeSlot == -1) + { + EnsureCapacity(slots.Length * 2); + } + + var slotIndex = freeSlot; + + ref var slot = ref slots[slotIndex]; + slot.Next = -1; + slot.DenseIndex = denseIndex; + if (slot.Version == 0) + { + slot.Version = 1; + } + + freeSlot = slot.Next; + + return new Entity(slotIndex, slot.Version); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Destroy(Entity entity) + { + ref var slot = ref slots[entity.Index]; + + slot.Next = freeSlot; + slot.Version++; + freeSlot = entity.Index; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public ref Slot GetSlotRefUnchecked(int index) + { + return ref slots[index]; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Reset() + { + for (int i = 0; i < slots.Length; i++) + { + slots[i] = new() + { + Next = i == slots.Length - 1 ? -1 : i + 1, + DenseIndex = -1, + Version = 1 + }; + } + + freeSlot = 0; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs.meta new file mode 100644 index 00000000..e99b4556 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 697ecc95f35724f308f5122fd10b8e5a \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionCallbackData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs similarity index 86% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionCallbackData.cs rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs index e33b3c24..15aebfc4 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionCallbackData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs @@ -1,13 +1,15 @@ using System; using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; using Unity.Collections.LowLevel.Unsafe; namespace LitMotion { /// - /// A structure that holds motion callbacks. + /// A structure that holds motion managed data. /// - public struct MotionCallbackData + [StructLayout(LayoutKind.Auto)] + public struct ManagedMotionData { public byte StateCount; public bool IsCallbackRunning; @@ -41,7 +43,7 @@ public void InvokeUnsafe(in TValue value) where TValue : unmanaged } } - public readonly static MotionCallbackData Default = new() + public readonly static ManagedMotionData Default = new() { SkipValuesDuringDelay = true, }; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionCallbackData.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionCallbackData.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index f266d32c..195f0583 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -25,12 +25,6 @@ public struct MotionDataCore public int Loops; public DelayType DelayType; public LoopType LoopType; - - public static readonly MotionDataCore Default = new() - { - Loops = 1, - PlaybackSpeed = 1f, - }; } /// @@ -49,10 +43,5 @@ public struct MotionData public TValue StartValue; public TValue EndValue; public TOptions Options; - - public static readonly MotionData Default = new() - { - Core = MotionDataCore.Default, - }; } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs new file mode 100644 index 00000000..8c40ac9f --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs @@ -0,0 +1,77 @@ +using System; +using System.Runtime.CompilerServices; +using LitMotion.Collections; + +namespace LitMotion +{ + internal static class MotionManager + { + static FastListCore list; + + public static int MotionTypeCount { get; private set; } + + public static void Register(MotionStorage storage) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + list.Add(storage); + MotionTypeCount++; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ref MotionDataCore GetDataRef(MotionHandle handle) + { + CheckTypeId(handle); + return ref list[handle.StorageId].GetDataRef(handle); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ref ManagedMotionData GetManagedDataRef(MotionHandle handle) + { + CheckTypeId(handle); + return ref list[handle.StorageId].GetManagedDataRef(handle); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Complete(MotionHandle handle) + { + CheckTypeId(handle); + list[handle.StorageId].Complete(handle); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Cancel(MotionHandle handle) + { + CheckTypeId(handle); + list[handle.StorageId].Cancel(handle); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsActive(MotionHandle handle) + { + if (handle.StorageId < 0 || handle.StorageId >= MotionTypeCount) return false; + return list[handle.StorageId].IsActive(handle); + } + + // For MotionTracker + public static (Type ValueType, Type OptionsType, Type AdapterType) GetMotionType(MotionHandle handle) + { + CheckTypeId(handle); + var storageType = list[handle.StorageId].GetType(); + var valueType = storageType.GenericTypeArguments[0]; + var optionsType = storageType.GenericTypeArguments[1]; + var adapterType = storageType.GenericTypeArguments[2]; + return (valueType, optionsType, adapterType); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static void CheckTypeId(in MotionHandle handle) + { + if (handle.StorageId < 0 || handle.StorageId >= MotionTypeCount) + { + throw new ArgumentException("Invalid type id."); + } + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs.meta new file mode 100644 index 00000000..318acc9a --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4173eb79ad5cf49a5927dbe9d10783c2 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index a746b6f3..aa6db666 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -4,282 +4,226 @@ using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; -// TODO: Constantize the exception message - namespace LitMotion { - internal struct StorageEntry : IEquatable - { - public int? Next; - public int DenseIndex; - public int Version; - - public readonly bool Equals(StorageEntry other) - { - return other.Next == Next && other.DenseIndex == DenseIndex && other.Version == Version; - } - - public override readonly bool Equals(object obj) - { - if (obj is StorageEntry entry) return Equals(entry); - return false; - } - - public override readonly int GetHashCode() - { - return HashCode.Combine(Next, DenseIndex, Version); - } - } - - internal unsafe interface IMotionStorage + internal interface IMotionStorage { bool IsActive(MotionHandle handle); void Cancel(MotionHandle handle); void Complete(MotionHandle handle); ref MotionDataCore GetDataRef(MotionHandle handle); - ref MotionCallbackData GetCallbackDataRef(MotionHandle handle); + ref ManagedMotionData GetManagedDataRef(MotionHandle handle); void Reset(); } - internal sealed class StorageEntryList + + internal sealed class MotionStorage : IMotionStorage + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter { - public StorageEntryList(int initialCapacity = 32) - { - entries = new StorageEntry[initialCapacity]; - Reset(); - } + const int InitialCapacity = 32; - StorageEntry[] entries; - int? freeEntry; + public int Id { get; } + public int Count => tail; - public StorageEntry this[int index] - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => entries[index]; - [MethodImpl(MethodImplOptions.AggressiveInlining)] - set => entries[index] = value; - } + EntityManager entityManager = new(InitialCapacity); + Entity[] entityLookup = new Entity[InitialCapacity]; + MotionData[] unmanagedDataArray = new MotionData[InitialCapacity]; + ManagedMotionData[] managedDataArray = new ManagedMotionData[InitialCapacity]; + AllocatorHelper allocator; + int tail; - public void EnsureCapacity(int capacity) + public MotionStorage(int id) { - var currentLength = entries.Length; - if (currentLength >= capacity) return; - - Array.Resize(ref entries, capacity); - for (int i = currentLength; i < entries.Length; i++) - { - entries[i] = new() { Next = i == capacity - 1 ? freeEntry : i + 1, DenseIndex = -1, Version = 1 }; - } - freeEntry = currentLength; + Id = id; + allocator = RewindableAllocatorFactory.CreateAllocator(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public StorageEntry Alloc(int denseIndex, out int entryIndex) + public Span> GetDataSpan() { - // Ensure array capacity - if (freeEntry == null) - { - var currentLength = entries.Length; - EnsureCapacity(entries.Length * 2); - freeEntry = currentLength; - } - - // Find free entry - entryIndex = freeEntry.Value; - var entry = entries[entryIndex]; - freeEntry = entry.Next; - entry.Next = null; - entry.DenseIndex = denseIndex; - entries[entryIndex] = entry; - - return entry; + return unmanagedDataArray.AsSpan(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Free(int index) + public Span GetManagedDataSpan() { - var entry = entries[index]; - entry.Next = freeEntry; - entry.Version++; - entries[index] = entry; - freeEntry = index; + return managedDataArray.AsSpan(); } - public void Reset() + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void EnsureCapacity(int minimumCapacity) { - for (int i = 0; i < entries.Length; i++) - { - entries[i] = new() { Next = i == entries.Length - 1 ? null : i + 1, DenseIndex = -1, Version = 1 }; - } - freeEntry = 0; + entityManager.EnsureCapacity(minimumCapacity); + ArrayHelper.EnsureCapacity(ref entityLookup, minimumCapacity); + ArrayHelper.EnsureCapacity(ref unmanagedDataArray, minimumCapacity); + ArrayHelper.EnsureCapacity(ref managedDataArray, minimumCapacity); } - } - internal sealed class MotionStorage : IMotionStorage - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - public MotionStorage(int id) + public MotionHandle Create(ref MotionBuilder builder) { - StorageId = id; - AllocatorHelper = RewindableAllocatorFactory.CreateAllocator(); - } - - // Entry - readonly StorageEntryList entries = new(InitialCapacity); - - // Data - public int?[] toEntryIndex = new int?[InitialCapacity]; - public MotionData[] dataArray = new MotionData[InitialCapacity]; - public MotionCallbackData[] callbacksArray = new MotionCallbackData[InitialCapacity]; - - // Allocator - AllocatorHelper AllocatorHelper; - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Span> GetDataSpan() => dataArray.AsSpan(0, tail); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Span GetCallbacksSpan() => callbacksArray.AsSpan(0, tail); - - int tail; - - const int InitialCapacity = 8; - - public int StorageId { get; } - public int Count => tail; - - public (int EntryIndex, int Version) Append(in MotionData data, in MotionCallbackData callbacks) - { - if (tail == dataArray.Length) + EnsureCapacity(tail + 1); + var buffer = builder.buffer; + + ref var dataRef = ref unmanagedDataArray[tail]; + ref var managedDataRef = ref managedDataArray[tail]; + + dataRef.Core.Time = 0; + dataRef.Core.PlaybackSpeed = 1f; + dataRef.Core.Status = MotionStatus.Scheduled; + + dataRef.Core.Duration = buffer.Duration; + dataRef.Core.Delay = buffer.Delay; + dataRef.Core.DelayType = buffer.DelayType; + dataRef.Core.Ease = buffer.Ease; + dataRef.Core.Loops = buffer.Loops; + dataRef.Core.LoopType = buffer.LoopType; + dataRef.Core.TimeKind = buffer.TimeKind; + dataRef.StartValue = buffer.StartValue; + dataRef.EndValue = buffer.EndValue; + dataRef.Options = buffer.Options; + + if (buffer.Ease == Ease.CustomAnimationCurve) { - var newLength = tail * 2; - Array.Resize(ref toEntryIndex, newLength); - Array.Resize(ref dataArray, newLength); - Array.Resize(ref callbacksArray, newLength); - } - - var entry = entries.Alloc(tail, out var entryIndex); -#if LITMOTION_ENABLE_MOTION_LOG - UnityEngine.Debug.Log("[Add] Entry:" + entryIndex + " Dense:" + entry.DenseIndex + " Version:" + entry.Version); -#endif - - var prevAnimationCurve = dataArray[tail].Core.AnimationCurve; - - toEntryIndex[tail] = entryIndex; - dataArray[tail] = data; - callbacksArray[tail] = callbacks; - - if (data.Core.Ease == Ease.CustomAnimationCurve) - { - if (!prevAnimationCurve.IsCreated) + if (dataRef.Core.AnimationCurve.IsCreated) + { + dataRef.Core.AnimationCurve.CopyFrom(buffer.AnimationCurve); + } + else { #if LITMOTION_COLLECTIONS_2_0_OR_NEWER - prevAnimationCurve = new NativeAnimationCurve(AllocatorHelper.Allocator.Handle); + dataRef.Core.AnimationCurve = new NativeAnimationCurve(buffer.AnimationCurve, allocator.Allocator.Handle); #else - prevAnimationCurve = new UnsafeAnimationCurve(AllocatorHelper.Allocator.Handle); + dataRef.Core.AnimationCurve = new UnsafeAnimationCurve(buffer.AnimationCurve, allocator.Allocator.Handle); #endif } + } - prevAnimationCurve.CopyFrom(data.Core.AnimationCurve); - dataArray[tail].Core.AnimationCurve = prevAnimationCurve; + managedDataRef.IsCallbackRunning = false; + managedDataRef.CancelOnError = buffer.CancelOnError; + managedDataRef.UpdateAction = buffer.UpdateAction; + managedDataRef.OnCancelAction = buffer.OnCancelAction; + managedDataRef.OnCompleteAction = buffer.OnCompleteAction; + managedDataRef.SkipValuesDuringDelay = buffer.SkipValuesDuringDelay; + managedDataRef.State1 = buffer.State1; + managedDataRef.State2 = buffer.State2; + managedDataRef.State3 = buffer.State3; + managedDataRef.StateCount = buffer.StateCount; + + if (buffer.BindOnSchedule && buffer.UpdateAction != null) + { + managedDataRef.InvokeUnsafe( + default(TAdapter).Evaluate( + ref dataRef.StartValue, + ref dataRef.EndValue, + ref dataRef.Options, + new() + { + Progress = dataRef.Core.Ease switch + { + Ease.CustomAnimationCurve => buffer.AnimationCurve.Evaluate(0f), + _ => EaseUtility.Evaluate(0f, dataRef.Core.Ease) + } + } + )); } + var entity = entityManager.Create(tail); + entityLookup[tail] = entity; + tail++; - return (entryIndex, entry.Version); + return new MotionHandle() + { + Index = entity.Index, + Version = entity.Version, + StorageId = Id + }; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] void RemoveAt(int denseIndex) { tail--; // swap elements - dataArray[denseIndex] = dataArray[tail]; - // dataArray[tail] = default; - callbacksArray[denseIndex] = callbacksArray[tail]; - // callbacksArray[tail] = default; - - // swap entry indexes - var prevEntryIndex = toEntryIndex[denseIndex]; - var currentEntryIndex = toEntryIndex[denseIndex] = toEntryIndex[tail]; - // toEntryIndex[tail] = default; - - // update entry - if (currentEntryIndex != null) + unmanagedDataArray[denseIndex] = unmanagedDataArray[tail]; + unmanagedDataArray[tail] = default; + managedDataArray[denseIndex] = managedDataArray[tail]; + managedDataArray[tail] = default; + + // swap entity + var prevEntity = entityLookup[denseIndex]; + var currentEntity = entityLookup[denseIndex] = entityLookup[tail]; + entityLookup[tail] = default; + + // update slot + if (currentEntity.Version != 0) { - var index = (int)currentEntryIndex; - var entry = entries[index]; - entry.DenseIndex = denseIndex; - entries[index] = entry; + ref var slot = ref entityManager.GetSlotRefUnchecked(currentEntity.Index); + slot.DenseIndex = denseIndex; } - // free entry - if (prevEntryIndex != null) + // free slot + if (prevEntity.Version != 0) { - entries.Free((int)prevEntryIndex); + entityManager.Destroy(prevEntity); } - -#if LITMOTION_ENABLE_MOTION_LOG - var v = entries[(int)prevEntryIndex].Version - 1; - UnityEngine.Debug.Log("[Remove] Entry:" + prevEntryIndex + " Dense:" + denseIndex + " Version:" + v); -#endif } - public void RemoveAll(NativeList indexes) + public void RemoveAll(NativeList denseIndexList) { - var entryIndexes = new NativeArray(indexes.Length, Allocator.Temp, NativeArrayOptions.UninitializedMemory); - var lastCallbacksSpan = GetCallbacksSpan(); - for (int i = 0; i < entryIndexes.Length; i++) + var entities = new NativeArray(denseIndexList.Length, Allocator.Temp, NativeArrayOptions.UninitializedMemory); + for (int i = 0; i < entities.Length; i++) { - entryIndexes[i] = (int)toEntryIndex[indexes[i]]; + entities[i] = entityLookup[denseIndexList[i]]; } - for (int i = 0; i < entryIndexes.Length; i++) + for (int i = 0; i < entities.Length; i++) { - RemoveAt(entries[entryIndexes[i]].DenseIndex); + RemoveAt(entityManager.GetSlotRefUnchecked(entities[i].Index).DenseIndex); } - - // Avoid Memory leak - lastCallbacksSpan[tail..].Clear(); - entryIndexes.Dispose(); } - public void EnsureCapacity(int capacity) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool IsActive(MotionHandle handle) { - if (capacity > dataArray.Length) - { - Array.Resize(ref toEntryIndex, capacity); - Array.Resize(ref dataArray, capacity); - Array.Resize(ref callbacksArray, capacity); - entries.EnsureCapacity(capacity); - } + ref var slot = ref entityManager.GetSlotRefUnchecked(handle.Index); + + var denseIndex = slot.DenseIndex; + if (denseIndex < 0 || denseIndex >= tail) return false; + + var version = slot.Version; + if (version <= 0 || version != handle.Version) return false; + + ref var motion = ref unmanagedDataArray[denseIndex]; + return motion.Core.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing; } public void Cancel(MotionHandle handle) { - var entry = entries[handle.Index]; - var denseIndex = entry.DenseIndex; - if (denseIndex < 0 || denseIndex >= dataArray.Length) + ref var slot = ref entityManager.GetSlotRefUnchecked(handle.Index); + var denseIndex = slot.DenseIndex; + if (denseIndex < 0 || denseIndex >= tail) { throw new ArgumentException("Motion has been destroyed or no longer exists."); } - ref var motion = ref GetDataSpan()[denseIndex]; - var version = entry.Version; - if (version <= 0 || version != handle.Version || motion.Core.Status == MotionStatus.None) + ref var unmanagedData = ref unmanagedDataArray[denseIndex]; + var version = slot.Version; + if (version <= 0 || version != handle.Version || unmanagedData.Core.Status == MotionStatus.None) { throw new ArgumentException("Motion has been destroyed or no longer exists."); } - motion.Core.Status = MotionStatus.Canceled; + unmanagedData.Core.Status = MotionStatus.Canceled; - ref var callbackData = ref GetCallbacksSpan()[denseIndex]; + ref var managedData = ref managedDataArray[denseIndex]; try { - callbackData.OnCancelAction?.Invoke(); + managedData.OnCancelAction?.Invoke(); } catch (Exception ex) { @@ -289,60 +233,62 @@ public void Cancel(MotionHandle handle) public void Complete(MotionHandle handle) { - var entry = entries[handle.Index]; - var denseIndex = entry.DenseIndex; + ref var slot = ref entityManager.GetSlotRefUnchecked(handle.Index); + + var denseIndex = slot.DenseIndex; if (denseIndex < 0 || denseIndex >= tail) { throw new ArgumentException("Motion has been destroyed or no longer exists."); } - ref var motion = ref GetDataSpan()[denseIndex]; - var version = entry.Version; - if (version <= 0 || version != handle.Version || motion.Core.Status == MotionStatus.None) + ref var unmanagedData = ref unmanagedDataArray[denseIndex]; + + var version = slot.Version; + if (version <= 0 || version != handle.Version || unmanagedData.Core.Status == MotionStatus.None) { throw new ArgumentException("Motion has been destroyed or no longer exists."); } - if (motion.Core.Loops < 0) + if (unmanagedData.Core.Loops < 0) { UnityEngine.Debug.LogWarning("[LitMotion] Complete was ignored because it is not possible to complete a motion that loops infinitely. If you want to end the motion, call Cancel() instead."); return; } - ref var callbackData = ref GetCallbacksSpan()[denseIndex]; - if (callbackData.IsCallbackRunning) + ref var managedData = ref managedDataArray[denseIndex]; + if (managedData.IsCallbackRunning) { throw new InvalidOperationException("Recursion of Complete call was detected."); } - callbackData.IsCallbackRunning = true; + managedData.IsCallbackRunning = true; // To avoid duplication of Complete processing, it is treated as canceled internally. - motion.Core.Status = MotionStatus.Canceled; + unmanagedData.Core.Status = MotionStatus.Canceled; - var endProgress = motion.Core.LoopType switch + var endProgress = unmanagedData.Core.LoopType switch { LoopType.Restart => 1f, - LoopType.Yoyo => motion.Core.Loops % 2 == 0 ? 0f : 1f, - LoopType.Incremental => motion.Core.Loops, + LoopType.Yoyo => unmanagedData.Core.Loops % 2 == 0 ? 0f : 1f, + LoopType.Incremental => unmanagedData.Core.Loops, _ => 1f }; - var easedEndProgress = motion.Core.Ease switch + var easedEndProgress = unmanagedData.Core.Ease switch { - Ease.CustomAnimationCurve => motion.Core.AnimationCurve.Evaluate(endProgress), - _ => EaseUtility.Evaluate(endProgress, motion.Core.Ease), + Ease.CustomAnimationCurve => unmanagedData.Core.AnimationCurve.Evaluate(endProgress), + _ => EaseUtility.Evaluate(endProgress, unmanagedData.Core.Ease), }; - var endValue = default(TAdapter).Evaluate( - ref motion.StartValue, - ref motion.EndValue, - ref motion.Options, - new() { Progress = easedEndProgress } - ); - try { - callbackData.InvokeUnsafe(endValue); + var endValue = default(TAdapter).Evaluate( + ref unmanagedData.StartValue, + ref unmanagedData.EndValue, + ref unmanagedData.Options, + new() { Progress = easedEndProgress } + ); + + managedData.InvokeUnsafe(endValue); } catch (Exception ex) { @@ -351,67 +297,55 @@ public void Complete(MotionHandle handle) try { - callbackData.OnCompleteAction?.Invoke(); + managedData.OnCompleteAction?.Invoke(); } catch (Exception ex) { MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); } - callbackData.IsCallbackRunning = false; - } - - public bool IsActive(MotionHandle handle) - { - var entry = entries[handle.Index]; - var denseIndex = entry.DenseIndex; - if (denseIndex < 0 || denseIndex >= dataArray.Length) return false; - - var version = entry.Version; - if (version <= 0 || version != handle.Version) return false; - var motion = dataArray[denseIndex]; - return motion.Core.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing; + managedData.IsCallbackRunning = false; } - public ref MotionCallbackData GetCallbackDataRef(MotionHandle handle) + public ref ManagedMotionData GetManagedDataRef(MotionHandle handle) { - CheckIndex(handle); - return ref callbacksArray[entries[handle.Index].DenseIndex]; + ref var slot = ref GetSlotWithVarify(handle); + return ref managedDataArray[slot.DenseIndex]; } public ref MotionDataCore GetDataRef(MotionHandle handle) { - CheckIndex(handle); - return ref UnsafeUtility.As, MotionDataCore>(ref dataArray[entries[handle.Index].DenseIndex]); + ref var slot = ref GetSlotWithVarify(handle); + return ref UnsafeUtility.As, MotionDataCore>(ref unmanagedDataArray[slot.DenseIndex]); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - void CheckIndex(MotionHandle handle) + ref EntityManager.Slot GetSlotWithVarify(MotionHandle handle) { - var entry = entries[handle.Index]; - var denseIndex = entry.DenseIndex; - if (denseIndex < 0 || denseIndex >= dataArray.Length) + ref var slot = ref entityManager.GetSlotRefUnchecked(handle.Index); + var denseIndex = slot.DenseIndex; + if (denseIndex < 0 || denseIndex >= unmanagedDataArray.Length) { throw new ArgumentException("Motion has been destroyed or no longer exists."); } - var version = entry.Version; - if (version <= 0 || version != handle.Version || dataArray[denseIndex].Core.Status == MotionStatus.None) + var version = slot.Version; + if (version <= 0 || version != handle.Version || unmanagedDataArray[denseIndex].Core.Status == MotionStatus.None) { throw new ArgumentException("Motion has been destroyed or no longer exists."); } + + return ref slot; } public void Reset() { - entries.Reset(); - - toEntryIndex.AsSpan().Clear(); - dataArray.AsSpan().Clear(); - callbacksArray.AsSpan().Clear(); + entityManager.Reset(); + entityLookup.AsSpan().Clear(); + unmanagedDataArray.AsSpan().Clear(); + managedDataArray.AsSpan().Clear(); tail = 0; - - AllocatorHelper.Allocator.Rewind(); + allocator.Allocator.Rewind(); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs.meta index 1bccdd20..d6c528ba 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs.meta +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs.meta @@ -1,11 +1,2 @@ fileFormatVersion: 2 -guid: 93033bc96ee3c4350af1c78cd341a10f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +guid: a8bb96f8fc1924755a787e177619d7b7 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorageManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorageManager.cs deleted file mode 100644 index a76318e6..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorageManager.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Runtime.CompilerServices; -using LitMotion.Collections; - -namespace LitMotion -{ - internal static class MotionStorageManager - { - static FastListCore storageList; - - public static int CurrentStorageId { get; private set; } - - public static void AddStorage(MotionStorage storage) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - storageList.Add(storage); - CurrentStorageId++; - } - - public static void CompleteMotion(MotionHandle handle) - { - CheckStorageId(handle); - storageList[handle.StorageId].Complete(handle); - } - - public static void CancelMotion(MotionHandle handle) - { - CheckStorageId(handle); - storageList[handle.StorageId].Cancel(handle); - } - - public static bool IsActive(MotionHandle handle) - { - if (handle.StorageId < 0 || handle.StorageId >= CurrentStorageId) return false; - return storageList[handle.StorageId].IsActive(handle); - } - - public static ref MotionDataCore GetMotionDataRef(MotionHandle handle) - { - CheckStorageId(handle); - return ref storageList[handle.StorageId].GetDataRef(handle); - } - - public static ref MotionCallbackData GetMotionCallbackDataRef(MotionHandle handle) - { - CheckStorageId(handle); - return ref storageList[handle.StorageId].GetCallbackDataRef(handle); - } - - // For MotionTracker - public static (Type ValueType, Type OptionsType, Type AdapterType) GetMotionType(MotionHandle handle) - { - CheckStorageId(handle); - var storageType = storageList[handle.StorageId].GetType(); - var valueType = storageType.GenericTypeArguments[0]; - var optionsType = storageType.GenericTypeArguments[1]; - var adapterType = storageType.GenericTypeArguments[2]; - return (valueType, optionsType, adapterType); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - static void CheckStorageId(in MotionHandle handle) - { - if (handle.StorageId < 0 || handle.StorageId >= CurrentStorageId) - throw new ArgumentException("Invalid storage id."); - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorageManager.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorageManager.cs.meta deleted file mode 100644 index 89e35fbe..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorageManager.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: aaeb0f8fb1f4e4abd81c2e0ccdbcfb6e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs index 014e32e3..8a0a7af2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs @@ -74,11 +74,11 @@ protected void Initialize(MotionHandle motionHandle, MotionCancelBehavior cancel this.cancelAwaitOnMotionCanceled = cancelAwaitOnMotionCanceled; this.cancellationToken = cancellationToken; - ref var callbackData = ref MotionStorageManager.GetMotionCallbackDataRef(motionHandle); - originalCancelAction = callbackData.OnCancelAction; - originalCompleteAction = callbackData.OnCompleteAction; - callbackData.OnCancelAction = onCancelCallbackDelegate; - callbackData.OnCompleteAction = onCompleteCallbackDelegate; + ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle); + originalCancelAction = managedData.OnCancelAction; + originalCompleteAction = managedData.OnCompleteAction; + managedData.OnCancelAction = onCancelCallbackDelegate; + managedData.OnCompleteAction = onCompleteCallbackDelegate; if (originalCancelAction == onCancelCallbackDelegate) { @@ -129,9 +129,9 @@ protected void RestoreOriginalCallback(bool checkIsActive = true) { if (checkIsActive && !motionHandle.IsActive()) return; - ref var callbackData = ref MotionStorageManager.GetMotionCallbackDataRef(motionHandle); - callbackData.OnCancelAction = originalCancelAction; - callbackData.OnCompleteAction = originalCompleteAction; + ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle); + managedData.OnCancelAction = originalCancelAction; + managedData.OnCompleteAction = originalCompleteAction; } protected void DisposeRegistration() diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index 4f082b52..4066c8d5 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -2,7 +2,6 @@ using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using Unity.Jobs; -using UnityEngine; namespace LitMotion { @@ -44,7 +43,7 @@ public unsafe void Update(double time, double unscaledTime, double realtime) prevUnscaledTime = unscaledTime; prevRealtime = realtime; - fixed (MotionData* dataPtr = storage.dataArray) + fixed (MotionData* dataPtr = storage.GetDataSpan()) { // update data var job = new MotionUpdateJob() @@ -59,25 +58,25 @@ public unsafe void Update(double time, double unscaledTime, double realtime) job.Schedule(count, 16).Complete(); // invoke delegates - var callbackSpan = storage.GetCallbacksSpan(); + var managedDataSpan = storage.GetManagedDataSpan(); var outputPtr = (TValue*)output.GetUnsafePtr(); - for (int i = 0; i < callbackSpan.Length; i++) + for (int i = 0; i < managedDataSpan.Length; i++) { var status = (dataPtr + i)->Core.Status; - ref var callbackData = ref callbackSpan[i]; - if (status == MotionStatus.Playing || (status == MotionStatus.Delayed && !callbackData.SkipValuesDuringDelay)) + ref var managedData = ref managedDataSpan[i]; + if (status == MotionStatus.Playing || (status == MotionStatus.Delayed && !managedData.SkipValuesDuringDelay)) { try { - callbackData.InvokeUnsafe(outputPtr[i]); + managedData.InvokeUnsafe(outputPtr[i]); } catch (Exception ex) { MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); - if (callbackData.CancelOnError) + if (managedData.CancelOnError) { (dataPtr + i)->Core.Status = MotionStatus.Canceled; - callbackData.OnCancelAction?.Invoke(); + managedData.OnCancelAction?.Invoke(); } } } @@ -85,22 +84,22 @@ public unsafe void Update(double time, double unscaledTime, double realtime) { try { - callbackData.InvokeUnsafe(outputPtr[i]); + managedData.InvokeUnsafe(outputPtr[i]); } catch (Exception ex) { MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); - if (callbackData.CancelOnError) + if (managedData.CancelOnError) { (dataPtr + i)->Core.Status = MotionStatus.Canceled; - callbackData.OnCancelAction?.Invoke(); + managedData.OnCancelAction?.Invoke(); continue; } } try { - callbackData.OnCompleteAction?.Invoke(); + managedData.OnCompleteAction?.Invoke(); } catch (Exception ex) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs index ae9e0e0b..385eec8f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs @@ -114,9 +114,9 @@ public static MotionBuilder Create { var buffer = MotionBuilderBuffer.Rent(); - buffer.Data.StartValue = from; - buffer.Data.EndValue = to; - buffer.Data.Core.Duration = duration; + buffer.StartValue = from; + buffer.EndValue = to; + buffer.Duration = duration; return new MotionBuilder(buffer); } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs index b566a21f..bf592136 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs @@ -20,8 +20,8 @@ public static MotionStorage GetOrCreate() { if (updateStorage == null) { - var storage = new MotionStorage(MotionStorageManager.CurrentStorageId); - MotionStorageManager.AddStorage(storage); + var storage = new MotionStorage(MotionManager.MotionTypeCount); + MotionManager.Register(storage); updateStorage = storage; } return updateStorage; @@ -82,7 +82,7 @@ public static void Reset() } } - internal static MotionHandle Schedule(in MotionData data, in MotionCallbackData callbackData) + internal static MotionHandle Schedule(ref MotionBuilder builder) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter @@ -95,13 +95,7 @@ internal static MotionHandle Schedule(in MotionData< Cache.updateRunner = runner; } - var (EntryIndex, Version) = storage.Append(data, callbackData); - return new MotionHandle() - { - StorageId = storage.StorageId, - Index = EntryIndex, - Version = Version - }; + return storage.Create(ref builder); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs index 6db282ae..ea1acefb 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs @@ -31,9 +31,9 @@ public void UnsafeOnCompleted(Action continuation) { if (continuation == null) return; - ref var callbackData = ref MotionStorageManager.GetMotionCallbackDataRef(handle); - callbackData.OnCompleteAction += continuation; - callbackData.OnCancelAction += continuation; + ref var managedData = ref MotionManager.GetManagedDataRef(handle); + managedData.OnCompleteAction += continuation; + managedData.OnCancelAction += continuation; } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index 246b97b2..db9aa9f0 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -1,12 +1,10 @@ using System; using System.Runtime.CompilerServices; -using Unity.Collections; using UnityEngine; -using LitMotion.Collections; namespace LitMotion { - internal class MotionBuilderBuffer + internal sealed class MotionBuilderBuffer where TValue : unmanaged where TOptions : unmanaged, IMotionOptions { @@ -31,12 +29,33 @@ public static MotionBuilderBuffer Rent() public static void Return(MotionBuilderBuffer buffer) { buffer.Version++; - buffer.Data = MotionData.Default; - buffer.CallbackData = MotionCallbackData.Default; + buffer.IsPreserved = false; + buffer.BindOnSchedule = false; + + buffer.StartValue = default; + buffer.EndValue = default; + buffer.Options = default; + + buffer.Duration = default; + buffer.Ease = default; buffer.AnimationCurve = default; + buffer.TimeKind = default; + buffer.Delay = default; + buffer.Loops = 1; + buffer.LoopType = default; + + buffer.StateCount = 0; + buffer.State1 = default; + buffer.State2 = default; + buffer.State3 = default; + buffer.UpdateAction = default; + buffer.OnCompleteAction = default; + buffer.OnCancelAction = default; + + buffer.CancelOnError = default; + buffer.SkipValuesDuringDelay = default; + buffer.Scheduler = default; - buffer.IsPreserved = default; - buffer.BindOnSchedule = default; if (buffer.Version != ushort.MaxValue) { @@ -50,10 +69,26 @@ public static void Return(MotionBuilderBuffer buffer) public bool IsPreserved; public bool BindOnSchedule; - public MotionData Data = MotionData.Default; - public MotionCallbackData CallbackData = MotionCallbackData.Default; + public TValue StartValue; + public TValue EndValue; + public TOptions Options; + public float Duration; + public Ease Ease; + public MotionTimeKind TimeKind; + public float Delay; + public int Loops = 1; + public DelayType DelayType; + public LoopType LoopType; + public byte StateCount; + public bool CancelOnError; + public bool SkipValuesDuringDelay; + public object State1; + public object State2; + public object State3; + public object UpdateAction; + public Action OnCompleteAction; + public Action OnCancelAction; public AnimationCurve AnimationCurve; - public IMotionScheduler Scheduler; } @@ -87,7 +122,7 @@ public readonly MotionBuilder WithEase(Ease ease) { CheckEaseType(ease); CheckBuffer(); - buffer.Data.Core.Ease = ease; + buffer.Ease = ease; return this; } @@ -101,7 +136,7 @@ public readonly MotionBuilder WithEase(AnimationCurv { CheckBuffer(); buffer.AnimationCurve = animationCurve; - buffer.Data.Core.Ease = Ease.CustomAnimationCurve; + buffer.Ease = Ease.CustomAnimationCurve; return this; } @@ -116,9 +151,9 @@ public readonly MotionBuilder WithEase(AnimationCurv public readonly MotionBuilder WithDelay(float delay, DelayType delayType = DelayType.FirstLoop, bool skipValuesDuringDelay = true) { CheckBuffer(); - buffer.Data.Core.Delay = delay; - buffer.Data.Core.DelayType = delayType; - buffer.CallbackData.SkipValuesDuringDelay = skipValuesDuringDelay; + buffer.Delay = delay; + buffer.DelayType = delayType; + buffer.SkipValuesDuringDelay = skipValuesDuringDelay; return this; } @@ -132,8 +167,8 @@ public readonly MotionBuilder WithDelay(float delay, public readonly MotionBuilder WithLoops(int loops, LoopType loopType = LoopType.Restart) { CheckBuffer(); - buffer.Data.Core.Loops = loops; - buffer.Data.Core.LoopType = loopType; + buffer.Loops = loops; + buffer.LoopType = loopType; return this; } @@ -146,7 +181,7 @@ public readonly MotionBuilder WithLoops(int loops, L public readonly MotionBuilder WithOptions(TOptions options) { CheckBuffer(); - buffer.Data.Options = options; + buffer.Options = options; return this; } @@ -159,7 +194,7 @@ public readonly MotionBuilder WithOptions(TOptions o public readonly MotionBuilder WithOnCancel(Action callback) { CheckBuffer(); - buffer.CallbackData.OnCancelAction += callback; + buffer.OnCancelAction += callback; return this; } @@ -172,7 +207,7 @@ public readonly MotionBuilder WithOnCancel(Action ca public readonly MotionBuilder WithOnComplete(Action callback) { CheckBuffer(); - buffer.CallbackData.OnCompleteAction += callback; + buffer.OnCompleteAction += callback; return this; } @@ -185,7 +220,7 @@ public readonly MotionBuilder WithOnComplete(Action public readonly MotionBuilder WithCancelOnError(bool cancelOnError = true) { CheckBuffer(); - buffer.CallbackData.CancelOnError = cancelOnError; + buffer.CancelOnError = cancelOnError; return this; } @@ -222,9 +257,7 @@ public readonly MotionBuilder WithScheduler(IMotionS public MotionHandle RunWithoutBinding() { CheckBuffer(); - SetMotionData(); - var scheduler = buffer.Scheduler; - return Schedule(scheduler, ref buffer.Data, ref buffer.CallbackData); + return ScheduleCore(); } /// @@ -235,10 +268,8 @@ public MotionHandle RunWithoutBinding() public MotionHandle Bind(Action action) { CheckBuffer(); - SetMotionData(); SetCallbackData(action); - var scheduler = buffer.Scheduler; - return Schedule(scheduler, ref buffer.Data, ref buffer.CallbackData); + return ScheduleCore(); } /// @@ -251,10 +282,8 @@ public MotionHandle Bind(Action action) public MotionHandle BindWithState(TState state, Action action) where TState : class { CheckBuffer(); - SetMotionData(); SetCallbackData(state, action); - var scheduler = buffer.Scheduler; - return Schedule(scheduler, ref buffer.Data, ref buffer.CallbackData); + return ScheduleCore(); } /// @@ -270,10 +299,8 @@ public MotionHandle BindWithState(TState1 state1, TState2 stat where TState2 : class { CheckBuffer(); - SetMotionData(); SetCallbackData(state1, state2, action); - var scheduler = buffer.Scheduler; - return Schedule(scheduler, ref buffer.Data, ref buffer.CallbackData); + return ScheduleCore(); } @@ -292,10 +319,8 @@ public MotionHandle BindWithState(TState1 state1, TSt where TState3 : class { CheckBuffer(); - SetMotionData(); SetCallbackData(state1, state2, state3, action); - var scheduler = buffer.Scheduler; - return Schedule(scheduler, ref buffer.Data, ref buffer.CallbackData); + return ScheduleCore(); } /// @@ -312,60 +337,44 @@ public readonly MotionBuilder Preserve() } [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal MotionHandle Schedule(IMotionScheduler scheduler, ref MotionData data, ref MotionCallbackData callbackData) + internal MotionHandle ScheduleCore() { - if (buffer.BindOnSchedule && callbackData.UpdateAction != null) - { - callbackData.InvokeUnsafe( - default(TAdapter).Evaluate( - ref data.StartValue, - ref data.EndValue, - ref data.Options, - new() { Progress = data.Core.Ease switch - { - Ease.CustomAnimationCurve => data.Core.AnimationCurve.Evaluate(0f), - _ => EaseUtility.Evaluate(0f, data.Core.Ease) - } - } - )); - } - MotionHandle handle; - if (scheduler == null) + if (buffer.Scheduler == null) { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlaying) { - handle = EditorMotionDispatcher.Schedule(data, callbackData); + handle = EditorMotionDispatcher.Schedule(ref this); } else if (MotionScheduler.DefaultScheduler == MotionScheduler.Update) // avoid virtual method call { - handle = MotionDispatcher.Schedule(data, callbackData, PlayerLoopTiming.Update); + handle = MotionDispatcher.Schedule(ref this, PlayerLoopTiming.Update); } else { - handle = MotionScheduler.DefaultScheduler.Schedule(ref data, ref callbackData); + handle = MotionScheduler.DefaultScheduler.Schedule(ref this); } #else if (MotionScheduler.DefaultScheduler == MotionScheduler.Update) // avoid virtual method call { - handle = MotionDispatcher.Schedule(data, callbackData, PlayerLoopTiming.Update); + handle = MotionDispatcher.Schedule(ref this, PlayerLoopTiming.Update); } else { - handle = MotionScheduler.DefaultScheduler.Schedule(ref data, ref callbackData); + handle = MotionScheduler.DefaultScheduler.Schedule(ref this); } #endif } else { - handle = scheduler.Schedule(ref data, ref callbackData); + handle = buffer.Scheduler.Schedule(ref this); } if (MotionTracker.EnableTracking) { - MotionTracker.AddTracking(handle, scheduler); + MotionTracker.AddTracking(handle, buffer.Scheduler); } if (!buffer.IsPreserved) Dispose(); @@ -383,34 +392,19 @@ public void Dispose() buffer = null; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal readonly void SetMotionData() - { - buffer.Data.Core.Status = MotionStatus.Scheduled; - - if (buffer.AnimationCurve != null) - { -#if LITMOTION_COLLECTIONS_2_0_OR_NEWER - buffer.Data.Core.AnimationCurve = new NativeAnimationCurve(buffer.AnimationCurve, Allocator.Temp); -#else - buffer.Data.Core.AnimationCurve = new UnsafeAnimationCurve(buffer.AnimationCurve, Allocator.Temp); -#endif - } - } - [MethodImpl(MethodImplOptions.AggressiveInlining)] internal readonly void SetCallbackData(Action action) { - buffer.CallbackData.UpdateAction = action; + buffer.UpdateAction = action; } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal readonly void SetCallbackData(TState state, Action action) where TState : class { - buffer.CallbackData.StateCount = 1; - buffer.CallbackData.State1 = state; - buffer.CallbackData.UpdateAction = action; + buffer.StateCount = 1; + buffer.State1 = state; + buffer.UpdateAction = action; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -418,10 +412,10 @@ internal readonly void SetCallbackData(TState1 state1, TState2 where TState1 : class where TState2 : class { - buffer.CallbackData.StateCount = 2; - buffer.CallbackData.State1 = state1; - buffer.CallbackData.State2 = state2; - buffer.CallbackData.UpdateAction = action; + buffer.StateCount = 2; + buffer.State1 = state1; + buffer.State2 = state2; + buffer.UpdateAction = action; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -430,11 +424,11 @@ internal readonly void SetCallbackData(TState1 state1 where TState2 : class where TState3 : class { - buffer.CallbackData.StateCount = 3; - buffer.CallbackData.State1 = state1; - buffer.CallbackData.State2 = state2; - buffer.CallbackData.State3 = state3; - buffer.CallbackData.UpdateAction = action; + buffer.StateCount = 3; + buffer.State1 = state1; + buffer.State2 = state2; + buffer.State3 = state3; + buffer.UpdateAction = action; } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index a4af461d..aa09dab1 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -72,7 +72,7 @@ public static MotionBuilder WithRoundingMode { - builder.buffer.Data.Options.RoundingMode = roundingMode; + builder.buffer.Options.RoundingMode = roundingMode; return builder; } @@ -88,7 +88,7 @@ public static MotionBuilder WithFrequency { - builder.buffer.Data.Options.Frequency = frequency; + builder.buffer.Options.Frequency = frequency; return builder; } @@ -104,7 +104,7 @@ public static MotionBuilder WithDampingRatio { - builder.buffer.Data.Options.DampingRatio = dampingRatio; + builder.buffer.Options.DampingRatio = dampingRatio; return builder; } @@ -120,7 +120,7 @@ public static MotionBuilder WithFrequency { - builder.buffer.Data.Options.Frequency = frequency; + builder.buffer.Options.Frequency = frequency; return builder; } @@ -136,7 +136,7 @@ public static MotionBuilder WithDampingRatio { - builder.buffer.Data.Options.DampingRatio = dampingRatio; + builder.buffer.Options.DampingRatio = dampingRatio; return builder; } @@ -152,7 +152,7 @@ public static MotionBuilder WithRandomSeed { - builder.buffer.Data.Options.RandomState = new Unity.Mathematics.Random(seed); + builder.buffer.Options.RandomState = new Unity.Mathematics.Random(seed); return builder; } @@ -168,7 +168,7 @@ public static MotionBuilder WithRichText { - builder.buffer.Data.Options.RichTextEnabled = richTextEnabled; + builder.buffer.Options.RichTextEnabled = richTextEnabled; return builder; } @@ -184,7 +184,7 @@ public static MotionBuilder WithRandomSeed { - builder.buffer.Data.Options.RandomState = new Unity.Mathematics.Random(seed); + builder.buffer.Options.RandomState = new Unity.Mathematics.Random(seed); return builder; } @@ -201,7 +201,7 @@ public static MotionBuilder WithScrambleChars { if (scrambleMode == ScrambleMode.Custom) throw new ArgumentException("ScrambleMode.Custom cannot be specified explicitly. Use WithScrambleMode(FixedString64Bytes) instead."); - builder.buffer.Data.Options.ScrambleMode = scrambleMode; + builder.buffer.Options.ScrambleMode = scrambleMode; return builder; } @@ -217,8 +217,8 @@ public static MotionBuilder WithScrambleChars { - builder.buffer.Data.Options.ScrambleMode = ScrambleMode.Custom; - builder.buffer.Data.Options.CustomScrambleChars = customScrambleChars; + builder.buffer.Options.ScrambleMode = ScrambleMode.Custom; + builder.buffer.Options.CustomScrambleChars = customScrambleChars; return builder; } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionDispatcher.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionDispatcher.cs index 982d6571..0fb2723d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionDispatcher.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionDispatcher.cs @@ -49,8 +49,8 @@ static MotionStorage CreateIfNull(ref MotionStorage< { if (storage == null) { - storage = new MotionStorage(MotionStorageManager.CurrentStorageId); - MotionStorageManager.AddStorage(storage); + storage = new MotionStorage(MotionManager.MotionTypeCount); + MotionManager.Register(storage); } return storage; } @@ -207,21 +207,14 @@ public static void EnsureStorageCapacity(int capacit #endif } - internal static MotionHandle Schedule(in MotionData data, in MotionCallbackData callbackData, PlayerLoopTiming playerLoopTiming) + internal static MotionHandle Schedule(ref MotionBuilder builder, PlayerLoopTiming playerLoopTiming) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { var storage = StorageCache.GetOrCreate(playerLoopTiming); RunnerCache.GetOrCreate(playerLoopTiming, storage); - - var (EntryIndex, Version) = storage.Append(data, callbackData); - return new MotionHandle() - { - StorageId = storage.StorageId, - Index = EntryIndex, - Version = Version - }; + return storage.Create(ref builder); } internal static void Update(PlayerLoopTiming playerLoopTiming) @@ -256,8 +249,8 @@ public static MotionStorage GetOrCreateStorage() { if (storage == null) { - storage = new MotionStorage(MotionStorageManager.CurrentStorageId); - MotionStorageManager.AddStorage(storage); + storage = new MotionStorage(MotionManager.MotionTypeCount); + MotionManager.Register(storage); } return storage; } @@ -272,24 +265,17 @@ public static void InitUpdateRunner() } } } - + static FastListCore updateRunners; - public static MotionHandle Schedule(in MotionData data, in MotionCallbackData callbackData) + public static MotionHandle Schedule(ref MotionBuilder builder) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { var storage = Cache.GetOrCreateStorage(); Cache.InitUpdateRunner(); - - var (EntryIndex, Version) = storage.Append(data, callbackData); - return new MotionHandle() - { - StorageId = storage.StorageId, - Index = EntryIndex, - Version = Version - }; + return storage.Create(ref builder); } public static void EnsureStorageCapacity(int capacity) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index 98f5d8b6..a3441e03 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -29,12 +29,12 @@ public readonly float PlaybackSpeed { get { - return MotionStorageManager.GetMotionDataRef(this).PlaybackSpeed; + return MotionManager.GetDataRef(this).PlaybackSpeed; } set { if (value < 0f) Error.PlaybackSpeedMustBeZeroOrGreater(); - MotionStorageManager.GetMotionDataRef(this).PlaybackSpeed = value; + MotionManager.GetDataRef(this).PlaybackSpeed = value; } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 0c35e97a..19bb4cb3 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -18,7 +18,7 @@ public static class MotionHandleExtensions /// True if motion is active, otherwise false. public static bool IsActive(this MotionHandle handle) { - return MotionStorageManager.IsActive(handle); + return MotionManager.IsActive(handle); } /// @@ -27,7 +27,7 @@ public static bool IsActive(this MotionHandle handle) /// This motion handle public static void Complete(this MotionHandle handle) { - MotionStorageManager.CompleteMotion(handle); + MotionManager.Complete(handle); } /// @@ -36,7 +36,7 @@ public static void Complete(this MotionHandle handle) /// This motion handle public static void Cancel(this MotionHandle handle) { - MotionStorageManager.CancelMotion(handle); + MotionManager.Cancel(handle); } /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionTracker.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionTracker.cs index 3b2ab96f..3ea74392 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionTracker.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionTracker.cs @@ -18,7 +18,7 @@ public static class MotionTracker public static void AddTracking(MotionHandle motionHandle, IMotionScheduler scheduler, int skipFrames = 3) { var state = TrackingState.Create(); - (state.ValueType, state.OptionsType, state.AdapterType) = MotionStorageManager.GetMotionType(motionHandle); + (state.ValueType, state.OptionsType, state.AdapterType) = MotionManager.GetMotionType(motionHandle); state.Scheduler = scheduler; state.CreationTime = DateTime.UtcNow; #if UNITY_EDITOR @@ -27,11 +27,11 @@ public static void AddTracking(MotionHandle motionHandle, IMotionScheduler sched if (EnableStackTrace) state.StackTrace = new StackTrace(skipFrames, true); - ref var callbackData = ref MotionStorageManager.GetMotionCallbackDataRef(motionHandle); - state.OriginalOnCompleteCallback = callbackData.OnCompleteAction; - callbackData.OnCompleteAction = state.OnCompleteDelegate; - state.OriginalOnCancelCallback = callbackData.OnCancelAction; - callbackData.OnCancelAction = state.OnCancelDelegate; + ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle); + state.OriginalOnCompleteCallback = managedData.OnCompleteAction; + managedData.OnCompleteAction = state.OnCompleteDelegate; + state.OriginalOnCancelCallback = managedData.OnCancelAction; + managedData.OnCancelAction = state.OnCancelDelegate; trackings.Add(state); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs index 505ba7c7..34132dd4 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs @@ -4,12 +4,12 @@ internal sealed class ManualMotionScheduler : IMotionScheduler { public double Time => ManualMotionDispatcher.Time; - public MotionHandle Schedule(ref MotionData data, ref MotionCallbackData callbackData) + public MotionHandle Schedule(ref MotionBuilder builder) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { - return ManualMotionDispatcher.Schedule(data, callbackData); + return ManualMotionDispatcher.Schedule(ref builder); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs index f48f677d..ebcf2843 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs @@ -42,23 +42,24 @@ public double Time } } - public MotionHandle Schedule(ref MotionData data, ref MotionCallbackData callbackData) + public MotionHandle Schedule(ref MotionBuilder builder) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { - data.Core.TimeKind = timeKind; + builder.buffer.TimeKind = timeKind; + #if UNITY_EDITOR if (EditorApplication.isPlaying) { - return MotionDispatcher.Schedule(data, callbackData, playerLoopTiming); + return MotionDispatcher.Schedule(ref builder, playerLoopTiming); } else { - return EditorMotionDispatcher.Schedule(data, callbackData); + return EditorMotionDispatcher.Schedule(ref builder); } #else - return MotionDispatcher.Schedule(data, callbackData, playerLoopTiming); + return MotionDispatcher.Schedule(ref builder, playerLoopTiming); #endif } } From 41d20438bcc89b273bf81c52fe7efb82b494aa26 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 20 Nov 2024 21:49:08 +0900 Subject: [PATCH 010/224] Remove: multiple state --- .../Runtime/Internal/ManagedMotionData.cs | 24 ++---- .../Runtime/Internal/MotionStorage.cs | 5 +- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 76 +------------------ 3 files changed, 12 insertions(+), 93 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs index 15aebfc4..62ac42f6 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs @@ -11,13 +11,10 @@ namespace LitMotion [StructLayout(LayoutKind.Auto)] public struct ManagedMotionData { - public byte StateCount; public bool IsCallbackRunning; public bool CancelOnError; public bool SkipValuesDuringDelay; - public object State1; - public object State2; - public object State3; + public object State; public object UpdateAction; public Action OnCompleteAction; @@ -26,20 +23,13 @@ public struct ManagedMotionData [MethodImpl(MethodImplOptions.AggressiveInlining)] public void InvokeUnsafe(in TValue value) where TValue : unmanaged { - switch (StateCount) + if (State != null) { - case 0: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value); - break; - case 1: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State1); - break; - case 2: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State1, State2); - break; - case 3: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State1, State2, State3); - break; + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value); + } + else + { + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State); } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index aa6db666..713596bc 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -106,10 +106,7 @@ public MotionHandle Create(ref MotionBuilder builder managedDataRef.OnCancelAction = buffer.OnCancelAction; managedDataRef.OnCompleteAction = buffer.OnCompleteAction; managedDataRef.SkipValuesDuringDelay = buffer.SkipValuesDuringDelay; - managedDataRef.State1 = buffer.State1; - managedDataRef.State2 = buffer.State2; - managedDataRef.State3 = buffer.State3; - managedDataRef.StateCount = buffer.StateCount; + managedDataRef.State = buffer.State; if (buffer.BindOnSchedule && buffer.UpdateAction != null) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index db9aa9f0..fc1ad043 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -31,7 +31,7 @@ public static void Return(MotionBuilderBuffer buffer) buffer.Version++; buffer.IsPreserved = false; buffer.BindOnSchedule = false; - + buffer.StartValue = default; buffer.EndValue = default; buffer.Options = default; @@ -44,10 +44,7 @@ public static void Return(MotionBuilderBuffer buffer) buffer.Loops = 1; buffer.LoopType = default; - buffer.StateCount = 0; - buffer.State1 = default; - buffer.State2 = default; - buffer.State3 = default; + buffer.State = default; buffer.UpdateAction = default; buffer.OnCompleteAction = default; buffer.OnCancelAction = default; @@ -79,12 +76,9 @@ public static void Return(MotionBuilderBuffer buffer) public int Loops = 1; public DelayType DelayType; public LoopType LoopType; - public byte StateCount; public bool CancelOnError; public bool SkipValuesDuringDelay; - public object State1; - public object State2; - public object State3; + public object State; public object UpdateAction; public Action OnCompleteAction; public Action OnCancelAction; @@ -286,43 +280,6 @@ public MotionHandle BindWithState(TState state, Action a return ScheduleCore(); } - /// - /// Create motion and bind it to a specific object. Unlike the regular Bind method, it avoids allocation by closure by passing an object. - /// - /// Type of state - /// Type of state - /// Motion state - /// Action that handles binding - /// Handle of the created motion data. - public MotionHandle BindWithState(TState1 state1, TState2 state2, Action action) - where TState1 : class - where TState2 : class - { - CheckBuffer(); - SetCallbackData(state1, state2, action); - return ScheduleCore(); - } - - - /// - /// Create motion and bind it to a specific object. Unlike the regular Bind method, it avoids allocation by closure by passing an object. - /// - /// Type of state - /// Type of state - /// Type of state - /// Motion state - /// Action that handles binding - /// Handle of the created motion data. - public MotionHandle BindWithState(TState1 state1, TState2 state2, TState3 state3, Action action) - where TState1 : class - where TState2 : class - where TState3 : class - { - CheckBuffer(); - SetCallbackData(state1, state2, state3, action); - return ScheduleCore(); - } - /// /// Preserves the internal buffer and prevents the builder from being automatically destroyed after creating the motion data. /// Calling this allows you to create the motion multiple times, but you must call the Dispose method to destroy the builder after use. @@ -402,32 +359,7 @@ internal readonly void SetCallbackData(Action action) internal readonly void SetCallbackData(TState state, Action action) where TState : class { - buffer.StateCount = 1; - buffer.State1 = state; - buffer.UpdateAction = action; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal readonly void SetCallbackData(TState1 state1, TState2 state2, Action action) - where TState1 : class - where TState2 : class - { - buffer.StateCount = 2; - buffer.State1 = state1; - buffer.State2 = state2; - buffer.UpdateAction = action; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal readonly void SetCallbackData(TState1 state1, TState2 state2, TState3 state3, Action action) - where TState1 : class - where TState2 : class - where TState3 : class - { - buffer.StateCount = 3; - buffer.State1 = state1; - buffer.State2 = state2; - buffer.State3 = state3; + buffer.State = state; buffer.UpdateAction = action; } From 12ff19cc2ccec8befb1b8b84aa5b2d72a803a974 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 20 Nov 2024 22:28:48 +0900 Subject: [PATCH 011/224] Add: BindWithState for struct state --- .../General/LitMotionAudioExtensions.cs | 4 +-- .../General/LitMotionMaterialExtensions.cs | 12 ++++----- .../LitMotionTextMeshProExtensions.cs | 18 ++++++------- .../UIToolkit/LitMotionUIToolkitExtensions.cs | 18 ++++++------- .../LitMotionVisualEffectExtensions.cs | 20 +++++++------- .../uGUI/LitMotionUGUIExtensions.cs | 18 ++++++------- .../Runtime/Internal/ActionWithState.cs | 25 ++++++++++++++++++ .../Runtime/Internal/ActionWithState.cs.meta | 2 ++ .../Runtime/Internal/ManagedMotionData.cs | 15 ++++++++++- .../Runtime/Internal/MotionStorage.cs | 4 +-- .../Runtime/Internal/UpdateRunner.cs | 4 +-- .../Runtime/MotionBuilderExtensions.cs | 16 ++++++++++++ .../LitMotion/Tests/Runtime/BindTest.cs | 26 ++++--------------- 13 files changed, 111 insertions(+), 71 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs index 6ca32c53..7603e192 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs @@ -60,9 +60,9 @@ public static MotionHandle BindToAudioMixerFloat(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(audioMixer); - return builder.BindWithState(audioMixer, name, static (x, target, n) => + return builder.BindWithState((audioMixer, name), static (x, state) => { - target.SetFloat(n, x); + state.audioMixer.SetFloat(state.name, x); }); } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs index c6132c58..cf89d722 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs @@ -20,9 +20,9 @@ public static MotionHandle BindToMaterialFloat(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.BindWithState(material, name, static (x, m, n) => + return builder.BindWithState((material, name), static (x, state) => { - m.SetFloat(n, x); + state.material.SetFloat(state.name, x); }); } @@ -58,9 +58,9 @@ public static MotionHandle BindToMaterialInt(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.BindWithState(material, name, static (x, m, n) => + return builder.BindWithState((material, name), static (x, state) => { - m.SetInteger(n, x); + state.material.SetInteger(state.name, x); }); } @@ -96,9 +96,9 @@ public static MotionHandle BindToMaterialColor(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.BindWithState(material, name, static (x, m, n) => + return builder.BindWithState((material, name), static (x, state) => { - m.SetColor(n, x); + state.material.SetColor(state.name, x); }); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs index 1fa98e47..071f5b6a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs @@ -383,12 +383,12 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, format, static (x, target, format) => + return builder.BindWithState((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING - target.SetTextFormat(format, x); + state.text.SetTextFormat(state.format, x); #else - target.text = string.Format(format, x); + state.text.text = string.Format(state.format, x); #endif }); } @@ -433,12 +433,12 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, format, static (x, target, format) => + return builder.BindWithState((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING - target.SetTextFormat(format, x); + state.text.SetTextFormat(state.format, x); #else - target.text = string.Format(format, x); + state.text.text = string.Format(state.format, x); #endif }); } @@ -483,12 +483,12 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, format, static (x, target, format) => + return builder.BindWithState((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING - target.SetTextFormat(format, x); + state.text.SetTextFormat(state.format, x); #else - target.text = string.Format(format, x); + state.text.text = string.Format(state.format, x); #endif }); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs index 7d79ee4e..76ba2e26 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs @@ -661,12 +661,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, format, static (x, target, f) => + return builder.BindWithState((textElement, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING - target.text = ZString.Format(f, x); + state.textElement.text = ZString.Format(state.format, x); #else - target.text = string.Format(f, x); + state.textElement.text = string.Format(state.format, x); #endif }); } @@ -704,12 +704,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, format, static (x, target, format) => + return builder.BindWithState((textElement, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING - target.text = ZString.Format(format, x); + state.textElement.text = ZString.Format(state.format, x); #else - target.text = string.Format(format, x); + state.textElement.text = string.Format(state.format, x); #endif }); } @@ -747,12 +747,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, format, static (x, target, format) => + return builder.BindWithState((textElement, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING - target.text = ZString.Format(format, x); + state.textElement.text = ZString.Format(state.format, x); #else - target.text = string.Format(format, x); + state.textElement.text = string.Format(state.format, x); #endif }); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs index 41bcd511..56f29a2e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs @@ -22,9 +22,9 @@ public static MotionHandle BindToVisualEffectFloat(this Moti where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState(visualEffect, name, static (x, target, n) => + return builder.BindWithState((visualEffect, name), static (x, state) => { - target.SetFloat(n, x); + state.visualEffect.SetFloat(state.name, x); }); } @@ -60,9 +60,9 @@ public static MotionHandle BindToVisualEffectInt(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState(visualEffect, name, static (x, target, n) => + return builder.BindWithState((visualEffect, name), static (x, state) => { - target.SetInt(n, x); + state.visualEffect.SetInt(state.name, x); }); } @@ -98,9 +98,9 @@ public static MotionHandle BindToVisualEffectVector2(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState(visualEffect, name, static (x, target, n) => + return builder.BindWithState((visualEffect, name), static (x, state) => { - target.SetVector2(n, x); + state.visualEffect.SetVector2(state.name, x); }); } @@ -136,9 +136,9 @@ public static MotionHandle BindToVisualEffectVector3(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState(visualEffect, name, static (x, target, n) => + return builder.BindWithState((visualEffect, name), static (x, state) => { - target.SetVector3(n, x); + state.visualEffect.SetVector3(state.name, x); }); } @@ -174,9 +174,9 @@ public static MotionHandle BindToVisualEffectVector4(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState(visualEffect, name, static (x, target, n) => + return builder.BindWithState((visualEffect, name), static (x, state) => { - target.SetVector4(n, x); + state.visualEffect.SetVector4(state.name, x); }); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs index d78108e2..97f965e2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs @@ -301,12 +301,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, format, static (x, target, format) => + return builder.BindWithState((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING - target.text = ZString.Format(format, x); + state.text.text = ZString.Format(state.format, x); #else - target.text = string.Format(format, x); + state.text.text = string.Format(state.format, x); #endif }); } @@ -344,12 +344,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, format, static (x, target, format) => + return builder.BindWithState((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING - target.text = ZString.Format(format, x); + state.text.text = ZString.Format(state.format, x); #else - target.text = string.Format(format, x); + state.text.text = string.Format(state.format, x); #endif }); } @@ -387,12 +387,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, format, static (x, target, format) => + return builder.BindWithState((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING - target.text = ZString.Format(format, x); + state.text.text = ZString.Format(state.format, x); #else - target.text = string.Format(format, x); + state.text.text = string.Format(state.format, x); #endif }); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs new file mode 100644 index 00000000..d0d58cd0 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs @@ -0,0 +1,25 @@ +using System; +using System.Runtime.CompilerServices; + +namespace LitMotion +{ + internal sealed record ActionWithState + where TValue : unmanaged + where TState : struct + { + public ActionWithState(TState state, Action action) + { + this.state = state; + this.action = action; + } + + readonly TState state; + readonly Action action; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Invoke(TValue value) + { + action(value, state); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs.meta new file mode 100644 index 00000000..67e17bf0 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a1a9468e2ee624ed3b644c7610741c29 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs index 62ac42f6..352c95c3 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs @@ -21,7 +21,7 @@ public struct ManagedMotionData public Action OnCancelAction; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void InvokeUnsafe(in TValue value) where TValue : unmanaged + public void UpdateUnsafe(in TValue value) where TValue : unmanaged { if (State != null) { @@ -33,6 +33,19 @@ public void InvokeUnsafe(in TValue value) where TValue : unmanaged } } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void InvokeCancel() + { + try + { + OnCancelAction?.Invoke(); + } + catch (Exception ex) + { + MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + } + } + public readonly static ManagedMotionData Default = new() { SkipValuesDuringDelay = true, diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 713596bc..1d1469c6 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -110,7 +110,7 @@ public MotionHandle Create(ref MotionBuilder builder if (buffer.BindOnSchedule && buffer.UpdateAction != null) { - managedDataRef.InvokeUnsafe( + managedDataRef.UpdateUnsafe( default(TAdapter).Evaluate( ref dataRef.StartValue, ref dataRef.EndValue, @@ -285,7 +285,7 @@ public void Complete(MotionHandle handle) new() { Progress = easedEndProgress } ); - managedData.InvokeUnsafe(endValue); + managedData.UpdateUnsafe(endValue); } catch (Exception ex) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index 4066c8d5..dc9db464 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -68,7 +68,7 @@ public unsafe void Update(double time, double unscaledTime, double realtime) { try { - managedData.InvokeUnsafe(outputPtr[i]); + managedData.UpdateUnsafe(outputPtr[i]); } catch (Exception ex) { @@ -84,7 +84,7 @@ public unsafe void Update(double time, double unscaledTime, double realtime) { try { - managedData.InvokeUnsafe(outputPtr[i]); + managedData.UpdateUnsafe(outputPtr[i]); } catch (Exception ex) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index aa09dab1..602c0f07 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -9,6 +9,22 @@ namespace LitMotion /// public static class MotionBuilderExtensions { + /// + /// Create motion and bind it to a specific object. Unlike the regular Bind method, it avoids allocation by closure by passing an object. + /// + /// Type of state + /// Motion state + /// Action that handles binding + /// Handle of the created motion data. + public static MotionHandle BindWithState(this MotionBuilder builder, TState state, Action action) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + where TState : struct + { + return builder.BindWithState(new ActionWithState(state, action), (x, state) => state.Invoke(x)); + } + /// /// Create a motion data and bind it to IProgress /// diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs index 4efde20f..f43f2c1a 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs @@ -32,33 +32,17 @@ public IEnumerator Test_BindWithState() } [UnityTest] - public IEnumerator Test_BindWithState_2() - { - var target1 = new TestClass(); - var target2 = new TestClass(); - var endValue = 10f; - LMotion.Create(0f, endValue, 0.5f).BindWithState(target1, target2, (x, target1, target2) => - { - target1.Value = x; - target2.Value = x; - }); - yield return new WaitForSeconds(0.6f); - Assert.AreApproximatelyEqual(target1.Value, endValue); - Assert.AreApproximatelyEqual(target2.Value, endValue); - } - - [UnityTest] - public IEnumerator Test_BindWithState_3() + public IEnumerator Test_BindWithState_Struct() { var target1 = new TestClass(); var target2 = new TestClass(); var target3 = new TestClass(); var endValue = 10f; - LMotion.Create(0f, endValue, 0.5f).BindWithState(target1, target2, target3, (x, target1, target2, target3) => + LMotion.Create(0f, endValue, 0.5f).BindWithState((target1, target2, target3), (x, state) => { - target1.Value = x; - target2.Value = x; - target3.Value = x; + state.target1.Value = x; + state.target2.Value = x; + state.target3.Value = x; }); yield return new WaitForSeconds(0.6f); Assert.AreApproximatelyEqual(target1.Value, endValue); From a3034f9ebbe41930dddab42a1b009fb23e54ed35 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 20 Nov 2024 22:30:53 +0900 Subject: [PATCH 012/224] Fix: UpdateUnsafe --- .../Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs index 352c95c3..f82cd75a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs @@ -23,7 +23,7 @@ public struct ManagedMotionData [MethodImpl(MethodImplOptions.AggressiveInlining)] public void UpdateUnsafe(in TValue value) where TValue : unmanaged { - if (State != null) + if (State == null) { UnsafeUtility.As>(ref UpdateAction)?.Invoke(value); } From 5beb67cf529249277dde58693402c9602965a91e Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 20 Nov 2024 22:32:59 +0900 Subject: [PATCH 013/224] Rename: BindWithState -> Bind --- .../General/LitMotionAudioExtensions.cs | 6 +- .../General/LitMotionMaterialExtensions.cs | 12 +- .../LitMotionSpriteRendererExtensions.cs | 10 +- .../General/LitMotionTransformExtensions.cs | 104 +++++++++--------- .../LitMotionTextMeshProExtensions.cs | 76 ++++++------- .../UIToolkit/LitMotionUIToolkitExtensions.cs | 74 ++++++------- .../LitMotionVisualEffectExtensions.cs | 20 ++-- .../uGUI/LitMotionRectTransformExtensions.cs | 30 ++--- .../uGUI/LitMotionUGUIExtensions.cs | 38 +++---- .../External/R3/LitMotionR3Extensions.cs | 2 +- .../UniRx/LitMotionUniRxExtensions.cs | 2 +- .../UniTask/LitMotionUniTaskExtensions.cs | 2 +- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 3 +- .../Runtime/MotionBuilderExtensions.cs | 8 +- .../LitMotion/Tests/Runtime/BindTest.cs | 4 +- 15 files changed, 196 insertions(+), 195 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs index 7603e192..cf785bf1 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs @@ -22,7 +22,7 @@ public static MotionHandle BindToVolume(this MotionBuilder { Error.IsNull(audioSource); - return builder.BindWithState(audioSource, static (x, target) => + return builder.Bind(audioSource, static (x, target) => { target.volume = x; }); @@ -41,7 +41,7 @@ public static MotionHandle BindToPitch(this MotionBuilder { Error.IsNull(audioSource); - return builder.BindWithState(audioSource, static (x, target) => + return builder.Bind(audioSource, static (x, target) => { target.pitch = x; }); @@ -60,7 +60,7 @@ public static MotionHandle BindToAudioMixerFloat(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(audioMixer); - return builder.BindWithState((audioMixer, name), static (x, state) => + return builder.Bind((audioMixer, name), static (x, state) => { state.audioMixer.SetFloat(state.name, x); }); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs index cf89d722..be952d86 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs @@ -20,7 +20,7 @@ public static MotionHandle BindToMaterialFloat(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.BindWithState((material, name), static (x, state) => + return builder.Bind((material, name), static (x, state) => { state.material.SetFloat(state.name, x); }); @@ -39,7 +39,7 @@ public static MotionHandle BindToMaterialFloat(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.BindWithState(material, (x, m) => + return builder.Bind(material, (x, m) => { m.SetFloat(nameID, x); }); @@ -58,7 +58,7 @@ public static MotionHandle BindToMaterialInt(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.BindWithState((material, name), static (x, state) => + return builder.Bind((material, name), static (x, state) => { state.material.SetInteger(state.name, x); }); @@ -77,7 +77,7 @@ public static MotionHandle BindToMaterialInt(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.BindWithState(material, (x, m) => + return builder.Bind(material, (x, m) => { m.SetInteger(nameID, x); }); @@ -96,7 +96,7 @@ public static MotionHandle BindToMaterialColor(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.BindWithState((material, name), static (x, state) => + return builder.Bind((material, name), static (x, state) => { state.material.SetColor(state.name, x); }); @@ -115,7 +115,7 @@ public static MotionHandle BindToMaterialColor(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.BindWithState(material, (x, m) => + return builder.Bind(material, (x, m) => { m.SetColor(nameID, x); }); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionSpriteRendererExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionSpriteRendererExtensions.cs index 60c90689..f7d4b4a8 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionSpriteRendererExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionSpriteRendererExtensions.cs @@ -20,7 +20,7 @@ public static MotionHandle BindToColor(this MotionBuilder { Error.IsNull(spriteRenderer); - return builder.BindWithState(spriteRenderer, static (x, m) => + return builder.Bind(spriteRenderer, static (x, m) => { m.color = x; }); @@ -39,7 +39,7 @@ public static MotionHandle BindToColorR(this MotionBuilder { Error.IsNull(spriteRenderer); - return builder.BindWithState(spriteRenderer, static (x, m) => + return builder.Bind(spriteRenderer, static (x, m) => { var c = m.color; c.r = x; @@ -60,7 +60,7 @@ public static MotionHandle BindToColorG(this MotionBuilder { Error.IsNull(spriteRenderer); - return builder.BindWithState(spriteRenderer, static (x, m) => + return builder.Bind(spriteRenderer, static (x, m) => { var c = m.color; c.g = x; @@ -81,7 +81,7 @@ public static MotionHandle BindToColorB(this MotionBuilder { Error.IsNull(spriteRenderer); - return builder.BindWithState(spriteRenderer, static (x, m) => + return builder.Bind(spriteRenderer, static (x, m) => { var c = m.color; c.b = x; @@ -102,7 +102,7 @@ public static MotionHandle BindToColorA(this MotionBuilder { Error.IsNull(spriteRenderer); - return builder.BindWithState(spriteRenderer, static (x, m) => + return builder.Bind(spriteRenderer, static (x, m) => { var c = m.color; c.a = x; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionTransformExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionTransformExtensions.cs index 2cbae386..7a941a7e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionTransformExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionTransformExtensions.cs @@ -20,7 +20,7 @@ public static MotionHandle BindToPosition(this MotionBuilder where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { t.position = x; }); @@ -39,7 +39,7 @@ public static MotionHandle BindToPositionX(this MotionBuilde where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.position; p.x = x; @@ -60,7 +60,7 @@ public static MotionHandle BindToPositionY(this MotionBuilde where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.position; p.y = x; @@ -81,14 +81,14 @@ public static MotionHandle BindToPositionZ(this MotionBuilde where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.position; p.z = x; t.position = p; }); } - + /// /// Create a motion data and bind it to Transform.position.xy /// @@ -102,7 +102,7 @@ public static MotionHandle BindToPositionXY(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.position; p.x = x.x; @@ -110,7 +110,7 @@ public static MotionHandle BindToPositionXY(this MotionBuild t.position = p; }); } - + /// /// Create a motion data and bind it to Transform.position.xz /// @@ -124,7 +124,7 @@ public static MotionHandle BindToPositionXZ(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.position; p.x = x.x; @@ -132,7 +132,7 @@ public static MotionHandle BindToPositionXZ(this MotionBuild t.position = p; }); } - + /// /// Create a motion data and bind it to Transform.position.yz /// @@ -146,7 +146,7 @@ public static MotionHandle BindToPositionYZ(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.position; p.y = x.x; @@ -168,7 +168,7 @@ public static MotionHandle BindToLocalPosition(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { t.localPosition = x; }); @@ -187,7 +187,7 @@ public static MotionHandle BindToLocalPositionX(this MotionB where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localPosition; p.x = x; @@ -209,7 +209,7 @@ public static MotionHandle BindToLocalPositionY(this MotionB where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localPosition; p.y = x; @@ -230,14 +230,14 @@ public static MotionHandle BindToLocalPositionZ(this MotionB where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localPosition; p.z = x; t.localPosition = p; }); } - + /// /// Create a motion data and bind it to Transform.localPosition.xy /// @@ -251,7 +251,7 @@ public static MotionHandle BindToLocalPositionXY(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localPosition; p.x = x.x; @@ -259,7 +259,7 @@ public static MotionHandle BindToLocalPositionXY(this Motion t.localPosition = p; }); } - + /// /// Create a motion data and bind it to Transform.localPosition.xz /// @@ -273,7 +273,7 @@ public static MotionHandle BindToLocalPositionXZ(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localPosition; p.x = x.x; @@ -281,7 +281,7 @@ public static MotionHandle BindToLocalPositionXZ(this Motion t.localPosition = p; }); } - + /// /// Create a motion data and bind it to Transform.localPosition.yz /// @@ -295,7 +295,7 @@ public static MotionHandle BindToLocalPositionYZ(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localPosition; p.y = x.x; @@ -317,7 +317,7 @@ public static MotionHandle BindToRotation(this MotionBuilder where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { t.rotation = x; }); @@ -336,7 +336,7 @@ public static MotionHandle BindToLocalRotation(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { t.localRotation = x; }); @@ -355,7 +355,7 @@ public static MotionHandle BindToEulerAngles(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { t.eulerAngles = x; }); @@ -374,7 +374,7 @@ public static MotionHandle BindToEulerAnglesX(this MotionBui where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.eulerAngles; p.x = x; @@ -395,7 +395,7 @@ public static MotionHandle BindToEulerAnglesY(this MotionBui where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.eulerAngles; p.y = x; @@ -416,14 +416,14 @@ public static MotionHandle BindToEulerAnglesZ(this MotionBui where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.eulerAngles; p.z = x; t.eulerAngles = p; }); } - + /// /// Create a motion data and bind it to Transform.eulerAngles.xy /// @@ -437,7 +437,7 @@ public static MotionHandle BindToEulerAnglesXY(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.eulerAngles; p.x = x.x; @@ -445,7 +445,7 @@ public static MotionHandle BindToEulerAnglesXY(this MotionBu t.eulerAngles = p; }); } - + /// /// Create a motion data and bind it to Transform.eulerAngles.xz /// @@ -459,7 +459,7 @@ public static MotionHandle BindToEulerAnglesXZ(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.eulerAngles; p.x = x.x; @@ -467,7 +467,7 @@ public static MotionHandle BindToEulerAnglesXZ(this MotionBu t.eulerAngles = p; }); } - + /// /// Create a motion data and bind it to Transform.eulerAngles.yz /// @@ -481,7 +481,7 @@ public static MotionHandle BindToEulerAnglesYZ(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.eulerAngles; p.y = x.x; @@ -503,7 +503,7 @@ public static MotionHandle BindToLocalEulerAngles(this Motio where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { t.localEulerAngles = x; }); @@ -522,7 +522,7 @@ public static MotionHandle BindToLocalEulerAnglesX(this Moti where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localEulerAngles; p.x = x; @@ -543,7 +543,7 @@ public static MotionHandle BindToLocalEulerAnglesY(this Moti where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localEulerAngles; p.y = x; @@ -564,14 +564,14 @@ public static MotionHandle BindToLocalEulerAnglesZ(this Moti where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localEulerAngles; p.z = x; t.localEulerAngles = p; }); } - + /// /// Create a motion data and bind it to Transform.localEulerAngles.xy /// @@ -585,7 +585,7 @@ public static MotionHandle BindToLocalEulerAnglesXY(this Mot where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localEulerAngles; p.x = x.x; @@ -593,7 +593,7 @@ public static MotionHandle BindToLocalEulerAnglesXY(this Mot t.localEulerAngles = p; }); } - + /// /// Create a motion data and bind it to Transform.localEulerAngles.xz /// @@ -607,7 +607,7 @@ public static MotionHandle BindToLocalEulerAnglesXZ(this Mot where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localEulerAngles; p.x = x.x; @@ -615,7 +615,7 @@ public static MotionHandle BindToLocalEulerAnglesXZ(this Mot t.localEulerAngles = p; }); } - + /// /// Create a motion data and bind it to Transform.localEulerAngles.yz /// @@ -629,7 +629,7 @@ public static MotionHandle BindToLocalEulerAnglesYZ(this Mot where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localEulerAngles; p.y = x.x; @@ -651,7 +651,7 @@ public static MotionHandle BindToLocalScale(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { t.localScale = x; }); @@ -670,7 +670,7 @@ public static MotionHandle BindToLocalScaleX(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localScale; p.x = x; @@ -691,7 +691,7 @@ public static MotionHandle BindToLocalScaleY(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localScale; p.y = x; @@ -712,14 +712,14 @@ public static MotionHandle BindToLocalScaleZ(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localScale; p.z = x; t.localScale = p; }); } - + /// /// Create a motion data and bind it to Transform.localScale.xy /// @@ -733,7 +733,7 @@ public static MotionHandle BindToLocalScaleXY(this MotionBui where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localScale; p.x = x.x; @@ -741,7 +741,7 @@ public static MotionHandle BindToLocalScaleXY(this MotionBui t.localScale = p; }); } - + /// /// Create a motion data and bind it to Transform.localScale.xz /// @@ -755,7 +755,7 @@ public static MotionHandle BindToLocalScaleXZ(this MotionBui where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localScale; p.x = x.x; @@ -763,7 +763,7 @@ public static MotionHandle BindToLocalScaleXZ(this MotionBui t.localScale = p; }); } - + /// /// Create a motion data and bind it to Transform.localScale.yz /// @@ -777,7 +777,7 @@ public static MotionHandle BindToLocalScaleYZ(this MotionBui where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(transform); - return builder.BindWithState(transform, static (x, t) => + return builder.Bind(transform, static (x, t) => { var p = t.localScale; p.y = x.x; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs index 071f5b6a..3821cc91 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs @@ -27,7 +27,7 @@ public static MotionHandle BindToFontSize(this MotionBuilder where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.fontSize = x; }); @@ -46,7 +46,7 @@ public static MotionHandle BindToMaxVisibleCharacters(this M where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.maxVisibleCharacters = x; }); @@ -65,7 +65,7 @@ public static MotionHandle BindToMaxVisibleLines(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.maxVisibleLines = x; }); @@ -84,7 +84,7 @@ public static MotionHandle BindToMaxVisibleWords(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.maxVisibleWords = x; }); @@ -103,7 +103,7 @@ public static MotionHandle BindToColor(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.color = x; }); @@ -122,7 +122,7 @@ public static MotionHandle BindToColorR(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var c = target.color; c.r = x; @@ -143,7 +143,7 @@ public static MotionHandle BindToColorG(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var c = target.color; c.g = x; @@ -164,7 +164,7 @@ public static MotionHandle BindToColorB(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var c = target.color; c.b = x; @@ -185,7 +185,7 @@ public static MotionHandle BindToColorA(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var c = target.color; c.a = x; @@ -209,7 +209,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var enumerator = x.GetEnumerator(); var length = 0; @@ -239,7 +239,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var enumerator = x.GetEnumerator(); var length = 0; @@ -269,7 +269,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var enumerator = x.GetEnumerator(); var length = 0; @@ -299,7 +299,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var enumerator = x.GetEnumerator(); var length = 0; @@ -329,7 +329,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var enumerator = x.GetEnumerator(); var length = 0; @@ -358,7 +358,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var buffer = ArrayPool.Shared.Rent(128); @@ -383,7 +383,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState((text, format), static (x, state) => + return builder.Bind((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING state.text.SetTextFormat(state.format, x); @@ -408,7 +408,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { var buffer = ArrayPool.Shared.Rent(128); @@ -433,7 +433,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState((text, format), static (x, state) => + return builder.Bind((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING state.text.SetTextFormat(state.format, x); @@ -459,7 +459,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil { const string format = "{0}"; Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { #if LITMOTION_SUPPORT_ZSTRING target.SetTextFormat(format, x); @@ -483,7 +483,7 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState((text, format), static (x, state) => + return builder.Bind((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING state.text.SetTextFormat(state.format, x); @@ -510,7 +510,7 @@ public static MotionHandle BindToTMPCharColor(this MotionBui var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].color = x; }); @@ -536,7 +536,7 @@ public static MotionHandle BindToTMPCharColorR(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].color.r = x; }); @@ -562,7 +562,7 @@ public static MotionHandle BindToTMPCharColorG(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].color.g = x; }); @@ -588,7 +588,7 @@ public static MotionHandle BindToTMPCharColorB(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].color.b = x; }); @@ -614,7 +614,7 @@ public static MotionHandle BindToTMPCharColorA(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].color.a = x; }); @@ -640,7 +640,7 @@ public static MotionHandle BindToTMPCharPosition(this Motion var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].position = x; }); @@ -666,7 +666,7 @@ public static MotionHandle BindToTMPCharPositionX(this Motio var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].position.x = x; }); @@ -692,7 +692,7 @@ public static MotionHandle BindToTMPCharPositionY(this Motio var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].position.y = x; }); @@ -718,7 +718,7 @@ public static MotionHandle BindToTMPCharPositionZ(this Motio var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].position.z = x; }); @@ -744,7 +744,7 @@ public static MotionHandle BindToTMPCharRotation(this Motion var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].rotation = x; }); @@ -770,7 +770,7 @@ public static MotionHandle BindToTMPCharEulerAngles(this Mot var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].rotation = Quaternion.Euler(x); }); @@ -796,7 +796,7 @@ public static MotionHandle BindToTMPCharEulerAnglesX(this Mo var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { var eulerAngles = animator.charInfoArray[charIndex].rotation.eulerAngles; eulerAngles.x = x; @@ -824,7 +824,7 @@ public static MotionHandle BindToTMPCharEulerAnglesY(this Mo var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { var eulerAngles = animator.charInfoArray[charIndex].rotation.eulerAngles; eulerAngles.y = x; @@ -852,7 +852,7 @@ public static MotionHandle BindToTMPCharEulerAnglesZ(this Mo var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { var eulerAngles = animator.charInfoArray[charIndex].rotation.eulerAngles; eulerAngles.z = x; @@ -880,7 +880,7 @@ public static MotionHandle BindToTMPCharScale(this MotionBui var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].scale = x; }); @@ -906,7 +906,7 @@ public static MotionHandle BindToTMPCharScaleX(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].scale.x = x; }); @@ -932,7 +932,7 @@ public static MotionHandle BindToTMPCharScaleY(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].scale.y = x; }); @@ -958,7 +958,7 @@ public static MotionHandle BindToTMPCharScaleZ(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.BindWithState(animator, (x, target) => + var handle = builder.Bind(animator, (x, target) => { animator.charInfoArray[charIndex].scale.z = x; }); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs index 76ba2e26..068072ba 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs @@ -28,7 +28,7 @@ public static MotionHandle BindToStyleLeft(this MotionBuilde where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.left = x; }); @@ -47,7 +47,7 @@ public static MotionHandle BindToStyleRight(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.right = x; }); @@ -66,7 +66,7 @@ public static MotionHandle BindToStyleTop(this MotionBuilder where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.top = x; }); @@ -85,7 +85,7 @@ public static MotionHandle BindToStyleBottom(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.bottom = x; }); @@ -104,7 +104,7 @@ public static MotionHandle BindToStyleWidth(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.width = x; }); @@ -123,7 +123,7 @@ public static MotionHandle BindToStyleHeight(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.height = x; }); @@ -142,7 +142,7 @@ public static MotionHandle BindToStyleColor(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.color = x; }); @@ -161,7 +161,7 @@ public static MotionHandle BindToStyleColorR(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { var c = target.style.color.value; c.r = x; @@ -182,7 +182,7 @@ public static MotionHandle BindToStyleColorG(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { var c = target.style.color.value; c.g = x; @@ -203,7 +203,7 @@ public static MotionHandle BindToStyleColorB(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { var c = target.style.color.value; c.b = x; @@ -224,7 +224,7 @@ public static MotionHandle BindToStyleColorA(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { var c = target.style.color.value; c.a = x; @@ -245,7 +245,7 @@ public static MotionHandle BindToStyleBackgroundColor(this M where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.backgroundColor = x; }); @@ -264,7 +264,7 @@ public static MotionHandle BindToStyleBackgroundColorR(this where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { var c = target.style.backgroundColor.value; c.r = x; @@ -285,7 +285,7 @@ public static MotionHandle BindToStyleBackgroundColorG(this where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { var c = target.style.backgroundColor.value; c.g = x; @@ -306,7 +306,7 @@ public static MotionHandle BindToStyleBackgroundColorB(this where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { var c = target.style.backgroundColor.value; c.b = x; @@ -327,7 +327,7 @@ public static MotionHandle BindToStyleBackgroundColorA(this where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { var c = target.style.backgroundColor.value; c.a = x; @@ -348,7 +348,7 @@ public static MotionHandle BindToStyleOpacity(this MotionBui where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.opacity = x; }); @@ -367,7 +367,7 @@ public static MotionHandle BindToStyleFontSize(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.fontSize = x; }); @@ -386,7 +386,7 @@ public static MotionHandle BindToStyleWordSpacing(this Motio where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.wordSpacing = x; }); @@ -405,7 +405,7 @@ public static MotionHandle BindToStyleTranslate(this MotionB where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.translate = new Translate(x.x, x.y, x.z); }); @@ -424,7 +424,7 @@ public static MotionHandle BindToStyleTranslate(this MotionB where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.translate = new Translate(x.x, x.y); }); @@ -443,7 +443,7 @@ public static MotionHandle BindToStyleRotate(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, (x, target) => + return builder.Bind(visualElement, (x, target) => { target.style.rotate = new Rotate(new Angle(x, angleUnit)); }); @@ -462,7 +462,7 @@ public static MotionHandle BindToStyleScale(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.scale = new Scale(x); }); @@ -481,7 +481,7 @@ public static MotionHandle BindToStyleTransformOrigin(this M where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.transformOrigin = new TransformOrigin(x.x, x.y, x.z); }); @@ -500,7 +500,7 @@ public static MotionHandle BindToStyleTransformOrigin(this M where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualElement); - return builder.BindWithState(visualElement, static (x, target) => + return builder.Bind(visualElement, static (x, target) => { target.style.transformOrigin = new TransformOrigin(x.x, x.y); }); @@ -523,7 +523,7 @@ public static MotionHandle BindToProgressBar(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(progressBar); - return builder.BindWithState(progressBar, static (x, target) => + return builder.Bind(progressBar, static (x, target) => { target.value = x; }); @@ -546,7 +546,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, static (x, target) => + return builder.Bind(textElement, static (x, target) => { target.text = x.ConvertToString(); }); @@ -565,7 +565,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, static (x, target) => + return builder.Bind(textElement, static (x, target) => { target.text = x.ConvertToString(); }); @@ -584,7 +584,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, static (x, target) => + return builder.Bind(textElement, static (x, target) => { target.text = x.ConvertToString(); }); @@ -603,7 +603,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, static (x, target) => + return builder.Bind(textElement, static (x, target) => { target.text = x.ConvertToString(); }); @@ -622,7 +622,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, static (x, target) => + return builder.Bind(textElement, static (x, target) => { target.text = x.ConvertToString(); }); @@ -641,7 +641,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, static (x, target) => + return builder.Bind(textElement, static (x, target) => { target.text = x.ToString(); }); @@ -661,7 +661,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState((textElement, format), static (x, state) => + return builder.Bind((textElement, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING state.textElement.text = ZString.Format(state.format, x); @@ -684,7 +684,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, static (x, target) => + return builder.Bind(textElement, static (x, target) => { target.text = x.ToString(); }); @@ -704,7 +704,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState((textElement, format), static (x, state) => + return builder.Bind((textElement, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING state.textElement.text = ZString.Format(state.format, x); @@ -727,7 +727,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState(textElement, static (x, target) => + return builder.Bind(textElement, static (x, target) => { target.text = x.ToString(); }); @@ -747,7 +747,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.BindWithState((textElement, format), static (x, state) => + return builder.Bind((textElement, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING state.textElement.text = ZString.Format(state.format, x); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs index 56f29a2e..d4dde74a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs @@ -22,7 +22,7 @@ public static MotionHandle BindToVisualEffectFloat(this Moti where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState((visualEffect, name), static (x, state) => + return builder.Bind((visualEffect, name), static (x, state) => { state.visualEffect.SetFloat(state.name, x); }); @@ -41,7 +41,7 @@ public static MotionHandle BindToVisualEffectFloat(this Moti where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState(visualEffect, (x, target) => + return builder.Bind(visualEffect, (x, target) => { target.SetFloat(nameID, x); }); @@ -60,7 +60,7 @@ public static MotionHandle BindToVisualEffectInt(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState((visualEffect, name), static (x, state) => + return builder.Bind((visualEffect, name), static (x, state) => { state.visualEffect.SetInt(state.name, x); }); @@ -79,7 +79,7 @@ public static MotionHandle BindToVisualEffectInt(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState(visualEffect, (x, target) => + return builder.Bind(visualEffect, (x, target) => { target.SetFloat(nameID, x); }); @@ -98,7 +98,7 @@ public static MotionHandle BindToVisualEffectVector2(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState((visualEffect, name), static (x, state) => + return builder.Bind((visualEffect, name), static (x, state) => { state.visualEffect.SetVector2(state.name, x); }); @@ -117,7 +117,7 @@ public static MotionHandle BindToVisualEffectVector2(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState(visualEffect, (x, target) => + return builder.Bind(visualEffect, (x, target) => { target.SetVector2(nameID, x); }); @@ -136,7 +136,7 @@ public static MotionHandle BindToVisualEffectVector3(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState((visualEffect, name), static (x, state) => + return builder.Bind((visualEffect, name), static (x, state) => { state.visualEffect.SetVector3(state.name, x); }); @@ -155,7 +155,7 @@ public static MotionHandle BindToVisualEffectVector3(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState(visualEffect, (x, target) => + return builder.Bind(visualEffect, (x, target) => { target.SetVector3(nameID, x); }); @@ -174,7 +174,7 @@ public static MotionHandle BindToVisualEffectVector4(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState((visualEffect, name), static (x, state) => + return builder.Bind((visualEffect, name), static (x, state) => { state.visualEffect.SetVector4(state.name, x); }); @@ -193,7 +193,7 @@ public static MotionHandle BindToVisualEffectVector4(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.BindWithState(visualEffect, (x, target) => + return builder.Bind(visualEffect, (x, target) => { target.SetVector4(nameID, x); }); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionRectTransformExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionRectTransformExtensions.cs index f03cd5bd..609f6d56 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionRectTransformExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionRectTransformExtensions.cs @@ -20,7 +20,7 @@ public static MotionHandle BindToAnchoredPosition(this Motio where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { target.anchoredPosition = x; }); @@ -39,7 +39,7 @@ public static MotionHandle BindToAnchoredPositionX(this Moti where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { var p = target.anchoredPosition; p.x = x; @@ -60,7 +60,7 @@ public static MotionHandle BindToAnchoredPositionY(this Moti where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { var p = target.anchoredPosition; p.y = x; @@ -81,7 +81,7 @@ public static MotionHandle BindToAnchoredPosition3D(this Mot where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { target.anchoredPosition3D = x; }); @@ -100,7 +100,7 @@ public static MotionHandle BindToAnchoredPosition3DX(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { var p = target.anchoredPosition3D; p.x = x; @@ -121,7 +121,7 @@ public static MotionHandle BindToAnchoredPosition3DY(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { var p = target.anchoredPosition3D; p.y = x; @@ -142,7 +142,7 @@ public static MotionHandle BindToAnchoredPosition3DZ(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { var p = target.anchoredPosition3D; p.z = x; @@ -163,7 +163,7 @@ public static MotionHandle BindToAnchorMin(this MotionBuilde where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { target.anchorMin = x; }); @@ -182,7 +182,7 @@ public static MotionHandle BindToAnchorMax(this MotionBuilde where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { target.anchorMax = x; }); @@ -202,7 +202,7 @@ public static MotionHandle BindToSizeDelta(this MotionBuilde where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { target.sizeDelta = x; }); @@ -221,7 +221,7 @@ public static MotionHandle BindToSizeDeltaX(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { var s = target.sizeDelta; s.x = x; @@ -242,7 +242,7 @@ public static MotionHandle BindToSizeDeltaY(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { var s = target.sizeDelta; s.y = x; @@ -263,7 +263,7 @@ public static MotionHandle BindToPivot(this MotionBuilder { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { target.pivot = x; }); @@ -282,7 +282,7 @@ public static MotionHandle BindToPivotX(this MotionBuilder { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { var s = target.pivot; s.x = x; @@ -303,7 +303,7 @@ public static MotionHandle BindToPivotY(this MotionBuilder { Error.IsNull(rectTransform); - return builder.BindWithState(rectTransform, static (x, target) => + return builder.Bind(rectTransform, static (x, target) => { var s = target.pivot; s.y = x; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs index 97f965e2..ae2c056f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs @@ -26,7 +26,7 @@ public static MotionHandle BindToColor(this MotionBuilder { Error.IsNull(graphic); - return builder.BindWithState(graphic, static (x, target) => + return builder.Bind(graphic, static (x, target) => { target.color = x; }); @@ -45,7 +45,7 @@ public static MotionHandle BindToColorR(this MotionBuilder { Error.IsNull(graphic); - return builder.BindWithState(graphic, static (x, target) => + return builder.Bind(graphic, static (x, target) => { var c = target.color; c.r = x; @@ -66,7 +66,7 @@ public static MotionHandle BindToColorG(this MotionBuilder { Error.IsNull(graphic); - return builder.BindWithState(graphic, static (x, target) => + return builder.Bind(graphic, static (x, target) => { var c = target.color; c.g = x; @@ -87,7 +87,7 @@ public static MotionHandle BindToColorB(this MotionBuilder { Error.IsNull(graphic); - return builder.BindWithState(graphic, static (x, target) => + return builder.Bind(graphic, static (x, target) => { var c = target.color; c.b = x; @@ -108,7 +108,7 @@ public static MotionHandle BindToColorA(this MotionBuilder { Error.IsNull(graphic); - return builder.BindWithState(graphic, static (x, target) => + return builder.Bind(graphic, static (x, target) => { var c = target.color; c.a = x; @@ -129,7 +129,7 @@ public static MotionHandle BindToFillAmount(this MotionBuild where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(image); - return builder.BindWithState(image, static (x, target) => + return builder.Bind(image, static (x, target) => { target.fillAmount = x; }); @@ -148,7 +148,7 @@ public static MotionHandle BindToCanvasGroupAlpha(this Motio where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(canvasGroup); - return builder.BindWithState(canvasGroup, static (x, target) => + return builder.Bind(canvasGroup, static (x, target) => { target.alpha = x; }); @@ -167,7 +167,7 @@ public static MotionHandle BindToFontSize(this MotionBuilder where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.fontSize = x; }); @@ -186,7 +186,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.text = x.ConvertToString(); }); @@ -205,7 +205,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.text = x.ConvertToString(); }); @@ -224,7 +224,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.text = x.ConvertToString(); }); @@ -243,7 +243,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.text = x.ConvertToString(); }); @@ -262,7 +262,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.text = x.ConvertToString(); }); @@ -281,7 +281,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.text = x.ToString(); }); @@ -301,7 +301,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState((text, format), static (x, state) => + return builder.Bind((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING state.text.text = ZString.Format(state.format, x); @@ -324,7 +324,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.text = x.ToString(); }); @@ -344,7 +344,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState((text, format), static (x, state) => + return builder.Bind((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING state.text.text = ZString.Format(state.format, x); @@ -367,7 +367,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState(text, static (x, target) => + return builder.Bind(text, static (x, target) => { target.text = x.ToString(); }); @@ -387,7 +387,7 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.BindWithState((text, format), static (x, state) => + return builder.Bind((text, format), static (x, state) => { #if LITMOTION_SUPPORT_ZSTRING state.text.text = ZString.Format(state.format, x); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs index 26675947..8a94e641 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs @@ -41,7 +41,7 @@ public static MotionHandle BindToReactiveProperty(th where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(reactiveProperty); - return builder.BindWithState(reactiveProperty, static (x, target) => + return builder.Bind(reactiveProperty, static (x, target) => { target.Value = x; }); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs index 4fd8505b..68b99081 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs @@ -45,7 +45,7 @@ public static MotionHandle BindToReactiveProperty(th where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(reactiveProperty); - return builder.BindWithState(reactiveProperty, static (x, target) => + return builder.Bind(reactiveProperty, static (x, target) => { target.Value = x; }); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs index fa6d5f9a..f7e71e5e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs @@ -63,7 +63,7 @@ public static MotionHandle BindToAsyncReactiveProperty { Error.IsNull(reactiveProperty); - return builder.BindWithState(reactiveProperty, static (x, target) => + return builder.Bind(reactiveProperty, static (x, target) => { target.Value = x; }); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index fc1ad043..001ca6aa 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -273,7 +273,8 @@ public MotionHandle Bind(Action action) /// Motion state /// Action that handles binding /// Handle of the created motion data. - public MotionHandle BindWithState(TState state, Action action) where TState : class + public MotionHandle Bind(TState state, Action action) + where TState : class { CheckBuffer(); SetCallbackData(state, action); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index 602c0f07..8e7e61b8 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -16,13 +16,13 @@ public static class MotionBuilderExtensions /// Motion state /// Action that handles binding /// Handle of the created motion data. - public static MotionHandle BindWithState(this MotionBuilder builder, TState state, Action action) + public static MotionHandle Bind(this MotionBuilder builder, TState state, Action action) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter where TState : struct { - return builder.BindWithState(new ActionWithState(state, action), (x, state) => state.Invoke(x)); + return builder.Bind(new ActionWithState(state, action), (x, state) => state.Invoke(x)); } /// @@ -40,7 +40,7 @@ public static MotionHandle BindToProgress(this Motio where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(progress); - return builder.BindWithState(progress, static (x, progress) => progress.Report(x)); + return builder.Bind(progress, static (x, progress) => progress.Report(x)); } /// @@ -73,7 +73,7 @@ public static MotionHandle BindToUnityLogger(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(logger); - return builder.BindWithState(logger, static (x, logger) => logger.Log(x)); + return builder.Bind(logger, static (x, logger) => logger.Log(x)); } /// diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs index f43f2c1a..01c91947 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs @@ -23,7 +23,7 @@ public IEnumerator Test_BindWithState() { var target = new TestClass(); var endValue = 10f; - LMotion.Create(0f, endValue, 0.5f).BindWithState(target, (x, target) => + LMotion.Create(0f, endValue, 0.5f).Bind(target, (x, target) => { target.Value = x; }); @@ -38,7 +38,7 @@ public IEnumerator Test_BindWithState_Struct() var target2 = new TestClass(); var target3 = new TestClass(); var endValue = 10f; - LMotion.Create(0f, endValue, 0.5f).BindWithState((target1, target2, target3), (x, state) => + LMotion.Create(0f, endValue, 0.5f).Bind((target1, target2, target3), (x, state) => { state.target1.Value = x; state.target2.Value = x; From 98092a446a18d44620cefcbdb1f6ecda02b64aa6 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 20 Nov 2024 22:43:25 +0900 Subject: [PATCH 014/224] Rename: internal method --- .../Runtime/External/R3/LitMotionR3Extensions.cs | 2 +- .../Runtime/External/UniRx/LitMotionUniRxExtensions.cs | 2 +- src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs index 8a94e641..30a86fd0 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/R3/LitMotionR3Extensions.cs @@ -22,7 +22,7 @@ public static Observable ToObservable(this M builder.SetCallbackData(subject, static (x, subject) => subject.OnNext(x)); builder.buffer.OnCompleteAction += () => subject.OnCompleted(); builder.buffer.OnCancelAction += () => subject.OnCompleted(); - builder.ScheduleCore(); + builder.ScheduleMotion(); return subject; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs index 68b99081..1667be05 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniRx/LitMotionUniRxExtensions.cs @@ -26,7 +26,7 @@ public static IObservable ToObservable(this builder.SetCallbackData(subject, static (x, subject) => subject.OnNext(x)); builder.buffer.OnCompleteAction += () => subject.OnCompleted(); builder.buffer.OnCancelAction += () => subject.OnCompleted(); - builder.ScheduleCore(); + builder.ScheduleMotion(); return subject; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index 001ca6aa..1f479a8b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -251,7 +251,7 @@ public readonly MotionBuilder WithScheduler(IMotionS public MotionHandle RunWithoutBinding() { CheckBuffer(); - return ScheduleCore(); + return ScheduleMotion(); } /// @@ -263,7 +263,7 @@ public MotionHandle Bind(Action action) { CheckBuffer(); SetCallbackData(action); - return ScheduleCore(); + return ScheduleMotion(); } /// @@ -278,7 +278,7 @@ public MotionHandle Bind(TState state, Action action) { CheckBuffer(); SetCallbackData(state, action); - return ScheduleCore(); + return ScheduleMotion(); } /// @@ -295,7 +295,7 @@ public readonly MotionBuilder Preserve() } [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal MotionHandle ScheduleCore() + internal MotionHandle ScheduleMotion() { MotionHandle handle; From 5e8bfd285dfb8791b982368583078a51dee0e10e Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 21 Nov 2024 09:03:31 +0900 Subject: [PATCH 015/224] Fix: wrong freeSlot value --- .../Assets/LitMotion/Runtime/Internal/EntityManager.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs index 3abaa417..ef90bbfe 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs @@ -87,6 +87,7 @@ public Entity Create(int denseIndex) var slotIndex = freeSlot; ref var slot = ref slots[slotIndex]; + freeSlot = slot.Next; slot.Next = -1; slot.DenseIndex = denseIndex; if (slot.Version == 0) @@ -94,8 +95,6 @@ public Entity Create(int denseIndex) slot.Version = 1; } - freeSlot = slot.Next; - return new Entity(slotIndex, slot.Version); } From 0a60092e32d728bd309da2396899757e1ba1bf8a Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 21 Nov 2024 09:07:01 +0900 Subject: [PATCH 016/224] Rename: Entity -> SparseIndex --- .../Runtime/Internal/MotionStorage.cs | 56 +++++++++---------- .../Internal/{Entity.cs => SparseIndex.cs} | 8 +-- .../{Entity.cs.meta => SparseIndex.cs.meta} | 0 .../{EntityManager.cs => SparseSetCore.cs} | 14 ++--- ...yManager.cs.meta => SparseSetCore.cs.meta} | 0 5 files changed, 39 insertions(+), 39 deletions(-) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/{Entity.cs => SparseIndex.cs} (67%) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/{Entity.cs.meta => SparseIndex.cs.meta} (100%) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/{EntityManager.cs => SparseSetCore.cs} (89%) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/{EntityManager.cs.meta => SparseSetCore.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 1d1469c6..9657c4c1 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -27,8 +27,8 @@ internal sealed class MotionStorage : IMotionStorage public int Id { get; } public int Count => tail; - EntityManager entityManager = new(InitialCapacity); - Entity[] entityLookup = new Entity[InitialCapacity]; + SparseSetCore sparseSetCore = new(InitialCapacity); + SparseIndex[] sparseIndexLookup = new SparseIndex[InitialCapacity]; MotionData[] unmanagedDataArray = new MotionData[InitialCapacity]; ManagedMotionData[] managedDataArray = new ManagedMotionData[InitialCapacity]; AllocatorHelper allocator; @@ -55,8 +55,8 @@ public Span GetManagedDataSpan() [MethodImpl(MethodImplOptions.AggressiveInlining)] public void EnsureCapacity(int minimumCapacity) { - entityManager.EnsureCapacity(minimumCapacity); - ArrayHelper.EnsureCapacity(ref entityLookup, minimumCapacity); + sparseSetCore.EnsureCapacity(minimumCapacity); + ArrayHelper.EnsureCapacity(ref sparseIndexLookup, minimumCapacity); ArrayHelper.EnsureCapacity(ref unmanagedDataArray, minimumCapacity); ArrayHelper.EnsureCapacity(ref managedDataArray, minimumCapacity); } @@ -126,15 +126,15 @@ public MotionHandle Create(ref MotionBuilder builder )); } - var entity = entityManager.Create(tail); - entityLookup[tail] = entity; + var sparseIndex = sparseSetCore.Alloc(tail); + sparseIndexLookup[tail] = sparseIndex; tail++; return new MotionHandle() { - Index = entity.Index, - Version = entity.Version, + Index = sparseIndex.Index, + Version = sparseIndex.Version, StorageId = Id }; } @@ -151,43 +151,43 @@ void RemoveAt(int denseIndex) managedDataArray[denseIndex] = managedDataArray[tail]; managedDataArray[tail] = default; - // swap entity - var prevEntity = entityLookup[denseIndex]; - var currentEntity = entityLookup[denseIndex] = entityLookup[tail]; - entityLookup[tail] = default; + // swap sparse index + var prevSparseIndex = sparseIndexLookup[denseIndex]; + var currentSparseIndex = sparseIndexLookup[denseIndex] = sparseIndexLookup[tail]; + sparseIndexLookup[tail] = default; // update slot - if (currentEntity.Version != 0) + if (currentSparseIndex.Version != 0) { - ref var slot = ref entityManager.GetSlotRefUnchecked(currentEntity.Index); + ref var slot = ref sparseSetCore.GetSlotRefUnchecked(currentSparseIndex.Index); slot.DenseIndex = denseIndex; } // free slot - if (prevEntity.Version != 0) + if (prevSparseIndex.Version != 0) { - entityManager.Destroy(prevEntity); + sparseSetCore.Free(prevSparseIndex); } } public void RemoveAll(NativeList denseIndexList) { - var entities = new NativeArray(denseIndexList.Length, Allocator.Temp, NativeArrayOptions.UninitializedMemory); - for (int i = 0; i < entities.Length; i++) + var list = new NativeArray(denseIndexList.Length, Allocator.Temp, NativeArrayOptions.UninitializedMemory); + for (int i = 0; i < list.Length; i++) { - entities[i] = entityLookup[denseIndexList[i]]; + list[i] = sparseIndexLookup[denseIndexList[i]]; } - for (int i = 0; i < entities.Length; i++) + for (int i = 0; i < list.Length; i++) { - RemoveAt(entityManager.GetSlotRefUnchecked(entities[i].Index).DenseIndex); + RemoveAt(sparseSetCore.GetSlotRefUnchecked(list[i].Index).DenseIndex); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool IsActive(MotionHandle handle) { - ref var slot = ref entityManager.GetSlotRefUnchecked(handle.Index); + ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; if (denseIndex < 0 || denseIndex >= tail) return false; @@ -201,7 +201,7 @@ public bool IsActive(MotionHandle handle) public void Cancel(MotionHandle handle) { - ref var slot = ref entityManager.GetSlotRefUnchecked(handle.Index); + ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; if (denseIndex < 0 || denseIndex >= tail) { @@ -230,7 +230,7 @@ public void Cancel(MotionHandle handle) public void Complete(MotionHandle handle) { - ref var slot = ref entityManager.GetSlotRefUnchecked(handle.Index); + ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; if (denseIndex < 0 || denseIndex >= tail) @@ -317,9 +317,9 @@ public ref MotionDataCore GetDataRef(MotionHandle handle) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - ref EntityManager.Slot GetSlotWithVarify(MotionHandle handle) + ref SparseSetCore.Slot GetSlotWithVarify(MotionHandle handle) { - ref var slot = ref entityManager.GetSlotRefUnchecked(handle.Index); + ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; if (denseIndex < 0 || denseIndex >= unmanagedDataArray.Length) { @@ -337,8 +337,8 @@ ref EntityManager.Slot GetSlotWithVarify(MotionHandle handle) public void Reset() { - entityManager.Reset(); - entityLookup.AsSpan().Clear(); + sparseSetCore.Reset(); + sparseIndexLookup.AsSpan().Clear(); unmanagedDataArray.AsSpan().Clear(); managedDataArray.AsSpan().Clear(); tail = 0; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/SparseIndex.cs similarity index 67% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/SparseIndex.cs index a722404d..d809d07b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/SparseIndex.cs @@ -2,12 +2,12 @@ namespace LitMotion { - internal readonly struct Entity : IEquatable + internal readonly struct SparseIndex : IEquatable { public int Index { get; } public int Version { get; } - public Entity(int index, int version) + public SparseIndex(int index, int version) { Index = index; Version = version; @@ -15,10 +15,10 @@ public Entity(int index, int version) public override bool Equals(object obj) { - return obj is Entity other && Equals(other); + return obj is SparseIndex other && Equals(other); } - public bool Equals(Entity other) + public bool Equals(SparseIndex other) { return Index == other.Index && Version == other.Version; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/SparseIndex.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/Entity.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/SparseIndex.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/SparseSetCore.cs similarity index 89% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/SparseSetCore.cs index ef90bbfe..d2f8619a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/SparseSetCore.cs @@ -3,7 +3,7 @@ namespace LitMotion { - internal sealed class EntityManager + internal sealed class SparseSetCore { public struct Slot : IEquatable { @@ -32,7 +32,7 @@ public override readonly int GetHashCode() public int Capacity => slots.Length; - public EntityManager(int initialCapacity = 32) + public SparseSetCore(int initialCapacity = 32) { EnsureCapacity(initialCapacity); } @@ -77,7 +77,7 @@ public void EnsureCapacity(int capacity) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Entity Create(int denseIndex) + public SparseIndex Alloc(int denseIndex) { if (freeSlot == -1) { @@ -95,17 +95,17 @@ public Entity Create(int denseIndex) slot.Version = 1; } - return new Entity(slotIndex, slot.Version); + return new SparseIndex(slotIndex, slot.Version); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Destroy(Entity entity) + public void Free(SparseIndex sparseIndex) { - ref var slot = ref slots[entity.Index]; + ref var slot = ref slots[sparseIndex.Index]; slot.Next = freeSlot; slot.Version++; - freeSlot = entity.Index; + freeSlot = sparseIndex.Index; } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/SparseSetCore.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/EntityManager.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/SparseSetCore.cs.meta From 9b832f59046e68078e5944d47239b12a975aaee3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 21 Nov 2024 09:07:09 +0900 Subject: [PATCH 017/224] Add: stress tests --- .../LitMotion/Tests/Runtime/StressTest.cs | 21 +++++++++++++++++++ .../Tests/Runtime/StressTest.cs.meta | 2 ++ 2 files changed, 23 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/StressTest.cs create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/StressTest.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/StressTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/StressTest.cs new file mode 100644 index 00000000..98afe4db --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/StressTest.cs @@ -0,0 +1,21 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.TestTools; + +namespace LitMotion.Tests.Runtime +{ + public class StressTest + { + [UnityTest] + public IEnumerator StressTest_64000_Float() + { + for (int i = 0; i < 64000; i++) + { + LMotion.Create(0, 1f, 1f) + .Bind(x => { }); + } + + yield return new WaitForSeconds(1.1f); + } + } +} diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/StressTest.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Runtime/StressTest.cs.meta new file mode 100644 index 00000000..4ea07976 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/StressTest.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 663aa20c4853f405289ac551cede96d8 \ No newline at end of file From bb1a801f0fd1bfd4addbb532eacfffc7c2d567ef Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 21 Nov 2024 10:20:32 +0900 Subject: [PATCH 018/224] Move: BindtoUnityLogger to LitMotion.Extensions --- .../General/LitMotionLoggerExtensions.cs | 43 +++++++++++++++++++ .../General/LitMotionLoggerExtensions.cs.meta | 2 + .../Runtime/MotionBuilderExtensions.cs | 34 --------------- .../LitMotion/Tests/Runtime/CoroutineTest.cs | 1 + .../LitMotion/Tests/Runtime/DelayTest.cs | 1 + .../Tests/Runtime/PlaybackSpeedTest.cs | 1 + .../LitMotion/Tests/Runtime/UniTaskTest.cs | 1 + .../LitMotion/Tests/Runtime/ValueTaskTest.cs | 1 + 8 files changed, 50 insertions(+), 34 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs new file mode 100644 index 00000000..6673d5f5 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs @@ -0,0 +1,43 @@ +using UnityEngine; + +namespace LitMotion.Extensions +{ + /// + /// Provides binding extension methods for Logger + /// + public static class LitMotionLoggerExtensions + { + /// + /// Create a motion data and bind it to Debug.unityLogger + /// + /// The type of value to animate + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Handle of the created motion data. + public static MotionHandle BindToUnityLogger(this MotionBuilder builder) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + return builder.Bind(static x => Debug.unityLogger.Log(x)); + } + + /// + /// Create a motion data and bind it to UnityEngine.ILogger + /// + /// The type of value to animate + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Handle of the created motion data. + public static MotionHandle BindToUnityLogger(this MotionBuilder builder, ILogger logger) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(logger); + return builder.Bind(logger, static (x, logger) => logger.Log(x)); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs.meta new file mode 100644 index 00000000..06df551d --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 21931dcc76c9f432597ee45bc0ea2d95 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index 8e7e61b8..e0ceb0dd 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -42,40 +42,6 @@ public static MotionHandle BindToProgress(this Motio Error.IsNull(progress); return builder.Bind(progress, static (x, progress) => progress.Report(x)); } - - /// - /// Create a motion data and bind it to Debug.unityLogger - /// - /// The type of value to animate - /// The type of special parameters given to the motion data - /// The type of adapter that support value animation - /// This builder - /// Handle of the created motion data. - public static MotionHandle BindToUnityLogger(this MotionBuilder builder) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - return builder.Bind(static x => Debug.unityLogger.Log(x)); - } - - /// - /// Create a motion data and bind it to UnityEngine.ILogger - /// - /// The type of value to animate - /// The type of special parameters given to the motion data - /// The type of adapter that support value animation - /// This builder - /// Handle of the created motion data. - public static MotionHandle BindToUnityLogger(this MotionBuilder builder, ILogger logger) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - Error.IsNull(logger); - return builder.Bind(logger, static (x, logger) => logger.Log(x)); - } - /// /// Specifies the rounding format for decimal values when animating integer types. /// diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CoroutineTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CoroutineTest.cs index 952b83cf..00c6a1fc 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CoroutineTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CoroutineTest.cs @@ -1,4 +1,5 @@ using System.Collections; +using LitMotion.Extensions; using UnityEngine.TestTools; namespace LitMotion.Tests.Runtime diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/DelayTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/DelayTest.cs index 9da350bf..5ee7e3ff 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/DelayTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/DelayTest.cs @@ -1,4 +1,5 @@ using System.Collections; +using LitMotion.Extensions; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs index 3a9455b5..d4780953 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using LitMotion.Extensions; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs index f6795cad..478d725b 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs @@ -3,6 +3,7 @@ using System.Collections; using System.Threading; using Cysharp.Threading.Tasks; +using LitMotion.Extensions; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/ValueTaskTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ValueTaskTest.cs index 7d319780..758b5ee9 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/ValueTaskTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ValueTaskTest.cs @@ -1,6 +1,7 @@ using System; using System.Threading; using System.Threading.Tasks; +using LitMotion.Extensions; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; From 61c155ee666daa20386b45989496a1eaac62f439 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 21 Nov 2024 10:26:25 +0900 Subject: [PATCH 019/224] Move: BindToProgress to LitMotion.Extensions --- .../General/LitMotionProgressExtensions.cs | 28 +++++++++++++++++++ .../LitMotionProgressExtensions.cs.meta | 2 ++ .../Runtime/MotionBuilderExtensions.cs | 17 ----------- .../LitMotion/Tests/Runtime/BindTest.cs | 1 + 4 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionProgressExtensions.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionProgressExtensions.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionProgressExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionProgressExtensions.cs new file mode 100644 index 00000000..b343158b --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionProgressExtensions.cs @@ -0,0 +1,28 @@ +using System; + +namespace LitMotion.Extensions +{ + /// + /// Provides binding extension methods for Progress. + /// + public static class LitMotionProgressExtensions + { + /// + /// Create a motion data and bind it to IProgress + /// + /// The type of value to animate + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target object that implements IProgress + /// Handle of the created motion data. + public static MotionHandle BindToProgress(this MotionBuilder builder, IProgress progress) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(progress); + return builder.Bind(progress, static (x, progress) => progress.Report(x)); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionProgressExtensions.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionProgressExtensions.cs.meta new file mode 100644 index 00000000..18da258e --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionProgressExtensions.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c6f279c5f01c54c95ba85ac088652bf7 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index e0ceb0dd..099b1a5c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -25,23 +25,6 @@ public static MotionHandle Bind(this MotionB return builder.Bind(new ActionWithState(state, action), (x, state) => state.Invoke(x)); } - /// - /// Create a motion data and bind it to IProgress - /// - /// The type of value to animate - /// The type of special parameters given to the motion data - /// The type of adapter that support value animation - /// This builder - /// Target object that implements IProgress - /// Handle of the created motion data. - public static MotionHandle BindToProgress(this MotionBuilder builder, IProgress progress) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - Error.IsNull(progress); - return builder.Bind(progress, static (x, progress) => progress.Report(x)); - } /// /// Specifies the rounding format for decimal values when animating integer types. /// diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs index 01c91947..e818949d 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using LitMotion.Extensions; using UnityEngine; using UnityEngine.Assertions; using UnityEngine.TestTools; From 77e894b26e07d3ab1b5fb5f2c6aad764e23133d3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 22 Nov 2024 18:02:56 +0900 Subject: [PATCH 020/224] Revert: multiple state --- .../Runtime/Internal/ManagedMotionData.cs | 25 ++-- .../Runtime/Internal/MotionStorage.cs | 5 +- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 78 +++++++++++- .../Assets/LitMotion/Tests/Benchmark.meta | 8 ++ .../Tests/Benchmark/ClosureBenchmark.cs | 117 ++++++++++++++++++ .../Tests/Benchmark/ClosureBenchmark.cs.meta | 2 + .../LitMotion.Tests.Benchmark.asmdef | 45 +++++++ .../LitMotion.Tests.Benchmark.asmdef.meta | 7 ++ .../LitMotion/Tests/Runtime/BindTest.cs | 35 ++++++ .../ProjectSettings/ProjectSettings.asset | 84 ++++++++----- 10 files changed, 363 insertions(+), 43 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark.meta create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs index f82cd75a..2009cc7e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs @@ -14,8 +14,10 @@ public struct ManagedMotionData public bool IsCallbackRunning; public bool CancelOnError; public bool SkipValuesDuringDelay; - public object State; - + public byte StateCount; + public object State0; + public object State1; + public object State2; public object UpdateAction; public Action OnCompleteAction; public Action OnCancelAction; @@ -23,13 +25,20 @@ public struct ManagedMotionData [MethodImpl(MethodImplOptions.AggressiveInlining)] public void UpdateUnsafe(in TValue value) where TValue : unmanaged { - if (State == null) - { - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value); - } - else + switch (StateCount) { - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State); + case 0: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value); + break; + case 1: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0); + break; + case 2: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0, State1); + break; + case 3: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0, State1, State2); + break; } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 9657c4c1..97ecb0ef 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -106,7 +106,10 @@ public MotionHandle Create(ref MotionBuilder builder managedDataRef.OnCancelAction = buffer.OnCancelAction; managedDataRef.OnCompleteAction = buffer.OnCompleteAction; managedDataRef.SkipValuesDuringDelay = buffer.SkipValuesDuringDelay; - managedDataRef.State = buffer.State; + managedDataRef.StateCount = buffer.StateCount; + managedDataRef.State0 = buffer.State0; + managedDataRef.State1 = buffer.State1; + managedDataRef.State2 = buffer.State2; if (buffer.BindOnSchedule && buffer.UpdateAction != null) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index 1f479a8b..4db7bcae 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -44,7 +44,11 @@ public static void Return(MotionBuilderBuffer buffer) buffer.Loops = 1; buffer.LoopType = default; - buffer.State = default; + buffer.State0 = default; + buffer.State1 = default; + buffer.State2 = default; + buffer.StateCount = default; + buffer.UpdateAction = default; buffer.OnCompleteAction = default; buffer.OnCancelAction = default; @@ -78,7 +82,10 @@ public static void Return(MotionBuilderBuffer buffer) public LoopType LoopType; public bool CancelOnError; public bool SkipValuesDuringDelay; - public object State; + public object State0; + public object State1; + public object State2; + public byte StateCount; public object UpdateAction; public Action OnCompleteAction; public Action OnCancelAction; @@ -281,6 +288,45 @@ public MotionHandle Bind(TState state, Action action) return ScheduleMotion(); } + /// + /// Create motion and bind it to a specific object. Unlike the regular Bind method, it avoids allocation by closure by passing an object. + /// + /// Type of state + /// Type of state + /// Motion state + /// Motion state + /// Action that handles binding + /// Handle of the created motion data. + public MotionHandle Bind(TState0 state0, TState1 state1, Action action) + where TState0 : class + where TState1 : class + { + CheckBuffer(); + SetCallbackData(state0, state1, action); + return ScheduleMotion(); + } + + /// + /// Create motion and bind it to a specific object. Unlike the regular Bind method, it avoids allocation by closure by passing an object. + /// + /// Type of state + /// Type of state + /// Type of state + /// Motion state + /// Motion state + /// Motion state + /// Action that handles binding + /// Handle of the created motion data. + public MotionHandle Bind(TState0 state0, TState1 state1, TState2 state2, Action action) + where TState0 : class + where TState1 : class + where TState2 : class + { + CheckBuffer(); + SetCallbackData(state0, state1, state2, action); + return ScheduleMotion(); + } + /// /// Preserves the internal buffer and prevents the builder from being automatically destroyed after creating the motion data. /// Calling this allows you to create the motion multiple times, but you must call the Dispose method to destroy the builder after use. @@ -353,6 +399,7 @@ public void Dispose() [MethodImpl(MethodImplOptions.AggressiveInlining)] internal readonly void SetCallbackData(Action action) { + buffer.StateCount = 0; buffer.UpdateAction = action; } @@ -360,7 +407,32 @@ internal readonly void SetCallbackData(Action action) internal readonly void SetCallbackData(TState state, Action action) where TState : class { - buffer.State = state; + buffer.StateCount = 1; + buffer.State0 = state; + buffer.UpdateAction = action; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal readonly void SetCallbackData(TState0 state0, TState1 state1, Action action) + where TState0 : class + where TState1 : class + { + buffer.StateCount = 2; + buffer.State0 = state0; + buffer.State1 = state1; + buffer.UpdateAction = action; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal readonly void SetCallbackData(TState0 state0, TState1 state1, TState2 state2, Action action) + where TState0 : class + where TState1 : class + where TState2 : class + { + buffer.StateCount = 3; + buffer.State0 = state0; + buffer.State1 = state1; + buffer.State2 = state2; buffer.UpdateAction = action; } diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark.meta b/src/LitMotion/Assets/LitMotion/Tests/Benchmark.meta new file mode 100644 index 00000000..4d6a9f7f --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5b8e18d9688bf4826bc5f6668585a3a4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs new file mode 100644 index 00000000..372938c9 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs @@ -0,0 +1,117 @@ +using System.Collections; +using System.Runtime.CompilerServices; +using LitMotion.Adapters; +using NUnit.Framework; +using Unity.PerformanceTesting; +using UnityEngine.TestTools; + +namespace LitMotion.Tests.Benchmark +{ + public class ClosureBenchmark + { + CompositeMotionHandle handles = new(25000); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + MotionDispatcher.EnsureStorageCapacity(64000); + } + + [TearDown] + public void TearDown() + { + handles.Cancel(); + } + + [Test] + [Performance] + public void Benchmark_Bind_ActionWithState_Startup() + { + Measure.Method(() => + { + int state = 0; + LMotion.Create(0f, 1f, 3f) + .Bind(state, (x, state) => + { + DoNothing(x, state); + }) + .AddTo(handles); + }) + .WarmupCount(10) + .IterationsPerMeasurement(5000) + .MeasurementCount(5) + .CleanUp(() => + { + handles.Cancel(); + }) + .Run(); + } + + [Test] + [Performance] + public void Benchmark_Bind_Closure_Startup() + { + Measure.Method(() => + { + int state = 0; + LMotion.Create(0f, 1f, 3f) + .Bind(x => + { + DoNothing(x, state); + }) + .AddTo(handles); + }) + .WarmupCount(10) + .IterationsPerMeasurement(5000) + .MeasurementCount(5) + .CleanUp(() => + { + handles.Cancel(); + }) + .Run(); + } + + [UnityTest] + [Performance] + public IEnumerator Benchmark_Bind_ActionWithState_Update() + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(i, (x, state) => + { + DoNothing(x, state); + }) + .AddTo(handles); + } + + yield return Measure.Frames() + .WarmupCount(5) + .MeasurementCount(20) + .Run(); + } + + [UnityTest] + [Performance] + public IEnumerator Benchmark_Bind_Closure_Update() + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(x => + { + DoNothing(x, i); + }) + .AddTo(handles); + } + + yield return Measure.Frames() + .WarmupCount(5) + .MeasurementCount(20) + .Run(); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static void DoNothing(float value, int state) { } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs.meta new file mode 100644 index 00000000..8ad524d5 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ab5570d09914144fd83f0727103ae252 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef new file mode 100644 index 00000000..c24c1041 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef @@ -0,0 +1,45 @@ +{ + "name": "LitMotion.Tests.Benchmark", + "rootNamespace": "LitMotion.Tests.Benchmark", + "references": [ + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "Unity.Burst", + "Unity.Collections", + "LitMotion", + "LitMotion.Extensions", + "UniTask", + "UniRx", + "Unity.PerformanceTesting" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll", + "R3.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [ + { + "name": "com.cysharp.unitask", + "expression": "", + "define": "LITMOTION_TEST_UNITASK" + }, + { + "name": "com.neuecc.unirx", + "expression": "", + "define": "LITMOTION_TEST_UNIRX" + }, + { + "name": "com.cysharp.r3", + "expression": "", + "define": "LITMOTION_TEST_R3" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef.meta b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef.meta new file mode 100644 index 00000000..58edecc1 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 999a71e0e3ed243908c36acfc03db850 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs index e818949d..b37c8bbc 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindTest.cs @@ -32,6 +32,41 @@ public IEnumerator Test_BindWithState() Assert.AreApproximatelyEqual(target.Value, endValue); } + [UnityTest] + public IEnumerator Test_BindWithState_2() + { + var target1 = new TestClass(); + var target2 = new TestClass(); + var endValue = 10f; + LMotion.Create(0f, endValue, 0.5f).Bind(target1, target2, (x, state0, state1) => + { + state0.Value = x; + state1.Value = x; + }); + yield return new WaitForSeconds(0.6f); + Assert.AreApproximatelyEqual(target1.Value, endValue); + Assert.AreApproximatelyEqual(target2.Value, endValue); + } + + [UnityTest] + public IEnumerator Test_BindWithState_3() + { + var target1 = new TestClass(); + var target2 = new TestClass(); + var target3 = new TestClass(); + var endValue = 10f; + LMotion.Create(0f, endValue, 0.5f).Bind(target1, target2, target3, (x, state0, state1, state2) => + { + state0.Value = x; + state1.Value = x; + state2.Value = x; + }); + yield return new WaitForSeconds(0.6f); + Assert.AreApproximatelyEqual(target1.Value, endValue); + Assert.AreApproximatelyEqual(target2.Value, endValue); + Assert.AreApproximatelyEqual(target3.Value, endValue); + } + [UnityTest] public IEnumerator Test_BindWithState_Struct() { diff --git a/src/LitMotion/ProjectSettings/ProjectSettings.asset b/src/LitMotion/ProjectSettings/ProjectSettings.asset index 5cbac61e..b0690693 100644 --- a/src/LitMotion/ProjectSettings/ProjectSettings.asset +++ b/src/LitMotion/ProjectSettings/ProjectSettings.asset @@ -3,7 +3,7 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 26 + serializedVersion: 28 productGUID: 7d5c0b2289152496daace7f721046cce AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 @@ -17,8 +17,8 @@ PlayerSettings: defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} - m_ShowUnitySplashScreen: 1 - m_ShowUnitySplashLogo: 1 + m_ShowUnitySplashScreen: 0 + m_ShowUnitySplashLogo: 0 m_SplashScreenOverlayOpacity: 1 m_SplashScreenAnimation: 1 m_SplashScreenLogoStyle: 1 @@ -48,6 +48,8 @@ PlayerSettings: defaultScreenHeightWeb: 600 m_StereoRenderingPath: 0 m_ActiveColorSpace: 0 + unsupportedMSAAFallback: 0 + m_SpriteBatchMaxVertexCount: 65535 m_SpriteBatchVertexThreshold: 300 m_MTRendering: 1 mipStripping: 0 @@ -69,16 +71,18 @@ PlayerSettings: androidRenderOutsideSafeArea: 1 androidUseSwappy: 1 androidBlitType: 0 - androidResizableWindow: 0 + androidResizeableActivity: 0 androidDefaultWindowWidth: 1920 androidDefaultWindowHeight: 1080 androidMinimumWindowWidth: 400 androidMinimumWindowHeight: 300 androidFullscreenMode: 1 + androidAutoRotationBehavior: 1 + androidPredictiveBackSupport: 0 + androidApplicationEntry: 1 defaultIsNativeResolution: 1 macRetinaSupport: 1 runInBackground: 1 - captureSingleScreen: 0 muteOtherAudioSources: 0 Prepare IOS For Recording: 0 Force IOS Speakers When Recording: 0 @@ -86,6 +90,7 @@ PlayerSettings: hideHomeButton: 0 submitAnalytics: 1 usePlayerLog: 1 + dedicatedServerOptimizations: 1 bakeCollisionMeshes: 0 forceSingleInstance: 0 useFlipModelSwapchain: 1 @@ -93,6 +98,7 @@ PlayerSettings: useMacAppStoreValidation: 0 macAppStoreCategory: public.app-category.games gpuSkinning: 1 + meshDeformation: 2 xboxPIXTextureCapture: 0 xboxEnableAvatar: 0 xboxEnableKinect: 0 @@ -124,15 +130,16 @@ PlayerSettings: switchAllowGpuScratchShrinking: 0 switchNVNMaxPublicTextureIDCount: 0 switchNVNMaxPublicSamplerIDCount: 0 + switchMaxWorkerMultiple: 8 switchNVNGraphicsFirmwareMemory: 32 - stadiaPresentMode: 0 - stadiaTargetFramerate: 0 vulkanNumSwapchainBuffers: 3 vulkanEnableSetSRGBWrite: 0 vulkanEnablePreTransform: 1 vulkanEnableLateAcquireNextImage: 0 vulkanEnableCommandBufferRecycling: 1 loadStoreDebugModeEnabled: 0 + visionOSBundleVersion: 1.0 + tvOSBundleVersion: 1.0 bundleVersion: 0.1 preloadedAssets: [] metroInputSource: 0 @@ -145,6 +152,7 @@ PlayerSettings: isWsaHolographicRemotingEnabled: 0 enableFrameTimingStats: 0 enableOpenGLProfilerGPURecorders: 1 + allowHDRDisplaySupport: 0 useHDRDisplay: 0 hdrBitDepth: 0 m_ColorGamuts: 00000000 @@ -153,6 +161,7 @@ PlayerSettings: resetResolutionOnWindowResize: 0 androidSupportedAspectRatio: 1 androidMaxAspectRatio: 2.1 + androidMinAspectRatio: 1 applicationIdentifier: Standalone: com.AnnulusGames.LitMotion buildNumber: @@ -162,7 +171,7 @@ PlayerSettings: tvOS: 0 overrideDefaultApplicationIdentifier: 0 AndroidBundleVersionCode: 1 - AndroidMinSdkVersion: 22 + AndroidMinSdkVersion: 23 AndroidTargetSdkVersion: 0 AndroidPreferredInstallLocation: 1 aotOptions: nimt-trampolines=1024 @@ -172,16 +181,18 @@ PlayerSettings: ForceInternetPermission: 0 ForceSDCardPermission: 0 CreateWallpaper: 0 - APKExpansionFiles: 0 + androidSplitApplicationBinary: 0 keepLoadedShadersAlive: 0 StripUnusedMeshComponents: 1 strictShaderVariantMatching: 0 VertexChannelCompressionMask: 4054 iPhoneSdkVersion: 988 - iOSTargetOSVersionString: 12.0 + iOSSimulatorArchitecture: 0 + iOSTargetOSVersionString: 13.0 tvOSSdkVersion: 0 + tvOSSimulatorArchitecture: 0 tvOSRequireExtendedGameController: 0 - tvOSTargetOSVersionString: 12.0 + tvOSTargetOSVersionString: 13.0 VisionOSSdkVersion: 0 VisionOSTargetOSVersionString: 1.0 uIPrerenderedIcon: 0 @@ -208,7 +219,6 @@ PlayerSettings: rgba: 0 iOSLaunchScreenFillPct: 100 iOSLaunchScreenSize: 100 - iOSLaunchScreenCustomXibPath: iOSLaunchScreeniPadType: 0 iOSLaunchScreeniPadImage: {fileID: 0} iOSLaunchScreeniPadBackgroundColor: @@ -216,7 +226,6 @@ PlayerSettings: rgba: 0 iOSLaunchScreeniPadFillPct: 100 iOSLaunchScreeniPadSize: 100 - iOSLaunchScreeniPadCustomXibPath: iOSLaunchScreenCustomStoryboardPath: iOSLaunchScreeniPadCustomStoryboardPath: iOSDeviceRequirements: [] @@ -226,6 +235,7 @@ PlayerSettings: iOSMetalForceHardShadows: 0 metalEditorSupport: 1 metalAPIValidation: 1 + metalCompileShaderBinary: 0 iOSRenderExtraFrameOnPause: 0 iosCopyPluginsCodeInsteadOfSymlink: 0 appleDeveloperTeamID: @@ -252,12 +262,12 @@ PlayerSettings: useCustomGradleSettingsTemplate: 0 useCustomProguardFile: 0 AndroidTargetArchitectures: 1 - AndroidTargetDevices: 0 AndroidSplashScreenScale: 0 androidSplashScreen: {fileID: 0} AndroidKeystoreName: AndroidKeyaliasName: AndroidEnableArmv9SecurityFeatures: 0 + AndroidEnableArm64MTE: 0 AndroidBuildApkPerCpuArchitecture: 0 AndroidTVCompatibility: 0 AndroidIsGame: 1 @@ -270,11 +280,12 @@ PlayerSettings: height: 180 banner: {fileID: 0} androidGamepadSupportLevel: 0 - chromeosInputEmulation: 1 AndroidMinifyRelease: 0 AndroidMinifyDebug: 0 AndroidValidateAppBundleSize: 1 AndroidAppBundleSizeToValidate: 150 + AndroidReportGooglePlayAppDependencies: 1 + androidSymbolsSizeThreshold: 800 m_BuildTargetIcons: [] m_BuildTargetPlatformIcons: - m_BuildTarget: iPhone @@ -545,18 +556,14 @@ PlayerSettings: iPhone: 1 tvOS: 1 m_BuildTargetGroupLightmapEncodingQuality: - - m_BuildTarget: Android - m_EncodingQuality: 1 - - m_BuildTarget: iPhone - m_EncodingQuality: 1 - - m_BuildTarget: tvOS - m_EncodingQuality: 1 - m_BuildTargetGroupHDRCubemapEncodingQuality: - - m_BuildTarget: Android + - serializedVersion: 2 + m_BuildTarget: Android m_EncodingQuality: 1 - - m_BuildTarget: iPhone + - serializedVersion: 2 + m_BuildTarget: iOS m_EncodingQuality: 1 - - m_BuildTarget: tvOS + - serializedVersion: 2 + m_BuildTarget: tvOS m_EncodingQuality: 1 m_BuildTargetGroupLightmapSettings: [] m_BuildTargetGroupLoadStoreDebugModeSettings: [] @@ -568,11 +575,13 @@ PlayerSettings: - m_BuildTarget: tvOS m_Encoding: 1 m_BuildTargetDefaultTextureCompressionFormat: - - m_BuildTarget: Android - m_Format: 3 + - serializedVersion: 3 + m_BuildTarget: Android + m_Formats: 03000000 playModeTestRunnerEnabled: 0 runPlayModeTestAsEditModeTest: 0 actionOnDotNetUnhandledException: 1 + editorGfxJobOverride: 1 enableInternalProfiler: 0 logObjCUncaughtExceptions: 1 enableCrashReportAPI: 0 @@ -580,7 +589,7 @@ PlayerSettings: locationUsageDescription: microphoneUsageDescription: bluetoothUsageDescription: - macOSTargetOSVersion: 10.13.0 + macOSTargetOSVersion: 11.0 switchNMETAOverride: switchNetLibKey: switchSocketMemoryPoolSize: 6144 @@ -588,7 +597,7 @@ PlayerSettings: switchSocketConcurrencyLimit: 14 switchScreenResolutionBehavior: 2 switchUseCPUProfiler: 0 - switchUseGOLDLinker: 0 + switchEnableFileSystemTrace: 0 switchLTOSetting: 0 switchApplicationID: 0x01004b9000490000 switchNSODependencies: @@ -718,13 +727,14 @@ PlayerSettings: switchSocketBufferEfficiency: 4 switchSocketInitializeEnabled: 1 switchNetworkInterfaceManagerInitializeEnabled: 1 - switchPlayerConnectionEnabled: 1 + switchDisableHTCSPlayerConnection: 0 switchUseNewStyleFilepaths: 1 switchUseLegacyFmodPriorities: 0 switchUseMicroSleepForYield: 1 switchEnableRamDiskSupport: 0 switchMicroSleepForYieldTime: 25 switchRamDiskSpaceSize: 12 + switchUpgradedPlayerSettingsToNMETA: 0 ps4NPAgeRating: 12 ps4NPTitleSecret: ps4NPTrophyPackPath: @@ -827,7 +837,12 @@ PlayerSettings: webGLMemoryLinearGrowthStep: 16 webGLMemoryGeometricGrowthStep: 0.2 webGLMemoryGeometricGrowthCap: 96 + webGLEnableWebGPU: 0 webGLPowerPreference: 2 + webGLWebAssemblyTable: 0 + webGLWebAssemblyBigInt: 0 + webGLCloseOnQuit: 0 + webWasm2023: 0 scriptingDefineSymbols: Standalone: additionalCompilerArguments: {} @@ -836,6 +851,7 @@ PlayerSettings: Standalone: 1 il2cppCompilerConfiguration: {} il2cppCodeGeneration: {} + il2cppStacktraceInformation: {} managedStrippingLevel: EmbeddedLinux: 1 GameCoreScarlett: 1 @@ -860,6 +876,7 @@ PlayerSettings: gcIncremental: 1 gcWBarrierValidation: 0 apiCompatibilityLevelPerPlatform: {} + editorAssembliesCompatibilityLevel: 1 m_RenderingPath: 1 m_MobileRenderingPath: 1 metroPackageName: ZMotion @@ -883,6 +900,7 @@ PlayerSettings: metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} metroSplashScreenUseBackgroundColor: 0 + syncCapabilities: 0 platformCapabilities: {} metroTargetDeviceFamilies: {} metroFTAName: @@ -933,9 +951,11 @@ PlayerSettings: hmiPlayerDataPath: hmiForceSRGBBlit: 1 embeddedLinuxEnableGamepadInput: 1 - hmiLogStartupTiming: 0 hmiCpuConfiguration: + hmiLogStartupTiming: 0 + qnxGraphicConfPath: apiCompatibilityLevel: 6 + captureStartupLogs: {} activeInputHandler: 0 windowsGamepadBackendHint: 0 cloudProjectId: @@ -949,3 +969,5 @@ PlayerSettings: platformRequiresReadableAssets: 0 virtualTexturingSupportEnabled: 0 insecureHttpOption: 0 + androidVulkanDenyFilterList: [] + androidVulkanAllowFilterList: [] From d41b3d9a8265e0f652506d60d42ae31bfd56c03b Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 22 Nov 2024 20:13:10 +0900 Subject: [PATCH 021/224] Add: Box --- .../General/LitMotionAudioExtensions.cs | 4 +- .../General/LitMotionMaterialExtensions.cs | 24 ++--- .../LitMotionTextMeshProExtensions.cs | 97 ++++++++++--------- .../UIToolkit/LitMotionUIToolkitExtensions.cs | 18 ++-- .../LitMotionVisualEffectExtensions.cs | 40 ++++---- .../uGUI/LitMotionUGUIExtensions.cs | 18 ++-- .../Runtime/Internal/ActionWithState.cs | 25 ----- .../Runtime/Internal/ActionWithState.cs.meta | 2 - .../Assets/LitMotion/Runtime/Internal/Box.cs | 78 +++++++++++++++ .../LitMotion/Runtime/Internal/Box.cs.meta | 2 + .../Runtime/MotionBuilderExtensions.cs | 4 +- 11 files changed, 183 insertions(+), 129 deletions(-) delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs index cf785bf1..fb8ef2d8 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionAudioExtensions.cs @@ -60,9 +60,9 @@ public static MotionHandle BindToAudioMixerFloat(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(audioMixer); - return builder.Bind((audioMixer, name), static (x, state) => + return builder.Bind(audioMixer, name, static (x, audioMixer, name) => { - state.audioMixer.SetFloat(state.name, x); + audioMixer.SetFloat(name, x); }); } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs index be952d86..762ef85e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionMaterialExtensions.cs @@ -20,9 +20,9 @@ public static MotionHandle BindToMaterialFloat(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.Bind((material, name), static (x, state) => + return builder.Bind(material, name, static (x, material, name) => { - state.material.SetFloat(state.name, x); + material.SetFloat(name, x); }); } @@ -39,9 +39,9 @@ public static MotionHandle BindToMaterialFloat(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.Bind(material, (x, m) => + return builder.Bind(material, Box.Create(nameID), static (x, material, nameID) => { - m.SetFloat(nameID, x); + material.SetFloat(nameID.Value, x); }); } @@ -58,9 +58,9 @@ public static MotionHandle BindToMaterialInt(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.Bind((material, name), static (x, state) => + return builder.Bind(material, name, static (x, material, name) => { - state.material.SetInteger(state.name, x); + material.SetInteger(name, x); }); } @@ -77,9 +77,9 @@ public static MotionHandle BindToMaterialInt(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.Bind(material, (x, m) => + return builder.Bind(material, Box.Create(nameID), static (x, material, nameID) => { - m.SetInteger(nameID, x); + material.SetInteger(nameID.Value, x); }); } @@ -96,9 +96,9 @@ public static MotionHandle BindToMaterialColor(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.Bind((material, name), static (x, state) => + return builder.Bind(material, name, static (x, material, name) => { - state.material.SetColor(state.name, x); + material.SetColor(name, x); }); } @@ -115,9 +115,9 @@ public static MotionHandle BindToMaterialColor(this MotionBu where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(material); - return builder.Bind(material, (x, m) => + return builder.Bind(material, Box.Create(nameID), static (x, material, nameID) => { - m.SetColor(nameID, x); + material.SetColor(nameID.Value, x); }); } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs index 3821cc91..9d8e1f05 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs @@ -3,6 +3,7 @@ using UnityEngine; using Unity.Collections; using TMPro; + #if LITMOTION_SUPPORT_ZSTRING using Cysharp.Text; #endif @@ -383,12 +384,12 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.Bind((text, format), static (x, state) => + return builder.Bind(text, format, static (x, text, format) => { #if LITMOTION_SUPPORT_ZSTRING - state.text.SetTextFormat(state.format, x); + text.SetTextFormat(format, x); #else - state.text.text = string.Format(state.format, x); + text.text = string.Format(format, x); #endif }); } @@ -433,12 +434,12 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.Bind((text, format), static (x, state) => + return builder.Bind(text, format, static (x, text, format) => { #if LITMOTION_SUPPORT_ZSTRING - state.text.SetTextFormat(state.format, x); + text.SetTextFormat(format, x); #else - state.text.text = string.Format(state.format, x); + text.text = string.Format(format, x); #endif }); } @@ -483,12 +484,12 @@ public unsafe static MotionHandle BindToText(this MotionBuil where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(text); - return builder.Bind((text, format), static (x, state) => + return builder.Bind(text, format, static (x, text, format) => { #if LITMOTION_SUPPORT_ZSTRING - state.text.SetTextFormat(state.format, x); + text.SetTextFormat(format, x); #else - state.text.text = string.Format(state.format, x); + text.text = string.Format(format, x); #endif }); } @@ -510,9 +511,9 @@ public static MotionHandle BindToTMPCharColor(this MotionBui var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].color = x; + animator.charInfoArray[charIndex.Value].color = x; }); animator.motionHandleList.Add(handle); @@ -536,9 +537,9 @@ public static MotionHandle BindToTMPCharColorR(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].color.r = x; + animator.charInfoArray[charIndex.Value].color.r = x; }); animator.motionHandleList.Add(handle); @@ -562,9 +563,9 @@ public static MotionHandle BindToTMPCharColorG(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].color.g = x; + animator.charInfoArray[charIndex.Value].color.g = x; }); animator.motionHandleList.Add(handle); @@ -588,9 +589,9 @@ public static MotionHandle BindToTMPCharColorB(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].color.b = x; + animator.charInfoArray[charIndex.Value].color.b = x; }); animator.motionHandleList.Add(handle); @@ -614,9 +615,9 @@ public static MotionHandle BindToTMPCharColorA(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].color.a = x; + animator.charInfoArray[charIndex.Value].color.a = x; }); animator.motionHandleList.Add(handle); @@ -640,9 +641,9 @@ public static MotionHandle BindToTMPCharPosition(this Motion var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].position = x; + animator.charInfoArray[charIndex.Value].position = x; }); animator.motionHandleList.Add(handle); @@ -666,9 +667,9 @@ public static MotionHandle BindToTMPCharPositionX(this Motio var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].position.x = x; + animator.charInfoArray[charIndex.Value].position.x = x; }); animator.motionHandleList.Add(handle); @@ -692,9 +693,9 @@ public static MotionHandle BindToTMPCharPositionY(this Motio var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].position.y = x; + animator.charInfoArray[charIndex.Value].position.y = x; }); animator.motionHandleList.Add(handle); @@ -718,9 +719,9 @@ public static MotionHandle BindToTMPCharPositionZ(this Motio var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].position.z = x; + animator.charInfoArray[charIndex.Value].position.z = x; }); animator.motionHandleList.Add(handle); @@ -744,9 +745,9 @@ public static MotionHandle BindToTMPCharRotation(this Motion var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].rotation = x; + animator.charInfoArray[charIndex.Value].rotation = x; }); animator.motionHandleList.Add(handle); @@ -770,9 +771,9 @@ public static MotionHandle BindToTMPCharEulerAngles(this Mot var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].rotation = Quaternion.Euler(x); + animator.charInfoArray[charIndex.Value].rotation = Quaternion.Euler(x); }); animator.motionHandleList.Add(handle); @@ -796,11 +797,11 @@ public static MotionHandle BindToTMPCharEulerAnglesX(this Mo var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - var eulerAngles = animator.charInfoArray[charIndex].rotation.eulerAngles; + var eulerAngles = animator.charInfoArray[charIndex.Value].rotation.eulerAngles; eulerAngles.x = x; - animator.charInfoArray[charIndex].rotation = Quaternion.Euler(eulerAngles); + animator.charInfoArray[charIndex.Value].rotation = Quaternion.Euler(eulerAngles); }); animator.motionHandleList.Add(handle); @@ -824,11 +825,11 @@ public static MotionHandle BindToTMPCharEulerAnglesY(this Mo var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - var eulerAngles = animator.charInfoArray[charIndex].rotation.eulerAngles; + var eulerAngles = animator.charInfoArray[charIndex.Value].rotation.eulerAngles; eulerAngles.y = x; - animator.charInfoArray[charIndex].rotation = Quaternion.Euler(eulerAngles); + animator.charInfoArray[charIndex.Value].rotation = Quaternion.Euler(eulerAngles); }); animator.motionHandleList.Add(handle); @@ -852,11 +853,11 @@ public static MotionHandle BindToTMPCharEulerAnglesZ(this Mo var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - var eulerAngles = animator.charInfoArray[charIndex].rotation.eulerAngles; + var eulerAngles = animator.charInfoArray[charIndex.Value].rotation.eulerAngles; eulerAngles.z = x; - animator.charInfoArray[charIndex].rotation = Quaternion.Euler(eulerAngles); + animator.charInfoArray[charIndex.Value].rotation = Quaternion.Euler(eulerAngles); }); animator.motionHandleList.Add(handle); @@ -880,9 +881,9 @@ public static MotionHandle BindToTMPCharScale(this MotionBui var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].scale = x; + animator.charInfoArray[charIndex.Value].scale = x; }); animator.motionHandleList.Add(handle); @@ -906,9 +907,9 @@ public static MotionHandle BindToTMPCharScaleX(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].scale.x = x; + animator.charInfoArray[charIndex.Value].scale.x = x; }); animator.motionHandleList.Add(handle); @@ -932,9 +933,9 @@ public static MotionHandle BindToTMPCharScaleY(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].scale.y = x; + animator.charInfoArray[charIndex.Value].scale.y = x; }); animator.motionHandleList.Add(handle); @@ -958,9 +959,9 @@ public static MotionHandle BindToTMPCharScaleZ(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, (x, target) => + var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { - animator.charInfoArray[charIndex].scale.z = x; + animator.charInfoArray[charIndex.Value].scale.z = x; }); animator.motionHandleList.Add(handle); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs index 068072ba..10f4cfd6 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/UIToolkit/LitMotionUIToolkitExtensions.cs @@ -661,12 +661,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.Bind((textElement, format), static (x, state) => + return builder.Bind(textElement, format, static (x, textElement, format) => { #if LITMOTION_SUPPORT_ZSTRING - state.textElement.text = ZString.Format(state.format, x); + textElement.text = ZString.Format(format, x); #else - state.textElement.text = string.Format(state.format, x); + textElement.text = string.Format(format, x); #endif }); } @@ -704,12 +704,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.Bind((textElement, format), static (x, state) => + return builder.Bind(textElement, format, static (x, textElement, format) => { #if LITMOTION_SUPPORT_ZSTRING - state.textElement.text = ZString.Format(state.format, x); + textElement.text = ZString.Format(format, x); #else - state.textElement.text = string.Format(state.format, x); + textElement.text = string.Format(format, x); #endif }); } @@ -747,12 +747,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(textElement); - return builder.Bind((textElement, format), static (x, state) => + return builder.Bind(textElement, format, static (x, textElement, format) => { #if LITMOTION_SUPPORT_ZSTRING - state.textElement.text = ZString.Format(state.format, x); + textElement.text = ZString.Format(format, x); #else - state.textElement.text = string.Format(state.format, x); + textElement.text = string.Format(format, x); #endif }); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs index d4dde74a..47794b84 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/VisualEffectGragh/LitMotionVisualEffectExtensions.cs @@ -22,9 +22,9 @@ public static MotionHandle BindToVisualEffectFloat(this Moti where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.Bind((visualEffect, name), static (x, state) => + return builder.Bind(visualEffect, name, static (x, visualEffect, name) => { - state.visualEffect.SetFloat(state.name, x); + visualEffect.SetFloat(name, x); }); } @@ -41,9 +41,9 @@ public static MotionHandle BindToVisualEffectFloat(this Moti where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.Bind(visualEffect, (x, target) => + return builder.Bind(visualEffect, Box.Create(nameID), static (x, visualEffect, nameID) => { - target.SetFloat(nameID, x); + visualEffect.SetFloat(nameID.Value, x); }); } @@ -60,9 +60,9 @@ public static MotionHandle BindToVisualEffectInt(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.Bind((visualEffect, name), static (x, state) => + return builder.Bind(visualEffect, name, static (x, visualEffect, name) => { - state.visualEffect.SetInt(state.name, x); + visualEffect.SetInt(name, x); }); } @@ -79,9 +79,9 @@ public static MotionHandle BindToVisualEffectInt(this Motion where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.Bind(visualEffect, (x, target) => + return builder.Bind(visualEffect, Box.Create(nameID), static (x, visualEffect, nameID) => { - target.SetFloat(nameID, x); + visualEffect.SetFloat(nameID.Value, x); }); } @@ -98,9 +98,9 @@ public static MotionHandle BindToVisualEffectVector2(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.Bind((visualEffect, name), static (x, state) => + return builder.Bind(visualEffect, name, static (x, visualEffect, name) => { - state.visualEffect.SetVector2(state.name, x); + visualEffect.SetVector2(name, x); }); } @@ -117,9 +117,9 @@ public static MotionHandle BindToVisualEffectVector2(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.Bind(visualEffect, (x, target) => + return builder.Bind(visualEffect, Box.Create(nameID), static (x, visualEffect, nameID) => { - target.SetVector2(nameID, x); + visualEffect.SetVector2(nameID.Value, x); }); } @@ -136,9 +136,9 @@ public static MotionHandle BindToVisualEffectVector3(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.Bind((visualEffect, name), static (x, state) => + return builder.Bind(visualEffect, name, static (x, visualEffect, name) => { - state.visualEffect.SetVector3(state.name, x); + visualEffect.SetVector3(name, x); }); } @@ -155,9 +155,9 @@ public static MotionHandle BindToVisualEffectVector3(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.Bind(visualEffect, (x, target) => + return builder.Bind(visualEffect, Box.Create(nameID), static (x, visualEffect, nameID) => { - target.SetVector3(nameID, x); + visualEffect.SetVector3(nameID.Value, x); }); } @@ -174,9 +174,9 @@ public static MotionHandle BindToVisualEffectVector4(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.Bind((visualEffect, name), static (x, state) => + return builder.Bind(visualEffect, name, static (x, visualEffect, name) => { - state.visualEffect.SetVector4(state.name, x); + visualEffect.SetVector4(name, x); }); } @@ -193,9 +193,9 @@ public static MotionHandle BindToVisualEffectVector4(this Mo where TAdapter : unmanaged, IMotionAdapter { Error.IsNull(visualEffect); - return builder.Bind(visualEffect, (x, target) => + return builder.Bind(visualEffect, Box.Create(nameID), static (x, visualEffect, nameID) => { - target.SetVector4(nameID, x); + visualEffect.SetVector4(nameID.Value, x); }); } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs index ae2c056f..2d4247be 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs @@ -301,12 +301,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.Bind((text, format), static (x, state) => + return builder.Bind(text, format, static (x, text, format) => { #if LITMOTION_SUPPORT_ZSTRING - state.text.text = ZString.Format(state.format, x); + text.text = ZString.Format(format, x); #else - state.text.text = string.Format(state.format, x); + text.text = string.Format(format, x); #endif }); } @@ -344,12 +344,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.Bind((text, format), static (x, state) => + return builder.Bind(text, format, static (x, text, format) => { #if LITMOTION_SUPPORT_ZSTRING - state.text.text = ZString.Format(state.format, x); + text.text = ZString.Format(format, x); #else - state.text.text = string.Format(state.format, x); + text.text = string.Format(format, x); #endif }); } @@ -387,12 +387,12 @@ public static MotionHandle BindToText(this MotionBuilder { Error.IsNull(text); - return builder.Bind((text, format), static (x, state) => + return builder.Bind(text, format, static (x, text, format) => { #if LITMOTION_SUPPORT_ZSTRING - state.text.text = ZString.Format(state.format, x); + text.text = ZString.Format(format, x); #else - state.text.text = string.Format(state.format, x); + text.text = string.Format(format, x); #endif }); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs deleted file mode 100644 index d0d58cd0..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace LitMotion -{ - internal sealed record ActionWithState - where TValue : unmanaged - where TState : struct - { - public ActionWithState(TState state, Action action) - { - this.state = state; - this.action = action; - } - - readonly TState state; - readonly Action action; - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Invoke(TValue value) - { - action(value, state); - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs.meta deleted file mode 100644 index 67e17bf0..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ActionWithState.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: a1a9468e2ee624ed3b644c7610741c29 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs new file mode 100644 index 00000000..e4755377 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs @@ -0,0 +1,78 @@ +using System.Runtime.CompilerServices; +using Unity.Collections.LowLevel.Unsafe; + +namespace LitMotion +{ + internal static class Box + { + static readonly Box BoxMinus1 = new(0); + static readonly Box Box0 = new(0); + static readonly Box Box1 = new(1); + static readonly Box Box2 = new(2); + static readonly Box Box3 = new(3); + static readonly Box Box4 = new(4); + static readonly Box Box5 = new(5); + static readonly Box Box6 = new(6); + static readonly Box Box7 = new(7); + static readonly Box Box8 = new(8); + static readonly Box Box9 = new(9); + + static readonly Box BoxTrue = new(true); + static readonly Box BoxFalse = new(true); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Box Create(T value) + where T : struct + { + if (typeof(T) == typeof(int)) + { + var box = Create(UnsafeUtility.As(ref value)); + return UnsafeUtility.As, Box>(ref box); + } + else if (typeof(T) == typeof(bool)) + { + var box = Create(UnsafeUtility.As(ref value)); + return UnsafeUtility.As, Box>(ref box); + } + + return new Box(value); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Box Create(int value) + { + return value switch + { + -1 => BoxMinus1, + 0 => Box0, + 1 => Box1, + 2 => Box2, + 3 => Box3, + 4 => Box4, + 5 => Box5, + 6 => Box6, + 7 => Box7, + 8 => Box8, + 9 => Box9, + _ => new Box(value), + }; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static Box Create(bool value) + { + return value ? BoxTrue : BoxFalse; + } + } + + internal sealed record Box + where T : struct + { + internal Box(T value) + { + Value = value; + } + + public T Value { get; } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs.meta new file mode 100644 index 00000000..68ea8f63 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 858a24f7a0fbb4edcb5727a3656af8a3 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index 099b1a5c..dcce1b3b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -1,6 +1,6 @@ using System; +using LitMotion; using Unity.Collections; -using UnityEngine; namespace LitMotion { @@ -22,7 +22,7 @@ public static MotionHandle Bind(this MotionB where TAdapter : unmanaged, IMotionAdapter where TState : struct { - return builder.Bind(new ActionWithState(state, action), (x, state) => state.Invoke(x)); + return builder.Bind(Box.Create(state), action, (x, box, action) => action(x, box.Value)); } /// From 5d274a446659cab3549ba7b94d05faad66baa377 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 22 Nov 2024 21:19:11 +0900 Subject: [PATCH 022/224] Add: Bind overload (function pointer) --- .../Runtime/Internal/ManagedMotionData.cs | 50 +++++--- .../Runtime/Internal/MotionStorage.cs | 3 +- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 110 +++++++++++++++++- .../Runtime/LitMotion.Tests.Runtime.asmdef | 2 +- .../LitMotion/Tests/Runtime/UnsafeBindTest.cs | 105 +++++++++++++++++ .../Tests/Runtime/UnsafeBindTest.cs.meta | 2 + 6 files changed, 255 insertions(+), 17 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs index 2009cc7e..b2494e67 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs @@ -9,7 +9,7 @@ namespace LitMotion /// A structure that holds motion managed data. /// [StructLayout(LayoutKind.Auto)] - public struct ManagedMotionData + public unsafe struct ManagedMotionData { public bool IsCallbackRunning; public bool CancelOnError; @@ -18,6 +18,7 @@ public struct ManagedMotionData public object State0; public object State1; public object State2; + public void* UpdateActionPtr; public object UpdateAction; public Action OnCompleteAction; public Action OnCancelAction; @@ -25,20 +26,41 @@ public struct ManagedMotionData [MethodImpl(MethodImplOptions.AggressiveInlining)] public void UpdateUnsafe(in TValue value) where TValue : unmanaged { - switch (StateCount) + if (UpdateActionPtr == null) { - case 0: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value); - break; - case 1: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0); - break; - case 2: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0, State1); - break; - case 3: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0, State1, State2); - break; + switch (StateCount) + { + case 0: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value); + break; + case 1: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0); + break; + case 2: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0, State1); + break; + case 3: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0, State1, State2); + break; + } + } + else + { + switch (StateCount) + { + case 0: + ((delegate* managed)UpdateActionPtr)(value); + break; + case 1: + ((delegate* managed)UpdateActionPtr)(value, State0); + break; + case 2: + ((delegate* managed)UpdateActionPtr)(value, State0, State1); + break; + case 3: + ((delegate* managed)UpdateActionPtr)(value, State0, State1, State2); + break; + } } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 97ecb0ef..1c21044c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -61,7 +61,7 @@ public void EnsureCapacity(int minimumCapacity) ArrayHelper.EnsureCapacity(ref managedDataArray, minimumCapacity); } - public MotionHandle Create(ref MotionBuilder builder) + public unsafe MotionHandle Create(ref MotionBuilder builder) { EnsureCapacity(tail + 1); var buffer = builder.buffer; @@ -103,6 +103,7 @@ public MotionHandle Create(ref MotionBuilder builder managedDataRef.IsCallbackRunning = false; managedDataRef.CancelOnError = buffer.CancelOnError; managedDataRef.UpdateAction = buffer.UpdateAction; + managedDataRef.UpdateActionPtr = buffer.UpdateActionPtr; managedDataRef.OnCancelAction = buffer.OnCancelAction; managedDataRef.OnCompleteAction = buffer.OnCompleteAction; managedDataRef.SkipValuesDuringDelay = buffer.SkipValuesDuringDelay; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index 4db7bcae..f07d4185 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -4,7 +4,7 @@ namespace LitMotion { - internal sealed class MotionBuilderBuffer + internal unsafe sealed class MotionBuilderBuffer where TValue : unmanaged where TOptions : unmanaged, IMotionOptions { @@ -50,6 +50,7 @@ public static void Return(MotionBuilderBuffer buffer) buffer.StateCount = default; buffer.UpdateAction = default; + buffer.UpdateActionPtr = default; buffer.OnCompleteAction = default; buffer.OnCancelAction = default; @@ -86,6 +87,7 @@ public static void Return(MotionBuilderBuffer buffer) public object State1; public object State2; public byte StateCount; + public void* UpdateActionPtr; public object UpdateAction; public Action OnCompleteAction; public Action OnCancelAction; @@ -327,6 +329,72 @@ public MotionHandle Bind(TState0 state0, TState1 stat return ScheduleMotion(); } + /// + /// Create motion and bind it to a specific object, property, etc. + /// + /// Function pointer that handles binding + /// Handle of the created motion data. + public unsafe MotionHandle Bind(delegate* managed ptr) + { + CheckBuffer(); + SetCallbackData(ptr); + return ScheduleMotion(); + } + + /// + /// Create motion and bind it to a specific object. + /// + /// Type of state + /// Motion state + /// Function pointer that handles binding + /// Handle of the created motion data. + public unsafe MotionHandle Bind(TState state, delegate* managed ptr) + where TState : class + { + CheckBuffer(); + SetCallbackData(state, ptr); + return ScheduleMotion(); + } + + /// + /// Create motion and bind it to a specific object. + /// + /// Type of state + /// Type of state + /// Motion state + /// Motion state + /// Function pointer that handles binding + /// Handle of the created motion data. + public unsafe MotionHandle Bind(TState0 state0, TState1 state1, delegate* managed ptr) + where TState0 : class + where TState1 : class + { + CheckBuffer(); + SetCallbackData(state0, state1, ptr); + return ScheduleMotion(); + } + + /// + /// Create motion and bind it to a specific object. + /// + /// Type of state + /// Type of state + /// Type of state + /// Motion state + /// Motion state + /// Motion state + /// Funciton pointer that handles binding + /// Handle of the created motion data. + public unsafe MotionHandle Bind(TState0 state0, TState1 state1, TState2 state2, delegate* managed ptr) + where TState0 : class + where TState1 : class + where TState2 : class + { + CheckBuffer(); + SetCallbackData(state0, state1, state2, ptr); + return ScheduleMotion(); + } + /// /// Preserves the internal buffer and prevents the builder from being automatically destroyed after creating the motion data. /// Calling this allows you to create the motion multiple times, but you must call the Dispose method to destroy the builder after use. @@ -436,6 +504,46 @@ internal readonly void SetCallbackData(TState0 state0 buffer.UpdateAction = action; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal unsafe readonly void SetCallbackData(delegate* managed action) + { + buffer.StateCount = 0; + buffer.UpdateActionPtr = action; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal unsafe readonly void SetCallbackData(TState state, delegate* managed action) + where TState : class + { + buffer.StateCount = 1; + buffer.State0 = state; + buffer.UpdateActionPtr = action; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal unsafe readonly void SetCallbackData(TState0 state0, TState1 state1, delegate* managed action) + where TState0 : class + where TState1 : class + { + buffer.StateCount = 2; + buffer.State0 = state0; + buffer.State1 = state1; + buffer.UpdateActionPtr = action; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal unsafe readonly void SetCallbackData(TState0 state0, TState1 state1, TState2 state2, delegate* managed action) + where TState0 : class + where TState1 : class + where TState2 : class + { + buffer.StateCount = 3; + buffer.State0 = state0; + buffer.State1 = state1; + buffer.State2 = state2; + buffer.UpdateActionPtr = action; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] readonly void CheckBuffer() { diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef b/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef index 3ccb39ea..bbe5783a 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef @@ -13,7 +13,7 @@ ], "includePlatforms": [], "excludePlatforms": [], - "allowUnsafeCode": false, + "allowUnsafeCode": true, "overrideReferences": true, "precompiledReferences": [ "nunit.framework.dll", diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs new file mode 100644 index 00000000..d8aff52c --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs @@ -0,0 +1,105 @@ +using System.Collections; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +namespace LitMotion.Tests.Runtime +{ + public class UnsafeBindTest + { + [UnityTest] + public IEnumerator Test_Bind_Pointer() + { + var endValue = 10f; + Create(endValue); + yield return new WaitForSeconds(1.1f); + Assert.AreEqual(sharedValue, endValue); + } + + [UnityTest] + public IEnumerator Test_Bind_Pointer_WithState_1() + { + var target1 = new TestClass(); + var endValue = 10f; + Create(endValue, target1); + yield return new WaitForSeconds(1.1f); + Assert.AreEqual(target1.Value, endValue); + } + + [UnityTest] + public IEnumerator Test_Bind_Pointer_WithState_2() + { + var target1 = new TestClass(); + var target2 = new TestClass(); + var endValue = 10f; + Create(endValue, target1, target2); + yield return new WaitForSeconds(1.1f); + Assert.AreEqual(target1.Value, endValue); + Assert.AreEqual(target2.Value, endValue); + } + + [UnityTest] + public IEnumerator Test_Bind_Pointer_WithState_3() + { + var target1 = new TestClass(); + var target2 = new TestClass(); + var target3 = new TestClass(); + var endValue = 10f; + Create(endValue, target1, target2, target3); + yield return new WaitForSeconds(1.1f); + Assert.AreEqual(target1.Value, endValue); + Assert.AreEqual(target2.Value, endValue); + Assert.AreEqual(target3.Value, endValue); + } + + static float sharedValue; + + static unsafe MotionHandle Create(float endValue) + { + return LMotion.Create(0f, endValue, 1f).Bind(&BindMethod); + } + + static unsafe MotionHandle Create(float endValue, TestClass state0) + { + return LMotion.Create(0f, endValue, 1f).Bind(state0, &BindMethod); + } + + static unsafe MotionHandle Create(float endValue, TestClass state0, TestClass state1) + { + return LMotion.Create(0f, endValue, 1f).Bind(state0, state1, &BindMethod); + } + + static unsafe MotionHandle Create(float endValue, TestClass state0, TestClass state1, TestClass state2) + { + return LMotion.Create(0f, endValue, 1f).Bind(state0, state1, state2, &BindMethod); + } + + static void BindMethod(float value) + { + sharedValue = value; + } + + static void BindMethod(float value, TestClass state0) + { + state0.Value = value; + } + + static void BindMethod(float value, TestClass state0, TestClass state1) + { + state0.Value = value; + state1.Value = value; + } + + static void BindMethod(float value, TestClass state0, TestClass state1, TestClass state2) + { + state0.Value = value; + state1.Value = value; + state2.Value = value; + } + + class TestClass + { + public float Value { get; set; } + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs.meta new file mode 100644 index 00000000..82fae892 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 40f7df00b22734bc584ac22d2d75b729 \ No newline at end of file From 2a4fc29e7893f1e38097b76bc106d1ee97a7ddfa Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 00:19:11 +0900 Subject: [PATCH 023/224] Optimize: Bind with struct state --- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 9 +++++++++ .../LitMotion/Runtime/MotionBuilderExtensions.cs | 12 ++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index f07d4185..3f0941b2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -257,6 +257,7 @@ public readonly MotionBuilder WithScheduler(IMotionS /// Create motion and play it without binding it to a specific object. /// /// Handle of the created motion data. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public MotionHandle RunWithoutBinding() { CheckBuffer(); @@ -268,6 +269,7 @@ public MotionHandle RunWithoutBinding() /// /// Action that handles binding /// Handle of the created motion data. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public MotionHandle Bind(Action action) { CheckBuffer(); @@ -282,6 +284,7 @@ public MotionHandle Bind(Action action) /// Motion state /// Action that handles binding /// Handle of the created motion data. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public MotionHandle Bind(TState state, Action action) where TState : class { @@ -299,6 +302,7 @@ public MotionHandle Bind(TState state, Action action) /// Motion state /// Action that handles binding /// Handle of the created motion data. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public MotionHandle Bind(TState0 state0, TState1 state1, Action action) where TState0 : class where TState1 : class @@ -319,6 +323,7 @@ public MotionHandle Bind(TState0 state0, TState1 state1, Actio /// Motion state /// Action that handles binding /// Handle of the created motion data. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public MotionHandle Bind(TState0 state0, TState1 state1, TState2 state2, Action action) where TState0 : class where TState1 : class @@ -334,6 +339,7 @@ public MotionHandle Bind(TState0 state0, TState1 stat /// /// Function pointer that handles binding /// Handle of the created motion data. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public unsafe MotionHandle Bind(delegate* managed ptr) { CheckBuffer(); @@ -348,6 +354,7 @@ public unsafe MotionHandle Bind(delegate* managed ptr) /// Motion state /// Function pointer that handles binding /// Handle of the created motion data. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public unsafe MotionHandle Bind(TState state, delegate* managed ptr) where TState : class { @@ -365,6 +372,7 @@ public unsafe MotionHandle Bind(TState state, delegate* managedMotion state /// Function pointer that handles binding /// Handle of the created motion data. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public unsafe MotionHandle Bind(TState0 state0, TState1 state1, delegate* managed ptr) where TState0 : class where TState1 : class @@ -385,6 +393,7 @@ public unsafe MotionHandle Bind(TState0 state0, TState1 state1 /// Motion state /// Funciton pointer that handles binding /// Handle of the created motion data. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public unsafe MotionHandle Bind(TState0 state0, TState1 state1, TState2 state2, delegate* managed ptr) where TState0 : class where TState1 : class diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index dcce1b3b..1b467a17 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.CompilerServices; using LitMotion; using Unity.Collections; @@ -16,13 +17,20 @@ public static class MotionBuilderExtensions /// Motion state /// Action that handles binding /// Handle of the created motion data. - public static MotionHandle Bind(this MotionBuilder builder, TState state, Action action) + public unsafe static MotionHandle Bind(this MotionBuilder builder, TState state, Action action) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter where TState : struct { - return builder.Bind(Box.Create(state), action, (x, box, action) => action(x, box.Value)); + return builder.Bind(Box.Create(state), action, &BindAction); + } + + static void BindAction(TValue value, Box state, Action action) + where TValue : unmanaged + where TState : struct + { + action(value, state.Value); } /// From 4092c23d88894acb90ab6bc675ad700694d465f9 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 00:19:26 +0900 Subject: [PATCH 024/224] Update: benchmark --- .../Assets/LitMotion/Runtime/AssemblyInfo.cs | 3 +- .../Tests/Benchmark/BindBenchmark.cs | 322 ++++++++++++++++++ ...enchmark.cs.meta => BindBenchmark.cs.meta} | 0 .../Tests/Benchmark/ClosureBenchmark.cs | 117 ------- .../LitMotion.Tests.Benchmark.asmdef | 2 +- 5 files changed, 325 insertions(+), 119 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs rename src/LitMotion/Assets/LitMotion/Tests/Benchmark/{ClosureBenchmark.cs.meta => BindBenchmark.cs.meta} (100%) delete mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs diff --git a/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs b/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs index c1d4cb5e..abca0c61 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs @@ -2,4 +2,5 @@ [assembly: InternalsVisibleTo("LitMotion.Extensions")] [assembly: InternalsVisibleTo("LitMotion.Editor")] -[assembly: InternalsVisibleTo("LitMotion.Tests.Runtime")] \ No newline at end of file +[assembly: InternalsVisibleTo("LitMotion.Tests.Runtime")] +[assembly: InternalsVisibleTo("LitMotion.Tests.Benchmark")] \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs new file mode 100644 index 00000000..f273f6f3 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs @@ -0,0 +1,322 @@ +using System; +using System.Collections; +using System.Runtime.CompilerServices; +using LitMotion.Adapters; +using NUnit.Framework; +using Unity.PerformanceTesting; +using UnityEngine.TestTools; + +namespace LitMotion.Tests.Benchmark +{ + public class BindBenchmark + { + CompositeMotionHandle handles = new(25000); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + MotionDispatcher.EnsureStorageCapacity(64000); + } + + [TearDown] + public void TearDown() + { + handles.Cancel(); + } + + [Test] + [Performance] + public unsafe void Benchmark_Bind_Pointer_Startup() + { + MeasureStartUp(() => + { + int state = 0; + LMotion.Create(0f, 1f, 3f) + .Bind(Box.Create(state), (Action)(static (x, state) => DoNothing(x, state)), &BindAction) + .AddTo(handles); + }); + } + + [Test] + [Performance] + public void Benchmark_Bind_Box_StartUp() + { + MeasureStartUp(() => + { + int state = 0; + LMotion.Create(0f, 1f, 3f) + .Bind(Box.Create(state), (x, box) => + { + DoNothing(x, box.Value); + }) + .AddTo(handles); + }); + } + + [Test] + [Performance] + public void Benchmark_Bind_ActionWithState_StartUp() + { + MeasureStartUp(() => + { + int state = 0; + LMotion.Create(0f, 1f, 3f) + .Bind(new ActionWithState(state, static (x, state) => DoNothing(x, state)), (x, state) => state.Invoke(x)) + .AddTo(handles); + }); + } + + [Test] + [Performance] + public void Benchmark_Bind_WrappedAction_StartUp() + { + MeasureStartUp(() => + { + int state = 0; + LMotion.Create(0f, 1f, 3f) + .Bind(Box.Create(state), static (x, state) => DoNothing(x, state), (float x, Box box, Action action) => action(x, box.Value)) + .AddTo(handles); + }); + } + + [Test] + [Performance] + public void Benchmark_Bind_Closure_Startup() + { + MeasureStartUp(() => + { + int state = 0; + LMotion.Create(0f, 1f, 3f) + .Bind(x => + { + DoNothing(x, state); + }) + .AddTo(handles); + }); + } + + [UnityTest] + [Performance] + public unsafe IEnumerator Benchmark_Bind_Pointer_Update() + { + return MeasureUpdate(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(Box.Create(i), (Action)(static (x, state) => DoNothing(x, state)), &BindAction) + .AddTo(handles); + } + }); + } + + [UnityTest] + [Performance] + public IEnumerator Benchmark_Bind_Box_Update() + { + return MeasureUpdate(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(Box.Create(i), (x, state) => + { + DoNothing(x, state.Value); + }) + .AddTo(handles); + } + }); + } + + [UnityTest] + [Performance] + public IEnumerator Benchmark_Bind_ActionWithState_Update() + { + return MeasureUpdate(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(new ActionWithState(i, static (x, state) => DoNothing(x, state)), (x, action) => action.Invoke(x)) + .AddTo(handles); + } + }); + } + + [UnityTest] + [Performance] + public IEnumerator Benchmark_Bind_WrappedAction_Update() + { + return MeasureUpdate(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(Box.Create(i), static (x, state) => DoNothing(x, state), (float x, Box box, Action action) => action(x, box.Value)) + .AddTo(handles); + } + }); + } + + [UnityTest] + [Performance] + public IEnumerator Benchmark_Bind_Closure_Update() + { + return MeasureUpdate(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(x => + { + DoNothing(x, i); + }) + .AddTo(handles); + } + }); + } + + [Test] + [Performance] + public unsafe void Benchmark_Bind_Pointer_GC() + { + MeasureGC(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(Box.Create(i), (Action)(static (x, state) => DoNothing(x, state)), &BindAction) + .AddTo(handles); + } + }); + } + + [Test] + [Performance] + public void Benchmark_Bind_Box_GC() + { + MeasureGC(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(Box.Create(i), (x, i) => + { + DoNothing(x, i.Value); + }) + .AddTo(handles); + } + }); + } + + [Test] + [Performance] + public void Benchmark_Bind_WrappedAction_GC() + { + MeasureGC(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(Box.Create(i), static (x, state) => DoNothing(x, state), (float x, Box box, Action action) => action(x, box.Value)) + .AddTo(handles); + } + }); + } + + [Test] + [Performance] + public void Benchmark_Bind_ActionWithState_GC() + { + MeasureGC(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(new ActionWithState(i, static (x, state) => DoNothing(x, state)), (x, action) => action.Invoke(x)) + .AddTo(handles); + } + }); + } + + [Test] + [Performance] + public void Benchmark_Bind_Closure_GC() + { + MeasureGC(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(x => + { + DoNothing(x, i); + }) + .AddTo(handles); + } + }); + } + + void MeasureStartUp(Action action) + { + Measure.Method(action) + .WarmupCount(10) + .IterationsPerMeasurement(10000) + .MeasurementCount(10) + .CleanUp(() => + { + handles.Cancel(); + }) + .Run(); + } + + IEnumerator MeasureUpdate(Action setUp) + { + setUp(); + + return Measure.Frames() + .WarmupCount(5) + .MeasurementCount(50) + .Run(); + } + + void MeasureGC(Action action) + { + GC.Collect(); + var prev = GC.GetTotalMemory(true); + action(); + var current = GC.GetTotalMemory(true); + Measure.Custom(new SampleGroup("GC.Alloc", SampleUnit.Byte), current - prev); + handles.Cancel(); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static void DoNothing(float value, int state) { } + + static void BindAction(float value, Box state, Action action) + { + action(value, state.Value); + } + + } + + internal sealed class ActionWithState + where TValue : unmanaged + where TState : struct + { + public ActionWithState(TState state, Action action) + { + this.state = state; + this.action = action; + } + + readonly TState state; + readonly Action action; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Invoke(TValue value) + { + action(value, state); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs.meta rename to src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs deleted file mode 100644 index 372938c9..00000000 --- a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/ClosureBenchmark.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System.Collections; -using System.Runtime.CompilerServices; -using LitMotion.Adapters; -using NUnit.Framework; -using Unity.PerformanceTesting; -using UnityEngine.TestTools; - -namespace LitMotion.Tests.Benchmark -{ - public class ClosureBenchmark - { - CompositeMotionHandle handles = new(25000); - - [OneTimeSetUp] - public void OneTimeSetUp() - { - MotionDispatcher.EnsureStorageCapacity(64000); - } - - [TearDown] - public void TearDown() - { - handles.Cancel(); - } - - [Test] - [Performance] - public void Benchmark_Bind_ActionWithState_Startup() - { - Measure.Method(() => - { - int state = 0; - LMotion.Create(0f, 1f, 3f) - .Bind(state, (x, state) => - { - DoNothing(x, state); - }) - .AddTo(handles); - }) - .WarmupCount(10) - .IterationsPerMeasurement(5000) - .MeasurementCount(5) - .CleanUp(() => - { - handles.Cancel(); - }) - .Run(); - } - - [Test] - [Performance] - public void Benchmark_Bind_Closure_Startup() - { - Measure.Method(() => - { - int state = 0; - LMotion.Create(0f, 1f, 3f) - .Bind(x => - { - DoNothing(x, state); - }) - .AddTo(handles); - }) - .WarmupCount(10) - .IterationsPerMeasurement(5000) - .MeasurementCount(5) - .CleanUp(() => - { - handles.Cancel(); - }) - .Run(); - } - - [UnityTest] - [Performance] - public IEnumerator Benchmark_Bind_ActionWithState_Update() - { - for (int i = 0; i < 10000; i++) - { - LMotion.Create(0f, 1f, 3f) - .Bind(i, (x, state) => - { - DoNothing(x, state); - }) - .AddTo(handles); - } - - yield return Measure.Frames() - .WarmupCount(5) - .MeasurementCount(20) - .Run(); - } - - [UnityTest] - [Performance] - public IEnumerator Benchmark_Bind_Closure_Update() - { - for (int i = 0; i < 10000; i++) - { - LMotion.Create(0f, 1f, 3f) - .Bind(x => - { - DoNothing(x, i); - }) - .AddTo(handles); - } - - yield return Measure.Frames() - .WarmupCount(5) - .MeasurementCount(20) - .Run(); - } - - [MethodImpl(MethodImplOptions.NoInlining)] - static void DoNothing(float value, int state) { } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef index c24c1041..cf28296e 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/LitMotion.Tests.Benchmark.asmdef @@ -14,7 +14,7 @@ ], "includePlatforms": [], "excludePlatforms": [], - "allowUnsafeCode": false, + "allowUnsafeCode": true, "overrideReferences": true, "precompiledReferences": [ "nunit.framework.dll", From 1daf24ae5a235db0adad4c9dc6f977a151b36b6a Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 00:42:29 +0900 Subject: [PATCH 025/224] Update: benchmark --- .../Tests/Benchmark/BenchmarkHelper.cs | 41 ++++++++++ .../Tests/Benchmark/BenchmarkHelper.cs.meta | 2 + .../Tests/Benchmark/BindBenchmark.cs | 79 +++++++------------ .../Benchmark/FunctionPointerBenchmark.cs | 59 ++++++++++++++ .../FunctionPointerBenchmark.cs.meta | 2 + 5 files changed, 132 insertions(+), 51 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs new file mode 100644 index 00000000..ab222947 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections; +using Unity.PerformanceTesting; + +namespace LitMotion.Tests.Benchmark +{ + public static class BenchmarkHelper + { + public static void MeasureStartUp(Action action, Action cleanUp) + { + Measure.Method(action) + .WarmupCount(10) + .IterationsPerMeasurement(10000) + .MeasurementCount(10) + .CleanUp(() => + { + cleanUp(); + }) + .Run(); + } + + public static IEnumerator MeasureUpdate(Action setUp) + { + setUp(); + + return Measure.Frames() + .WarmupCount(5) + .MeasurementCount(50) + .Run(); + } + + public static void MeasureGC(Action action) + { + GC.Collect(); + var prev = GC.GetTotalMemory(true); + action(); + var current = GC.GetTotalMemory(true); + Measure.Custom(new SampleGroup("GC.Alloc", SampleUnit.Byte), current - prev); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs.meta new file mode 100644 index 00000000..22eb9daa --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 875c6cc9d290a447e9c056fca90bacd8 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs index f273f6f3..460edbc4 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs @@ -28,20 +28,20 @@ public void TearDown() [Performance] public unsafe void Benchmark_Bind_Pointer_Startup() { - MeasureStartUp(() => + BenchmarkHelper.MeasureStartUp(() => { int state = 0; LMotion.Create(0f, 1f, 3f) .Bind(Box.Create(state), (Action)(static (x, state) => DoNothing(x, state)), &BindAction) .AddTo(handles); - }); + }, () => handles.Cancel()); } [Test] [Performance] public void Benchmark_Bind_Box_StartUp() { - MeasureStartUp(() => + BenchmarkHelper.MeasureStartUp(() => { int state = 0; LMotion.Create(0f, 1f, 3f) @@ -50,40 +50,40 @@ public void Benchmark_Bind_Box_StartUp() DoNothing(x, box.Value); }) .AddTo(handles); - }); + }, () => handles.Cancel()); } [Test] [Performance] public void Benchmark_Bind_ActionWithState_StartUp() { - MeasureStartUp(() => + BenchmarkHelper.MeasureStartUp(() => { int state = 0; LMotion.Create(0f, 1f, 3f) .Bind(new ActionWithState(state, static (x, state) => DoNothing(x, state)), (x, state) => state.Invoke(x)) .AddTo(handles); - }); + }, () => handles.Cancel()); } [Test] [Performance] public void Benchmark_Bind_WrappedAction_StartUp() { - MeasureStartUp(() => + BenchmarkHelper.MeasureStartUp(() => { int state = 0; LMotion.Create(0f, 1f, 3f) .Bind(Box.Create(state), static (x, state) => DoNothing(x, state), (float x, Box box, Action action) => action(x, box.Value)) .AddTo(handles); - }); + }, () => handles.Cancel()); } [Test] [Performance] public void Benchmark_Bind_Closure_Startup() { - MeasureStartUp(() => + BenchmarkHelper.MeasureStartUp(() => { int state = 0; LMotion.Create(0f, 1f, 3f) @@ -92,14 +92,14 @@ public void Benchmark_Bind_Closure_Startup() DoNothing(x, state); }) .AddTo(handles); - }); + }, () => handles.Cancel()); } [UnityTest] [Performance] public unsafe IEnumerator Benchmark_Bind_Pointer_Update() { - return MeasureUpdate(() => + return BenchmarkHelper.MeasureUpdate(() => { for (int i = 0; i < 10000; i++) { @@ -114,7 +114,7 @@ public unsafe IEnumerator Benchmark_Bind_Pointer_Update() [Performance] public IEnumerator Benchmark_Bind_Box_Update() { - return MeasureUpdate(() => + return BenchmarkHelper.MeasureUpdate(() => { for (int i = 0; i < 10000; i++) { @@ -132,7 +132,7 @@ public IEnumerator Benchmark_Bind_Box_Update() [Performance] public IEnumerator Benchmark_Bind_ActionWithState_Update() { - return MeasureUpdate(() => + return BenchmarkHelper.MeasureUpdate(() => { for (int i = 0; i < 10000; i++) { @@ -147,7 +147,7 @@ public IEnumerator Benchmark_Bind_ActionWithState_Update() [Performance] public IEnumerator Benchmark_Bind_WrappedAction_Update() { - return MeasureUpdate(() => + return BenchmarkHelper.MeasureUpdate(() => { for (int i = 0; i < 10000; i++) { @@ -162,7 +162,7 @@ public IEnumerator Benchmark_Bind_WrappedAction_Update() [Performance] public IEnumerator Benchmark_Bind_Closure_Update() { - return MeasureUpdate(() => + return BenchmarkHelper.MeasureUpdate(() => { for (int i = 0; i < 10000; i++) { @@ -180,7 +180,7 @@ public IEnumerator Benchmark_Bind_Closure_Update() [Performance] public unsafe void Benchmark_Bind_Pointer_GC() { - MeasureGC(() => + BenchmarkHelper.MeasureGC(() => { for (int i = 0; i < 10000; i++) { @@ -189,13 +189,15 @@ public unsafe void Benchmark_Bind_Pointer_GC() .AddTo(handles); } }); + + handles.Cancel(); } [Test] [Performance] public void Benchmark_Bind_Box_GC() { - MeasureGC(() => + BenchmarkHelper.MeasureGC(() => { for (int i = 0; i < 10000; i++) { @@ -207,13 +209,15 @@ public void Benchmark_Bind_Box_GC() .AddTo(handles); } }); + + handles.Cancel(); } [Test] [Performance] public void Benchmark_Bind_WrappedAction_GC() { - MeasureGC(() => + BenchmarkHelper.MeasureGC(() => { for (int i = 0; i < 10000; i++) { @@ -222,13 +226,15 @@ public void Benchmark_Bind_WrappedAction_GC() .AddTo(handles); } }); + + handles.Cancel(); } [Test] [Performance] public void Benchmark_Bind_ActionWithState_GC() { - MeasureGC(() => + BenchmarkHelper.MeasureGC(() => { for (int i = 0; i < 10000; i++) { @@ -237,13 +243,15 @@ public void Benchmark_Bind_ActionWithState_GC() .AddTo(handles); } }); + + handles.Cancel(); } [Test] [Performance] public void Benchmark_Bind_Closure_GC() { - MeasureGC(() => + BenchmarkHelper.MeasureGC(() => { for (int i = 0; i < 10000; i++) { @@ -255,38 +263,7 @@ public void Benchmark_Bind_Closure_GC() .AddTo(handles); } }); - } - void MeasureStartUp(Action action) - { - Measure.Method(action) - .WarmupCount(10) - .IterationsPerMeasurement(10000) - .MeasurementCount(10) - .CleanUp(() => - { - handles.Cancel(); - }) - .Run(); - } - - IEnumerator MeasureUpdate(Action setUp) - { - setUp(); - - return Measure.Frames() - .WarmupCount(5) - .MeasurementCount(50) - .Run(); - } - - void MeasureGC(Action action) - { - GC.Collect(); - var prev = GC.GetTotalMemory(true); - action(); - var current = GC.GetTotalMemory(true); - Measure.Custom(new SampleGroup("GC.Alloc", SampleUnit.Byte), current - prev); handles.Cancel(); } diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs new file mode 100644 index 00000000..051b720c --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs @@ -0,0 +1,59 @@ +using System.Collections; +using System.Runtime.CompilerServices; +using LitMotion.Adapters; +using NUnit.Framework; +using Unity.PerformanceTesting; +using UnityEngine.TestTools; + +namespace LitMotion.Tests.Benchmark +{ + public class FunctionPointerBenchmark + { + CompositeMotionHandle handles = new(10000); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + MotionDispatcher.EnsureStorageCapacity(64000); + } + + [TearDown] + public void TearDown() + { + handles.Cancel(); + } + + [UnityTest] + [Performance] + public IEnumerator Benchmark_Delegate_Update() + { + return BenchmarkHelper.MeasureUpdate(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(x => DoNothing(x)) + .AddTo(handles); + } + }); + } + + [UnityTest] + [Performance] + public unsafe IEnumerator Benchmark_FunctionPointer_Update() + { + return BenchmarkHelper.MeasureUpdate(() => + { + for (int i = 0; i < 10000; i++) + { + LMotion.Create(0f, 1f, 3f) + .Bind(&DoNothing) + .AddTo(handles); + } + }); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static void DoNothing(float value) { } + } +} diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs.meta new file mode 100644 index 00000000..9c65aaf0 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3f623a568369c40e4976f69f6e47f29a \ No newline at end of file From 8798861ddbcb6ed99306103a293980402cbe4d9d Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 01:37:23 +0900 Subject: [PATCH 026/224] Update: benchmark --- .../Tests/Benchmark/BenchmarkHelper.cs | 2 +- .../Benchmark/FunctionPointerBenchmark.cs | 61 +++++++++++++++---- 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs index ab222947..3bae4930 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BenchmarkHelper.cs @@ -25,7 +25,7 @@ public static IEnumerator MeasureUpdate(Action setUp) return Measure.Frames() .WarmupCount(5) - .MeasurementCount(50) + .MeasurementCount(200) .Run(); } diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs index 051b720c..c4550dda 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs @@ -3,57 +3,96 @@ using LitMotion.Adapters; using NUnit.Framework; using Unity.PerformanceTesting; +using UnityEngine; using UnityEngine.TestTools; namespace LitMotion.Tests.Benchmark { public class FunctionPointerBenchmark { - CompositeMotionHandle handles = new(10000); + Transform transform; [OneTimeSetUp] public void OneTimeSetUp() { - MotionDispatcher.EnsureStorageCapacity(64000); + MotionDispatcher.EnsureStorageCapacity(200000); + + transform = new GameObject("Test").transform; + } + + [OneTimeTearDown] + public void OneTimeTearDown() + { + Object.Destroy(transform.gameObject); + transform = null; } [TearDown] public void TearDown() { - handles.Cancel(); + MotionDispatcher.Clear(); } [UnityTest] [Performance] - public IEnumerator Benchmark_Delegate_Update() + public IEnumerator Benchmark_Delegate_Update_Float() { return BenchmarkHelper.MeasureUpdate(() => { - for (int i = 0; i < 10000; i++) + for (int i = 0; i < 200000; i++) { LMotion.Create(0f, 1f, 3f) - .Bind(x => DoNothing(x)) - .AddTo(handles); + .Bind(x => DoNothing(x)); + } + }); + } + + [UnityTest] + [Performance] + public IEnumerator Benchmark_Delegate_Update_Position() + { + return BenchmarkHelper.MeasureUpdate(() => + { + for (int i = 0; i < 200000; i++) + { + LMotion.Create(Vector3.zero, Vector3.one, 3f) + .Bind(transform, (x, t) => t.position = x); } }); } [UnityTest] [Performance] - public unsafe IEnumerator Benchmark_FunctionPointer_Update() + public unsafe IEnumerator Benchmark_FunctionPointer_Update_Float() { return BenchmarkHelper.MeasureUpdate(() => { - for (int i = 0; i < 10000; i++) + for (int i = 0; i < 200000; i++) { LMotion.Create(0f, 1f, 3f) - .Bind(&DoNothing) - .AddTo(handles); + .Bind(&DoNothing); + } + }); + } + + [UnityTest] + [Performance] + public unsafe IEnumerator Benchmark_FunctionPointer_Update_Position() + { + return BenchmarkHelper.MeasureUpdate(() => + { + for (int i = 0; i < 200000; i++) + { + LMotion.Create(Vector3.zero, Vector3.one, 3f) + .Bind(transform, &SetPosition); } }); } [MethodImpl(MethodImplOptions.NoInlining)] static void DoNothing(float value) { } + + [MethodImpl(MethodImplOptions.NoInlining)] + static void SetPosition(Vector3 value, Transform t) { t.position = value; } } } From 2133966932a009f2895582f4eaaa5fab303eb10d Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 02:10:12 +0900 Subject: [PATCH 027/224] Add: TryComplete/TryCancel --- .../LitMotion/Runtime/Internal/Error.cs | 5 ++++ .../Runtime/Internal/MotionManager.cs | 24 +++++++++++++++-- .../Runtime/Internal/MotionStorage.cs | 26 +++++++++++-------- .../Runtime/MotionHandleExtensions.cs | 20 ++++++++++++++ 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs index cb2f8cde..277fc3b6 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs @@ -30,5 +30,10 @@ public static void PlaybackSpeedMustBeZeroOrGreater() { throw new ArgumentOutOfRangeException("Playback speed must be 0 or greater."); } + + public static void MotionNotExists() + { + throw new ArgumentException("Motion has been destroyed or no longer exists."); + } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs index 8c40ac9f..38c6bf1c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs @@ -37,14 +37,34 @@ public static ref ManagedMotionData GetManagedDataRef(MotionHandle handle) public static void Complete(MotionHandle handle) { CheckTypeId(handle); - list[handle.StorageId].Complete(handle); + if (!list[handle.StorageId].TryComplete(handle)) + { + Error.MotionNotExists(); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool TryComplete(MotionHandle handle) + { + if (handle.StorageId < 0 || handle.StorageId >= MotionTypeCount) return false; + return list[handle.StorageId].TryComplete(handle); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Cancel(MotionHandle handle) { CheckTypeId(handle); - list[handle.StorageId].Cancel(handle); + if (!list[handle.StorageId].TryCancel(handle)) + { + Error.MotionNotExists(); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool TryCancel(MotionHandle handle) + { + if (handle.StorageId < 0 || handle.StorageId >= MotionTypeCount) return false; + return list[handle.StorageId].TryCancel(handle); } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 1c21044c..72b25b1c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -9,8 +9,8 @@ namespace LitMotion internal interface IMotionStorage { bool IsActive(MotionHandle handle); - void Cancel(MotionHandle handle); - void Complete(MotionHandle handle); + bool TryCancel(MotionHandle handle); + bool TryComplete(MotionHandle handle); ref MotionDataCore GetDataRef(MotionHandle handle); ref ManagedMotionData GetManagedDataRef(MotionHandle handle); void Reset(); @@ -203,20 +203,20 @@ public bool IsActive(MotionHandle handle) return motion.Core.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing; } - public void Cancel(MotionHandle handle) + public bool TryCancel(MotionHandle handle) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; if (denseIndex < 0 || denseIndex >= tail) { - throw new ArgumentException("Motion has been destroyed or no longer exists."); + return false; } ref var unmanagedData = ref unmanagedDataArray[denseIndex]; var version = slot.Version; if (version <= 0 || version != handle.Version || unmanagedData.Core.Status == MotionStatus.None) { - throw new ArgumentException("Motion has been destroyed or no longer exists."); + return false; } unmanagedData.Core.Status = MotionStatus.Canceled; @@ -230,16 +230,18 @@ public void Cancel(MotionHandle handle) { MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); } + + return true; } - public void Complete(MotionHandle handle) + public bool TryComplete(MotionHandle handle) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; if (denseIndex < 0 || denseIndex >= tail) { - throw new ArgumentException("Motion has been destroyed or no longer exists."); + return false; } ref var unmanagedData = ref unmanagedDataArray[denseIndex]; @@ -247,13 +249,13 @@ public void Complete(MotionHandle handle) var version = slot.Version; if (version <= 0 || version != handle.Version || unmanagedData.Core.Status == MotionStatus.None) { - throw new ArgumentException("Motion has been destroyed or no longer exists."); + return false; } if (unmanagedData.Core.Loops < 0) { UnityEngine.Debug.LogWarning("[LitMotion] Complete was ignored because it is not possible to complete a motion that loops infinitely. If you want to end the motion, call Cancel() instead."); - return; + return false; } ref var managedData = ref managedDataArray[denseIndex]; @@ -306,6 +308,8 @@ public void Complete(MotionHandle handle) } managedData.IsCallbackRunning = false; + + return true; } public ref ManagedMotionData GetManagedDataRef(MotionHandle handle) @@ -327,13 +331,13 @@ ref SparseSetCore.Slot GetSlotWithVarify(MotionHandle handle) var denseIndex = slot.DenseIndex; if (denseIndex < 0 || denseIndex >= unmanagedDataArray.Length) { - throw new ArgumentException("Motion has been destroyed or no longer exists."); + Error.MotionNotExists(); } var version = slot.Version; if (version <= 0 || version != handle.Version || unmanagedDataArray[denseIndex].Core.Status == MotionStatus.None) { - throw new ArgumentException("Motion has been destroyed or no longer exists."); + Error.MotionNotExists(); } return ref slot; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 19bb4cb3..e5351d3a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -30,6 +30,16 @@ public static void Complete(this MotionHandle handle) MotionManager.Complete(handle); } + /// + /// Attempt to complete the motion. + /// + /// This motion handle + /// Returns true if the operation was successful. + public static bool TryComplete(this MotionHandle handle) + { + return MotionManager.TryComplete(handle); + } + /// /// Cancel motion. /// @@ -39,6 +49,16 @@ public static void Cancel(this MotionHandle handle) MotionManager.Cancel(handle); } + /// + /// Attempt to cancel the motion. + /// + /// This motion handle + /// Returns true if the operation was successful. + public static bool TryCancel(this MotionHandle handle) + { + return MotionManager.TryCancel(handle); + } + /// /// Add this motion handle to CompositeMotionHandle. /// From f3c26990e16bf2c51a4d0ff15341c61311b48bd3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 02:29:21 +0900 Subject: [PATCH 028/224] Fix: error message --- .../Runtime/Internal/MotionManager.cs | 14 ++---- .../Runtime/Internal/MotionStorage.cs | 47 ++++++++++++++++--- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs index 38c6bf1c..321068e0 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs @@ -37,16 +37,13 @@ public static ref ManagedMotionData GetManagedDataRef(MotionHandle handle) public static void Complete(MotionHandle handle) { CheckTypeId(handle); - if (!list[handle.StorageId].TryComplete(handle)) - { - Error.MotionNotExists(); - } + list[handle.StorageId].Complete(handle); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryComplete(MotionHandle handle) { - if (handle.StorageId < 0 || handle.StorageId >= MotionTypeCount) return false; + CheckTypeId(handle); return list[handle.StorageId].TryComplete(handle); } @@ -54,16 +51,13 @@ public static bool TryComplete(MotionHandle handle) public static void Cancel(MotionHandle handle) { CheckTypeId(handle); - if (!list[handle.StorageId].TryCancel(handle)) - { - Error.MotionNotExists(); - } + list[handle.StorageId].Cancel(handle); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryCancel(MotionHandle handle) { - if (handle.StorageId < 0 || handle.StorageId >= MotionTypeCount) return false; + CheckTypeId(handle); return list[handle.StorageId].TryCancel(handle); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 72b25b1c..505ce88b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -11,6 +11,8 @@ internal interface IMotionStorage bool IsActive(MotionHandle handle); bool TryCancel(MotionHandle handle); bool TryComplete(MotionHandle handle); + void Cancel(MotionHandle handle); + void Complete(MotionHandle handle); ref MotionDataCore GetDataRef(MotionHandle handle); ref ManagedMotionData GetManagedDataRef(MotionHandle handle); void Reset(); @@ -204,6 +206,19 @@ public bool IsActive(MotionHandle handle) } public bool TryCancel(MotionHandle handle) + { + return TryCancelCore(handle); + } + + public void Cancel(MotionHandle handle) + { + if (!TryCancelCore(handle)) + { + Error.MotionNotExists(); + } + } + + bool TryCancelCore(MotionHandle handle) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; @@ -214,7 +229,7 @@ public bool TryCancel(MotionHandle handle) ref var unmanagedData = ref unmanagedDataArray[denseIndex]; var version = slot.Version; - if (version <= 0 || version != handle.Version || unmanagedData.Core.Status == MotionStatus.None) + if (version <= 0 || version != handle.Version || unmanagedData.Core.Status is MotionStatus.None or MotionStatus.Canceled or MotionStatus.Completed) { return false; } @@ -235,27 +250,45 @@ public bool TryCancel(MotionHandle handle) } public bool TryComplete(MotionHandle handle) + { + return TryCompleteCore(handle) == 0; + } + + public void Complete(MotionHandle handle) + { + switch (TryCompleteCore(handle)) + { + default: + return; + case 1: + Error.MotionNotExists(); + return; + case 2: + throw new InvalidOperationException("Complete was ignored because it is not possible to complete a motion that loops infinitely. If you want to end the motion, call Cancel() instead."); + } + } + + int TryCompleteCore(MotionHandle handle) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; if (denseIndex < 0 || denseIndex >= tail) { - return false; + return 1; } ref var unmanagedData = ref unmanagedDataArray[denseIndex]; var version = slot.Version; - if (version <= 0 || version != handle.Version || unmanagedData.Core.Status == MotionStatus.None) + if (version <= 0 || version != handle.Version || unmanagedData.Core.Status is MotionStatus.None or MotionStatus.Canceled or MotionStatus.Completed) { - return false; + return 1; } if (unmanagedData.Core.Loops < 0) { - UnityEngine.Debug.LogWarning("[LitMotion] Complete was ignored because it is not possible to complete a motion that loops infinitely. If you want to end the motion, call Cancel() instead."); - return false; + return 2; } ref var managedData = ref managedDataArray[denseIndex]; @@ -309,7 +342,7 @@ public bool TryComplete(MotionHandle handle) managedData.IsCallbackRunning = false; - return true; + return 0; } public ref ManagedMotionData GetManagedDataRef(MotionHandle handle) From bfd161f3c0e8886e0b7e8ef5ae3d1eb1717f58f3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 09:44:31 +0900 Subject: [PATCH 029/224] Improve: better error message --- .../LitMotion/Runtime/Internal/Error.cs | 7 ++- .../Runtime/Internal/MotionStorage.cs | 45 +++++++++++-------- .../Runtime/MotionHandleExtensions.cs | 6 +++ .../LitMotion/Tests/Runtime/CallbackTest.cs | 5 ++- 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs index 277fc3b6..bf265310 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs @@ -33,7 +33,12 @@ public static void PlaybackSpeedMustBeZeroOrGreater() public static void MotionNotExists() { - throw new ArgumentException("Motion has been destroyed or no longer exists."); + throw new InvalidOperationException("Motion has been destroyed or no longer exists."); + } + + public static void MotionHasBeenCanceledOrCompleted() + { + throw new InvalidOperationException("Motion has already been canceled or completed."); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 505ce88b..66eb2796 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -207,31 +207,41 @@ public bool IsActive(MotionHandle handle) public bool TryCancel(MotionHandle handle) { - return TryCancelCore(handle); + return TryCancelCore(handle) == 0; } public void Cancel(MotionHandle handle) { - if (!TryCancelCore(handle)) + switch (TryCancelCore(handle)) { - Error.MotionNotExists(); + case 1: + Error.MotionNotExists(); + return; + case 2: + Error.MotionHasBeenCanceledOrCompleted(); + return; } } - bool TryCancelCore(MotionHandle handle) + int TryCancelCore(MotionHandle handle) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; if (denseIndex < 0 || denseIndex >= tail) { - return false; + return 1; } ref var unmanagedData = ref unmanagedDataArray[denseIndex]; var version = slot.Version; - if (version <= 0 || version != handle.Version || unmanagedData.Core.Status is MotionStatus.None or MotionStatus.Canceled or MotionStatus.Completed) + if (version <= 0 || version != handle.Version) { - return false; + return 1; + } + + if (unmanagedData.Core.Status is MotionStatus.None or MotionStatus.Canceled or MotionStatus.Completed) + { + return 2; } unmanagedData.Core.Status = MotionStatus.Canceled; @@ -246,7 +256,7 @@ bool TryCancelCore(MotionHandle handle) MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); } - return true; + return 0; } public bool TryComplete(MotionHandle handle) @@ -258,12 +268,13 @@ public void Complete(MotionHandle handle) { switch (TryCompleteCore(handle)) { - default: - return; case 1: Error.MotionNotExists(); return; case 2: + Error.MotionHasBeenCanceledOrCompleted(); + return; + case 3: throw new InvalidOperationException("Complete was ignored because it is not possible to complete a motion that loops infinitely. If you want to end the motion, call Cancel() instead."); } } @@ -281,22 +292,22 @@ int TryCompleteCore(MotionHandle handle) ref var unmanagedData = ref unmanagedDataArray[denseIndex]; var version = slot.Version; - if (version <= 0 || version != handle.Version || unmanagedData.Core.Status is MotionStatus.None or MotionStatus.Canceled or MotionStatus.Completed) + if (version <= 0 || version != handle.Version) { return 1; } - if (unmanagedData.Core.Loops < 0) + if (unmanagedData.Core.Status is MotionStatus.None or MotionStatus.Canceled or MotionStatus.Completed) { return 2; } - ref var managedData = ref managedDataArray[denseIndex]; - if (managedData.IsCallbackRunning) + if (unmanagedData.Core.Loops < 0) { - throw new InvalidOperationException("Recursion of Complete call was detected."); + return 3; } - managedData.IsCallbackRunning = true; + + ref var managedData = ref managedDataArray[denseIndex]; // To avoid duplication of Complete processing, it is treated as canceled internally. unmanagedData.Core.Status = MotionStatus.Canceled; @@ -340,8 +351,6 @@ int TryCompleteCore(MotionHandle handle) MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); } - managedData.IsCallbackRunning = false; - return 0; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index e5351d3a..a073e335 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using UnityEngine; @@ -16,6 +17,7 @@ public static class MotionHandleExtensions /// /// This motion handle /// True if motion is active, otherwise false. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsActive(this MotionHandle handle) { return MotionManager.IsActive(handle); @@ -25,6 +27,7 @@ public static bool IsActive(this MotionHandle handle) /// Complete motion. /// /// This motion handle + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Complete(this MotionHandle handle) { MotionManager.Complete(handle); @@ -35,6 +38,7 @@ public static void Complete(this MotionHandle handle) /// /// This motion handle /// Returns true if the operation was successful. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryComplete(this MotionHandle handle) { return MotionManager.TryComplete(handle); @@ -44,6 +48,7 @@ public static bool TryComplete(this MotionHandle handle) /// Cancel motion. /// /// This motion handle + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Cancel(this MotionHandle handle) { MotionManager.Cancel(handle); @@ -54,6 +59,7 @@ public static void Cancel(this MotionHandle handle) /// /// This motion handle /// Returns true if the operation was successful. + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryCancel(this MotionHandle handle) { return MotionManager.TryCancel(handle); diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs index d3c3d49d..d0083bc3 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs @@ -55,19 +55,20 @@ public IEnumerator Test_CreateOnCallback() [Test] public void Test_CompleteOnCallback_Self() { - LogAssert.Expect(LogType.Exception, "InvalidOperationException: Recursion of Complete call was detected."); + LogAssert.Expect(LogType.Exception, "InvalidOperationException: Motion has already been canceled or completed."); MotionHandle handle = default; handle = LMotion.Create(0f, 10f, 1f) .WithOnComplete(() => handle.Complete()) .RunWithoutBinding(); + handle.Complete(); } [Test] public void Test_CompleteOnCallback_CircularReference() { - LogAssert.Expect(LogType.Exception, "InvalidOperationException: Recursion of Complete call was detected."); + LogAssert.Expect(LogType.Exception, "InvalidOperationException: Motion has already been canceled or completed."); MotionHandle handle1 = default; MotionHandle handle2 = default; From 980fd713e47ae5f84ed631ef32eeea0ca4e5133a Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 09:46:17 +0900 Subject: [PATCH 030/224] Remove: unnecessary field --- .../Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs | 1 - src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs index b2494e67..10deb215 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs @@ -11,7 +11,6 @@ namespace LitMotion [StructLayout(LayoutKind.Auto)] public unsafe struct ManagedMotionData { - public bool IsCallbackRunning; public bool CancelOnError; public bool SkipValuesDuringDelay; public byte StateCount; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 66eb2796..2668fc68 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -102,7 +102,6 @@ public unsafe MotionHandle Create(ref MotionBuilder } } - managedDataRef.IsCallbackRunning = false; managedDataRef.CancelOnError = buffer.CancelOnError; managedDataRef.UpdateAction = buffer.UpdateAction; managedDataRef.UpdateActionPtr = buffer.UpdateActionPtr; From f67f748b243fcd8f850d276b4ae3d69484dbb0a1 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 17:22:56 +0900 Subject: [PATCH 031/224] Add: LoopType.Flip and change LoopType.Yoyo behavior --- .../Assets/LitMotion/Runtime/Internal/MotionStorage.cs | 2 +- src/LitMotion/Assets/LitMotion/Runtime/LoopType.cs | 10 +++++++--- .../Assets/LitMotion/Runtime/MotionUpdateJob.cs | 7 ++++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 2668fc68..7cdfaf5c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -314,7 +314,7 @@ int TryCompleteCore(MotionHandle handle) var endProgress = unmanagedData.Core.LoopType switch { LoopType.Restart => 1f, - LoopType.Yoyo => unmanagedData.Core.Loops % 2 == 0 ? 0f : 1f, + LoopType.Flip or LoopType.Yoyo => unmanagedData.Core.Loops % 2 == 0 ? 0f : 1f, LoopType.Incremental => unmanagedData.Core.Loops, _ => 1f }; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LoopType.cs b/src/LitMotion/Assets/LitMotion/Runtime/LoopType.cs index cfa341bc..07eca9f2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/LoopType.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/LoopType.cs @@ -8,14 +8,18 @@ public enum LoopType : byte /// /// Repeat from beginning. /// - Restart, + Restart = 0, /// /// Cycles back and forth between the end and start values. /// - Yoyo, + Flip = 1, /// /// Increase the value each time the repeats. /// - Incremental + Incremental = 2, + /// + /// After reaching the end value, it will play backwards to return to the start value. + /// + Yoyo = 3, } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs index 7ae1cc74..571e9598 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs @@ -125,13 +125,18 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) case LoopType.Restart: progress = GetEasedValue(corePtr, (float)t); break; - case LoopType.Yoyo: + case LoopType.Flip: progress = GetEasedValue(corePtr, (float)t); if ((clampedCompletedLoops + (int)t) % 2 == 1) progress = 1f - progress; break; case LoopType.Incremental: progress = GetEasedValue(corePtr, 1f) * clampedCompletedLoops + GetEasedValue(corePtr, (float)math.fmod(t, 1f)); break; + case LoopType.Yoyo: + progress = (clampedCompletedLoops + (int)t) % 2 == 1 + ? GetEasedValue(corePtr, (float)(1f - t)) + : GetEasedValue(corePtr, (float)t); + break; } var totalDuration = corePtr->DelayType == DelayType.FirstLoop From d4f0b262c088fc69ee50040fceb9d49cd09ca8a1 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 17:32:54 +0900 Subject: [PATCH 032/224] Add: sandbox --- src/LitMotion/Assets/Sandbox.meta | 8 + src/LitMotion/Assets/Sandbox/Sandbox.cs | 17 + src/LitMotion/Assets/Sandbox/Sandbox.cs.meta | 2 + src/LitMotion/Assets/Sandbox/Sandbox.unity | 471 ++++++++++++++++++ .../Assets/Sandbox/Sandbox.unity.meta | 7 + 5 files changed, 505 insertions(+) create mode 100644 src/LitMotion/Assets/Sandbox.meta create mode 100644 src/LitMotion/Assets/Sandbox/Sandbox.cs create mode 100644 src/LitMotion/Assets/Sandbox/Sandbox.cs.meta create mode 100644 src/LitMotion/Assets/Sandbox/Sandbox.unity create mode 100644 src/LitMotion/Assets/Sandbox/Sandbox.unity.meta diff --git a/src/LitMotion/Assets/Sandbox.meta b/src/LitMotion/Assets/Sandbox.meta new file mode 100644 index 00000000..db6b6a0f --- /dev/null +++ b/src/LitMotion/Assets/Sandbox.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf7c9b6fb03e94bf89c9da98523f4951 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.cs b/src/LitMotion/Assets/Sandbox/Sandbox.cs new file mode 100644 index 00000000..7ea5ec1e --- /dev/null +++ b/src/LitMotion/Assets/Sandbox/Sandbox.cs @@ -0,0 +1,17 @@ +using LitMotion; +using LitMotion.Extensions; +using UnityEngine; + +public class Sandbox : MonoBehaviour +{ + [SerializeField] Transform target; + + void Start() + { + LMotion.Create(0f, 5f, 2f) + .WithEase(Ease.OutQuint) + .WithLoops(-1, LoopType.Yoyo) + .BindToPositionX(target) + .AddTo(target); + } +} diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.cs.meta b/src/LitMotion/Assets/Sandbox/Sandbox.cs.meta new file mode 100644 index 00000000..98f1de75 --- /dev/null +++ b/src/LitMotion/Assets/Sandbox/Sandbox.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 87e82f0913d0245f48c1e41ceed5661c \ No newline at end of file diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.unity b/src/LitMotion/Assets/Sandbox/Sandbox.unity new file mode 100644 index 00000000..67d020f5 --- /dev/null +++ b/src/LitMotion/Assets/Sandbox/Sandbox.unity @@ -0,0 +1,471 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &433031335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 433031339} + - component: {fileID: 433031338} + - component: {fileID: 433031337} + - component: {fileID: 433031336} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &433031336 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 433031335} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &433031337 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 433031335} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &433031338 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 433031335} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &433031339 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 433031335} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &928280434 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 928280436} + - component: {fileID: 928280435} + m_Layer: 0 + m_Name: Sandbox + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &928280435 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928280434} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 87e82f0913d0245f48c1e41ceed5661c, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 433031339} +--- !u!4 &928280436 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928280434} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1873800725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1873800727} + - component: {fileID: 1873800726} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1873800726 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873800725} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1873800727 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1873800725} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &2009741237 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2009741240} + - component: {fileID: 2009741239} + - component: {fileID: 2009741238} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2009741238 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009741237} + m_Enabled: 1 +--- !u!20 &2009741239 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009741237} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2009741240 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009741237} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 2009741240} + - {fileID: 1873800727} + - {fileID: 928280436} + - {fileID: 433031339} diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.unity.meta b/src/LitMotion/Assets/Sandbox/Sandbox.unity.meta new file mode 100644 index 00000000..209c8f64 --- /dev/null +++ b/src/LitMotion/Assets/Sandbox/Sandbox.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 71a9127cb0ecc40b5a07ffc8fa0dcef3 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 8c4d383c92ceffa5c27c233fba27e65671632d4d Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 20:44:19 +0900 Subject: [PATCH 033/224] Add: MotionHandle.Time --- .../LitMotion/Runtime/Internal/Error.cs | 5 + .../LitMotion/Runtime/Internal/MotionData.cs | 7 +- .../Runtime/Internal/MotionHelper.cs | 149 ++++++++++++++++++ .../Runtime/Internal/MotionHelper.cs.meta | 2 + .../Runtime/Internal/MotionManager.cs | 7 + .../Runtime/Internal/MotionStorage.cs | 31 ++++ .../Assets/LitMotion/Runtime/MotionHandle.cs | 16 ++ .../LitMotion/Runtime/MotionUpdateJob.cs | 130 +-------------- 8 files changed, 215 insertions(+), 132 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs index bf265310..c370c3e4 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs @@ -31,6 +31,11 @@ public static void PlaybackSpeedMustBeZeroOrGreater() throw new ArgumentOutOfRangeException("Playback speed must be 0 or greater."); } + public static void TimeMustBeZeroOrGreater() + { + throw new ArgumentOutOfRangeException("Time must be 0 or greater."); + } + public static void MotionNotExists() { throw new InvalidOperationException("Motion has been destroyed or no longer exists."); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index 195f0583..4d80557f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -6,20 +6,19 @@ namespace LitMotion [StructLayout(LayoutKind.Sequential)] public struct MotionDataCore { + // state public MotionStatus Status; - public double Time; public float PlaybackSpeed; - public float Duration; + // parameters + public float Duration; public Ease Ease; - #if LITMOTION_COLLECTIONS_2_0_OR_NEWER public NativeAnimationCurve AnimationCurve; #else public UnsafeAnimationCurve AnimationCurve; #endif - public MotionTimeKind TimeKind; public float Delay; public int Loops; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs new file mode 100644 index 00000000..f546a7ca --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -0,0 +1,149 @@ +using Unity.Burst; +using Unity.Burst.CompilerServices; +using Unity.Mathematics; + +namespace LitMotion +{ + [BurstCompile] + internal unsafe static class MotionHelper + { + [BurstCompile] + public static void Update(MotionData* ptr, double deltaTime, out TValue result) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + var corePtr = (MotionDataCore*)ptr; + + corePtr->Time = math.max(corePtr->Time + deltaTime * corePtr->PlaybackSpeed, 0.0); + var motionTime = corePtr->Time; + + double t; + bool isCompleted; + bool isDelayed; + int completedLoops; + int clampedCompletedLoops; + + if (Hint.Unlikely(corePtr->Duration <= 0f)) + { + if (corePtr->DelayType == DelayType.FirstLoop || corePtr->Delay == 0f) + { + var time = motionTime - corePtr->Delay; + isCompleted = corePtr->Loops >= 0 && time > 0f; + if (isCompleted) + { + t = 1f; + completedLoops = corePtr->Loops; + } + else + { + t = 0f; + completedLoops = time < 0f ? -1 : 0; + } + clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); + isDelayed = time < 0; + } + else + { + completedLoops = (int)math.floor(motionTime / corePtr->Delay); + clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); + isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; + isDelayed = !isCompleted; + t = isCompleted ? 1f : 0f; + } + } + else + { + if (corePtr->DelayType == DelayType.FirstLoop) + { + var time = motionTime - corePtr->Delay; + completedLoops = (int)math.floor(time / corePtr->Duration); + clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); + isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; + isDelayed = time < 0f; + + if (isCompleted) + { + t = 1f; + } + else + { + var currentLoopTime = time - corePtr->Duration * clampedCompletedLoops; + t = math.clamp(currentLoopTime / corePtr->Duration, 0f, 1f); + } + } + else + { + var currentLoopTime = math.fmod(motionTime, corePtr->Duration + corePtr->Delay) - corePtr->Delay; + completedLoops = (int)math.floor(motionTime / (corePtr->Duration + corePtr->Delay)); + clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); + isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; + isDelayed = currentLoopTime < 0; + + if (isCompleted) + { + t = 1f; + } + else + { + t = math.clamp(currentLoopTime / corePtr->Duration, 0f, 1f); + } + } + } + + float progress; + switch (corePtr->LoopType) + { + default: + case LoopType.Restart: + progress = GetEasedValue(corePtr, (float)t); + break; + case LoopType.Flip: + progress = GetEasedValue(corePtr, (float)t); + if ((clampedCompletedLoops + (int)t) % 2 == 1) progress = 1f - progress; + break; + case LoopType.Incremental: + progress = GetEasedValue(corePtr, 1f) * clampedCompletedLoops + GetEasedValue(corePtr, (float)math.fmod(t, 1f)); + break; + case LoopType.Yoyo: + progress = (clampedCompletedLoops + (int)t) % 2 == 1 + ? GetEasedValue(corePtr, (float)(1f - t)) + : GetEasedValue(corePtr, (float)t); + break; + } + + var totalDuration = corePtr->DelayType == DelayType.FirstLoop + ? corePtr->Delay + corePtr->Duration * corePtr->Loops + : (corePtr->Delay + corePtr->Duration) * corePtr->Loops; + + if (corePtr->Loops > 0 && motionTime >= totalDuration) + { + corePtr->Status = MotionStatus.Completed; + } + else if (isDelayed) + { + corePtr->Status = MotionStatus.Delayed; + } + else + { + corePtr->Status = MotionStatus.Playing; + } + + var context = new MotionEvaluationContext() + { + Progress = progress + }; + + result = default(TAdapter).Evaluate(ref ptr->StartValue, ref ptr->EndValue, ref ptr->Options, context); + } + + static float GetEasedValue(MotionDataCore* data, float value) + { + return data->Ease switch + { + Ease.CustomAnimationCurve => data->AnimationCurve.Evaluate(value), + _ => EaseUtility.Evaluate(value, data->Ease) + }; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs.meta new file mode 100644 index 00000000..cb235ae0 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b7b3337d974654c029ff5bfa7e15049c \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs index 321068e0..604888c0 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs @@ -68,6 +68,13 @@ public static bool IsActive(MotionHandle handle) return list[handle.StorageId].IsActive(handle); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void SetTime(MotionHandle handle, double time) + { + CheckTypeId(handle); + list[handle.StorageId].SetTime(handle, time); + } + // For MotionTracker public static (Type ValueType, Type OptionsType, Type AdapterType) GetMotionType(MotionHandle handle) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 7cdfaf5c..09442c3f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -13,6 +13,7 @@ internal interface IMotionStorage bool TryComplete(MotionHandle handle); void Cancel(MotionHandle handle); void Complete(MotionHandle handle); + void SetTime(MotionHandle handle, double time); ref MotionDataCore GetDataRef(MotionHandle handle); ref ManagedMotionData GetManagedDataRef(MotionHandle handle); void Reset(); @@ -353,6 +354,36 @@ int TryCompleteCore(MotionHandle handle) return 0; } + public unsafe void SetTime(MotionHandle handle, double time) + { + ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); + + var denseIndex = slot.DenseIndex; + if (denseIndex < 0 || denseIndex >= tail) Error.MotionNotExists(); + + fixed (MotionData* ptr = unmanagedDataArray) + { + var dataPtr = ptr + denseIndex; + + var version = slot.Version; + if (version <= 0 || version != handle.Version) Error.MotionNotExists(); + + var prevTime = dataPtr->Core.Time; + var deltaTime = time - prevTime; + + MotionHelper.Update(dataPtr + denseIndex, deltaTime, out var result); + + try + { + managedDataArray[denseIndex].UpdateUnsafe(result); + } + catch (Exception ex) + { + MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + } + } + } + public ref ManagedMotionData GetManagedDataRef(MotionHandle handle) { ref var slot = ref GetSlotWithVarify(handle); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index a3441e03..eb2a3cad 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -22,6 +22,22 @@ public struct MotionHandle : IEquatable /// public int Version; + /// + /// Motion time + /// + public readonly double Time + { + get + { + return MotionManager.GetDataRef(this).Time; + } + set + { + if (value < 0f) Error.TimeMustBeZeroOrGreater(); + MotionManager.SetTime(this, value); + } + } + /// /// Motion playback speed. /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs index 571e9598..74ef0dd4 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs @@ -42,126 +42,9 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) _ => default }; - corePtr->Time = math.max(corePtr->Time + deltaTime * corePtr->PlaybackSpeed, 0.0); - var motionTime = corePtr->Time; + MotionHelper.Update(ptr, deltaTime, out var result); - double t; - bool isCompleted; - bool isDelayed; - int completedLoops; - int clampedCompletedLoops; - - if (Hint.Unlikely(corePtr->Duration <= 0f)) - { - if (corePtr->DelayType == DelayType.FirstLoop || corePtr->Delay == 0f) - { - var time = motionTime - corePtr->Delay; - isCompleted = corePtr->Loops >= 0 && time > 0f; - if (isCompleted) - { - t = 1f; - completedLoops = corePtr->Loops; - } - else - { - t = 0f; - completedLoops = time < 0f ? -1 : 0; - } - clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); - isDelayed = time < 0; - } - else - { - completedLoops = (int)math.floor(motionTime / corePtr->Delay); - clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); - isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; - isDelayed = !isCompleted; - t = isCompleted ? 1f : 0f; - } - } - else - { - if (corePtr->DelayType == DelayType.FirstLoop) - { - var time = motionTime - corePtr->Delay; - completedLoops = (int)math.floor(time / corePtr->Duration); - clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); - isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; - isDelayed = time < 0f; - - if (isCompleted) - { - t = 1f; - } - else - { - var currentLoopTime = time - corePtr->Duration * clampedCompletedLoops; - t = math.clamp(currentLoopTime / corePtr->Duration, 0f, 1f); - } - } - else - { - var currentLoopTime = math.fmod(motionTime, corePtr->Duration + corePtr->Delay) - corePtr->Delay; - completedLoops = (int)math.floor(motionTime / (corePtr->Duration + corePtr->Delay)); - clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); - isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; - isDelayed = currentLoopTime < 0; - - if (isCompleted) - { - t = 1f; - } - else - { - t = math.clamp(currentLoopTime / corePtr->Duration, 0f, 1f); - } - } - } - - float progress; - switch (corePtr->LoopType) - { - default: - case LoopType.Restart: - progress = GetEasedValue(corePtr, (float)t); - break; - case LoopType.Flip: - progress = GetEasedValue(corePtr, (float)t); - if ((clampedCompletedLoops + (int)t) % 2 == 1) progress = 1f - progress; - break; - case LoopType.Incremental: - progress = GetEasedValue(corePtr, 1f) * clampedCompletedLoops + GetEasedValue(corePtr, (float)math.fmod(t, 1f)); - break; - case LoopType.Yoyo: - progress = (clampedCompletedLoops + (int)t) % 2 == 1 - ? GetEasedValue(corePtr, (float)(1f - t)) - : GetEasedValue(corePtr, (float)t); - break; - } - - var totalDuration = corePtr->DelayType == DelayType.FirstLoop - ? corePtr->Delay + corePtr->Duration * corePtr->Loops - : (corePtr->Delay + corePtr->Duration) * corePtr->Loops; - - if (corePtr->Loops > 0 && motionTime >= totalDuration) - { - corePtr->Status = MotionStatus.Completed; - } - else if (isDelayed) - { - corePtr->Status = MotionStatus.Delayed; - } - else - { - corePtr->Status = MotionStatus.Playing; - } - - var context = new MotionEvaluationContext() - { - Progress = progress - }; - - Output[index] = default(TAdapter).Evaluate(ref ptr->StartValue, ref ptr->EndValue, ref ptr->Options, context); + Output[index] = result; } else if (corePtr->Status is MotionStatus.Completed or MotionStatus.Canceled) { @@ -169,14 +52,5 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) corePtr->Status = MotionStatus.Disposed; } } - - static float GetEasedValue(MotionDataCore* data, float value) - { - return data->Ease switch - { - Ease.CustomAnimationCurve => data->AnimationCurve.Evaluate(value), - _ => EaseUtility.Evaluate(value, data->Ease) - }; - } } } \ No newline at end of file From 7e4e78474a56b6381b3cd844e3e675db80bff742 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 20:51:38 +0900 Subject: [PATCH 034/224] Remove: PlaybackSpeed check --- src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs | 5 ----- src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs | 1 - 2 files changed, 6 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs index c370c3e4..8796f862 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs @@ -26,11 +26,6 @@ public static void ArgumentNull(string message) throw new ArgumentNullException(message); } - public static void PlaybackSpeedMustBeZeroOrGreater() - { - throw new ArgumentOutOfRangeException("Playback speed must be 0 or greater."); - } - public static void TimeMustBeZeroOrGreater() { throw new ArgumentOutOfRangeException("Time must be 0 or greater."); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index eb2a3cad..c346c21e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -49,7 +49,6 @@ public readonly float PlaybackSpeed } set { - if (value < 0f) Error.PlaybackSpeedMustBeZeroOrGreater(); MotionManager.GetDataRef(this).PlaybackSpeed = value; } } From 71bbf99a0a58a70d7f60fb1dac85beb8f8c4f66d Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 20:56:20 +0900 Subject: [PATCH 035/224] Change: MotionHelper.Update -> SetTime --- .../Runtime/Internal/MotionHelper.cs | 20 +++++++++---------- .../Runtime/Internal/MotionStorage.cs | 5 +---- .../LitMotion/Runtime/MotionUpdateJob.cs | 4 +++- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs index f546a7ca..e78391d3 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -8,14 +8,14 @@ namespace LitMotion internal unsafe static class MotionHelper { [BurstCompile] - public static void Update(MotionData* ptr, double deltaTime, out TValue result) + public static void SetTime(MotionData* ptr, double time, out TValue result) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { var corePtr = (MotionDataCore*)ptr; - corePtr->Time = math.max(corePtr->Time + deltaTime * corePtr->PlaybackSpeed, 0.0); + corePtr->Time = math.max(time, 0.0); var motionTime = corePtr->Time; double t; @@ -28,8 +28,8 @@ public static void Update(MotionDataDelayType == DelayType.FirstLoop || corePtr->Delay == 0f) { - var time = motionTime - corePtr->Delay; - isCompleted = corePtr->Loops >= 0 && time > 0f; + var timeSinceStart = motionTime - corePtr->Delay; + isCompleted = corePtr->Loops >= 0 && timeSinceStart > 0f; if (isCompleted) { t = 1f; @@ -38,10 +38,10 @@ public static void Update(MotionDataLoops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); - isDelayed = time < 0; + isDelayed = timeSinceStart < 0; } else { @@ -56,11 +56,11 @@ public static void Update(MotionDataDelayType == DelayType.FirstLoop) { - var time = motionTime - corePtr->Delay; - completedLoops = (int)math.floor(time / corePtr->Duration); + var timeSinceStart = motionTime - corePtr->Delay; + completedLoops = (int)math.floor(timeSinceStart / corePtr->Duration); clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; - isDelayed = time < 0f; + isDelayed = timeSinceStart < 0f; if (isCompleted) { @@ -68,7 +68,7 @@ public static void Update(MotionDataDuration * clampedCompletedLoops; + var currentLoopTime = timeSinceStart - corePtr->Duration * clampedCompletedLoops; t = math.clamp(currentLoopTime / corePtr->Duration, 0f, 1f); } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 09442c3f..e4691f83 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -368,10 +368,7 @@ public unsafe void SetTime(MotionHandle handle, double time) var version = slot.Version; if (version <= 0 || version != handle.Version) Error.MotionNotExists(); - var prevTime = dataPtr->Core.Time; - var deltaTime = time - prevTime; - - MotionHelper.Update(dataPtr + denseIndex, deltaTime, out var result); + MotionHelper.SetTime(dataPtr + denseIndex, time, out var result); try { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs index 74ef0dd4..b014a30a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs @@ -42,7 +42,9 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) _ => default }; - MotionHelper.Update(ptr, deltaTime, out var result); + var time = corePtr->Time + deltaTime * corePtr->PlaybackSpeed; + + MotionHelper.SetTime(ptr, time, out var result); Output[index] = result; } From 94dbbd2f39a946d54fa669101e8b16be9246922c Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 21:02:43 +0900 Subject: [PATCH 036/224] Add: MotionHandle.Preserve() --- .../Assets/LitMotion/Runtime/Internal/MotionData.cs | 1 + .../Assets/LitMotion/Runtime/MotionHandleExtensions.cs | 6 ++++++ src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index 4d80557f..18d4cc1e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -10,6 +10,7 @@ public struct MotionDataCore public MotionStatus Status; public double Time; public float PlaybackSpeed; + public bool IsPreserved; // parameters public float Duration; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index a073e335..33ebe16d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -23,6 +23,12 @@ public static bool IsActive(this MotionHandle handle) return MotionManager.IsActive(handle); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void Preserve(this MotionHandle handle) + { + MotionManager.GetDataRef(handle).IsPreserved = true; + } + /// /// Complete motion. /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs index b014a30a..2927f696 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs @@ -48,7 +48,7 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) Output[index] = result; } - else if (corePtr->Status is MotionStatus.Completed or MotionStatus.Canceled) + else if ((!corePtr->IsPreserved && corePtr->Status is MotionStatus.Completed) || corePtr->Status is MotionStatus.Canceled) { CompletedIndexList.AddNoResize(index); corePtr->Status = MotionStatus.Disposed; From 4e1bb831d632337bca3cec76bd5f5f39ec65bb59 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 21:14:34 +0900 Subject: [PATCH 037/224] Refactoring --- .../LitMotion/Runtime/Internal/MotionHelper.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs index e78391d3..8a1f36df 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -16,7 +16,6 @@ public static void SetTime(MotionDataTime = math.max(time, 0.0); - var motionTime = corePtr->Time; double t; bool isCompleted; @@ -28,7 +27,7 @@ public static void SetTime(MotionDataDelayType == DelayType.FirstLoop || corePtr->Delay == 0f) { - var timeSinceStart = motionTime - corePtr->Delay; + var timeSinceStart = time - corePtr->Delay; isCompleted = corePtr->Loops >= 0 && timeSinceStart > 0f; if (isCompleted) { @@ -45,7 +44,7 @@ public static void SetTime(MotionDataDelay); + completedLoops = (int)math.floor(time / corePtr->Delay); clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; isDelayed = !isCompleted; @@ -56,7 +55,7 @@ public static void SetTime(MotionDataDelayType == DelayType.FirstLoop) { - var timeSinceStart = motionTime - corePtr->Delay; + var timeSinceStart = time - corePtr->Delay; completedLoops = (int)math.floor(timeSinceStart / corePtr->Duration); clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; @@ -74,9 +73,11 @@ public static void SetTime(MotionDataDuration + corePtr->Delay) - corePtr->Delay; - completedLoops = (int)math.floor(motionTime / (corePtr->Duration + corePtr->Delay)); - clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); + var currentLoopTime = math.fmod(time, corePtr->Duration + corePtr->Delay) - corePtr->Delay; + completedLoops = (int)math.floor(time / (corePtr->Duration + corePtr->Delay)); + clampedCompletedLoops = corePtr->Loops < 0 + ? math.max(0, completedLoops) + : math.clamp(completedLoops, 0, corePtr->Loops); isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; isDelayed = currentLoopTime < 0; @@ -116,7 +117,7 @@ public static void SetTime(MotionDataDelay + corePtr->Duration * corePtr->Loops : (corePtr->Delay + corePtr->Duration) * corePtr->Loops; - if (corePtr->Loops > 0 && motionTime >= totalDuration) + if (isCompleted) { corePtr->Status = MotionStatus.Completed; } From a5d3994115a86625ef4045b03c855d71d266bbdd Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 21:36:55 +0900 Subject: [PATCH 038/224] Fix: bug when time > totalDuration --- .../LitMotion/Runtime/Internal/MotionHelper.cs | 15 +++++++++++---- .../Assets/LitMotion/Runtime/MotionUpdateJob.cs | 3 ++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs index 8a1f36df..7209c531 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -15,7 +15,8 @@ public static void SetTime(MotionDataTime = math.max(time, 0.0); + corePtr->Time = time; + time = math.max(time, 0.0); double t; bool isCompleted; @@ -39,13 +40,17 @@ public static void SetTime(MotionDataLoops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); + clampedCompletedLoops = corePtr->Loops < 0 + ? math.max(0, completedLoops) + : math.clamp(completedLoops, 0, corePtr->Loops); isDelayed = timeSinceStart < 0; } else { completedLoops = (int)math.floor(time / corePtr->Delay); - clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); + clampedCompletedLoops = corePtr->Loops < 0 + ? math.max(0, completedLoops) + : math.clamp(completedLoops, 0, corePtr->Loops); isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; isDelayed = !isCompleted; t = isCompleted ? 1f : 0f; @@ -57,7 +62,9 @@ public static void SetTime(MotionDataDelay; completedLoops = (int)math.floor(timeSinceStart / corePtr->Duration); - clampedCompletedLoops = corePtr->Loops < 0 ? math.max(0, completedLoops) : math.clamp(completedLoops, 0, corePtr->Loops); + clampedCompletedLoops = corePtr->Loops < 0 + ? math.max(0, completedLoops) + : math.clamp(completedLoops, 0, corePtr->Loops); isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; isDelayed = timeSinceStart < 0f; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs index 2927f696..5da497a0 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs @@ -32,7 +32,8 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) var ptr = DataPtr + index; var corePtr = (MotionDataCore*)ptr; - if (Hint.Likely(corePtr->Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing)) + if (Hint.Likely(corePtr->Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing) || + Hint.Unlikely(corePtr->IsPreserved && corePtr->Status is MotionStatus.Completed)) { var deltaTime = corePtr->TimeKind switch { From 8a623e5b0d1606b913244bedd32e40addf978517 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 21:41:51 +0900 Subject: [PATCH 039/224] Fix: IsPreserved is not initialized --- .../Assets/LitMotion/Runtime/Internal/MotionStorage.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index e4691f83..d50bf8de 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -72,9 +72,10 @@ public unsafe MotionHandle Create(ref MotionBuilder ref var dataRef = ref unmanagedDataArray[tail]; ref var managedDataRef = ref managedDataArray[tail]; + dataRef.Core.Status = MotionStatus.Scheduled; dataRef.Core.Time = 0; dataRef.Core.PlaybackSpeed = 1f; - dataRef.Core.Status = MotionStatus.Scheduled; + dataRef.Core.IsPreserved = false; dataRef.Core.Duration = buffer.Duration; dataRef.Core.Delay = buffer.Delay; From 769feba50692cdad7b7874d1d6445c59d3fa0f71 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 21:44:54 +0900 Subject: [PATCH 040/224] Update: tests --- .../Tests/Runtime/MotionHandleTest.cs | 47 ++++++++++++++++++- .../Tests/Runtime/PlaybackSpeedTest.cs | 11 ----- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs index 51d61c92..58591a16 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs @@ -25,6 +25,28 @@ public IEnumerator Test_Cancel() Assert.IsTrue(!handle.IsActive()); } + [UnityTest] + public IEnumerator Test_TryCancel() + { + var value = 0f; + var endValue = 10f; + var handle = LMotion.Create(0f, endValue, 2f) + .Bind(x => + { + value = x; + Debug.Log(x); + }); + yield return new WaitForSeconds(1f); + var tryResult = handle.TryCancel(); + Assert.IsTrue(tryResult); + yield return new WaitForSeconds(1f); + Assert.IsTrue(value < endValue); + Assert.IsTrue(!handle.IsActive()); + + tryResult = handle.TryCancel(); + Assert.IsFalse(tryResult); + } + [UnityTest] public IEnumerator Test_Complete() { @@ -42,6 +64,27 @@ public IEnumerator Test_Complete() Assert.IsTrue(!handle.IsActive()); } + [UnityTest] + public IEnumerator Test_TryComplete() + { + var value = 0f; + var endValue = 10f; + var handle = LMotion.Create(0f, endValue, 2f) + .Bind(x => + { + value = x; + Debug.Log(x); + }); + yield return new WaitForSeconds(1f); + var tryResult = handle.TryComplete(); + Assert.IsTrue(tryResult); + Assert.AreApproximatelyEqual(value, endValue); + Assert.IsTrue(!handle.IsActive()); + + tryResult = handle.TryComplete(); + Assert.IsFalse(tryResult); + } + [UnityTest] public IEnumerator Test_Complete_WithYoyoLoop() { @@ -73,9 +116,9 @@ public IEnumerator Test_CompleteAndCancel_WithInfiniteLoop() Debug.Log(x); }); yield return new WaitForSeconds(1f); - handle.Complete(); + handle.TryComplete(); Assert.IsTrue(handle.IsActive()); - handle.Cancel(); + handle.TryCancel(); Assert.IsTrue(!handle.IsActive()); } diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs index d4780953..bfe48b9d 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs @@ -51,16 +51,5 @@ public IEnumerator Test_PlaybackSpeed_2x_Speed() yield return handle.ToYieldInteraction(); Assert.That(Time.time - time, Is.EqualTo(0.5f).Using(new FloatEqualityComparer(0.05f))); } - - [Test] - public void Test_PlaybackSpeed_Minus() - { - var handle = LMotion.Create(0f, 10f, 1f).RunWithoutBinding(); - Assert.Throws(() => - { - handle.PlaybackSpeed = -1f; - }); - } - } } \ No newline at end of file From b0295f9cb9e336d3f5494f7b927a25f2d6204805 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 21:48:35 +0900 Subject: [PATCH 041/224] Revert "Remove: PlaybackSpeed check" This reverts commit 7e4e78474a56b6381b3cd844e3e675db80bff742. --- src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs | 5 +++++ src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs | 1 + 2 files changed, 6 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs index 8796f862..c370c3e4 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs @@ -26,6 +26,11 @@ public static void ArgumentNull(string message) throw new ArgumentNullException(message); } + public static void PlaybackSpeedMustBeZeroOrGreater() + { + throw new ArgumentOutOfRangeException("Playback speed must be 0 or greater."); + } + public static void TimeMustBeZeroOrGreater() { throw new ArgumentOutOfRangeException("Time must be 0 or greater."); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index c346c21e..eb2a3cad 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -49,6 +49,7 @@ public readonly float PlaybackSpeed } set { + if (value < 0f) Error.PlaybackSpeedMustBeZeroOrGreater(); MotionManager.GetDataRef(this).PlaybackSpeed = value; } } From ddd00f68b21072f7266cf3780e13d339feb36073 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 22:04:26 +0900 Subject: [PATCH 042/224] Fix: OnComplete is called every frame after completion --- .../LitMotion/Runtime/Internal/MotionData.cs | 1 + .../Runtime/Internal/MotionHelper.cs | 6 +++++ .../Runtime/Internal/UpdateRunner.cs | 22 +++++++++++-------- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index 18d4cc1e..8595f16b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -11,6 +11,7 @@ public struct MotionDataCore public double Time; public float PlaybackSpeed; public bool IsPreserved; + public bool WasStatusChanged; // parameters public float Duration; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs index 7209c531..f647f0f6 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -14,6 +14,10 @@ public static void SetTime(MotionData { var corePtr = (MotionDataCore*)ptr; + var prevStatus = corePtr->Status; + + // reset flag(s) + corePtr->WasStatusChanged = false; corePtr->Time = time; time = math.max(time, 0.0); @@ -137,6 +141,8 @@ public static void SetTime(MotionDataStatus = MotionStatus.Playing; } + corePtr->WasStatusChanged = prevStatus != corePtr->Status; + var context = new MotionEvaluationContext() { Progress = progress diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index dc9db464..b573b4a0 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -62,7 +62,8 @@ public unsafe void Update(double time, double unscaledTime, double realtime) var outputPtr = (TValue*)output.GetUnsafePtr(); for (int i = 0; i < managedDataSpan.Length; i++) { - var status = (dataPtr + i)->Core.Status; + var currentDataPtr = dataPtr + i; + var status = currentDataPtr->Core.Status; ref var managedData = ref managedDataSpan[i]; if (status == MotionStatus.Playing || (status == MotionStatus.Delayed && !managedData.SkipValuesDuringDelay)) { @@ -75,7 +76,7 @@ public unsafe void Update(double time, double unscaledTime, double realtime) MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); if (managedData.CancelOnError) { - (dataPtr + i)->Core.Status = MotionStatus.Canceled; + currentDataPtr->Core.Status = MotionStatus.Canceled; managedData.OnCancelAction?.Invoke(); } } @@ -91,19 +92,22 @@ public unsafe void Update(double time, double unscaledTime, double realtime) MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); if (managedData.CancelOnError) { - (dataPtr + i)->Core.Status = MotionStatus.Canceled; + currentDataPtr->Core.Status = MotionStatus.Canceled; managedData.OnCancelAction?.Invoke(); continue; } } - try + if (currentDataPtr->Core.WasStatusChanged) { - managedData.OnCompleteAction?.Invoke(); - } - catch (Exception ex) - { - MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + try + { + managedData.OnCompleteAction?.Invoke(); + } + catch (Exception ex) + { + MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + } } } } From c8e935c522a8ca3c239a7544952f9c69a8b08527 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 22:07:19 +0900 Subject: [PATCH 043/224] Fix: TryCompleteCore --- .../Assets/LitMotion/Runtime/Internal/MotionStorage.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index d50bf8de..617d5df2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -310,8 +310,7 @@ int TryCompleteCore(MotionHandle handle) ref var managedData = ref managedDataArray[denseIndex]; - // To avoid duplication of Complete processing, it is treated as canceled internally. - unmanagedData.Core.Status = MotionStatus.Canceled; + unmanagedData.Core.Status = MotionStatus.Completed; var endProgress = unmanagedData.Core.LoopType switch { From 730833bd61a161a3a8b63c7d04475fc58e2240a8 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 22:16:15 +0900 Subject: [PATCH 044/224] =?UTF-8?q?Change:=20allow=20negative=20values=20?= =?UTF-8?q?=E2=80=8B=E2=80=8Bfor=20PlaybackSpeed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs | 5 ----- src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs | 1 - 2 files changed, 6 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs index c370c3e4..8796f862 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs @@ -26,11 +26,6 @@ public static void ArgumentNull(string message) throw new ArgumentNullException(message); } - public static void PlaybackSpeedMustBeZeroOrGreater() - { - throw new ArgumentOutOfRangeException("Playback speed must be 0 or greater."); - } - public static void TimeMustBeZeroOrGreater() { throw new ArgumentOutOfRangeException("Time must be 0 or greater."); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index eb2a3cad..c346c21e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -49,7 +49,6 @@ public readonly float PlaybackSpeed } set { - if (value < 0f) Error.PlaybackSpeedMustBeZeroOrGreater(); MotionManager.GetDataRef(this).PlaybackSpeed = value; } } From f864caa5e36920c41d528b80022d2963167cc383 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 23 Nov 2024 22:45:35 +0900 Subject: [PATCH 045/224] Fix: UpdateRunner.Reset --- .../Assets/LitMotion/Runtime/Internal/UpdateRunner.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index b573b4a0..027922e2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -118,6 +118,9 @@ public unsafe void Update(double time, double unscaledTime, double realtime) public void Reset() { + prevTime = 0; + prevUnscaledTime = 0; + prevRealtime = 0; storage.Reset(); } } From 3ea767e690400ef660fc92f1971665fa8cf34f87 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 01:49:08 +0900 Subject: [PATCH 046/224] Add: MotionSettings / SerializableMotionSettings --- .../Runtime/Internal/MotionStorage.cs | 36 +++--- .../LitMotion/Runtime/LMotion.Create.cs | 6 +- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 64 +++-------- .../Runtime/MotionBuilderExtensions.cs | 45 +++++--- .../LitMotion/Runtime/MotionSettings.cs | 74 +++++++++++++ .../LitMotion/Runtime/MotionSettings.cs.meta | 2 + .../Runtime/SerializableMotionSettings.cs | 103 ++++++++++++++++++ .../SerializableMotionSettings.cs.meta | 2 + 8 files changed, 252 insertions(+), 80 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 617d5df2..93b79010 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -76,46 +76,46 @@ public unsafe MotionHandle Create(ref MotionBuilder dataRef.Core.Time = 0; dataRef.Core.PlaybackSpeed = 1f; dataRef.Core.IsPreserved = false; - - dataRef.Core.Duration = buffer.Duration; - dataRef.Core.Delay = buffer.Delay; - dataRef.Core.DelayType = buffer.DelayType; - dataRef.Core.Ease = buffer.Ease; - dataRef.Core.Loops = buffer.Loops; - dataRef.Core.LoopType = buffer.LoopType; dataRef.Core.TimeKind = buffer.TimeKind; - dataRef.StartValue = buffer.StartValue; - dataRef.EndValue = buffer.EndValue; - dataRef.Options = buffer.Options; - if (buffer.Ease == Ease.CustomAnimationCurve) + dataRef.Core.Duration = buffer.Settings.Duration; + dataRef.Core.Delay = buffer.Settings.Delay; + dataRef.Core.DelayType = buffer.Settings.DelayType; + dataRef.Core.Ease = buffer.Settings.Ease; + dataRef.Core.Loops = buffer.Settings.Loops; + dataRef.Core.LoopType = buffer.Settings.LoopType; + dataRef.StartValue = buffer.Settings.StartValue; + dataRef.EndValue = buffer.Settings.EndValue; + dataRef.Options = buffer.Settings.Options; + + if (buffer.Settings.Ease == Ease.CustomAnimationCurve) { if (dataRef.Core.AnimationCurve.IsCreated) { - dataRef.Core.AnimationCurve.CopyFrom(buffer.AnimationCurve); + dataRef.Core.AnimationCurve.CopyFrom(buffer.Settings.CustomEaseCurve); } else { #if LITMOTION_COLLECTIONS_2_0_OR_NEWER - dataRef.Core.AnimationCurve = new NativeAnimationCurve(buffer.AnimationCurve, allocator.Allocator.Handle); + dataRef.Core.AnimationCurve = new NativeAnimationCurve(buffer.Settings.CustomEaseCurve, allocator.Allocator.Handle); #else - dataRef.Core.AnimationCurve = new UnsafeAnimationCurve(buffer.AnimationCurve, allocator.Allocator.Handle); + dataRef.Core.AnimationCurve = new UnsafeAnimationCurve(buffer.Settings.CustomEaseCurve, allocator.Allocator.Handle); #endif } } - managedDataRef.CancelOnError = buffer.CancelOnError; + managedDataRef.CancelOnError = buffer.Settings.CancelOnError; + managedDataRef.SkipValuesDuringDelay = buffer.Settings.SkipValuesDuringDelay; managedDataRef.UpdateAction = buffer.UpdateAction; managedDataRef.UpdateActionPtr = buffer.UpdateActionPtr; managedDataRef.OnCancelAction = buffer.OnCancelAction; managedDataRef.OnCompleteAction = buffer.OnCompleteAction; - managedDataRef.SkipValuesDuringDelay = buffer.SkipValuesDuringDelay; managedDataRef.StateCount = buffer.StateCount; managedDataRef.State0 = buffer.State0; managedDataRef.State1 = buffer.State1; managedDataRef.State2 = buffer.State2; - if (buffer.BindOnSchedule && buffer.UpdateAction != null) + if (buffer.Settings.BindOnSchedule && buffer.UpdateAction != null) { managedDataRef.UpdateUnsafe( default(TAdapter).Evaluate( @@ -126,7 +126,7 @@ public unsafe MotionHandle Create(ref MotionBuilder { Progress = dataRef.Core.Ease switch { - Ease.CustomAnimationCurve => buffer.AnimationCurve.Evaluate(0f), + Ease.CustomAnimationCurve => buffer.Settings.CustomEaseCurve.Evaluate(0f), _ => EaseUtility.Evaluate(0f, dataRef.Core.Ease) } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs index 385eec8f..2a0a2d45 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs @@ -114,9 +114,9 @@ public static MotionBuilder Create { var buffer = MotionBuilderBuffer.Rent(); - buffer.StartValue = from; - buffer.EndValue = to; - buffer.Duration = duration; + buffer.Settings.StartValue = from; + buffer.Settings.EndValue = to; + buffer.Settings.Duration = duration; return new MotionBuilder(buffer); } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index 3f0941b2..f69174b3 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -30,19 +30,8 @@ public static void Return(MotionBuilderBuffer buffer) { buffer.Version++; buffer.IsPreserved = false; - buffer.BindOnSchedule = false; - buffer.StartValue = default; - buffer.EndValue = default; - buffer.Options = default; - - buffer.Duration = default; - buffer.Ease = default; - buffer.AnimationCurve = default; - buffer.TimeKind = default; - buffer.Delay = default; - buffer.Loops = 1; - buffer.LoopType = default; + buffer.Settings.Reset(); buffer.State0 = default; buffer.State1 = default; @@ -54,11 +43,6 @@ public static void Return(MotionBuilderBuffer buffer) buffer.OnCompleteAction = default; buffer.OnCancelAction = default; - buffer.CancelOnError = default; - buffer.SkipValuesDuringDelay = default; - - buffer.Scheduler = default; - if (buffer.Version != ushort.MaxValue) { buffer.NextNode = PoolRoot; @@ -69,20 +53,10 @@ public static void Return(MotionBuilderBuffer buffer) public ushort Version; public MotionBuilderBuffer NextNode; public bool IsPreserved; - public bool BindOnSchedule; + public MotionSettings Settings = new(); - public TValue StartValue; - public TValue EndValue; - public TOptions Options; - public float Duration; - public Ease Ease; public MotionTimeKind TimeKind; - public float Delay; - public int Loops = 1; - public DelayType DelayType; - public LoopType LoopType; - public bool CancelOnError; - public bool SkipValuesDuringDelay; + public object State0; public object State1; public object State2; @@ -91,8 +65,6 @@ public static void Return(MotionBuilderBuffer buffer) public object UpdateAction; public Action OnCompleteAction; public Action OnCancelAction; - public AnimationCurve AnimationCurve; - public IMotionScheduler Scheduler; } /// @@ -125,7 +97,7 @@ public readonly MotionBuilder WithEase(Ease ease) { CheckEaseType(ease); CheckBuffer(); - buffer.Ease = ease; + buffer.Settings.Ease = ease; return this; } @@ -138,8 +110,8 @@ public readonly MotionBuilder WithEase(Ease ease) public readonly MotionBuilder WithEase(AnimationCurve animationCurve) { CheckBuffer(); - buffer.AnimationCurve = animationCurve; - buffer.Ease = Ease.CustomAnimationCurve; + buffer.Settings.CustomEaseCurve = animationCurve; + buffer.Settings.Ease = Ease.CustomAnimationCurve; return this; } @@ -154,9 +126,9 @@ public readonly MotionBuilder WithEase(AnimationCurv public readonly MotionBuilder WithDelay(float delay, DelayType delayType = DelayType.FirstLoop, bool skipValuesDuringDelay = true) { CheckBuffer(); - buffer.Delay = delay; - buffer.DelayType = delayType; - buffer.SkipValuesDuringDelay = skipValuesDuringDelay; + buffer.Settings.Delay = delay; + buffer.Settings.DelayType = delayType; + buffer.Settings.SkipValuesDuringDelay = skipValuesDuringDelay; return this; } @@ -170,8 +142,8 @@ public readonly MotionBuilder WithDelay(float delay, public readonly MotionBuilder WithLoops(int loops, LoopType loopType = LoopType.Restart) { CheckBuffer(); - buffer.Loops = loops; - buffer.LoopType = loopType; + buffer.Settings.Loops = loops; + buffer.Settings.LoopType = loopType; return this; } @@ -184,7 +156,7 @@ public readonly MotionBuilder WithLoops(int loops, L public readonly MotionBuilder WithOptions(TOptions options) { CheckBuffer(); - buffer.Options = options; + buffer.Settings.Options = options; return this; } @@ -223,7 +195,7 @@ public readonly MotionBuilder WithOnComplete(Action public readonly MotionBuilder WithCancelOnError(bool cancelOnError = true) { CheckBuffer(); - buffer.CancelOnError = cancelOnError; + buffer.Settings.CancelOnError = cancelOnError; return this; } @@ -236,7 +208,7 @@ public readonly MotionBuilder WithCancelOnError(bool public readonly MotionBuilder WithBindOnSchedule(bool bindOnSchedule = true) { CheckBuffer(); - buffer.BindOnSchedule = bindOnSchedule; + buffer.Settings.BindOnSchedule = bindOnSchedule; return this; } @@ -249,7 +221,7 @@ public readonly MotionBuilder WithBindOnSchedule(boo public readonly MotionBuilder WithScheduler(IMotionScheduler scheduler) { CheckBuffer(); - buffer.Scheduler = scheduler; + buffer.Settings.Scheduler = scheduler; return this; } @@ -422,7 +394,7 @@ internal MotionHandle ScheduleMotion() { MotionHandle handle; - if (buffer.Scheduler == null) + if (buffer.Settings.Scheduler == null) { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlaying) @@ -450,12 +422,12 @@ internal MotionHandle ScheduleMotion() } else { - handle = buffer.Scheduler.Schedule(ref this); + handle = buffer.Settings.Scheduler.Schedule(ref this); } if (MotionTracker.EnableTracking) { - MotionTracker.AddTracking(handle, buffer.Scheduler); + MotionTracker.AddTracking(handle, buffer.Settings.Scheduler); } if (!buffer.IsPreserved) Dispose(); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index 1b467a17..fcd20803 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -1,6 +1,4 @@ using System; -using System.Runtime.CompilerServices; -using LitMotion; using Unity.Collections; namespace LitMotion @@ -45,7 +43,9 @@ public static MotionBuilder WithRoundingMode { - builder.buffer.Options.RoundingMode = roundingMode; + var options = builder.buffer.Settings.Options; + options.RoundingMode = roundingMode; + builder.buffer.Settings.Options = options; return builder; } @@ -61,7 +61,9 @@ public static MotionBuilder WithFrequency { - builder.buffer.Options.Frequency = frequency; + var options = builder.buffer.Settings.Options; + options.Frequency = frequency; + builder.buffer.Settings.Options = options; return builder; } @@ -77,7 +79,9 @@ public static MotionBuilder WithDampingRatio { - builder.buffer.Options.DampingRatio = dampingRatio; + var options = builder.buffer.Settings.Options; + options.DampingRatio = dampingRatio; + builder.buffer.Settings.Options = options; return builder; } @@ -93,7 +97,9 @@ public static MotionBuilder WithFrequency { - builder.buffer.Options.Frequency = frequency; + var options = builder.buffer.Settings.Options; + options.Frequency = frequency; + builder.buffer.Settings.Options = options; return builder; } @@ -109,7 +115,9 @@ public static MotionBuilder WithDampingRatio { - builder.buffer.Options.DampingRatio = dampingRatio; + var options = builder.buffer.Settings.Options; + options.DampingRatio = dampingRatio; + builder.buffer.Settings.Options = options; return builder; } @@ -125,7 +133,9 @@ public static MotionBuilder WithRandomSeed { - builder.buffer.Options.RandomState = new Unity.Mathematics.Random(seed); + var options = builder.buffer.Settings.Options; + options.RandomState = new Unity.Mathematics.Random(seed); + builder.buffer.Settings.Options = options; return builder; } @@ -141,7 +151,9 @@ public static MotionBuilder WithRichText { - builder.buffer.Options.RichTextEnabled = richTextEnabled; + var options = builder.buffer.Settings.Options; + options.RichTextEnabled = richTextEnabled; + builder.buffer.Settings.Options = options; return builder; } @@ -157,7 +169,9 @@ public static MotionBuilder WithRandomSeed { - builder.buffer.Options.RandomState = new Unity.Mathematics.Random(seed); + var options = builder.buffer.Settings.Options; + options.RandomState = new Unity.Mathematics.Random(seed); + builder.buffer.Settings.Options = options; return builder; } @@ -174,7 +188,11 @@ public static MotionBuilder WithScrambleChars { if (scrambleMode == ScrambleMode.Custom) throw new ArgumentException("ScrambleMode.Custom cannot be specified explicitly. Use WithScrambleMode(FixedString64Bytes) instead."); - builder.buffer.Options.ScrambleMode = scrambleMode; + + var options = builder.buffer.Settings.Options; + options.ScrambleMode = scrambleMode; + builder.buffer.Settings.Options = options; + return builder; } @@ -190,8 +208,9 @@ public static MotionBuilder WithScrambleChars { - builder.buffer.Options.ScrambleMode = ScrambleMode.Custom; - builder.buffer.Options.CustomScrambleChars = customScrambleChars; + var options = builder.buffer.Settings.Options; + options.CustomScrambleChars = customScrambleChars; + builder.buffer.Settings.Options = options; return builder; } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs new file mode 100644 index 00000000..d5ad1331 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs @@ -0,0 +1,74 @@ +using UnityEngine; + +namespace LitMotion +{ + public record MotionSettings + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + { + public TValue StartValue { get; set; } + public TValue EndValue { get; set; } + public float Duration { get; set; } + public TOptions Options { get; set; } + public Ease Ease { get; set; } + public AnimationCurve CustomEaseCurve { get; set; } + public float Delay { get; set; } + public DelayType DelayType { get; set; } + public int Loops { get; set; } = 1; + public LoopType LoopType { get; set; } + public bool CancelOnError { get; set; } + public bool SkipValuesDuringDelay { get; set; } + public bool BindOnSchedule { get; set; } + public IMotionScheduler Scheduler { get; set; } + + public void CopyFrom(MotionSettings source) + { + StartValue = source.StartValue; + EndValue = source.EndValue; + Duration = source.Duration; + Options = source.Options; + Ease = source.Ease; + CustomEaseCurve = source.CustomEaseCurve; + Delay = source.Delay; + DelayType = source.DelayType; + Loops = source.Loops; + LoopType = source.LoopType; + CancelOnError = source.CancelOnError; + SkipValuesDuringDelay = source.SkipValuesDuringDelay; + Scheduler = source.Scheduler; + } + + public void CopyFrom(SerializableMotionSettings source) + { + StartValue = source.StartValue; + EndValue = source.EndValue; + Duration = source.Duration; + Options = source.Options; + Ease = source.Ease; + CustomEaseCurve = source.CustomEaseCurve; + Delay = source.Delay; + DelayType = source.DelayType; + Loops = source.Loops; + LoopType = source.LoopType; + CancelOnError = source.CancelOnError; + SkipValuesDuringDelay = source.SkipValuesDuringDelay; + } + + internal void Reset() + { + StartValue = default; + EndValue = default; + Duration = default; + Options = default; + Ease = default; + CustomEaseCurve = default; + Delay = default; + DelayType = default; + Loops = 1; + LoopType = default; + CancelOnError = default; + SkipValuesDuringDelay = default; + Scheduler = default; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs.meta new file mode 100644 index 00000000..3ca4bde4 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2a2803ec6a3ff4ef5be9d8dc994f4f37 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs new file mode 100644 index 00000000..5769e639 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs @@ -0,0 +1,103 @@ +using System; +using UnityEngine; + +namespace LitMotion +{ + [Serializable] + public record SerializableMotionSettings + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + { + [SerializeField] TValue startValue; + [SerializeField] TValue endValue; + [SerializeField] float duration; + [SerializeField] TOptions options; + [SerializeField] Ease ease; + [SerializeField] AnimationCurve customEaseCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); + [SerializeField] float delay; + [SerializeField] DelayType delayType; + [SerializeField] int loops = 1; + [SerializeField] LoopType loopType; + [SerializeField] bool cancelOnError; + [SerializeField] bool skipValuesDuringDelay; + [SerializeField] bool bindOnSchedule; + + public TValue StartValue + { + get => startValue; + set => startValue = value; + } + + public TValue EndValue + { + get => endValue; + set => endValue = value; + } + + public float Duration + { + get => duration; + set => duration = value; + } + + public TOptions Options + { + get => options; + set => options = value; + } + + public Ease Ease + { + get => ease; + set => ease = value; + } + + public AnimationCurve CustomEaseCurve + { + get => customEaseCurve; + set => customEaseCurve = value; + } + + public float Delay + { + get => delay; + set => delay = value; + } + + public DelayType DelayType + { + get => delayType; + set => delayType = value; + } + + public int Loops + { + get => loops; + set => loops = value; + } + + public LoopType LoopType + { + get => loopType; + set => loopType = value; + } + + public bool CancelOnError + { + get => cancelOnError; + set => cancelOnError = value; + } + + public bool SkipValuesDuringDelay + { + get => skipValuesDuringDelay; + set => skipValuesDuringDelay = value; + } + + public bool BindOnSchedule + { + get => bindOnSchedule; + set => bindOnSchedule = value; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs.meta new file mode 100644 index 00000000..105e4b0a --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 75aa79f4e870a4c6c955b640195e7a92 \ No newline at end of file From 8e0c64cf24c51fcd08467200750514f5af918775 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 10:51:34 +0900 Subject: [PATCH 047/224] Change: MotionSettings to immutable --- .../Runtime/Internal/MotionStorage.cs | 36 ++--- .../LitMotion/Runtime/Internal/Shims.cs | 6 + .../LitMotion/Runtime/Internal/Shims.cs.meta | 2 + .../LitMotion/Runtime/LMotion.Create.cs | 6 +- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 64 ++++++--- .../Runtime/MotionBuilderExtensions.cs | 40 +++--- .../LitMotion/Runtime/MotionSettings.cs | 78 ++-------- .../Runtime/SerializableMotionSettings.cs | 136 ++++++++++++++++-- 8 files changed, 233 insertions(+), 135 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/Shims.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/Shims.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 93b79010..ab14c74d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -78,34 +78,34 @@ public unsafe MotionHandle Create(ref MotionBuilder dataRef.Core.IsPreserved = false; dataRef.Core.TimeKind = buffer.TimeKind; - dataRef.Core.Duration = buffer.Settings.Duration; - dataRef.Core.Delay = buffer.Settings.Delay; - dataRef.Core.DelayType = buffer.Settings.DelayType; - dataRef.Core.Ease = buffer.Settings.Ease; - dataRef.Core.Loops = buffer.Settings.Loops; - dataRef.Core.LoopType = buffer.Settings.LoopType; - dataRef.StartValue = buffer.Settings.StartValue; - dataRef.EndValue = buffer.Settings.EndValue; - dataRef.Options = buffer.Settings.Options; - - if (buffer.Settings.Ease == Ease.CustomAnimationCurve) + dataRef.Core.Duration = buffer.Duration; + dataRef.Core.Delay = buffer.Delay; + dataRef.Core.DelayType = buffer.DelayType; + dataRef.Core.Ease = buffer.Ease; + dataRef.Core.Loops = buffer.Loops; + dataRef.Core.LoopType = buffer.LoopType; + dataRef.StartValue = buffer.StartValue; + dataRef.EndValue = buffer.EndValue; + dataRef.Options = buffer.Options; + + if (buffer.Ease == Ease.CustomAnimationCurve) { if (dataRef.Core.AnimationCurve.IsCreated) { - dataRef.Core.AnimationCurve.CopyFrom(buffer.Settings.CustomEaseCurve); + dataRef.Core.AnimationCurve.CopyFrom(buffer.AnimationCurve); } else { #if LITMOTION_COLLECTIONS_2_0_OR_NEWER - dataRef.Core.AnimationCurve = new NativeAnimationCurve(buffer.Settings.CustomEaseCurve, allocator.Allocator.Handle); + dataRef.Core.AnimationCurve = new NativeAnimationCurve(buffer.AnimationCurve, allocator.Allocator.Handle); #else - dataRef.Core.AnimationCurve = new UnsafeAnimationCurve(buffer.Settings.CustomEaseCurve, allocator.Allocator.Handle); + dataRef.Core.AnimationCurve = new UnsafeAnimationCurve(buffer.AnimationCurve, allocator.Allocator.Handle); #endif } } - managedDataRef.CancelOnError = buffer.Settings.CancelOnError; - managedDataRef.SkipValuesDuringDelay = buffer.Settings.SkipValuesDuringDelay; + managedDataRef.CancelOnError = buffer.CancelOnError; + managedDataRef.SkipValuesDuringDelay = buffer.SkipValuesDuringDelay; managedDataRef.UpdateAction = buffer.UpdateAction; managedDataRef.UpdateActionPtr = buffer.UpdateActionPtr; managedDataRef.OnCancelAction = buffer.OnCancelAction; @@ -115,7 +115,7 @@ public unsafe MotionHandle Create(ref MotionBuilder managedDataRef.State1 = buffer.State1; managedDataRef.State2 = buffer.State2; - if (buffer.Settings.BindOnSchedule && buffer.UpdateAction != null) + if (buffer.BindOnSchedule && buffer.UpdateAction != null) { managedDataRef.UpdateUnsafe( default(TAdapter).Evaluate( @@ -126,7 +126,7 @@ public unsafe MotionHandle Create(ref MotionBuilder { Progress = dataRef.Core.Ease switch { - Ease.CustomAnimationCurve => buffer.Settings.CustomEaseCurve.Evaluate(0f), + Ease.CustomAnimationCurve => buffer.AnimationCurve.Evaluate(0f), _ => EaseUtility.Evaluate(0f, dataRef.Core.Ease) } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Shims.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Shims.cs new file mode 100644 index 00000000..631981ba --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Shims.cs @@ -0,0 +1,6 @@ +namespace System.Runtime.CompilerServices +{ + internal sealed class IsExternalInit + { + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Shims.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Shims.cs.meta new file mode 100644 index 00000000..3218b62f --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Shims.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 18e8b9304d4c5481d8dac9df99d0ffee \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs index 2a0a2d45..385eec8f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.cs @@ -114,9 +114,9 @@ public static MotionBuilder Create { var buffer = MotionBuilderBuffer.Rent(); - buffer.Settings.StartValue = from; - buffer.Settings.EndValue = to; - buffer.Settings.Duration = duration; + buffer.StartValue = from; + buffer.EndValue = to; + buffer.Duration = duration; return new MotionBuilder(buffer); } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index f69174b3..3f0941b2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -30,8 +30,19 @@ public static void Return(MotionBuilderBuffer buffer) { buffer.Version++; buffer.IsPreserved = false; + buffer.BindOnSchedule = false; - buffer.Settings.Reset(); + buffer.StartValue = default; + buffer.EndValue = default; + buffer.Options = default; + + buffer.Duration = default; + buffer.Ease = default; + buffer.AnimationCurve = default; + buffer.TimeKind = default; + buffer.Delay = default; + buffer.Loops = 1; + buffer.LoopType = default; buffer.State0 = default; buffer.State1 = default; @@ -43,6 +54,11 @@ public static void Return(MotionBuilderBuffer buffer) buffer.OnCompleteAction = default; buffer.OnCancelAction = default; + buffer.CancelOnError = default; + buffer.SkipValuesDuringDelay = default; + + buffer.Scheduler = default; + if (buffer.Version != ushort.MaxValue) { buffer.NextNode = PoolRoot; @@ -53,10 +69,20 @@ public static void Return(MotionBuilderBuffer buffer) public ushort Version; public MotionBuilderBuffer NextNode; public bool IsPreserved; - public MotionSettings Settings = new(); + public bool BindOnSchedule; + public TValue StartValue; + public TValue EndValue; + public TOptions Options; + public float Duration; + public Ease Ease; public MotionTimeKind TimeKind; - + public float Delay; + public int Loops = 1; + public DelayType DelayType; + public LoopType LoopType; + public bool CancelOnError; + public bool SkipValuesDuringDelay; public object State0; public object State1; public object State2; @@ -65,6 +91,8 @@ public static void Return(MotionBuilderBuffer buffer) public object UpdateAction; public Action OnCompleteAction; public Action OnCancelAction; + public AnimationCurve AnimationCurve; + public IMotionScheduler Scheduler; } /// @@ -97,7 +125,7 @@ public readonly MotionBuilder WithEase(Ease ease) { CheckEaseType(ease); CheckBuffer(); - buffer.Settings.Ease = ease; + buffer.Ease = ease; return this; } @@ -110,8 +138,8 @@ public readonly MotionBuilder WithEase(Ease ease) public readonly MotionBuilder WithEase(AnimationCurve animationCurve) { CheckBuffer(); - buffer.Settings.CustomEaseCurve = animationCurve; - buffer.Settings.Ease = Ease.CustomAnimationCurve; + buffer.AnimationCurve = animationCurve; + buffer.Ease = Ease.CustomAnimationCurve; return this; } @@ -126,9 +154,9 @@ public readonly MotionBuilder WithEase(AnimationCurv public readonly MotionBuilder WithDelay(float delay, DelayType delayType = DelayType.FirstLoop, bool skipValuesDuringDelay = true) { CheckBuffer(); - buffer.Settings.Delay = delay; - buffer.Settings.DelayType = delayType; - buffer.Settings.SkipValuesDuringDelay = skipValuesDuringDelay; + buffer.Delay = delay; + buffer.DelayType = delayType; + buffer.SkipValuesDuringDelay = skipValuesDuringDelay; return this; } @@ -142,8 +170,8 @@ public readonly MotionBuilder WithDelay(float delay, public readonly MotionBuilder WithLoops(int loops, LoopType loopType = LoopType.Restart) { CheckBuffer(); - buffer.Settings.Loops = loops; - buffer.Settings.LoopType = loopType; + buffer.Loops = loops; + buffer.LoopType = loopType; return this; } @@ -156,7 +184,7 @@ public readonly MotionBuilder WithLoops(int loops, L public readonly MotionBuilder WithOptions(TOptions options) { CheckBuffer(); - buffer.Settings.Options = options; + buffer.Options = options; return this; } @@ -195,7 +223,7 @@ public readonly MotionBuilder WithOnComplete(Action public readonly MotionBuilder WithCancelOnError(bool cancelOnError = true) { CheckBuffer(); - buffer.Settings.CancelOnError = cancelOnError; + buffer.CancelOnError = cancelOnError; return this; } @@ -208,7 +236,7 @@ public readonly MotionBuilder WithCancelOnError(bool public readonly MotionBuilder WithBindOnSchedule(bool bindOnSchedule = true) { CheckBuffer(); - buffer.Settings.BindOnSchedule = bindOnSchedule; + buffer.BindOnSchedule = bindOnSchedule; return this; } @@ -221,7 +249,7 @@ public readonly MotionBuilder WithBindOnSchedule(boo public readonly MotionBuilder WithScheduler(IMotionScheduler scheduler) { CheckBuffer(); - buffer.Settings.Scheduler = scheduler; + buffer.Scheduler = scheduler; return this; } @@ -394,7 +422,7 @@ internal MotionHandle ScheduleMotion() { MotionHandle handle; - if (buffer.Settings.Scheduler == null) + if (buffer.Scheduler == null) { #if UNITY_EDITOR if (!UnityEditor.EditorApplication.isPlaying) @@ -422,12 +450,12 @@ internal MotionHandle ScheduleMotion() } else { - handle = buffer.Settings.Scheduler.Schedule(ref this); + handle = buffer.Scheduler.Schedule(ref this); } if (MotionTracker.EnableTracking) { - MotionTracker.AddTracking(handle, buffer.Settings.Scheduler); + MotionTracker.AddTracking(handle, buffer.Scheduler); } if (!buffer.IsPreserved) Dispose(); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index fcd20803..5539eed0 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -43,9 +43,9 @@ public static MotionBuilder WithRoundingMode { - var options = builder.buffer.Settings.Options; + var options = builder.buffer.Options; options.RoundingMode = roundingMode; - builder.buffer.Settings.Options = options; + builder.buffer.Options = options; return builder; } @@ -61,9 +61,9 @@ public static MotionBuilder WithFrequency { - var options = builder.buffer.Settings.Options; + var options = builder.buffer.Options; options.Frequency = frequency; - builder.buffer.Settings.Options = options; + builder.buffer.Options = options; return builder; } @@ -79,9 +79,9 @@ public static MotionBuilder WithDampingRatio { - var options = builder.buffer.Settings.Options; + var options = builder.buffer.Options; options.DampingRatio = dampingRatio; - builder.buffer.Settings.Options = options; + builder.buffer.Options = options; return builder; } @@ -97,9 +97,9 @@ public static MotionBuilder WithFrequency { - var options = builder.buffer.Settings.Options; + var options = builder.buffer.Options; options.Frequency = frequency; - builder.buffer.Settings.Options = options; + builder.buffer.Options = options; return builder; } @@ -115,9 +115,9 @@ public static MotionBuilder WithDampingRatio { - var options = builder.buffer.Settings.Options; + var options = builder.buffer.Options; options.DampingRatio = dampingRatio; - builder.buffer.Settings.Options = options; + builder.buffer.Options = options; return builder; } @@ -133,9 +133,9 @@ public static MotionBuilder WithRandomSeed { - var options = builder.buffer.Settings.Options; + var options = builder.buffer.Options; options.RandomState = new Unity.Mathematics.Random(seed); - builder.buffer.Settings.Options = options; + builder.buffer.Options = options; return builder; } @@ -151,9 +151,9 @@ public static MotionBuilder WithRichText { - var options = builder.buffer.Settings.Options; + var options = builder.buffer.Options; options.RichTextEnabled = richTextEnabled; - builder.buffer.Settings.Options = options; + builder.buffer.Options = options; return builder; } @@ -169,9 +169,9 @@ public static MotionBuilder WithRandomSeed { - var options = builder.buffer.Settings.Options; + var options = builder.buffer.Options; options.RandomState = new Unity.Mathematics.Random(seed); - builder.buffer.Settings.Options = options; + builder.buffer.Options = options; return builder; } @@ -189,9 +189,9 @@ public static MotionBuilder WithScrambleChars WithScrambleChars { - var options = builder.buffer.Settings.Options; + var options = builder.buffer.Options; options.CustomScrambleChars = customScrambleChars; - builder.buffer.Settings.Options = options; + builder.buffer.Options = options; return builder; } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs index d5ad1331..4b2ab00f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs @@ -6,69 +6,19 @@ public record MotionSettings where TValue : unmanaged where TOptions : unmanaged, IMotionOptions { - public TValue StartValue { get; set; } - public TValue EndValue { get; set; } - public float Duration { get; set; } - public TOptions Options { get; set; } - public Ease Ease { get; set; } - public AnimationCurve CustomEaseCurve { get; set; } - public float Delay { get; set; } - public DelayType DelayType { get; set; } - public int Loops { get; set; } = 1; - public LoopType LoopType { get; set; } - public bool CancelOnError { get; set; } - public bool SkipValuesDuringDelay { get; set; } - public bool BindOnSchedule { get; set; } - public IMotionScheduler Scheduler { get; set; } - - public void CopyFrom(MotionSettings source) - { - StartValue = source.StartValue; - EndValue = source.EndValue; - Duration = source.Duration; - Options = source.Options; - Ease = source.Ease; - CustomEaseCurve = source.CustomEaseCurve; - Delay = source.Delay; - DelayType = source.DelayType; - Loops = source.Loops; - LoopType = source.LoopType; - CancelOnError = source.CancelOnError; - SkipValuesDuringDelay = source.SkipValuesDuringDelay; - Scheduler = source.Scheduler; - } - - public void CopyFrom(SerializableMotionSettings source) - { - StartValue = source.StartValue; - EndValue = source.EndValue; - Duration = source.Duration; - Options = source.Options; - Ease = source.Ease; - CustomEaseCurve = source.CustomEaseCurve; - Delay = source.Delay; - DelayType = source.DelayType; - Loops = source.Loops; - LoopType = source.LoopType; - CancelOnError = source.CancelOnError; - SkipValuesDuringDelay = source.SkipValuesDuringDelay; - } - - internal void Reset() - { - StartValue = default; - EndValue = default; - Duration = default; - Options = default; - Ease = default; - CustomEaseCurve = default; - Delay = default; - DelayType = default; - Loops = 1; - LoopType = default; - CancelOnError = default; - SkipValuesDuringDelay = default; - Scheduler = default; - } + public TValue StartValue { get; init; } + public TValue EndValue { get; init; } + public float Duration { get; init; } + public TOptions Options { get; init; } + public Ease Ease { get; init; } + public AnimationCurve CustomEaseCurve { get; init; } + public float Delay { get; init; } + public DelayType DelayType { get; init; } + public int Loops { get; init; } = 1; + public LoopType LoopType { get; init; } + public bool CancelOnError { get; init; } + public bool SkipValuesDuringDelay { get; init; } + public bool BindOnSchedule { get; init; } + public IMotionScheduler Scheduler { get; init; } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs index 5769e639..39db89d2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs @@ -8,6 +8,34 @@ public record SerializableMotionSettings where TValue : unmanaged where TOptions : unmanaged, IMotionOptions { + enum SchedulerType : byte + { + Default, + Initialization, + InitializationIgnoreTimeScale, + InitializationRealtime, + EarlyUpdate, + EarlyUpdateIgnoreTimeScale, + EarlyUpdateRealtime, + FixedUpdate, + PreUpdate, + PreUpdateIgnoreTimeScale, + PreUpdateRealtime, + Update, + UpdateIgnoreTimeScale, + UpdateRealtime, + PreLateUpdate, + PreLateUpdateIgnoreTimeScale, + PreLateUpdateRealtime, + PostLateUpdate, + PostLateUpdateIgnoreTimeScale, + PostLateUpdateRealtime, + TimeUpdate, + TimeUpdateIgnoreTimeScale, + TimeUpdateRealtime, + Manual, + } + [SerializeField] TValue startValue; [SerializeField] TValue endValue; [SerializeField] float duration; @@ -21,47 +49,48 @@ public record SerializableMotionSettings [SerializeField] bool cancelOnError; [SerializeField] bool skipValuesDuringDelay; [SerializeField] bool bindOnSchedule; + [SerializeField] SchedulerType scheduler; public TValue StartValue { get => startValue; - set => startValue = value; + init => startValue = value; } public TValue EndValue { get => endValue; - set => endValue = value; + init => endValue = value; } public float Duration { get => duration; - set => duration = value; + init => duration = value; } public TOptions Options { get => options; - set => options = value; + init => options = value; } public Ease Ease { get => ease; - set => ease = value; + init => ease = value; } public AnimationCurve CustomEaseCurve { get => customEaseCurve; - set => customEaseCurve = value; + init => customEaseCurve = value; } public float Delay { get => delay; - set => delay = value; + init => delay = value; } public DelayType DelayType @@ -73,31 +102,114 @@ public DelayType DelayType public int Loops { get => loops; - set => loops = value; + init => loops = value; } public LoopType LoopType { get => loopType; - set => loopType = value; + init => loopType = value; } public bool CancelOnError { get => cancelOnError; - set => cancelOnError = value; + init => cancelOnError = value; } public bool SkipValuesDuringDelay { get => skipValuesDuringDelay; - set => skipValuesDuringDelay = value; + init => skipValuesDuringDelay = value; } public bool BindOnSchedule { get => bindOnSchedule; - set => bindOnSchedule = value; + init => bindOnSchedule = value; + } + + public IMotionScheduler Scheduler + { + get + { + return scheduler switch + { + SchedulerType.Initialization => MotionScheduler.Initialization, + SchedulerType.InitializationIgnoreTimeScale => MotionScheduler.InitializationIgnoreTimeScale, + SchedulerType.InitializationRealtime => MotionScheduler.InitializationRealtime, + SchedulerType.EarlyUpdate => MotionScheduler.EarlyUpdate, + SchedulerType.EarlyUpdateIgnoreTimeScale => MotionScheduler.EarlyUpdateIgnoreTimeScale, + SchedulerType.EarlyUpdateRealtime => MotionScheduler.EarlyUpdateRealtime, + SchedulerType.FixedUpdate => MotionScheduler.FixedUpdate, + SchedulerType.PreUpdate => MotionScheduler.PreUpdate, + SchedulerType.PreUpdateIgnoreTimeScale => MotionScheduler.PreUpdateIgnoreTimeScale, + SchedulerType.PreUpdateRealtime => MotionScheduler.PreUpdateRealtime, + SchedulerType.Update => MotionScheduler.Update, + SchedulerType.UpdateIgnoreTimeScale => MotionScheduler.UpdateIgnoreTimeScale, + SchedulerType.UpdateRealtime => MotionScheduler.UpdateRealtime, + SchedulerType.PreLateUpdate => MotionScheduler.PreLateUpdate, + SchedulerType.PreLateUpdateIgnoreTimeScale => MotionScheduler.PreLateUpdateIgnoreTimeScale, + SchedulerType.PreLateUpdateRealtime => MotionScheduler.PreLateUpdateRealtime, + SchedulerType.PostLateUpdate => MotionScheduler.PostLateUpdate, + SchedulerType.PostLateUpdateIgnoreTimeScale => MotionScheduler.PostLateUpdateIgnoreTimeScale, + SchedulerType.PostLateUpdateRealtime => MotionScheduler.PostLateUpdateRealtime, + SchedulerType.TimeUpdate => MotionScheduler.TimeUpdate, + SchedulerType.TimeUpdateIgnoreTimeScale => MotionScheduler.TimeUpdateIgnoreTimeScale, + SchedulerType.TimeUpdateRealtime => MotionScheduler.TimeUpdateRealtime, + SchedulerType.Manual => MotionScheduler.Manual, + _ => null, + }; + } + init + { + if (value == null) scheduler = SchedulerType.Default; + else if (value == MotionScheduler.Update) scheduler = SchedulerType.Update; + else if (value == MotionScheduler.UpdateIgnoreTimeScale) scheduler = SchedulerType.UpdateIgnoreTimeScale; + else if (value == MotionScheduler.UpdateRealtime) scheduler = SchedulerType.UpdateRealtime; + else if (value == MotionScheduler.FixedUpdate) scheduler = SchedulerType.FixedUpdate; + else if (value == MotionScheduler.Manual) scheduler = SchedulerType.Manual; + else if (value == MotionScheduler.Initialization) scheduler = SchedulerType.Initialization; + else if (value == MotionScheduler.InitializationIgnoreTimeScale) scheduler = SchedulerType.InitializationIgnoreTimeScale; + else if (value == MotionScheduler.InitializationRealtime) scheduler = SchedulerType.InitializationRealtime; + else if (value == MotionScheduler.EarlyUpdate) scheduler = SchedulerType.EarlyUpdate; + else if (value == MotionScheduler.EarlyUpdateIgnoreTimeScale) scheduler = SchedulerType.EarlyUpdateIgnoreTimeScale; + else if (value == MotionScheduler.EarlyUpdateRealtime) scheduler = SchedulerType.EarlyUpdateRealtime; + else if (value == MotionScheduler.PreUpdate) scheduler = SchedulerType.PreUpdate; + else if (value == MotionScheduler.PreUpdateIgnoreTimeScale) scheduler = SchedulerType.PreUpdateIgnoreTimeScale; + else if (value == MotionScheduler.PreUpdateRealtime) scheduler = SchedulerType.PreUpdateRealtime; + else if (value == MotionScheduler.PreLateUpdate) scheduler = SchedulerType.PreLateUpdate; + else if (value == MotionScheduler.PreLateUpdateIgnoreTimeScale) scheduler = SchedulerType.PreLateUpdateIgnoreTimeScale; + else if (value == MotionScheduler.PreLateUpdateRealtime) scheduler = SchedulerType.PreLateUpdateRealtime; + else if (value == MotionScheduler.PostLateUpdate) scheduler = SchedulerType.PostLateUpdate; + else if (value == MotionScheduler.PostLateUpdateIgnoreTimeScale) scheduler = SchedulerType.PostLateUpdateIgnoreTimeScale; + else if (value == MotionScheduler.PostLateUpdateRealtime) scheduler = SchedulerType.PostLateUpdateRealtime; + else if (value == MotionScheduler.TimeUpdate) scheduler = SchedulerType.TimeUpdate; + else if (value == MotionScheduler.TimeUpdateIgnoreTimeScale) scheduler = SchedulerType.TimeUpdateIgnoreTimeScale; + else if (value == MotionScheduler.TimeUpdateRealtime) scheduler = SchedulerType.TimeUpdateRealtime; + else throw new ArgumentOutOfRangeException("SerializableMotionSettings does not support custom scheduler"); + } + } + + public MotionSettings AsMotionSettings() + { + return new MotionSettings() + { + StartValue = StartValue, + EndValue = EndValue, + Duration = Duration, + Options = Options, + Ease = Ease, + CustomEaseCurve = CustomEaseCurve, + Delay = Delay, + DelayType = DelayType, + Loops = Loops, + LoopType = LoopType, + CancelOnError = CancelOnError, + SkipValuesDuringDelay = SkipValuesDuringDelay, + BindOnSchedule = BindOnSchedule, + Scheduler = Scheduler, + }; } } } \ No newline at end of file From 310f0b3ccb2365e5b3478191ee40329687385a0f Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 11:01:07 +0900 Subject: [PATCH 048/224] Add: public API --- ...LMotion.Create.FromSerializableSettings.cs | 109 ++++++++++++++++++ ...on.Create.FromSerializableSettings.cs.meta | 2 + .../Runtime/LMotion.Create.FromSettings.cs | 109 ++++++++++++++++++ .../LMotion.Create.FromSettings.cs.meta | 2 + .../Assets/LitMotion/Runtime/MotionBuilder.cs | 27 +++++ .../Runtime/SerializableMotionSettings.cs | 18 +++ 6 files changed, 267 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs new file mode 100644 index 00000000..3fe68182 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs @@ -0,0 +1,109 @@ +using UnityEngine; +using LitMotion.Adapters; + +namespace LitMotion +{ + public static partial class LMotion + { + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// The type of value to animate + /// The type of special parameters given to the motion entity + /// The type of adapter that support value animation + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(SerializableMotionSettings settings) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + var buffer = MotionBuilderBuffer.Rent(); + buffer.StartValue = settings.StartValue; + buffer.EndValue = settings.EndValue; + buffer.Duration = settings.Duration; + buffer.Options = settings.Options; + buffer.Ease = settings.Ease; + buffer.AnimationCurve = settings.CustomEaseCurve; + buffer.Delay = settings.Delay; + buffer.DelayType = settings.DelayType; + buffer.Loops = settings.Loops; + buffer.LoopType = settings.LoopType; + buffer.CancelOnError = settings.CancelOnError; + buffer.SkipValuesDuringDelay = settings.SkipValuesDuringDelay; + buffer.BindOnSchedule = settings.BindOnSchedule; + buffer.Scheduler = settings.Scheduler; + return new MotionBuilder(buffer); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs.meta new file mode 100644 index 00000000..0c4966e1 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: cbc120041d58949b58b1640977c871b1 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs new file mode 100644 index 00000000..9b02b973 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs @@ -0,0 +1,109 @@ +using UnityEngine; +using LitMotion.Adapters; + +namespace LitMotion +{ + public static partial class LMotion + { + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) => Create(settings); + + /// + /// Create a builder for building motion. + /// + /// The type of value to animate + /// The type of special parameters given to the motion entity + /// The type of adapter that support value animation + /// Motion settings + /// Created motion builder + public static MotionBuilder Create(MotionSettings settings) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + var buffer = MotionBuilderBuffer.Rent(); + buffer.StartValue = settings.StartValue; + buffer.EndValue = settings.EndValue; + buffer.Duration = settings.Duration; + buffer.Options = settings.Options; + buffer.Ease = settings.Ease; + buffer.AnimationCurve = settings.CustomEaseCurve; + buffer.Delay = settings.Delay; + buffer.DelayType = settings.DelayType; + buffer.Loops = settings.Loops; + buffer.LoopType = settings.LoopType; + buffer.CancelOnError = settings.CancelOnError; + buffer.SkipValuesDuringDelay = settings.SkipValuesDuringDelay; + buffer.BindOnSchedule = settings.BindOnSchedule; + buffer.Scheduler = settings.Scheduler; + return new MotionBuilder(buffer); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs.meta new file mode 100644 index 00000000..829833ba --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2a55b8361daf941e0963b1a654c25059 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index 3f0941b2..1b3d51e9 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -404,6 +404,33 @@ public unsafe MotionHandle Bind(TState0 state0, TStat return ScheduleMotion(); } + /// + /// Creates a MotionSettings from the values ​​set in the builder. + /// + /// Configured MotionSettings + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly MotionSettings ToMotionSettings() + { + CheckBuffer(); + return new MotionSettings() + { + StartValue = buffer.StartValue, + EndValue = buffer.EndValue, + Duration = buffer.Duration, + Options = buffer.Options, + Ease = buffer.Ease, + CustomEaseCurve = buffer.AnimationCurve, + Delay = buffer.Delay, + DelayType = buffer.DelayType, + Loops = buffer.Loops, + LoopType = buffer.LoopType, + CancelOnError = buffer.CancelOnError, + SkipValuesDuringDelay = buffer.SkipValuesDuringDelay, + BindOnSchedule = buffer.BindOnSchedule, + Scheduler = buffer.Scheduler, + }; + } + /// /// Preserves the internal buffer and prevents the builder from being automatically destroyed after creating the motion data. /// Calling this allows you to create the motion multiple times, but you must call the Dispose method to destroy the builder after use. diff --git a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs index 39db89d2..1303576d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs @@ -190,6 +190,24 @@ public IMotionScheduler Scheduler else throw new ArgumentOutOfRangeException("SerializableMotionSettings does not support custom scheduler"); } } + + public SerializableMotionSettings(MotionSettings source) + { + StartValue = source.StartValue; + EndValue = source.EndValue; + Duration = source.Duration; + Options = source.Options; + Ease = source.Ease; + CustomEaseCurve = source.CustomEaseCurve; + Delay = source.Delay; + DelayType = source.DelayType; + Loops = source.Loops; + LoopType = source.LoopType; + CancelOnError = source.CancelOnError; + SkipValuesDuringDelay = source.SkipValuesDuringDelay; + BindOnSchedule = source.BindOnSchedule; + Scheduler = source.Scheduler; + } public MotionSettings AsMotionSettings() { From f4e9a8dcf4aad8b077a9f686d78aa3eefeef16de Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 11:05:36 +0900 Subject: [PATCH 049/224] Add: xml comment --- src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs | 5 +++++ .../LitMotion/Runtime/SerializableMotionSettings.cs | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs index 4b2ab00f..eef547c9 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs @@ -2,6 +2,11 @@ namespace LitMotion { + /// + /// An object that holds motion settings. + /// + /// The type of value to animate + /// The type of special parameters given to the motion data public record MotionSettings where TValue : unmanaged where TOptions : unmanaged, IMotionOptions diff --git a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs index 1303576d..24031d26 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs @@ -3,6 +3,11 @@ namespace LitMotion { + /// + /// Serializable(editable from the Inspector) MotionSettings. + /// + /// The type of value to animate + /// The type of special parameters given to the motion data [Serializable] public record SerializableMotionSettings where TValue : unmanaged @@ -209,6 +214,9 @@ public SerializableMotionSettings(MotionSettings source) Scheduler = source.Scheduler; } + /// + /// Convert settings to MotionSettings + /// public MotionSettings AsMotionSettings() { return new MotionSettings() From 4f04079a7e46b86b1a3ab7505944760d6aba693c Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 13:01:49 +0900 Subject: [PATCH 050/224] Remove: MotionBuilder.Preserve() --- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 21 +++-------------- .../LitMotion/Tests/Runtime/PreserveTest.cs | 23 ------------------- .../Tests/Runtime/PreserveTest.cs.meta | 11 +-------- 3 files changed, 4 insertions(+), 51 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index 1b3d51e9..fe2c1ec9 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -29,7 +29,6 @@ public static MotionBuilderBuffer Rent() public static void Return(MotionBuilderBuffer buffer) { buffer.Version++; - buffer.IsPreserved = false; buffer.BindOnSchedule = false; buffer.StartValue = default; @@ -68,9 +67,6 @@ public static void Return(MotionBuilderBuffer buffer) public ushort Version; public MotionBuilderBuffer NextNode; - public bool IsPreserved; - public bool BindOnSchedule; - public TValue StartValue; public TValue EndValue; public TOptions Options; @@ -83,6 +79,8 @@ public static void Return(MotionBuilderBuffer buffer) public LoopType LoopType; public bool CancelOnError; public bool SkipValuesDuringDelay; + public bool BindOnSchedule; + public object State0; public object State1; public object State2; @@ -431,19 +429,6 @@ public readonly MotionSettings ToMotionSettings() }; } - /// - /// Preserves the internal buffer and prevents the builder from being automatically destroyed after creating the motion data. - /// Calling this allows you to create the motion multiple times, but you must call the Dispose method to destroy the builder after use. - /// - /// This builder to allow chaining multiple method calls. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public readonly MotionBuilder Preserve() - { - CheckBuffer(); - buffer.IsPreserved = true; - return this; - } - [MethodImpl(MethodImplOptions.AggressiveInlining)] internal MotionHandle ScheduleMotion() { @@ -485,7 +470,7 @@ internal MotionHandle ScheduleMotion() MotionTracker.AddTracking(handle, buffer.Scheduler); } - if (!buffer.IsPreserved) Dispose(); + Dispose(); return handle; } diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/PreserveTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/PreserveTest.cs index 49dd2601..213d2d31 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/PreserveTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/PreserveTest.cs @@ -18,28 +18,5 @@ public void Test_Error_ReuseBuiler() builder.RunWithoutBinding(); }); } - - [UnityTest] - public IEnumerator Test_Preserve() - { - using var builder = LMotion.Create(0f, 1f, 0.1f).Preserve(); - yield return builder.RunWithoutBinding().ToYieldInteraction(); - yield return builder.RunWithoutBinding().ToYieldInteraction(); - yield return builder.RunWithoutBinding().ToYieldInteraction(); - } - - [UnityTest] - public IEnumerator Test_Preserve_MultipleBuilders() - { - using var builder1 = LMotion.Create(0f, 1f, 0.1f).Preserve(); - using var builder2 = LMotion.Create(0f, 1f, 0.1f).Preserve(); - using var builder3 = LMotion.Create(0f, 1f, 0.1f).Preserve(); - yield return builder1.RunWithoutBinding().ToYieldInteraction(); - yield return builder2.RunWithoutBinding().ToYieldInteraction(); - yield return builder3.RunWithoutBinding().ToYieldInteraction(); - yield return builder1.RunWithoutBinding().ToYieldInteraction(); - yield return builder2.RunWithoutBinding().ToYieldInteraction(); - yield return builder3.RunWithoutBinding().ToYieldInteraction(); - } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/PreserveTest.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Runtime/PreserveTest.cs.meta index cdb8714e..e47b5f22 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/PreserveTest.cs.meta +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/PreserveTest.cs.meta @@ -1,11 +1,2 @@ fileFormatVersion: 2 -guid: 86c536e1e709244818670af5580075ca -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +guid: 86c536e1e709244818670af5580075ca \ No newline at end of file From cd033a58b8edd6a55f3a263579dcea5b82fc4a6a Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 13:22:09 +0900 Subject: [PATCH 051/224] Change: SerializableMotionSettings to inherit MotionSettings --- ...LMotion.Create.FromSerializableSettings.cs | 109 ------- ...on.Create.FromSerializableSettings.cs.meta | 2 - .../LitMotion/Runtime/MotionSettings.cs | 28 +- .../Runtime/SerializableMotionSettings.cs | 265 ++++++------------ 4 files changed, 101 insertions(+), 303 deletions(-) delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs deleted file mode 100644 index 3fe68182..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs +++ /dev/null @@ -1,109 +0,0 @@ -using UnityEngine; -using LitMotion.Adapters; - -namespace LitMotion -{ - public static partial class LMotion - { - /// - /// Create a builder for building motion. - /// - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); - - /// - /// Create a builder for building motion. - /// - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); - - /// - /// Create a builder for building motion. - /// - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); - - /// - /// Create a builder for building motion. - /// - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); - - /// - /// Create a builder for building motion. - /// - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); - - /// - /// Create a builder for building motion. - /// - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); - - /// - /// Create a builder for building motion. - /// - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); - - /// - /// Create a builder for building motion. - /// - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); - - /// - /// Create a builder for building motion. - /// - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); - - /// - /// Create a builder for building motion. - /// - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) => Create(settings); - - /// - /// Create a builder for building motion. - /// - /// The type of value to animate - /// The type of special parameters given to the motion entity - /// The type of adapter that support value animation - /// Motion settings - /// Created motion builder - public static MotionBuilder Create(SerializableMotionSettings settings) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - var buffer = MotionBuilderBuffer.Rent(); - buffer.StartValue = settings.StartValue; - buffer.EndValue = settings.EndValue; - buffer.Duration = settings.Duration; - buffer.Options = settings.Options; - buffer.Ease = settings.Ease; - buffer.AnimationCurve = settings.CustomEaseCurve; - buffer.Delay = settings.Delay; - buffer.DelayType = settings.DelayType; - buffer.Loops = settings.Loops; - buffer.LoopType = settings.LoopType; - buffer.CancelOnError = settings.CancelOnError; - buffer.SkipValuesDuringDelay = settings.SkipValuesDuringDelay; - buffer.BindOnSchedule = settings.BindOnSchedule; - buffer.Scheduler = settings.Scheduler; - return new MotionBuilder(buffer); - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs.meta deleted file mode 100644 index 0c4966e1..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSerializableSettings.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: cbc120041d58949b58b1640977c871b1 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs index eef547c9..292fc093 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs @@ -11,19 +11,19 @@ public record MotionSettings where TValue : unmanaged where TOptions : unmanaged, IMotionOptions { - public TValue StartValue { get; init; } - public TValue EndValue { get; init; } - public float Duration { get; init; } - public TOptions Options { get; init; } - public Ease Ease { get; init; } - public AnimationCurve CustomEaseCurve { get; init; } - public float Delay { get; init; } - public DelayType DelayType { get; init; } - public int Loops { get; init; } = 1; - public LoopType LoopType { get; init; } - public bool CancelOnError { get; init; } - public bool SkipValuesDuringDelay { get; init; } - public bool BindOnSchedule { get; init; } - public IMotionScheduler Scheduler { get; init; } + public TValue StartValue { get; set; } + public TValue EndValue { get; set; } + public float Duration { get; set; } + public TOptions Options { get; set; } + public Ease Ease { get; set; } + public AnimationCurve CustomEaseCurve { get; set; } + public float Delay { get; set; } + public DelayType DelayType { get; set; } + public int Loops { get; set; } = 1; + public LoopType LoopType { get; set; } + public bool CancelOnError { get; set; } + public bool SkipValuesDuringDelay { get; set; } + public bool BindOnSchedule { get; set; } + public IMotionScheduler Scheduler { get; set; } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs index 24031d26..8723597b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs @@ -9,7 +9,7 @@ namespace LitMotion /// The type of value to animate /// The type of special parameters given to the motion data [Serializable] - public record SerializableMotionSettings + public sealed record SerializableMotionSettings : MotionSettings, ISerializationCallbackReceiver where TValue : unmanaged where TOptions : unmanaged, IMotionOptions { @@ -56,186 +56,95 @@ enum SchedulerType : byte [SerializeField] bool bindOnSchedule; [SerializeField] SchedulerType scheduler; - public TValue StartValue - { - get => startValue; - init => startValue = value; - } - - public TValue EndValue - { - get => endValue; - init => endValue = value; - } - - public float Duration - { - get => duration; - init => duration = value; - } - - public TOptions Options - { - get => options; - init => options = value; - } - - public Ease Ease - { - get => ease; - init => ease = value; - } - - public AnimationCurve CustomEaseCurve - { - get => customEaseCurve; - init => customEaseCurve = value; - } - - public float Delay - { - get => delay; - init => delay = value; - } - - public DelayType DelayType - { - get => delayType; - set => delayType = value; - } - - public int Loops - { - get => loops; - init => loops = value; - } - - public LoopType LoopType - { - get => loopType; - init => loopType = value; - } - - public bool CancelOnError - { - get => cancelOnError; - init => cancelOnError = value; - } - - public bool SkipValuesDuringDelay - { - get => skipValuesDuringDelay; - init => skipValuesDuringDelay = value; - } - - public bool BindOnSchedule - { - get => bindOnSchedule; - init => bindOnSchedule = value; - } - - public IMotionScheduler Scheduler - { - get - { - return scheduler switch - { - SchedulerType.Initialization => MotionScheduler.Initialization, - SchedulerType.InitializationIgnoreTimeScale => MotionScheduler.InitializationIgnoreTimeScale, - SchedulerType.InitializationRealtime => MotionScheduler.InitializationRealtime, - SchedulerType.EarlyUpdate => MotionScheduler.EarlyUpdate, - SchedulerType.EarlyUpdateIgnoreTimeScale => MotionScheduler.EarlyUpdateIgnoreTimeScale, - SchedulerType.EarlyUpdateRealtime => MotionScheduler.EarlyUpdateRealtime, - SchedulerType.FixedUpdate => MotionScheduler.FixedUpdate, - SchedulerType.PreUpdate => MotionScheduler.PreUpdate, - SchedulerType.PreUpdateIgnoreTimeScale => MotionScheduler.PreUpdateIgnoreTimeScale, - SchedulerType.PreUpdateRealtime => MotionScheduler.PreUpdateRealtime, - SchedulerType.Update => MotionScheduler.Update, - SchedulerType.UpdateIgnoreTimeScale => MotionScheduler.UpdateIgnoreTimeScale, - SchedulerType.UpdateRealtime => MotionScheduler.UpdateRealtime, - SchedulerType.PreLateUpdate => MotionScheduler.PreLateUpdate, - SchedulerType.PreLateUpdateIgnoreTimeScale => MotionScheduler.PreLateUpdateIgnoreTimeScale, - SchedulerType.PreLateUpdateRealtime => MotionScheduler.PreLateUpdateRealtime, - SchedulerType.PostLateUpdate => MotionScheduler.PostLateUpdate, - SchedulerType.PostLateUpdateIgnoreTimeScale => MotionScheduler.PostLateUpdateIgnoreTimeScale, - SchedulerType.PostLateUpdateRealtime => MotionScheduler.PostLateUpdateRealtime, - SchedulerType.TimeUpdate => MotionScheduler.TimeUpdate, - SchedulerType.TimeUpdateIgnoreTimeScale => MotionScheduler.TimeUpdateIgnoreTimeScale, - SchedulerType.TimeUpdateRealtime => MotionScheduler.TimeUpdateRealtime, - SchedulerType.Manual => MotionScheduler.Manual, - _ => null, - }; - } - init + public void OnBeforeSerialize() + { + startValue = StartValue; + endValue = EndValue; + duration = Duration; + options = Options; + ease = Ease; + customEaseCurve = CustomEaseCurve; + delay = Delay; + delayType = DelayType; + loops = Loops; + loopType = LoopType; + cancelOnError = CancelOnError; + skipValuesDuringDelay = SkipValuesDuringDelay; + bindOnSchedule = BindOnSchedule; + SetScheduler(Scheduler); + } + + public void OnAfterDeserialize() + { + StartValue = startValue; + EndValue = endValue; + Duration = duration; + Options = options; + Ease = ease; + CustomEaseCurve = customEaseCurve; + Delay = delay; + DelayType = delayType; + Loops = loops; + LoopType = loopType; + CancelOnError = cancelOnError; + SkipValuesDuringDelay = skipValuesDuringDelay; + BindOnSchedule = bindOnSchedule; + Scheduler = scheduler switch { - if (value == null) scheduler = SchedulerType.Default; - else if (value == MotionScheduler.Update) scheduler = SchedulerType.Update; - else if (value == MotionScheduler.UpdateIgnoreTimeScale) scheduler = SchedulerType.UpdateIgnoreTimeScale; - else if (value == MotionScheduler.UpdateRealtime) scheduler = SchedulerType.UpdateRealtime; - else if (value == MotionScheduler.FixedUpdate) scheduler = SchedulerType.FixedUpdate; - else if (value == MotionScheduler.Manual) scheduler = SchedulerType.Manual; - else if (value == MotionScheduler.Initialization) scheduler = SchedulerType.Initialization; - else if (value == MotionScheduler.InitializationIgnoreTimeScale) scheduler = SchedulerType.InitializationIgnoreTimeScale; - else if (value == MotionScheduler.InitializationRealtime) scheduler = SchedulerType.InitializationRealtime; - else if (value == MotionScheduler.EarlyUpdate) scheduler = SchedulerType.EarlyUpdate; - else if (value == MotionScheduler.EarlyUpdateIgnoreTimeScale) scheduler = SchedulerType.EarlyUpdateIgnoreTimeScale; - else if (value == MotionScheduler.EarlyUpdateRealtime) scheduler = SchedulerType.EarlyUpdateRealtime; - else if (value == MotionScheduler.PreUpdate) scheduler = SchedulerType.PreUpdate; - else if (value == MotionScheduler.PreUpdateIgnoreTimeScale) scheduler = SchedulerType.PreUpdateIgnoreTimeScale; - else if (value == MotionScheduler.PreUpdateRealtime) scheduler = SchedulerType.PreUpdateRealtime; - else if (value == MotionScheduler.PreLateUpdate) scheduler = SchedulerType.PreLateUpdate; - else if (value == MotionScheduler.PreLateUpdateIgnoreTimeScale) scheduler = SchedulerType.PreLateUpdateIgnoreTimeScale; - else if (value == MotionScheduler.PreLateUpdateRealtime) scheduler = SchedulerType.PreLateUpdateRealtime; - else if (value == MotionScheduler.PostLateUpdate) scheduler = SchedulerType.PostLateUpdate; - else if (value == MotionScheduler.PostLateUpdateIgnoreTimeScale) scheduler = SchedulerType.PostLateUpdateIgnoreTimeScale; - else if (value == MotionScheduler.PostLateUpdateRealtime) scheduler = SchedulerType.PostLateUpdateRealtime; - else if (value == MotionScheduler.TimeUpdate) scheduler = SchedulerType.TimeUpdate; - else if (value == MotionScheduler.TimeUpdateIgnoreTimeScale) scheduler = SchedulerType.TimeUpdateIgnoreTimeScale; - else if (value == MotionScheduler.TimeUpdateRealtime) scheduler = SchedulerType.TimeUpdateRealtime; - else throw new ArgumentOutOfRangeException("SerializableMotionSettings does not support custom scheduler"); - } - } - - public SerializableMotionSettings(MotionSettings source) - { - StartValue = source.StartValue; - EndValue = source.EndValue; - Duration = source.Duration; - Options = source.Options; - Ease = source.Ease; - CustomEaseCurve = source.CustomEaseCurve; - Delay = source.Delay; - DelayType = source.DelayType; - Loops = source.Loops; - LoopType = source.LoopType; - CancelOnError = source.CancelOnError; - SkipValuesDuringDelay = source.SkipValuesDuringDelay; - BindOnSchedule = source.BindOnSchedule; - Scheduler = source.Scheduler; + SchedulerType.Initialization => MotionScheduler.Initialization, + SchedulerType.InitializationIgnoreTimeScale => MotionScheduler.InitializationIgnoreTimeScale, + SchedulerType.InitializationRealtime => MotionScheduler.InitializationRealtime, + SchedulerType.EarlyUpdate => MotionScheduler.EarlyUpdate, + SchedulerType.EarlyUpdateIgnoreTimeScale => MotionScheduler.EarlyUpdateIgnoreTimeScale, + SchedulerType.EarlyUpdateRealtime => MotionScheduler.EarlyUpdateRealtime, + SchedulerType.FixedUpdate => MotionScheduler.FixedUpdate, + SchedulerType.PreUpdate => MotionScheduler.PreUpdate, + SchedulerType.PreUpdateIgnoreTimeScale => MotionScheduler.PreUpdateIgnoreTimeScale, + SchedulerType.PreUpdateRealtime => MotionScheduler.PreUpdateRealtime, + SchedulerType.Update => MotionScheduler.Update, + SchedulerType.UpdateIgnoreTimeScale => MotionScheduler.UpdateIgnoreTimeScale, + SchedulerType.UpdateRealtime => MotionScheduler.UpdateRealtime, + SchedulerType.PreLateUpdate => MotionScheduler.PreLateUpdate, + SchedulerType.PreLateUpdateIgnoreTimeScale => MotionScheduler.PreLateUpdateIgnoreTimeScale, + SchedulerType.PreLateUpdateRealtime => MotionScheduler.PreLateUpdateRealtime, + SchedulerType.PostLateUpdate => MotionScheduler.PostLateUpdate, + SchedulerType.PostLateUpdateIgnoreTimeScale => MotionScheduler.PostLateUpdateIgnoreTimeScale, + SchedulerType.PostLateUpdateRealtime => MotionScheduler.PostLateUpdateRealtime, + SchedulerType.TimeUpdate => MotionScheduler.TimeUpdate, + SchedulerType.TimeUpdateIgnoreTimeScale => MotionScheduler.TimeUpdateIgnoreTimeScale, + SchedulerType.TimeUpdateRealtime => MotionScheduler.TimeUpdateRealtime, + SchedulerType.Manual => MotionScheduler.Manual, + _ => null, + }; } - /// - /// Convert settings to MotionSettings - /// - public MotionSettings AsMotionSettings() - { - return new MotionSettings() - { - StartValue = StartValue, - EndValue = EndValue, - Duration = Duration, - Options = Options, - Ease = Ease, - CustomEaseCurve = CustomEaseCurve, - Delay = Delay, - DelayType = DelayType, - Loops = Loops, - LoopType = LoopType, - CancelOnError = CancelOnError, - SkipValuesDuringDelay = SkipValuesDuringDelay, - BindOnSchedule = BindOnSchedule, - Scheduler = Scheduler, - }; + void SetScheduler(IMotionScheduler value) + { + if (value == null) scheduler = SchedulerType.Default; + else if (value == MotionScheduler.Update) scheduler = SchedulerType.Update; + else if (value == MotionScheduler.UpdateIgnoreTimeScale) scheduler = SchedulerType.UpdateIgnoreTimeScale; + else if (value == MotionScheduler.UpdateRealtime) scheduler = SchedulerType.UpdateRealtime; + else if (value == MotionScheduler.FixedUpdate) scheduler = SchedulerType.FixedUpdate; + else if (value == MotionScheduler.Manual) scheduler = SchedulerType.Manual; + else if (value == MotionScheduler.Initialization) scheduler = SchedulerType.Initialization; + else if (value == MotionScheduler.InitializationIgnoreTimeScale) scheduler = SchedulerType.InitializationIgnoreTimeScale; + else if (value == MotionScheduler.InitializationRealtime) scheduler = SchedulerType.InitializationRealtime; + else if (value == MotionScheduler.EarlyUpdate) scheduler = SchedulerType.EarlyUpdate; + else if (value == MotionScheduler.EarlyUpdateIgnoreTimeScale) scheduler = SchedulerType.EarlyUpdateIgnoreTimeScale; + else if (value == MotionScheduler.EarlyUpdateRealtime) scheduler = SchedulerType.EarlyUpdateRealtime; + else if (value == MotionScheduler.PreUpdate) scheduler = SchedulerType.PreUpdate; + else if (value == MotionScheduler.PreUpdateIgnoreTimeScale) scheduler = SchedulerType.PreUpdateIgnoreTimeScale; + else if (value == MotionScheduler.PreUpdateRealtime) scheduler = SchedulerType.PreUpdateRealtime; + else if (value == MotionScheduler.PreLateUpdate) scheduler = SchedulerType.PreLateUpdate; + else if (value == MotionScheduler.PreLateUpdateIgnoreTimeScale) scheduler = SchedulerType.PreLateUpdateIgnoreTimeScale; + else if (value == MotionScheduler.PreLateUpdateRealtime) scheduler = SchedulerType.PreLateUpdateRealtime; + else if (value == MotionScheduler.PostLateUpdate) scheduler = SchedulerType.PostLateUpdate; + else if (value == MotionScheduler.PostLateUpdateIgnoreTimeScale) scheduler = SchedulerType.PostLateUpdateIgnoreTimeScale; + else if (value == MotionScheduler.PostLateUpdateRealtime) scheduler = SchedulerType.PostLateUpdateRealtime; + else if (value == MotionScheduler.TimeUpdate) scheduler = SchedulerType.TimeUpdate; + else if (value == MotionScheduler.TimeUpdateIgnoreTimeScale) scheduler = SchedulerType.TimeUpdateIgnoreTimeScale; + else if (value == MotionScheduler.TimeUpdateRealtime) scheduler = SchedulerType.TimeUpdateRealtime; + // else throw new ArgumentOutOfRangeException("SerializableMotionSettings does not support custom scheduler"); } } } \ No newline at end of file From a6acf927b87c0b9102181fc7e52b96f5307d2536 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 16:30:18 +0900 Subject: [PATCH 052/224] Add: SerializableMotionSettingsDrawer --- .../SerializableMotionSettingsDrawer.cs | 128 ++++++++++++++++++ .../SerializableMotionSettingsDrawer.cs.meta | 2 + .../Runtime/Options/IntegerOptions.cs | 1 + .../LitMotion/Runtime/Options/NoOptions.cs | 1 + .../LitMotion/Runtime/Options/PunchOptions.cs | 1 + .../LitMotion/Runtime/Options/ShakeOptions.cs | 1 + .../Runtime/Options/StringOptions.cs | 1 + .../Runtime/SerializableMotionSettings.cs | 5 + 8 files changed, 140 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs create mode 100644 src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs new file mode 100644 index 00000000..16e184d3 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine; +using UnityEngine.UIElements; + +namespace LitMotion.Editor +{ + [CustomPropertyDrawer(typeof(SerializableMotionSettings<,>))] + public class SerializableMotionSettingsDrawer : PropertyDrawer + { + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + var foldout = new Foldout() + { + text = property.displayName, + toggleOnLabelClick = true + }; + + foldout.BindProperty(property); + + Group(foldout, group => + { + AddPropertyField(group, property, "startValue"); + AddPropertyField(group, property, "endValue"); + AddPropertyField(group, property, "duration"); + }); + + Group(foldout, group => + { + AddPropertyField(group, property, "ease"); + + var customEaseCurve = new PropertyField(property.FindPropertyRelative("customEaseCurve")); + group.Add(customEaseCurve); + customEaseCurve.schedule + .Execute(() => customEaseCurve.style.display = property.FindPropertyRelative("ease").enumValueIndex == (int)Ease.CustomAnimationCurve ? DisplayStyle.Flex : DisplayStyle.None) + .Every(10); + }); + + Group(foldout, group => + { + AddPropertyField(group, property, "delay"); + AddPropertyField(group, property, "delayType"); + }); + + Group(foldout, group => + { + AddPropertyField(group, property, "loops"); + AddPropertyField(group, property, "loopType"); + }); + + var options = property.FindPropertyRelative("options"); + if (options.hasChildren) + { + Group(foldout, group => + { + var optionTypeName = ObjectNames.NicifyVariableName(fieldInfo.FieldType.GenericTypeArguments[1].Name); + FoldoutGroup(group, optionTypeName, options, group => + { + group.style.marginLeft = 15f; + foreach (var child in GetChildren(options)) + { + group.Add(new PropertyField(child.Copy())); + } + }); + }); + } + + Group(foldout, group => + { + FoldoutGroup(group, "Additional Settings", property.FindPropertyRelative("additionalSettings"), group => + { + group.style.marginLeft = 15f; + AddPropertyField(group, property, "cancelOnError"); + AddPropertyField(group, property, "skipValuesDuringDelay"); + AddPropertyField(group, property, "bindOnSchedule"); + AddPropertyField(group, property, "scheduler"); + }); + }); + + return foldout; + } + + void Group(VisualElement root, Action configure) + { + var group = new UnityEngine.UIElements.Box() { style = { marginBottom = 3f } }; + configure(group); + root.Add(group); + } + + void FoldoutGroup(VisualElement root, string label, SerializedProperty property, Action configure) + { + var group = new Foldout + { + text = label, + style = { marginBottom = 3f }, + toggleOnLabelClick = true + }; + group.BindProperty(property); + configure(group); + root.Add(group); + } + + void AddPropertyField(VisualElement root, SerializedProperty property, string name) + { + root.Add(new PropertyField(property.FindPropertyRelative(name))); + } + + IEnumerable GetChildren(SerializedProperty property) + { + var currentProperty = property.Copy(); + var nextProperty = property.Copy(); + nextProperty.Next(false); + + if (currentProperty.Next(true)) + { + do + { + if (SerializedProperty.EqualContents(currentProperty, nextProperty)) break; + yield return currentProperty; + } + while (currentProperty.Next(false)); + } + } + } +} diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs.meta b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs.meta new file mode 100644 index 00000000..622dda98 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5ae034c1f72ef4d8cb0bf903e6ec6d14 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Options/IntegerOptions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Options/IntegerOptions.cs index 95702320..12b79b87 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Options/IntegerOptions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Options/IntegerOptions.cs @@ -5,6 +5,7 @@ namespace LitMotion /// /// Options for integer type motion. /// + [Serializable] public struct IntegerOptions : IMotionOptions, IEquatable { public RoundingMode RoundingMode; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Options/NoOptions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Options/NoOptions.cs index ef233536..4c39e400 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Options/NoOptions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Options/NoOptions.cs @@ -5,6 +5,7 @@ namespace LitMotion /// /// A type indicating that motion has no special options. Specify in the type argument of MotionAdapter when the option is not required. /// + [Serializable] public readonly struct NoOptions : IMotionOptions, IEquatable { public bool Equals(NoOptions other) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Options/PunchOptions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Options/PunchOptions.cs index cd463360..ba73d67c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Options/PunchOptions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Options/PunchOptions.cs @@ -5,6 +5,7 @@ namespace LitMotion /// /// Options for punch motion. /// + [Serializable] public struct PunchOptions : IEquatable, IMotionOptions { public int Frequency; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Options/ShakeOptions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Options/ShakeOptions.cs index 11884ee6..ba337cee 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Options/ShakeOptions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Options/ShakeOptions.cs @@ -5,6 +5,7 @@ namespace LitMotion /// /// Options for shake motion. /// + [Serializable] public struct ShakeOptions : IEquatable, IMotionOptions { public int Frequency; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Options/StringOptions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Options/StringOptions.cs index 15ae143c..82bf63ff 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Options/StringOptions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Options/StringOptions.cs @@ -37,6 +37,7 @@ public enum ScrambleMode : byte /// /// Options for string type motion. /// + [Serializable] public struct StringOptions : IMotionOptions, IEquatable { public ScrambleMode ScrambleMode; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs index 8723597b..1fcc7275 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs @@ -56,6 +56,11 @@ enum SchedulerType : byte [SerializeField] bool bindOnSchedule; [SerializeField] SchedulerType scheduler; +#if UNITY_EDITOR + [SerializeField] bool motionSettings; + [SerializeField] bool additionalSettings; +#endif + public void OnBeforeSerialize() { startValue = StartValue; From c65d9362cb4e9cca4262781a112b6a4519dbb86e Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 17:11:14 +0900 Subject: [PATCH 053/224] Fix: drawer --- .../LitMotion/Editor/SerializableMotionSettingsDrawer.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs index 16e184d3..ec6d40b2 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs @@ -30,12 +30,15 @@ public override VisualElement CreatePropertyGUI(SerializedProperty property) Group(foldout, group => { - AddPropertyField(group, property, "ease"); + var ease = property.FindPropertyRelative("ease"); + group.Add(new PropertyField(ease)); var customEaseCurve = new PropertyField(property.FindPropertyRelative("customEaseCurve")); + customEaseCurve.style.display = ease.enumValueIndex == (int)Ease.CustomAnimationCurve ? DisplayStyle.Flex : DisplayStyle.None; + group.Add(customEaseCurve); customEaseCurve.schedule - .Execute(() => customEaseCurve.style.display = property.FindPropertyRelative("ease").enumValueIndex == (int)Ease.CustomAnimationCurve ? DisplayStyle.Flex : DisplayStyle.None) + .Execute(() => customEaseCurve.style.display = ease.enumValueIndex == (int)Ease.CustomAnimationCurve ? DisplayStyle.Flex : DisplayStyle.None) .Every(10); }); From 4289a6f40598ff262bfb3bc85d53b7d7832c2e59 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 17:24:25 +0900 Subject: [PATCH 054/224] Remove: managed function pointer support --- .../Runtime/Internal/ManagedMotionData.cs | 48 ++------ .../Runtime/Internal/MotionStorage.cs | 1 - .../Assets/LitMotion/Runtime/MotionBuilder.cs | 112 ------------------ .../Runtime/MotionBuilderExtensions.cs | 9 +- .../Tests/Benchmark/BindBenchmark.cs | 47 +------- .../Benchmark/FunctionPointerBenchmark.cs | 98 --------------- .../FunctionPointerBenchmark.cs.meta | 2 - .../LitMotion/Tests/Runtime/UnsafeBindTest.cs | 105 ---------------- .../Tests/Runtime/UnsafeBindTest.cs.meta | 2 - 9 files changed, 15 insertions(+), 409 deletions(-) delete mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs.meta delete mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs index 10deb215..10ee6923 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs @@ -17,7 +17,6 @@ public unsafe struct ManagedMotionData public object State0; public object State1; public object State2; - public void* UpdateActionPtr; public object UpdateAction; public Action OnCompleteAction; public Action OnCancelAction; @@ -25,41 +24,20 @@ public unsafe struct ManagedMotionData [MethodImpl(MethodImplOptions.AggressiveInlining)] public void UpdateUnsafe(in TValue value) where TValue : unmanaged { - if (UpdateActionPtr == null) + switch (StateCount) { - switch (StateCount) - { - case 0: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value); - break; - case 1: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0); - break; - case 2: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0, State1); - break; - case 3: - UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0, State1, State2); - break; - } - } - else - { - switch (StateCount) - { - case 0: - ((delegate* managed)UpdateActionPtr)(value); - break; - case 1: - ((delegate* managed)UpdateActionPtr)(value, State0); - break; - case 2: - ((delegate* managed)UpdateActionPtr)(value, State0, State1); - break; - case 3: - ((delegate* managed)UpdateActionPtr)(value, State0, State1, State2); - break; - } + case 0: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value); + break; + case 1: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0); + break; + case 2: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0, State1); + break; + case 3: + UnsafeUtility.As>(ref UpdateAction)?.Invoke(value, State0, State1, State2); + break; } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index ab14c74d..f788f897 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -107,7 +107,6 @@ public unsafe MotionHandle Create(ref MotionBuilder managedDataRef.CancelOnError = buffer.CancelOnError; managedDataRef.SkipValuesDuringDelay = buffer.SkipValuesDuringDelay; managedDataRef.UpdateAction = buffer.UpdateAction; - managedDataRef.UpdateActionPtr = buffer.UpdateActionPtr; managedDataRef.OnCancelAction = buffer.OnCancelAction; managedDataRef.OnCompleteAction = buffer.OnCompleteAction; managedDataRef.StateCount = buffer.StateCount; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index fe2c1ec9..cbf7bd9d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -49,7 +49,6 @@ public static void Return(MotionBuilderBuffer buffer) buffer.StateCount = default; buffer.UpdateAction = default; - buffer.UpdateActionPtr = default; buffer.OnCompleteAction = default; buffer.OnCancelAction = default; @@ -85,7 +84,6 @@ public static void Return(MotionBuilderBuffer buffer) public object State1; public object State2; public byte StateCount; - public void* UpdateActionPtr; public object UpdateAction; public Action OnCompleteAction; public Action OnCancelAction; @@ -332,76 +330,6 @@ public MotionHandle Bind(TState0 state0, TState1 stat return ScheduleMotion(); } - /// - /// Create motion and bind it to a specific object, property, etc. - /// - /// Function pointer that handles binding - /// Handle of the created motion data. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe MotionHandle Bind(delegate* managed ptr) - { - CheckBuffer(); - SetCallbackData(ptr); - return ScheduleMotion(); - } - - /// - /// Create motion and bind it to a specific object. - /// - /// Type of state - /// Motion state - /// Function pointer that handles binding - /// Handle of the created motion data. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe MotionHandle Bind(TState state, delegate* managed ptr) - where TState : class - { - CheckBuffer(); - SetCallbackData(state, ptr); - return ScheduleMotion(); - } - - /// - /// Create motion and bind it to a specific object. - /// - /// Type of state - /// Type of state - /// Motion state - /// Motion state - /// Function pointer that handles binding - /// Handle of the created motion data. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe MotionHandle Bind(TState0 state0, TState1 state1, delegate* managed ptr) - where TState0 : class - where TState1 : class - { - CheckBuffer(); - SetCallbackData(state0, state1, ptr); - return ScheduleMotion(); - } - - /// - /// Create motion and bind it to a specific object. - /// - /// Type of state - /// Type of state - /// Type of state - /// Motion state - /// Motion state - /// Motion state - /// Funciton pointer that handles binding - /// Handle of the created motion data. - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public unsafe MotionHandle Bind(TState0 state0, TState1 state1, TState2 state2, delegate* managed ptr) - where TState0 : class - where TState1 : class - where TState2 : class - { - CheckBuffer(); - SetCallbackData(state0, state1, state2, ptr); - return ScheduleMotion(); - } - /// /// Creates a MotionSettings from the values ​​set in the builder. /// @@ -525,46 +453,6 @@ internal readonly void SetCallbackData(TState0 state0 buffer.UpdateAction = action; } - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal unsafe readonly void SetCallbackData(delegate* managed action) - { - buffer.StateCount = 0; - buffer.UpdateActionPtr = action; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal unsafe readonly void SetCallbackData(TState state, delegate* managed action) - where TState : class - { - buffer.StateCount = 1; - buffer.State0 = state; - buffer.UpdateActionPtr = action; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal unsafe readonly void SetCallbackData(TState0 state0, TState1 state1, delegate* managed action) - where TState0 : class - where TState1 : class - { - buffer.StateCount = 2; - buffer.State0 = state0; - buffer.State1 = state1; - buffer.UpdateActionPtr = action; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - internal unsafe readonly void SetCallbackData(TState0 state0, TState1 state1, TState2 state2, delegate* managed action) - where TState0 : class - where TState1 : class - where TState2 : class - { - buffer.StateCount = 3; - buffer.State0 = state0; - buffer.State1 = state1; - buffer.State2 = state2; - buffer.UpdateActionPtr = action; - } - [MethodImpl(MethodImplOptions.AggressiveInlining)] readonly void CheckBuffer() { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index 5539eed0..984e827d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -21,14 +21,7 @@ public unsafe static MotionHandle Bind(this where TAdapter : unmanaged, IMotionAdapter where TState : struct { - return builder.Bind(Box.Create(state), action, &BindAction); - } - - static void BindAction(TValue value, Box state, Action action) - where TValue : unmanaged - where TState : struct - { - action(value, state.Value); + return builder.Bind(Box.Create(state), action, (value, state, action) => action(value, state.Value)); } /// diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs index 460edbc4..2c5c9090 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/BindBenchmark.cs @@ -24,19 +24,6 @@ public void TearDown() handles.Cancel(); } - [Test] - [Performance] - public unsafe void Benchmark_Bind_Pointer_Startup() - { - BenchmarkHelper.MeasureStartUp(() => - { - int state = 0; - LMotion.Create(0f, 1f, 3f) - .Bind(Box.Create(state), (Action)(static (x, state) => DoNothing(x, state)), &BindAction) - .AddTo(handles); - }, () => handles.Cancel()); - } - [Test] [Performance] public void Benchmark_Bind_Box_StartUp() @@ -95,21 +82,6 @@ public void Benchmark_Bind_Closure_Startup() }, () => handles.Cancel()); } - [UnityTest] - [Performance] - public unsafe IEnumerator Benchmark_Bind_Pointer_Update() - { - return BenchmarkHelper.MeasureUpdate(() => - { - for (int i = 0; i < 10000; i++) - { - LMotion.Create(0f, 1f, 3f) - .Bind(Box.Create(i), (Action)(static (x, state) => DoNothing(x, state)), &BindAction) - .AddTo(handles); - } - }); - } - [UnityTest] [Performance] public IEnumerator Benchmark_Bind_Box_Update() @@ -175,24 +147,7 @@ public IEnumerator Benchmark_Bind_Closure_Update() } }); } - - [Test] - [Performance] - public unsafe void Benchmark_Bind_Pointer_GC() - { - BenchmarkHelper.MeasureGC(() => - { - for (int i = 0; i < 10000; i++) - { - LMotion.Create(0f, 1f, 3f) - .Bind(Box.Create(i), (Action)(static (x, state) => DoNothing(x, state)), &BindAction) - .AddTo(handles); - } - }); - - handles.Cancel(); - } - + [Test] [Performance] public void Benchmark_Bind_Box_GC() diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs deleted file mode 100644 index c4550dda..00000000 --- a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System.Collections; -using System.Runtime.CompilerServices; -using LitMotion.Adapters; -using NUnit.Framework; -using Unity.PerformanceTesting; -using UnityEngine; -using UnityEngine.TestTools; - -namespace LitMotion.Tests.Benchmark -{ - public class FunctionPointerBenchmark - { - Transform transform; - - [OneTimeSetUp] - public void OneTimeSetUp() - { - MotionDispatcher.EnsureStorageCapacity(200000); - - transform = new GameObject("Test").transform; - } - - [OneTimeTearDown] - public void OneTimeTearDown() - { - Object.Destroy(transform.gameObject); - transform = null; - } - - [TearDown] - public void TearDown() - { - MotionDispatcher.Clear(); - } - - [UnityTest] - [Performance] - public IEnumerator Benchmark_Delegate_Update_Float() - { - return BenchmarkHelper.MeasureUpdate(() => - { - for (int i = 0; i < 200000; i++) - { - LMotion.Create(0f, 1f, 3f) - .Bind(x => DoNothing(x)); - } - }); - } - - [UnityTest] - [Performance] - public IEnumerator Benchmark_Delegate_Update_Position() - { - return BenchmarkHelper.MeasureUpdate(() => - { - for (int i = 0; i < 200000; i++) - { - LMotion.Create(Vector3.zero, Vector3.one, 3f) - .Bind(transform, (x, t) => t.position = x); - } - }); - } - - [UnityTest] - [Performance] - public unsafe IEnumerator Benchmark_FunctionPointer_Update_Float() - { - return BenchmarkHelper.MeasureUpdate(() => - { - for (int i = 0; i < 200000; i++) - { - LMotion.Create(0f, 1f, 3f) - .Bind(&DoNothing); - } - }); - } - - [UnityTest] - [Performance] - public unsafe IEnumerator Benchmark_FunctionPointer_Update_Position() - { - return BenchmarkHelper.MeasureUpdate(() => - { - for (int i = 0; i < 200000; i++) - { - LMotion.Create(Vector3.zero, Vector3.one, 3f) - .Bind(transform, &SetPosition); - } - }); - } - - [MethodImpl(MethodImplOptions.NoInlining)] - static void DoNothing(float value) { } - - [MethodImpl(MethodImplOptions.NoInlining)] - static void SetPosition(Vector3 value, Transform t) { t.position = value; } - } -} diff --git a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs.meta deleted file mode 100644 index 9c65aaf0..00000000 --- a/src/LitMotion/Assets/LitMotion/Tests/Benchmark/FunctionPointerBenchmark.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 3f623a568369c40e4976f69f6e47f29a \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs deleted file mode 100644 index d8aff52c..00000000 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System.Collections; -using NUnit.Framework; -using UnityEngine; -using UnityEngine.TestTools; - -namespace LitMotion.Tests.Runtime -{ - public class UnsafeBindTest - { - [UnityTest] - public IEnumerator Test_Bind_Pointer() - { - var endValue = 10f; - Create(endValue); - yield return new WaitForSeconds(1.1f); - Assert.AreEqual(sharedValue, endValue); - } - - [UnityTest] - public IEnumerator Test_Bind_Pointer_WithState_1() - { - var target1 = new TestClass(); - var endValue = 10f; - Create(endValue, target1); - yield return new WaitForSeconds(1.1f); - Assert.AreEqual(target1.Value, endValue); - } - - [UnityTest] - public IEnumerator Test_Bind_Pointer_WithState_2() - { - var target1 = new TestClass(); - var target2 = new TestClass(); - var endValue = 10f; - Create(endValue, target1, target2); - yield return new WaitForSeconds(1.1f); - Assert.AreEqual(target1.Value, endValue); - Assert.AreEqual(target2.Value, endValue); - } - - [UnityTest] - public IEnumerator Test_Bind_Pointer_WithState_3() - { - var target1 = new TestClass(); - var target2 = new TestClass(); - var target3 = new TestClass(); - var endValue = 10f; - Create(endValue, target1, target2, target3); - yield return new WaitForSeconds(1.1f); - Assert.AreEqual(target1.Value, endValue); - Assert.AreEqual(target2.Value, endValue); - Assert.AreEqual(target3.Value, endValue); - } - - static float sharedValue; - - static unsafe MotionHandle Create(float endValue) - { - return LMotion.Create(0f, endValue, 1f).Bind(&BindMethod); - } - - static unsafe MotionHandle Create(float endValue, TestClass state0) - { - return LMotion.Create(0f, endValue, 1f).Bind(state0, &BindMethod); - } - - static unsafe MotionHandle Create(float endValue, TestClass state0, TestClass state1) - { - return LMotion.Create(0f, endValue, 1f).Bind(state0, state1, &BindMethod); - } - - static unsafe MotionHandle Create(float endValue, TestClass state0, TestClass state1, TestClass state2) - { - return LMotion.Create(0f, endValue, 1f).Bind(state0, state1, state2, &BindMethod); - } - - static void BindMethod(float value) - { - sharedValue = value; - } - - static void BindMethod(float value, TestClass state0) - { - state0.Value = value; - } - - static void BindMethod(float value, TestClass state0, TestClass state1) - { - state0.Value = value; - state1.Value = value; - } - - static void BindMethod(float value, TestClass state0, TestClass state1, TestClass state2) - { - state0.Value = value; - state1.Value = value; - state2.Value = value; - } - - class TestClass - { - public float Value { get; set; } - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs.meta deleted file mode 100644 index 82fae892..00000000 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UnsafeBindTest.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 40f7df00b22734bc584ac22d2d75b729 \ No newline at end of file From a344577548d83d697b44c50152963da4907298c1 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 18:14:26 +0900 Subject: [PATCH 055/224] Rename: LinkBehaviour -> LinkBehavior --- .../LitMotion/Runtime/Internal/MotionHandleLinker.cs | 8 ++++---- .../Runtime/{LinkBehaviour.cs => LinkBehavior.cs} | 2 +- .../{LinkBehaviour.cs.meta => LinkBehavior.cs.meta} | 0 .../Assets/LitMotion/Runtime/MotionHandleExtensions.cs | 8 ++++---- src/LitMotion/Assets/LitMotion/Tests/Runtime/AddToTest.cs | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) rename src/LitMotion/Assets/LitMotion/Runtime/{LinkBehaviour.cs => LinkBehavior.cs} (88%) rename src/LitMotion/Assets/LitMotion/Runtime/{LinkBehaviour.cs.meta => LinkBehavior.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHandleLinker.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHandleLinker.cs index fc30826c..756e8a4e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHandleLinker.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHandleLinker.cs @@ -13,17 +13,17 @@ internal sealed class MotionHandleLinker : MonoBehaviour FastListCore completeOnDisableList; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void Register(MotionHandle handle, LinkBehaviour linkBehaviour) + public void Register(MotionHandle handle, LinkBehavior linkBehaviour) { switch (linkBehaviour) { - case LinkBehaviour.CancelOnDestroy: + case LinkBehavior.CancelOnDestroy: cancelOnDestroyList.Add(handle); break; - case LinkBehaviour.CancelOnDisable: + case LinkBehavior.CancelOnDisable: cancelOnDisableList.Add(handle); break; - case LinkBehaviour.CompleteOnDisable: + case LinkBehavior.CompleteOnDisable: completeOnDisableList.Add(handle); break; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LinkBehaviour.cs b/src/LitMotion/Assets/LitMotion/Runtime/LinkBehavior.cs similarity index 88% rename from src/LitMotion/Assets/LitMotion/Runtime/LinkBehaviour.cs rename to src/LitMotion/Assets/LitMotion/Runtime/LinkBehavior.cs index b6664213..9fe2b11b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/LinkBehaviour.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/LinkBehavior.cs @@ -3,7 +3,7 @@ namespace LitMotion /// /// Specifies the behavior when linking motion to GameObject with AddTo. /// - public enum LinkBehaviour + public enum LinkBehavior { CancelOnDestroy = 0, CancelOnDisable = 1, diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LinkBehaviour.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/LinkBehavior.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/LinkBehaviour.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/LinkBehavior.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 33ebe16d..6f5ab439 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -89,7 +89,7 @@ public static MotionHandle AddTo(this MotionHandle handle, CompositeMotionHandle /// Target object public static MotionHandle AddTo(this MotionHandle handle, GameObject target) { - GetOrAddComponent(target).Register(handle, LinkBehaviour.CancelOnDestroy); + GetOrAddComponent(target).Register(handle, LinkBehavior.CancelOnDestroy); return handle; } @@ -99,7 +99,7 @@ public static MotionHandle AddTo(this MotionHandle handle, GameObject target) /// This motion handle /// Target object /// Link behaviour - public static MotionHandle AddTo(this MotionHandle handle, GameObject target, LinkBehaviour linkBehaviour) + public static MotionHandle AddTo(this MotionHandle handle, GameObject target, LinkBehavior linkBehaviour) { GetOrAddComponent(target).Register(handle, linkBehaviour); return handle; @@ -112,7 +112,7 @@ public static MotionHandle AddTo(this MotionHandle handle, GameObject target, Li /// Target object public static MotionHandle AddTo(this MotionHandle handle, Component target) { - GetOrAddComponent(target.gameObject).Register(handle, LinkBehaviour.CancelOnDestroy); + GetOrAddComponent(target.gameObject).Register(handle, LinkBehavior.CancelOnDestroy); return handle; } @@ -122,7 +122,7 @@ public static MotionHandle AddTo(this MotionHandle handle, Component target) /// This motion handle /// Target object /// Link behaviour - public static MotionHandle AddTo(this MotionHandle handle, Component target, LinkBehaviour linkBehaviour) + public static MotionHandle AddTo(this MotionHandle handle, Component target, LinkBehavior linkBehaviour) { GetOrAddComponent(target.gameObject).Register(handle, linkBehaviour); return handle; diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/AddToTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/AddToTest.cs index 4a216d8e..435d2c89 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/AddToTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/AddToTest.cs @@ -29,7 +29,7 @@ public IEnumerator Test_AddTo_CancelOnDisable() var handle = LMotion.Create(0f, 1f, 2f) .WithOnCancel(() => canceled = true) .RunWithoutBinding() - .AddTo(obj, LinkBehaviour.CancelOnDisable); + .AddTo(obj, LinkBehavior.CancelOnDisable); yield return new WaitForSeconds(0.1f); obj.SetActive(false); Assert.IsTrue(canceled); @@ -43,7 +43,7 @@ public IEnumerator Test_AddTo_CompleteOnDisable() var handle = LMotion.Create(0f, 1f, 2f) .WithOnComplete(() => completed = true) .RunWithoutBinding() - .AddTo(obj, LinkBehaviour.CompleteOnDisable); + .AddTo(obj, LinkBehavior.CompleteOnDisable); yield return new WaitForSeconds(0.1f); obj.SetActive(false); Assert.IsTrue(completed); From 01fdc96675bae3f9c5d96a2a1b0364a5a0126d8b Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 24 Nov 2024 21:24:32 +0900 Subject: [PATCH 056/224] Add: MotionHandle.Duration --- .../Assets/LitMotion/Runtime/MotionHandle.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index c346c21e..c72af711 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -38,6 +38,20 @@ public readonly double Time } } + /// + /// The total duration of the motion + /// + public readonly double Duration + { + get + { + ref var dataRef = ref MotionManager.GetDataRef(this); + if (dataRef.Loops < 0) return double.PositiveInfinity; + return dataRef.Delay * (dataRef.DelayType == DelayType.EveryLoop ? dataRef.Loops : 1) + + dataRef.Duration * dataRef.Loops; + } + } + /// /// Motion playback speed. /// From f535677c1a1028d1353398cda3eff7d54e11bf50 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Tue, 26 Nov 2024 20:25:27 +0900 Subject: [PATCH 057/224] Refactoring --- .../Runtime/Internal/MotionStorage.cs | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index f788f897..777d34b5 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -194,14 +194,10 @@ public void RemoveAll(NativeList denseIndexList) public bool IsActive(MotionHandle handle) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); + if (IsDenseIndexOutOfRange(slot.DenseIndex)) return false; + if (IsInvalidVersion(slot.Version, handle)) return false; - var denseIndex = slot.DenseIndex; - if (denseIndex < 0 || denseIndex >= tail) return false; - - var version = slot.Version; - if (version <= 0 || version != handle.Version) return false; - - ref var motion = ref unmanagedDataArray[denseIndex]; + ref var motion = ref unmanagedDataArray[slot.DenseIndex]; return motion.Core.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing; } @@ -227,14 +223,13 @@ int TryCancelCore(MotionHandle handle) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; - if (denseIndex < 0 || denseIndex >= tail) + if (IsDenseIndexOutOfRange(denseIndex)) { return 1; } ref var unmanagedData = ref unmanagedDataArray[denseIndex]; - var version = slot.Version; - if (version <= 0 || version != handle.Version) + if (IsInvalidVersion(slot.Version, handle)) { return 1; } @@ -283,16 +278,15 @@ int TryCompleteCore(MotionHandle handle) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); - var denseIndex = slot.DenseIndex; - if (denseIndex < 0 || denseIndex >= tail) + if (IsDenseIndexOutOfRange(slot.DenseIndex)) { return 1; } - ref var unmanagedData = ref unmanagedDataArray[denseIndex]; + ref var unmanagedData = ref unmanagedDataArray[slot.DenseIndex]; var version = slot.Version; - if (version <= 0 || version != handle.Version) + if (IsInvalidVersion(version, handle)) { return 1; } @@ -307,7 +301,7 @@ int TryCompleteCore(MotionHandle handle) return 3; } - ref var managedData = ref managedDataArray[denseIndex]; + ref var managedData = ref managedDataArray[slot.DenseIndex]; unmanagedData.Core.Status = MotionStatus.Completed; @@ -358,7 +352,7 @@ public unsafe void SetTime(MotionHandle handle, double time) ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; - if (denseIndex < 0 || denseIndex >= tail) Error.MotionNotExists(); + if (IsDenseIndexOutOfRange(denseIndex)) Error.MotionNotExists(); fixed (MotionData* ptr = unmanagedDataArray) { @@ -396,14 +390,10 @@ public ref MotionDataCore GetDataRef(MotionHandle handle) ref SparseSetCore.Slot GetSlotWithVarify(MotionHandle handle) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); - var denseIndex = slot.DenseIndex; - if (denseIndex < 0 || denseIndex >= unmanagedDataArray.Length) - { - Error.MotionNotExists(); - } + if (IsDenseIndexOutOfRange(slot.DenseIndex)) Error.MotionNotExists(); - var version = slot.Version; - if (version <= 0 || version != handle.Version || unmanagedDataArray[denseIndex].Core.Status == MotionStatus.None) + if (IsInvalidVersion(slot.Version, handle) || + unmanagedDataArray[slot.DenseIndex].Core.Status == MotionStatus.None) { Error.MotionNotExists(); } @@ -420,5 +410,17 @@ public void Reset() tail = 0; allocator.Allocator.Rewind(); } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + bool IsDenseIndexOutOfRange(int denseIndex) + { + return denseIndex < 0 || denseIndex >= tail; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static bool IsInvalidVersion(int version, MotionHandle handle) + { + return version <= 0 || version != handle.Version; + } } } \ No newline at end of file From 9f2a60ac736e36c77a9d4feb113cdd607588958d Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Tue, 26 Nov 2024 22:57:08 +0900 Subject: [PATCH 058/224] Add: MotionDisposeBehavior --- .../Runtime/MotionHandleExtensions.cs | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 6f5ab439..64937362 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -157,10 +157,11 @@ static TComponent GetOrAddComponent(GameObject target) where TCompon /// Convert MotionHandle to IDisposable. /// /// This motion handle - /// - public static IDisposable ToDisposable(this MotionHandle handle) + /// Behavior when disposing + /// Disposable motion + public static IDisposable ToDisposable(this MotionHandle handle, MotionDisposeBehavior disposeBehavior = MotionDisposeBehavior.Cancel) { - return new MotionHandleDisposable(handle); + return new MotionHandleDisposable(handle, disposeBehavior); } /// @@ -266,14 +267,37 @@ public static Awaitable ToAwaitable(this MotionHandle handle, MotionCancelBehavi } + /// + /// Specifies the behavior when the motion converted to IDisposable is disposed. + /// + public enum MotionDisposeBehavior + { + Cancel, + Complete, + } + internal sealed class MotionHandleDisposable : IDisposable { - public MotionHandleDisposable(MotionHandle handle) => this.handle = handle; + public MotionHandleDisposable(MotionHandle handle, MotionDisposeBehavior disposeBehavior) + { + this.handle = handle; + this.disposeBehavior = disposeBehavior; + } + public readonly MotionHandle handle; + public readonly MotionDisposeBehavior disposeBehavior; public void Dispose() { - if (handle.IsActive()) handle.Cancel(); + switch (disposeBehavior) + { + case MotionDisposeBehavior.Cancel: + handle.TryCancel(); + break; + case MotionDisposeBehavior.Complete: + handle.TryComplete(); + break; + } } } } \ No newline at end of file From 6d9cb943d6ae42884889d15805a9d48e027efabc Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Tue, 26 Nov 2024 23:00:17 +0900 Subject: [PATCH 059/224] Change: ToYieldInteraction -> ToYieldInstruction --- .../Runtime/MotionHandleExtensions.cs | 2 +- .../LitMotion/Tests/Runtime/CallbackTest.cs | 8 +- .../LitMotion/Tests/Runtime/CoroutineTest.cs | 2 +- .../LitMotion/Tests/Runtime/DelayTest.cs | 8 +- .../LitMotion/Tests/Runtime/EaseTest.cs | 2 +- .../Tests/Runtime/PlaybackSpeedTest.cs | 6 +- .../LitMotion/Tests/Runtime/SchedulerTest.cs | 40 +++---- .../LitMotion/Tests/Runtime/TransformTest.cs | 104 +++++++++--------- 8 files changed, 86 insertions(+), 86 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 64937362..8c63a821 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -169,7 +169,7 @@ public static IDisposable ToDisposable(this MotionHandle handle, MotionDisposeBe /// /// This motion handle /// - public static IEnumerator ToYieldInteraction(this MotionHandle handle) + public static IEnumerator ToYieldInstruction(this MotionHandle handle) { while (handle.IsActive()) { diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs index d0083bc3..2316224b 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs @@ -61,7 +61,7 @@ public void Test_CompleteOnCallback_Self() handle = LMotion.Create(0f, 10f, 1f) .WithOnComplete(() => handle.Complete()) .RunWithoutBinding(); - + handle.Complete(); } @@ -89,7 +89,7 @@ public IEnumerator Test_CompleteOnCallback_Other() LMotion.Create(0f, 10f, 0.5f) .WithOnComplete(() => otherHandle.Complete()) .RunWithoutBinding(); - yield return otherHandle.ToYieldInteraction(); + yield return otherHandle.ToYieldInstruction(); } [UnityTest] @@ -99,7 +99,7 @@ public IEnumerator Test_ThrowExceptionInsideCallback() yield return LMotion.Create(0f, 10f, 0.5f) .WithOnComplete(() => throw new Exception("Test")) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [Test] @@ -135,7 +135,7 @@ public IEnumerator Test_RegisterUnhandledExceptionHandler() yield return LMotion.Create(0f, 10f, 0.5f) .WithOnComplete(() => throw new Exception("Test")) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); MotionDispatcher.RegisterUnhandledExceptionHandler(defaultHandler); } } diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CoroutineTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CoroutineTest.cs index 00c6a1fc..c021991b 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CoroutineTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CoroutineTest.cs @@ -11,7 +11,7 @@ public IEnumerator Test_ToYieldInteraction() { yield return LMotion.Create(0f, 10f, 3f) .BindToUnityLogger() - .ToYieldInteraction(); + .ToYieldInstruction(); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/DelayTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/DelayTest.cs index 5ee7e3ff..5bc6934d 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/DelayTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/DelayTest.cs @@ -15,7 +15,7 @@ public IEnumerator Test_Delay() yield return LMotion.Create(0f, 1f, 0.5f) .WithDelay(0.5f) .BindToUnityLogger() - .ToYieldInteraction(); + .ToYieldInstruction(); Assert.That(Time.timeAsDouble - t, Is.GreaterThan(0.95).And.LessThan(1.1)); } @@ -26,7 +26,7 @@ public IEnumerator Test_Delay_WithZeroDuration() yield return LMotion.Create(0f, 1f, 0f) .WithDelay(1f) .BindToUnityLogger() - .ToYieldInteraction(); + .ToYieldInstruction(); Assert.That(Time.timeAsDouble - t, Is.GreaterThan(0.95).And.LessThan(1.1)); } @@ -38,7 +38,7 @@ public IEnumerator Test_Delay_EveryLoop() .WithLoops(2) .WithDelay(0.5f, DelayType.EveryLoop) .BindToUnityLogger() - .ToYieldInteraction(); + .ToYieldInstruction(); Assert.That(Time.timeAsDouble - t, Is.GreaterThan(1.95).And.LessThan(2.1)); } @@ -50,7 +50,7 @@ public IEnumerator Test_Delay_EveryLoop_WithZeroDuration() .WithLoops(3) .WithDelay(0.5f, DelayType.EveryLoop) .BindToUnityLogger() - .ToYieldInteraction(); + .ToYieldInstruction(); Assert.That(Time.timeAsDouble - t, Is.GreaterThan(1.45).And.LessThan(1.6)); } diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/EaseTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/EaseTest.cs index 063e5d86..c2157bf5 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/EaseTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/EaseTest.cs @@ -16,7 +16,7 @@ public IEnumerator Test_AnimationCurve() yield return LMotion.Create(0f, 10f, 0.2f) .WithEase(curve) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } } } diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs index bfe48b9d..9ec638ce 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/PlaybackSpeedTest.cs @@ -19,7 +19,7 @@ public IEnumerator Test_PlaybackSpeed() handle.PlaybackSpeed = 0.5f; var time = Time.timeAsDouble; - yield return handle.ToYieldInteraction(); + yield return handle.ToYieldInstruction(); Assert.That(Time.timeAsDouble - time, Is.GreaterThan(2.0)); } @@ -45,10 +45,10 @@ public IEnumerator Test_PlaybackSpeed_2x_Speed() var value = 0f; var handle = LMotion.Create(0f, endValue, 1f) .Bind(x => value = x); - + handle.PlaybackSpeed = 2f; var time = Time.time; - yield return handle.ToYieldInteraction(); + yield return handle.ToYieldInstruction(); Assert.That(Time.time - time, Is.EqualTo(0.5f).Using(new FloatEqualityComparer(0.05f))); } } diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SchedulerTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SchedulerTest.cs index ee47477a..faefa373 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SchedulerTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SchedulerTest.cs @@ -21,7 +21,7 @@ public IEnumerator Test_Scheduler_Initialization() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.Initialization) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -31,7 +31,7 @@ public IEnumerator Test_Scheduler_Initialization_IgnoreTimeScale() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.InitializationIgnoreTimeScale) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -41,7 +41,7 @@ public IEnumerator Test_Scheduler_Initialization_Realtime() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.InitializationRealtime) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -50,7 +50,7 @@ public IEnumerator Test_Scheduler_EarlyUpdate() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.EarlyUpdate) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -60,7 +60,7 @@ public IEnumerator Test_Scheduler_EarlyUpdate_IgnoreTimeScale() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.EarlyUpdateIgnoreTimeScale) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -70,7 +70,7 @@ public IEnumerator Test_Scheduler_EarlyUpdate_Realtime() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.EarlyUpdateRealtime) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -82,7 +82,7 @@ public IEnumerator Test_Scheduler_FixedUpdate() { Assert.IsTrue(Time.inFixedTimeStep); }) - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -91,7 +91,7 @@ public IEnumerator Test_Scheduler_Update() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.Update) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -102,7 +102,7 @@ public IEnumerator Test_Scheduler_Update_WithHalfTimeScale() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.Update) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); Assert.That(Time.unscaledTimeAsDouble - t, Is.GreaterThan(Duration * 2f)); } @@ -113,7 +113,7 @@ public IEnumerator Test_Scheduler_Update_IgnoreTimeScale() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.UpdateIgnoreTimeScale) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -123,7 +123,7 @@ public IEnumerator Test_Scheduler_Update_Realtime() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.UpdateRealtime) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -132,7 +132,7 @@ public IEnumerator Test_Scheduler_PreLateUpdate() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.PreLateUpdate) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -142,7 +142,7 @@ public IEnumerator Test_Scheduler_PreLateUpdate_IgnoreTimeScale() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.PreLateUpdateIgnoreTimeScale) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -152,7 +152,7 @@ public IEnumerator Test_Scheduler_PreLateUpdate_Realtime() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.PreLateUpdateRealtime) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -161,7 +161,7 @@ public IEnumerator Test_Scheduler_PostLateUpdate() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.PostLateUpdate) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -171,7 +171,7 @@ public IEnumerator Test_Scheduler_PostLateUpdate_IgnoreTimeScale() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.PostLateUpdateIgnoreTimeScale) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -181,7 +181,7 @@ public IEnumerator Test_Scheduler_PostLateUpdate_Realtime() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.PostLateUpdateRealtime) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -190,7 +190,7 @@ public IEnumerator Test_Scheduler_TimeUpdate() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.TimeUpdate) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -200,7 +200,7 @@ public IEnumerator Test_Scheduler_TimeUpdate_IgnoreTimeScale() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.TimeUpdateIgnoreTimeScale) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } [UnityTest] @@ -210,7 +210,7 @@ public IEnumerator Test_Scheduler_TimeUpdate_Realtime() yield return LMotion.Create(0f, 10f, Duration) .WithScheduler(MotionScheduler.TimeUpdateRealtime) .RunWithoutBinding() - .ToYieldInteraction(); + .ToYieldInstruction(); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/TransformTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/TransformTest.cs index 7b9fb16b..20587d49 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/TransformTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/TransformTest.cs @@ -28,7 +28,7 @@ public void OneTimeTearDown() public IEnumerator Test_BindToPosition() { var endValue = Vector3.one; - yield return LMotion.Create(Vector3.zero, endValue, Duration).BindToPosition(target).ToYieldInteraction(); + yield return LMotion.Create(Vector3.zero, endValue, Duration).BindToPosition(target).ToYieldInstruction(); Assert.That(target.position, Is.EqualTo(endValue).Using(Vector3EqualityComparer.Instance)); } @@ -36,7 +36,7 @@ public IEnumerator Test_BindToPosition() public IEnumerator Test_BindToPositionX() { var endValue = 10f; - yield return LMotion.Create(1f, endValue, Duration).BindToPositionX(target).ToYieldInteraction(); + yield return LMotion.Create(1f, endValue, Duration).BindToPositionX(target).ToYieldInstruction(); Assert.That(target.position.x, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } @@ -44,7 +44,7 @@ public IEnumerator Test_BindToPositionX() public IEnumerator Test_BindToPositionY() { var endValue = 10f; - yield return LMotion.Create(1f, endValue, Duration).BindToPositionY(target).ToYieldInteraction(); + yield return LMotion.Create(1f, endValue, Duration).BindToPositionY(target).ToYieldInstruction(); Assert.That(target.position.y, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } @@ -52,31 +52,31 @@ public IEnumerator Test_BindToPositionY() public IEnumerator Test_BindToPositionZ() { var endValue = 10f; - yield return LMotion.Create(1f, endValue, Duration).BindToPositionZ(target).ToYieldInteraction(); + yield return LMotion.Create(1f, endValue, Duration).BindToPositionZ(target).ToYieldInstruction(); Assert.That(target.position.z, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToPositionXY() { var endValue = Vector2.one; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToPositionXY(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToPositionXY(target).ToYieldInstruction(); Assert.That(new Vector2(target.position.x, target.position.y), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToPositionXZ() { var endValue = Vector2.one; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToPositionXZ(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToPositionXZ(target).ToYieldInstruction(); Assert.That(new Vector2(target.position.x, target.position.z), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToPositionYZ() { var endValue = Vector2.one; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToPositionYZ(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToPositionYZ(target).ToYieldInstruction(); Assert.That(new Vector2(target.position.y, target.position.z), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } @@ -84,7 +84,7 @@ public IEnumerator Test_BindToPositionYZ() public IEnumerator Test_BindToLocalPosition() { var endValue = Vector3.one; - yield return LMotion.Create(Vector3.zero, endValue, Duration).BindToLocalPosition(target).ToYieldInteraction(); + yield return LMotion.Create(Vector3.zero, endValue, Duration).BindToLocalPosition(target).ToYieldInstruction(); Assert.That(target.localPosition, Is.EqualTo(endValue).Using(Vector3EqualityComparer.Instance)); } @@ -92,7 +92,7 @@ public IEnumerator Test_BindToLocalPosition() public IEnumerator Test_BindToLocalPositionX() { var endValue = 10f; - yield return LMotion.Create(1f, endValue, Duration).BindToLocalPositionX(target).ToYieldInteraction(); + yield return LMotion.Create(1f, endValue, Duration).BindToLocalPositionX(target).ToYieldInstruction(); Assert.That(target.localPosition.x, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } @@ -100,7 +100,7 @@ public IEnumerator Test_BindToLocalPositionX() public IEnumerator Test_BindToLocalPositionY() { var endValue = 10f; - yield return LMotion.Create(1f, endValue, Duration).BindToLocalPositionY(target).ToYieldInteraction(); + yield return LMotion.Create(1f, endValue, Duration).BindToLocalPositionY(target).ToYieldInstruction(); Assert.That(target.localPosition.y, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } @@ -108,31 +108,31 @@ public IEnumerator Test_BindToLocalPositionY() public IEnumerator Test_BindToLocalPositionZ() { var endValue = 10f; - yield return LMotion.Create(1f, endValue, Duration).BindToLocalPositionZ(target).ToYieldInteraction(); + yield return LMotion.Create(1f, endValue, Duration).BindToLocalPositionZ(target).ToYieldInstruction(); Assert.That(target.localPosition.z, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToLocalPositionXY() { var endValue = Vector2.one; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalPositionXY(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalPositionXY(target).ToYieldInstruction(); Assert.That(new Vector2(target.localPosition.x, target.localPosition.y), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToLocalPositionXZ() { var endValue = Vector2.one; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalPositionXZ(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalPositionXZ(target).ToYieldInstruction(); Assert.That(new Vector2(target.localPosition.x, target.localPosition.z), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToLocalPositionYZ() { var endValue = Vector2.one; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalPositionYZ(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalPositionYZ(target).ToYieldInstruction(); Assert.That(new Vector2(target.localPosition.y, target.localPosition.z), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } @@ -140,7 +140,7 @@ public IEnumerator Test_BindToLocalPositionYZ() public IEnumerator Test_BindToRotation() { var endValue = Quaternion.Euler(10f, 20f, 30f); - yield return LMotion.Create(Quaternion.identity, endValue, Duration).BindToRotation(target).ToYieldInteraction(); + yield return LMotion.Create(Quaternion.identity, endValue, Duration).BindToRotation(target).ToYieldInstruction(); Assert.That(target.rotation, Is.EqualTo(endValue).Using(QuaternionEqualityComparer.Instance)); } @@ -148,7 +148,7 @@ public IEnumerator Test_BindToRotation() public IEnumerator Test_BindToLocalRotation() { var endValue = Quaternion.Euler(10f, 20f, 30f); - yield return LMotion.Create(Quaternion.identity, endValue, Duration).BindToLocalRotation(target).ToYieldInteraction(); + yield return LMotion.Create(Quaternion.identity, endValue, Duration).BindToLocalRotation(target).ToYieldInstruction(); Assert.That(target.localRotation, Is.EqualTo(endValue).Using(QuaternionEqualityComparer.Instance)); } @@ -156,7 +156,7 @@ public IEnumerator Test_BindToLocalRotation() public IEnumerator Test_BindToEulerAngles() { var endValue = Vector3.one * 10f; - yield return LMotion.Create(Vector3.zero, endValue, Duration).BindToEulerAngles(target).ToYieldInteraction(); + yield return LMotion.Create(Vector3.zero, endValue, Duration).BindToEulerAngles(target).ToYieldInstruction(); Assert.That(target.eulerAngles, Is.EqualTo(endValue).Using(Vector3EqualityComparer.Instance)); } @@ -164,7 +164,7 @@ public IEnumerator Test_BindToEulerAngles() public IEnumerator Test_BindToEulerAnglesX() { var endValue = 10f; - yield return LMotion.Create(0f, endValue, Duration).BindToEulerAnglesX(target).ToYieldInteraction(); + yield return LMotion.Create(0f, endValue, Duration).BindToEulerAnglesX(target).ToYieldInstruction(); Assert.That(target.eulerAngles.x, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } @@ -172,7 +172,7 @@ public IEnumerator Test_BindToEulerAnglesX() public IEnumerator Test_BindToEulerAnglesY() { var endValue = 10f; - yield return LMotion.Create(0f, endValue, Duration).BindToEulerAnglesY(target).ToYieldInteraction(); + yield return LMotion.Create(0f, endValue, Duration).BindToEulerAnglesY(target).ToYieldInstruction(); Assert.That(target.eulerAngles.y, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } @@ -180,31 +180,31 @@ public IEnumerator Test_BindToEulerAnglesY() public IEnumerator Test_BindToEulerAnglesZ() { var endValue = 10f; - yield return LMotion.Create(0f, endValue, Duration).BindToEulerAnglesZ(target).ToYieldInteraction(); + yield return LMotion.Create(0f, endValue, Duration).BindToEulerAnglesZ(target).ToYieldInstruction(); Assert.That(target.eulerAngles.z, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToEulerAnglesXY() { var endValue = Vector2.one * 10f; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToEulerAnglesXY(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToEulerAnglesXY(target).ToYieldInstruction(); Assert.That(new Vector2(target.eulerAngles.x, target.eulerAngles.y), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToEulerAnglesXZ() { var endValue = Vector2.one * 10f; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToEulerAnglesXZ(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToEulerAnglesXZ(target).ToYieldInstruction(); Assert.That(new Vector2(target.eulerAngles.x, target.eulerAngles.z), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToEulerAnglesYZ() { var endValue = Vector2.one * 10f; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToEulerAnglesYZ(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToEulerAnglesYZ(target).ToYieldInstruction(); Assert.That(new Vector2(target.eulerAngles.y, target.eulerAngles.z), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } @@ -212,7 +212,7 @@ public IEnumerator Test_BindToEulerAnglesYZ() public IEnumerator Test_BindToLocalEulerAngles() { var endValue = Vector3.one * 10f; - yield return LMotion.Create(Vector3.zero, endValue, Duration).BindToLocalEulerAngles(target).ToYieldInteraction(); + yield return LMotion.Create(Vector3.zero, endValue, Duration).BindToLocalEulerAngles(target).ToYieldInstruction(); Assert.That(target.localEulerAngles, Is.EqualTo(endValue).Using(Vector3EqualityComparer.Instance)); } @@ -220,7 +220,7 @@ public IEnumerator Test_BindToLocalEulerAngles() public IEnumerator Test_BindToLocalEulerAnglesX() { var endValue = 10f; - yield return LMotion.Create(0f, endValue, Duration).BindToLocalEulerAnglesX(target).ToYieldInteraction(); + yield return LMotion.Create(0f, endValue, Duration).BindToLocalEulerAnglesX(target).ToYieldInstruction(); Assert.That(target.localEulerAngles.x, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } @@ -228,7 +228,7 @@ public IEnumerator Test_BindToLocalEulerAnglesX() public IEnumerator Test_BindToLocalEulerAnglesY() { var endValue = 10f; - yield return LMotion.Create(0f, endValue, Duration).BindToLocalEulerAnglesY(target).ToYieldInteraction(); + yield return LMotion.Create(0f, endValue, Duration).BindToLocalEulerAnglesY(target).ToYieldInstruction(); Assert.That(target.localEulerAngles.y, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } @@ -236,31 +236,31 @@ public IEnumerator Test_BindToLocalEulerAnglesY() public IEnumerator Test_BindToLocalEulerAnglesZ() { var endValue = 10f; - yield return LMotion.Create(0f, endValue, Duration).BindToLocalEulerAnglesZ(target).ToYieldInteraction(); + yield return LMotion.Create(0f, endValue, Duration).BindToLocalEulerAnglesZ(target).ToYieldInstruction(); Assert.That(target.localEulerAngles.z, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToLocalEulerAnglesXY() { var endValue = Vector2.one * 10f; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalEulerAnglesXY(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalEulerAnglesXY(target).ToYieldInstruction(); Assert.That(new Vector2(target.localEulerAngles.x, target.localEulerAngles.y), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToLocalEulerAnglesXZ() { var endValue = Vector2.one * 10f; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalEulerAnglesXZ(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalEulerAnglesXZ(target).ToYieldInstruction(); Assert.That(new Vector2(target.localEulerAngles.x, target.localEulerAngles.z), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToLocalEulerAnglesYZ() { var endValue = Vector2.one * 10f; - yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalEulerAnglesYZ(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.zero, endValue, Duration).BindToLocalEulerAnglesYZ(target).ToYieldInstruction(); Assert.That(new Vector2(target.localEulerAngles.y, target.localEulerAngles.z), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } @@ -268,7 +268,7 @@ public IEnumerator Test_BindToLocalEulerAnglesYZ() public IEnumerator Test_BindToLocalScale() { var endValue = Vector3.one * 2f; - yield return LMotion.Create(Vector3.one, endValue, Duration).BindToLocalScale(target).ToYieldInteraction(); + yield return LMotion.Create(Vector3.one, endValue, Duration).BindToLocalScale(target).ToYieldInstruction(); Assert.That(target.localScale, Is.EqualTo(endValue).Using(Vector3EqualityComparer.Instance)); } @@ -276,7 +276,7 @@ public IEnumerator Test_BindToLocalScale() public IEnumerator Test_BindToLocalScaleX() { var endValue = 2f; - yield return LMotion.Create(1f, endValue, Duration).BindToLocalScaleX(target).ToYieldInteraction(); + yield return LMotion.Create(1f, endValue, Duration).BindToLocalScaleX(target).ToYieldInstruction(); Assert.That(target.localScale.x, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } @@ -284,7 +284,7 @@ public IEnumerator Test_BindToLocalScaleX() public IEnumerator Test_BindToLocalScaleY() { var endValue = 2f; - yield return LMotion.Create(1f, endValue, Duration).BindToLocalScaleY(target).ToYieldInteraction(); + yield return LMotion.Create(1f, endValue, Duration).BindToLocalScaleY(target).ToYieldInstruction(); Assert.That(target.localScale.y, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } @@ -292,31 +292,31 @@ public IEnumerator Test_BindToLocalScaleY() public IEnumerator Test_BindToLocalScaleZ() { var endValue = 2f; - yield return LMotion.Create(1f, endValue, Duration).BindToLocalScaleZ(target).ToYieldInteraction(); + yield return LMotion.Create(1f, endValue, Duration).BindToLocalScaleZ(target).ToYieldInstruction(); Assert.That(target.localScale.z, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToLocalScaleXY() { var endValue = Vector2.one * 2f; - yield return LMotion.Create(Vector2.one, endValue, Duration).BindToLocalScaleXY(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.one, endValue, Duration).BindToLocalScaleXY(target).ToYieldInstruction(); Assert.That(new Vector2(target.localScale.x, target.localScale.y), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToLocalScaleXZ() { var endValue = Vector2.one * 2f; - yield return LMotion.Create(Vector2.one, endValue, Duration).BindToLocalScaleXZ(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.one, endValue, Duration).BindToLocalScaleXZ(target).ToYieldInstruction(); Assert.That(new Vector2(target.localScale.x, target.localScale.z), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } - + [UnityTest] public IEnumerator Test_BindToLocalScaleYZ() { var endValue = Vector2.one * 2f; - yield return LMotion.Create(Vector2.one, endValue, Duration).BindToLocalScaleYZ(target).ToYieldInteraction(); + yield return LMotion.Create(Vector2.one, endValue, Duration).BindToLocalScaleYZ(target).ToYieldInstruction(); Assert.That(new Vector2(target.localScale.y, target.localScale.z), Is.EqualTo(endValue).Using(Vector2EqualityComparer.Instance)); } } From 376bf694ef80becb9b4358c7d12319bc453e827b Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 28 Nov 2024 16:45:04 +0900 Subject: [PATCH 060/224] Add: format parameter to BindToUnityLogger() --- .../General/LitMotionLoggerExtensions.cs | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs index 6673d5f5..d8606805 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionLoggerExtensions.cs @@ -1,5 +1,9 @@ using UnityEngine; +#if LITMOTION_SUPPORT_ZSTRING +using Cysharp.Text; +#endif + namespace LitMotion.Extensions { /// @@ -23,6 +27,31 @@ public static MotionHandle BindToUnityLogger(this Mo return builder.Bind(static x => Debug.unityLogger.Log(x)); } + /// + /// Create a motion data and bind it to Debug.unityLogger + /// + /// The type of value to animate + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Log format + /// Handle of the created motion data. + public static MotionHandle BindToUnityLogger(this MotionBuilder builder, string format) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + return builder.Bind(format, static (x, format) => + { +#if LITMOTION_SUPPORT_ZSTRING + var str = ZString.Format(format, x); +#else + var str = string.Format(format, x); +#endif + Debug.unityLogger.Log(str); + }); + } + /// /// Create a motion data and bind it to UnityEngine.ILogger /// @@ -39,5 +68,32 @@ public static MotionHandle BindToUnityLogger(this Mo Error.IsNull(logger); return builder.Bind(logger, static (x, logger) => logger.Log(x)); } + + /// + /// Create a motion data and bind it to UnityEngine.ILogger + /// + /// The type of value to animate + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Logger + /// Log format + /// Handle of the created motion data. + public static MotionHandle BindToUnityLogger(this MotionBuilder builder, ILogger logger, string format) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(logger); + return builder.Bind(logger, format, static (x, logger, format) => + { +#if LITMOTION_SUPPORT_ZSTRING + var str = ZString.Format(format, x); +#else + var str = string.Format(format, x); +#endif + logger.Log(str); + }); + } } } \ No newline at end of file From 53353ac35cc9a9b4dca56952f56ca6ad90b58bf3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 28 Nov 2024 22:32:49 +0900 Subject: [PATCH 061/224] Fix: misaligned pointer --- .../Assets/LitMotion/Runtime/Internal/MotionStorage.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 777d34b5..02f928d5 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -361,7 +361,7 @@ public unsafe void SetTime(MotionHandle handle, double time) var version = slot.Version; if (version <= 0 || version != handle.Version) Error.MotionNotExists(); - MotionHelper.SetTime(dataPtr + denseIndex, time, out var result); + MotionHelper.SetTime(dataPtr, time, out var result); try { From c013906edaa03ce1854a6cfe5bbc2f6d66e370fd Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 28 Nov 2024 22:33:53 +0900 Subject: [PATCH 062/224] Change: call OnComplete even if completed by the Time property --- .../Runtime/Internal/MotionStorage.cs | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 02f928d5..dc45cf8d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -363,13 +363,53 @@ public unsafe void SetTime(MotionHandle handle, double time) MotionHelper.SetTime(dataPtr, time, out var result); - try + var status = dataPtr->Core.Status; + ref var managedData = ref managedDataArray[denseIndex]; + + if (status == MotionStatus.Playing || (status == MotionStatus.Delayed && !managedData.SkipValuesDuringDelay)) { - managedDataArray[denseIndex].UpdateUnsafe(result); + try + { + managedData.UpdateUnsafe(result); + } + catch (Exception ex) + { + MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + if (managedData.CancelOnError) + { + dataPtr->Core.Status = MotionStatus.Canceled; + managedData.OnCancelAction?.Invoke(); + } + } } - catch (Exception ex) + else if (status == MotionStatus.Completed) { - MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + try + { + managedData.UpdateUnsafe(result); + } + catch (Exception ex) + { + MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + if (managedData.CancelOnError) + { + dataPtr->Core.Status = MotionStatus.Canceled; + managedData.OnCancelAction?.Invoke(); + return; + } + } + + if (dataPtr->Core.WasStatusChanged) + { + try + { + managedData.OnCompleteAction?.Invoke(); + } + catch (Exception ex) + { + MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + } + } } } } From 881fa53def5055ea3db2b54b185fcb20576f7e57 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 28 Nov 2024 22:37:24 +0900 Subject: [PATCH 063/224] Change: allow negative time --- src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs | 5 ----- .../Assets/LitMotion/Runtime/Internal/MotionHelper.cs | 6 +----- src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs | 1 - 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs index 8796f862..2a33efa5 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs @@ -26,11 +26,6 @@ public static void ArgumentNull(string message) throw new ArgumentNullException(message); } - public static void TimeMustBeZeroOrGreater() - { - throw new ArgumentOutOfRangeException("Time must be 0 or greater."); - } - public static void MotionNotExists() { throw new InvalidOperationException("Motion has been destroyed or no longer exists."); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs index f647f0f6..640bf270 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -124,15 +124,11 @@ public static void SetTime(MotionDataDelayType == DelayType.FirstLoop - ? corePtr->Delay + corePtr->Duration * corePtr->Loops - : (corePtr->Delay + corePtr->Duration) * corePtr->Loops; - if (isCompleted) { corePtr->Status = MotionStatus.Completed; } - else if (isDelayed) + else if (isDelayed || corePtr->Time < 0) { corePtr->Status = MotionStatus.Delayed; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index c72af711..7f5afe5b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -33,7 +33,6 @@ public readonly double Time } set { - if (value < 0f) Error.TimeMustBeZeroOrGreater(); MotionManager.SetTime(this, value); } } From 519bc98b830d9e5ba95793b461679dde21e873e9 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 28 Nov 2024 23:23:05 +0900 Subject: [PATCH 064/224] Refactoring --- .../Runtime/Internal/MotionHelper.cs | 25 +++++++++---------- .../Runtime/Internal/MotionStorage.cs | 2 +- .../LitMotion/Runtime/MotionUpdateJob.cs | 4 +-- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs index 640bf270..e9b6a13e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -8,7 +8,7 @@ namespace LitMotion internal unsafe static class MotionHelper { [BurstCompile] - public static void SetTime(MotionData* ptr, double time, out TValue result) + public static void Update(MotionData* ptr, double time, out TValue result) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter @@ -44,17 +44,13 @@ public static void SetTime(MotionDataLoops < 0 - ? math.max(0, completedLoops) - : math.clamp(completedLoops, 0, corePtr->Loops); + clampedCompletedLoops = GetClampedCompletedLoops(corePtr, completedLoops); isDelayed = timeSinceStart < 0; } else { completedLoops = (int)math.floor(time / corePtr->Delay); - clampedCompletedLoops = corePtr->Loops < 0 - ? math.max(0, completedLoops) - : math.clamp(completedLoops, 0, corePtr->Loops); + clampedCompletedLoops = GetClampedCompletedLoops(corePtr, completedLoops); isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; isDelayed = !isCompleted; t = isCompleted ? 1f : 0f; @@ -66,9 +62,7 @@ public static void SetTime(MotionDataDelay; completedLoops = (int)math.floor(timeSinceStart / corePtr->Duration); - clampedCompletedLoops = corePtr->Loops < 0 - ? math.max(0, completedLoops) - : math.clamp(completedLoops, 0, corePtr->Loops); + clampedCompletedLoops = GetClampedCompletedLoops(corePtr, completedLoops); isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; isDelayed = timeSinceStart < 0f; @@ -86,9 +80,7 @@ public static void SetTime(MotionDataDuration + corePtr->Delay) - corePtr->Delay; completedLoops = (int)math.floor(time / (corePtr->Duration + corePtr->Delay)); - clampedCompletedLoops = corePtr->Loops < 0 - ? math.max(0, completedLoops) - : math.clamp(completedLoops, 0, corePtr->Loops); + clampedCompletedLoops = GetClampedCompletedLoops(corePtr, completedLoops); isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; isDelayed = currentLoopTime < 0; @@ -147,6 +139,13 @@ public static void SetTime(MotionDataStartValue, ref ptr->EndValue, ref ptr->Options, context); } + static int GetClampedCompletedLoops(MotionDataCore* corePtr, int completedLoops) + { + return corePtr->Loops < 0 + ? math.max(0, completedLoops) + : math.clamp(completedLoops, 0, corePtr->Loops); + } + static float GetEasedValue(MotionDataCore* data, float value) { return data->Ease switch diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index dc45cf8d..456c7a3a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -361,7 +361,7 @@ public unsafe void SetTime(MotionHandle handle, double time) var version = slot.Version; if (version <= 0 || version != handle.Version) Error.MotionNotExists(); - MotionHelper.SetTime(dataPtr, time, out var result); + MotionHelper.Update(dataPtr, time, out var result); var status = dataPtr->Core.Status; ref var managedData = ref managedDataArray[denseIndex]; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs index 5da497a0..4bece48e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs @@ -32,7 +32,7 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) var ptr = DataPtr + index; var corePtr = (MotionDataCore*)ptr; - if (Hint.Likely(corePtr->Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing) || + if (Hint.Likely(corePtr->Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing) || Hint.Unlikely(corePtr->IsPreserved && corePtr->Status is MotionStatus.Completed)) { var deltaTime = corePtr->TimeKind switch @@ -45,7 +45,7 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) var time = corePtr->Time + deltaTime * corePtr->PlaybackSpeed; - MotionHelper.SetTime(ptr, time, out var result); + MotionHelper.Update(ptr, time, out var result); Output[index] = result; } From 43d44f182b5a9470df639c85522d0d219036a80e Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 28 Nov 2024 23:58:59 +0900 Subject: [PATCH 065/224] Add: MotionHelper.GetTotalDuration --- .../Assets/LitMotion/Runtime/Internal/MotionHelper.cs | 8 ++++++++ src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs | 5 +---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs index e9b6a13e..a46c1404 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -139,6 +139,14 @@ public static void Update(MotionDataStartValue, ref ptr->EndValue, ref ptr->Options, context); } + [BurstCompile] + public static double GetTotalDuration(ref MotionDataCore dataRef) + { + if (dataRef.Loops < 0) return double.PositiveInfinity; + return dataRef.Delay * (dataRef.DelayType == DelayType.EveryLoop ? dataRef.Loops : 1) + + dataRef.Duration * dataRef.Loops; + } + static int GetClampedCompletedLoops(MotionDataCore* corePtr, int completedLoops) { return corePtr->Loops < 0 diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index 7f5afe5b..8baa8814 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -44,10 +44,7 @@ public readonly double Duration { get { - ref var dataRef = ref MotionManager.GetDataRef(this); - if (dataRef.Loops < 0) return double.PositiveInfinity; - return dataRef.Delay * (dataRef.DelayType == DelayType.EveryLoop ? dataRef.Loops : 1) + - dataRef.Duration * dataRef.Loops; + return MotionHelper.GetTotalDuration(ref MotionManager.GetDataRef(this)); } } From bcf9c464ddcf63503d1b0a4460fc140c0e33e07a Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 29 Nov 2024 00:20:42 +0900 Subject: [PATCH 066/224] Fix: burst error --- .../Assets/LitMotion/Runtime/Internal/MotionHelper.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs index a46c1404..ea8192ad 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -139,7 +139,6 @@ public static void Update(MotionDataStartValue, ref ptr->EndValue, ref ptr->Options, context); } - [BurstCompile] public static double GetTotalDuration(ref MotionDataCore dataRef) { if (dataRef.Loops < 0) return double.PositiveInfinity; @@ -147,6 +146,14 @@ public static double GetTotalDuration(ref MotionDataCore dataRef) dataRef.Duration * dataRef.Loops; } + [BurstCompile] + public static double GetTotalDuration(MotionDataCore* dataPtr) + { + if (dataPtr->Loops < 0) return double.PositiveInfinity; + return dataPtr->Delay * (dataPtr->DelayType == DelayType.EveryLoop ? dataPtr->Loops : 1) + + dataPtr->Duration * dataPtr->Loops; + } + static int GetClampedCompletedLoops(MotionDataCore* corePtr, int completedLoops) { return corePtr->Loops < 0 From 0d8a5fc9b728f79af60e9e99461c93eca2aabea3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 1 Dec 2024 21:09:05 +0900 Subject: [PATCH 067/224] Add: prototype implementation --- .../Assets/LitMotion/Runtime/Sequences.meta | 8 + .../LitMotion/Runtime/Sequences/LSequence.cs | 10 + .../Runtime/Sequences/LSequence.cs.meta | 2 + .../Sequences/MotionSequenceBuilder.cs | 81 +++ .../Sequences/MotionSequenceBuilder.cs.meta | 2 + .../Runtime/Sequences/MotionSequenceSource.cs | 43 ++ .../Sequences/MotionSequenceSource.cs.meta | 2 + src/LitMotion/Assets/Sandbox/Sandbox.cs | 20 +- src/LitMotion/Assets/Sandbox/Sandbox.unity | 560 ++++++++++++++++++ 9 files changed, 723 insertions(+), 5 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences.meta create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences.meta b/src/LitMotion/Assets/LitMotion/Runtime/Sequences.meta new file mode 100644 index 00000000..f804d001 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ba8bf58526f94c4ab397f98ed61fdce +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs new file mode 100644 index 00000000..7f782781 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs @@ -0,0 +1,10 @@ +namespace LitMotion.Sequences +{ + public static class LSequence + { + public static MotionSequenceBuilder Create() + { + return new MotionSequenceBuilder(); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs.meta new file mode 100644 index 00000000..675619f9 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c5490814ee06b4422bef0bb5dac59977 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs new file mode 100644 index 00000000..a05c973b --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -0,0 +1,81 @@ +using System; +using System.Buffers; +using System.Runtime.CompilerServices; + +namespace LitMotion.Sequences +{ + public struct MotionSequenceBuilder : IDisposable + { + MotionSequenceItem[] buffer; + int count; + + double tail; + double duration; + + public MotionSequenceBuilder Append(MotionHandle handle) + { + handle.Preserve(); + handle.PlaybackSpeed = 0; + + var motionDuration = handle.Duration; + if (double.IsInfinity(motionDuration)) + { + throw new ArgumentException(); // TODO: + } + + AddItem(new MotionSequenceItem(tail, handle)); + tail += motionDuration; + duration += motionDuration; + return this; + } + + public MotionSequenceBuilder Insert(double position, MotionHandle handle) + { + handle.Preserve(); + handle.PlaybackSpeed = 0; + + var motionDuration = handle.Duration; + if (double.IsInfinity(motionDuration)) + { + throw new ArgumentException(); // TODO: + } + + AddItem(new MotionSequenceItem(position, handle)); + duration = Math.Max(duration, position + motionDuration); + return this; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + void AddItem(in MotionSequenceItem item) + { + if (buffer == null) + { + buffer = ArrayPool.Shared.Rent(32); + } + else if (buffer.Length == count) + { + var newBuffer = ArrayPool.Shared.Rent(count * 2); + ArrayPool.Shared.Return(buffer); + buffer = newBuffer; + } + + buffer[count] = item; + count++; + } + + public MotionHandle Run() + { + var sequence = new MotionSequenceSource(buffer.AsSpan(0, count).ToArray(), duration); + Dispose(); + return LMotion.Create(0.0, sequence.Duration, (float)sequence.Duration) + .Bind(sequence, (x, sequence) => sequence.Time = x); + } + + public void Dispose() + { + ArrayPool.Shared.Return(buffer); + buffer = null; + tail = 0; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs.meta new file mode 100644 index 00000000..f59d12e7 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f73237f0ff59a4a9899c7fa2d2791c98 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs new file mode 100644 index 00000000..30a16041 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -0,0 +1,43 @@ +namespace LitMotion.Sequences +{ + internal struct MotionSequenceItem + { + public MotionSequenceItem(double position, MotionHandle handle) + { + Position = position; + Handle = handle; + } + + public double Position; + public MotionHandle Handle; + } + + internal sealed class MotionSequenceSource + { + internal MotionSequenceSource(MotionSequenceItem[] items, double duration) + { + this.items = items; + this.duration = duration; + } + + readonly MotionSequenceItem[] items; + double duration; + double time; + + public double Time + { + get => time; + set + { + time = value; + + foreach (var item in items) + { + item.Handle.Time = time; + } + } + } + + public double Duration => duration; + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs.meta new file mode 100644 index 00000000..ea444d30 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b9f408f44ddbb405ab0a1a5542af5f7e \ No newline at end of file diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.cs b/src/LitMotion/Assets/Sandbox/Sandbox.cs index 7ea5ec1e..076a34d4 100644 --- a/src/LitMotion/Assets/Sandbox/Sandbox.cs +++ b/src/LitMotion/Assets/Sandbox/Sandbox.cs @@ -1,17 +1,27 @@ using LitMotion; using LitMotion.Extensions; +using LitMotion.Sequences; using UnityEngine; +using UnityEngine.UI; public class Sandbox : MonoBehaviour { [SerializeField] Transform target; + [SerializeField] Slider slider; + + MotionHandle handle; void Start() { - LMotion.Create(0f, 5f, 2f) - .WithEase(Ease.OutQuint) - .WithLoops(-1, LoopType.Yoyo) - .BindToPositionX(target) - .AddTo(target); + handle = LSequence.Create() + .Append(LMotion.Create(-5f, 5f, 0.5f).BindToPositionX(target)) + .Append(LMotion.Create(0f, 5f, 0.5f).BindToPositionY(target)) + .Append(LMotion.Create(-2f, 2f, 1f).BindToPositionZ(target)) + .Run(); + } + + void Update() + { + handle.Time = slider.value; } } diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.unity b/src/LitMotion/Assets/Sandbox/Sandbox.unity index 67d020f5..85f1763b 100644 --- a/src/LitMotion/Assets/Sandbox/Sandbox.unity +++ b/src/LitMotion/Assets/Sandbox/Sandbox.unity @@ -119,6 +119,302 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &183474487 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 183474488} + - component: {fileID: 183474489} + m_Layer: 5 + m_Name: Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &183474488 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 183474487} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2095547403} + - {fileID: 2134075221} + - {fileID: 316441678} + m_Father: {fileID: 284284924} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 60} + m_SizeDelta: {x: 200, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &183474489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 183474487} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2060399381} + m_FillRect: {fileID: 1633886872} + m_HandleRect: {fileID: 2060399380} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 1 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &240099433 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 240099436} + - component: {fileID: 240099435} + - component: {fileID: 240099434} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &240099434 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240099433} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &240099435 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240099433} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &240099436 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240099433} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &284284920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 284284924} + - component: {fileID: 284284923} + - component: {fileID: 284284922} + - component: {fileID: 284284921} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &284284921 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284284920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &284284922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284284920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &284284923 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284284920} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &284284924 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284284920} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 183474488} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &316441677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 316441678} + m_Layer: 5 + m_Name: Handle Slide Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &316441678 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 316441677} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2060399380} + m_Father: {fileID: 183474488} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &433031335 GameObject: m_ObjectHideFlags: 0 @@ -257,6 +553,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: target: {fileID: 433031339} + slider: {fileID: 183474489} --- !u!4 &928280436 Transform: m_ObjectHideFlags: 0 @@ -272,6 +569,81 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1633886871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1633886872} + - component: {fileID: 1633886874} + - component: {fileID: 1633886873} + m_Layer: 5 + m_Name: Fill + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1633886872 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1633886871} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2134075221} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 10, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1633886873 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1633886871} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1633886874 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1633886871} + m_CullTransparentMesh: 1 --- !u!1 &1873800725 GameObject: m_ObjectHideFlags: 0 @@ -461,6 +833,192 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2060399379 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2060399380} + - component: {fileID: 2060399382} + - component: {fileID: 2060399381} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2060399380 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060399379} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 316441678} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2060399381 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060399379} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2060399382 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2060399379} + m_CullTransparentMesh: 1 +--- !u!1 &2095547402 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2095547403} + - component: {fileID: 2095547405} + - component: {fileID: 2095547404} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2095547403 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095547402} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 183474488} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2095547404 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095547402} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2095547405 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2095547402} + m_CullTransparentMesh: 1 +--- !u!1 &2134075220 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2134075221} + m_Layer: 5 + m_Name: Fill Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2134075221 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2134075220} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1633886872} + m_Father: {fileID: 183474488} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.25} + m_AnchorMax: {x: 1, y: 0.75} + m_AnchoredPosition: {x: -5, y: 0} + m_SizeDelta: {x: -20, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -469,3 +1027,5 @@ SceneRoots: - {fileID: 1873800727} - {fileID: 928280436} - {fileID: 433031339} + - {fileID: 284284924} + - {fileID: 240099436} From bf5858371862b9952e3de0304c78d24434b304a7 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 1 Dec 2024 21:58:22 +0900 Subject: [PATCH 068/224] Improve: pooling MotionSequenceSource --- .../Runtime/MotionHandleExtensions.cs | 2 +- .../Sequences/MotionSequenceBuilder.cs | 11 +++- .../Runtime/Sequences/MotionSequenceSource.cs | 55 +++++++++++++++++-- 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 8c63a821..648de841 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -28,7 +28,7 @@ public static void Preserve(this MotionHandle handle) { MotionManager.GetDataRef(handle).IsPreserved = true; } - + /// /// Complete motion. /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index a05c973b..8fc37ebe 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -65,10 +65,15 @@ void AddItem(in MotionSequenceItem item) public MotionHandle Run() { - var sequence = new MotionSequenceSource(buffer.AsSpan(0, count).ToArray(), duration); + var source = MotionSequenceSource.Rent(); + var handle = LMotion.Create(0.0, duration, (float)duration) + .WithOnComplete(source.OnCompleteDelegate) + .WithOnCancel(source.OnCancelDelegate) + .Bind(source, (x, source) => source.Time = x); + + source.Initialize(handle, buffer.AsSpan(0, count), duration); Dispose(); - return LMotion.Create(0.0, sequence.Duration, (float)sequence.Duration) - .Bind(sequence, (x, sequence) => sequence.Time = x); + return handle; } public void Dispose() diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index 30a16041..e52f56c9 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -1,3 +1,7 @@ +using System; +using System.Buffers; +using LitMotion.Collections; + namespace LitMotion.Sequences { internal struct MotionSequenceItem @@ -12,18 +16,59 @@ public MotionSequenceItem(double position, MotionHandle handle) public MotionHandle Handle; } - internal sealed class MotionSequenceSource + internal sealed class MotionSequenceSource : ILinkedPoolNode { - internal MotionSequenceSource(MotionSequenceItem[] items, double duration) + static LinkedPool pool; + + public static MotionSequenceSource Rent() + { + if (!pool.TryPop(out var result)) result = new(); + return result; + } + + public static void Return(MotionSequenceSource source) { - this.items = items; + ArrayPool.Shared.Return(source.itemsBuffer); + source.itemsBuffer = null; + pool.TryPush(source); + } + + public void Initialize(MotionHandle handle, ReadOnlySpan items, double duration) + { + this.handle = handle; + this.itemCount = items.Length; + this.itemsBuffer = ArrayPool.Shared.Rent(itemCount); + items.CopyTo(this.itemsBuffer); this.duration = duration; } - readonly MotionSequenceItem[] items; + MotionSequenceSource() + { + onCompleteDelegate = () => + { + if (!MotionManager.GetDataRef(handle).IsPreserved) + { + Return(this); + } + }; + onCancelDelegate = () => Return(this); + } + + readonly Action onCompleteDelegate; + readonly Action onCancelDelegate; + MotionSequenceSource next; + + MotionHandle handle; + MotionSequenceItem[] itemsBuffer; + int itemCount; double duration; double time; + public ref MotionSequenceSource NextNode => ref next; + + public Action OnCompleteDelegate => onCompleteDelegate; + public Action OnCancelDelegate => onCancelDelegate; + public double Time { get => time; @@ -31,7 +76,7 @@ public double Time { time = value; - foreach (var item in items) + foreach (var item in itemsBuffer.AsSpan(0, itemCount)) { item.Handle.Time = time; } From 487a56da7d957d4bc5256ca2591952888a092f53 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 1 Dec 2024 22:38:04 +0900 Subject: [PATCH 069/224] Improve: pooling MotionSequenceBuilderSource --- .../LitMotion/Runtime/Sequences/LSequence.cs | 3 +- .../Sequences/MotionSequenceBuilder.cs | 103 +++++++++++++++--- 2 files changed, 89 insertions(+), 17 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs index 7f782781..436110df 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs @@ -4,7 +4,8 @@ public static class LSequence { public static MotionSequenceBuilder Create() { - return new MotionSequenceBuilder(); + var source = MotionSequenceBuilderSource.Rent(); + return new MotionSequenceBuilder(source); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index 8fc37ebe..fbeeb557 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -1,21 +1,51 @@ using System; using System.Buffers; using System.Runtime.CompilerServices; +using LitMotion.Collections; namespace LitMotion.Sequences { - public struct MotionSequenceBuilder : IDisposable + internal sealed class MotionSequenceBuilderSource : ILinkedPoolNode { + static LinkedPool pool; + + public static MotionSequenceBuilderSource Rent() + { + if (!pool.TryPop(out var result)) result = new(); + return result; + } + + public static void Return(MotionSequenceBuilderSource source) + { + if (source.buffer != null) + { + ArrayPool.Shared.Return(source.buffer); + } + + source.version++; + source.buffer = null; + source.tail = 0; + source.count = 0; + source.duration = 0; + + pool.TryPush(source); + } + + public ref MotionSequenceBuilderSource NextNode => ref next; + public ushort Version => version; + + MotionSequenceBuilderSource next; + ushort version; MotionSequenceItem[] buffer; int count; - double tail; double duration; - public MotionSequenceBuilder Append(MotionHandle handle) + public void Append(MotionHandle handle) { handle.Preserve(); handle.PlaybackSpeed = 0; + MotionManager.GetManagedDataRef(handle).SkipValuesDuringDelay = true; var motionDuration = handle.Duration; if (double.IsInfinity(motionDuration)) @@ -26,13 +56,13 @@ public MotionSequenceBuilder Append(MotionHandle handle) AddItem(new MotionSequenceItem(tail, handle)); tail += motionDuration; duration += motionDuration; - return this; } - public MotionSequenceBuilder Insert(double position, MotionHandle handle) + public void Insert(double position, MotionHandle handle) { handle.Preserve(); handle.PlaybackSpeed = 0; + MotionManager.GetManagedDataRef(handle).SkipValuesDuringDelay = true; var motionDuration = handle.Duration; if (double.IsInfinity(motionDuration)) @@ -42,7 +72,18 @@ public MotionSequenceBuilder Insert(double position, MotionHandle handle) AddItem(new MotionSequenceItem(position, handle)); duration = Math.Max(duration, position + motionDuration); - return this; + } + + public MotionHandle Run() + { + var source = MotionSequenceSource.Rent(); + var handle = LMotion.Create(0.0, duration, (float)duration) + .WithOnComplete(source.OnCompleteDelegate) + .WithOnCancel(source.OnCancelDelegate) + .Bind(source, (x, source) => source.Time = x); + + source.Initialize(handle, buffer.AsSpan(0, count), duration); + return handle; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -62,25 +103,55 @@ void AddItem(in MotionSequenceItem item) buffer[count] = item; count++; } + } - public MotionHandle Run() + public struct MotionSequenceBuilder : IDisposable + { + internal MotionSequenceBuilderSource source; + internal ushort version; + + internal MotionSequenceBuilder(MotionSequenceBuilderSource source) { - var source = MotionSequenceSource.Rent(); - var handle = LMotion.Create(0.0, duration, (float)duration) - .WithOnComplete(source.OnCompleteDelegate) - .WithOnCancel(source.OnCancelDelegate) - .Bind(source, (x, source) => source.Time = x); + this.source = source; + this.version = source.Version; + } - source.Initialize(handle, buffer.AsSpan(0, count), duration); + public MotionSequenceBuilder Append(MotionHandle handle) + { + CheckIsDisposed(); + source.Append(handle); + return this; + } + + public MotionSequenceBuilder Insert(double position, MotionHandle handle) + { + CheckIsDisposed(); + source.Insert(position, handle); + return this; + } + + public MotionHandle Run() + { + CheckIsDisposed(); + var handle = source.Run(); Dispose(); return handle; } public void Dispose() { - ArrayPool.Shared.Return(buffer); - buffer = null; - tail = 0; + CheckIsDisposed(); + MotionSequenceBuilderSource.Return(source); + source = null; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + readonly void CheckIsDisposed() + { + if (source == null || source.Version != version) + { + throw new InvalidOperationException("MotionSequenuceBuilder is either not initialized or has already run."); + } } } } \ No newline at end of file From ac518c7e9a79eb02a7933186a86b4178ec3a7d42 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 1 Dec 2024 22:38:15 +0900 Subject: [PATCH 070/224] Fix: sequence time --- .../Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index e52f56c9..28f35ad4 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -78,7 +78,7 @@ public double Time foreach (var item in itemsBuffer.AsSpan(0, itemCount)) { - item.Handle.Time = time; + item.Handle.Time = time - item.Position; } } } From 6a10ecb9756e3a861731ef292e2570f4e2722691 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 2 Dec 2024 00:21:52 +0900 Subject: [PATCH 071/224] Change: add sort --- .../LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs | 9 +++++++-- .../LitMotion/Runtime/Sequences/MotionSequenceSource.cs | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index fbeeb557..256be8d4 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -82,6 +82,7 @@ public MotionHandle Run() .WithOnCancel(source.OnCancelDelegate) .Bind(source, (x, source) => source.Time = x); + Array.Sort(buffer, 0, count); source.Initialize(handle, buffer.AsSpan(0, count), duration); return handle; } @@ -116,20 +117,23 @@ internal MotionSequenceBuilder(MotionSequenceBuilderSource source) this.version = source.Version; } - public MotionSequenceBuilder Append(MotionHandle handle) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly MotionSequenceBuilder Append(MotionHandle handle) { CheckIsDisposed(); source.Append(handle); return this; } - public MotionSequenceBuilder Insert(double position, MotionHandle handle) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly MotionSequenceBuilder Insert(float position, MotionHandle handle) { CheckIsDisposed(); source.Insert(position, handle); return this; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public MotionHandle Run() { CheckIsDisposed(); @@ -138,6 +142,7 @@ public MotionHandle Run() return handle; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Dispose() { CheckIsDisposed(); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index 28f35ad4..9a21562f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -4,7 +4,7 @@ namespace LitMotion.Sequences { - internal struct MotionSequenceItem + internal struct MotionSequenceItem : IComparable { public MotionSequenceItem(double position, MotionHandle handle) { @@ -14,6 +14,11 @@ public MotionSequenceItem(double position, MotionHandle handle) public double Position; public MotionHandle Handle; + + public int CompareTo(MotionSequenceItem other) + { + return Position.CompareTo(other.Position); + } } internal sealed class MotionSequenceSource : ILinkedPoolNode From 881a5f41b0721a40b0130a263aea233781401ba0 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 2 Dec 2024 00:56:29 +0900 Subject: [PATCH 072/224] Add: error message --- .../Runtime/Sequences/MotionSequenceBuilder.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index 256be8d4..b3e85200 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -48,10 +48,7 @@ public void Append(MotionHandle handle) MotionManager.GetManagedDataRef(handle).SkipValuesDuringDelay = true; var motionDuration = handle.Duration; - if (double.IsInfinity(motionDuration)) - { - throw new ArgumentException(); // TODO: - } + ThrowIfDurationIsInfinity(motionDuration); AddItem(new MotionSequenceItem(tail, handle)); tail += motionDuration; @@ -65,10 +62,7 @@ public void Insert(double position, MotionHandle handle) MotionManager.GetManagedDataRef(handle).SkipValuesDuringDelay = true; var motionDuration = handle.Duration; - if (double.IsInfinity(motionDuration)) - { - throw new ArgumentException(); // TODO: - } + ThrowIfDurationIsInfinity(motionDuration); AddItem(new MotionSequenceItem(position, handle)); duration = Math.Max(duration, position + motionDuration); @@ -104,6 +98,14 @@ void AddItem(in MotionSequenceItem item) buffer[count] = item; count++; } + + void ThrowIfDurationIsInfinity(double duration) + { + if (double.IsInfinity(duration)) + { + throw new ArgumentException("Cannot add an infinitely looping motion to a sequence."); + } + } } public struct MotionSequenceBuilder : IDisposable From bd953364ff579030aef768fb5e765d71812ffc4b Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 2 Dec 2024 22:18:37 +0900 Subject: [PATCH 073/224] Add: handle status check --- .../Sequences/MotionSequenceBuilder.cs | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index b3e85200..eff8987e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -43,13 +43,12 @@ public static void Return(MotionSequenceBuilderSource source) public void Append(MotionHandle handle) { + CheckHandle(handle, out var motionDuration); + handle.Preserve(); handle.PlaybackSpeed = 0; MotionManager.GetManagedDataRef(handle).SkipValuesDuringDelay = true; - var motionDuration = handle.Duration; - ThrowIfDurationIsInfinity(motionDuration); - AddItem(new MotionSequenceItem(tail, handle)); tail += motionDuration; duration += motionDuration; @@ -57,13 +56,12 @@ public void Append(MotionHandle handle) public void Insert(double position, MotionHandle handle) { + CheckHandle(handle, out var motionDuration); + handle.Preserve(); handle.PlaybackSpeed = 0; MotionManager.GetManagedDataRef(handle).SkipValuesDuringDelay = true; - var motionDuration = handle.Duration; - ThrowIfDurationIsInfinity(motionDuration); - AddItem(new MotionSequenceItem(position, handle)); duration = Math.Max(duration, position + motionDuration); } @@ -99,9 +97,16 @@ void AddItem(in MotionSequenceItem item) count++; } - void ThrowIfDurationIsInfinity(double duration) + void CheckHandle(MotionHandle handle, out double motionDuration) { - if (double.IsInfinity(duration)) + ref var data = ref MotionManager.GetDataRef(handle); + if (data.Status is not MotionStatus.Scheduled) + { + throw new ArgumentException("Cannot add a running motion to a sequence."); + } + + motionDuration = handle.Duration; + if (double.IsInfinity(motionDuration)) { throw new ArgumentException("Cannot add an infinitely looping motion to a sequence."); } From 197b5dfc04b5f1d0ddcaacc08bed3bdd64af84ed Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Tue, 3 Dec 2024 22:27:16 +0900 Subject: [PATCH 074/224] Add: invalidating handles added to a sequence --- .../LitMotion/Runtime/Internal/MotionData.cs | 1 + .../Runtime/Internal/MotionManager.cs | 7 +++++ .../Runtime/Internal/MotionStorage.cs | 29 ++++++++++++++++++- .../Runtime/Internal/UpdateRunner.cs | 3 ++ .../LitMotion/Runtime/MotionUpdateJob.cs | 2 ++ .../Sequences/MotionSequenceBuilder.cs | 29 ++----------------- 6 files changed, 43 insertions(+), 28 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index 8595f16b..f69e124c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -12,6 +12,7 @@ public struct MotionDataCore public float PlaybackSpeed; public bool IsPreserved; public bool WasStatusChanged; + public bool SkipUpdate; // parameters public float Duration; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs index 604888c0..f9e3d2ca 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs @@ -75,6 +75,13 @@ public static void SetTime(MotionHandle handle, double time) list[handle.StorageId].SetTime(handle, time); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void AddToSequence(ref MotionHandle handle, out double motionDuration) + { + CheckTypeId(handle); + list[handle.StorageId].AddToSequence(ref handle, out motionDuration); + } + // For MotionTracker public static (Type ValueType, Type OptionsType, Type AdapterType) GetMotionType(MotionHandle handle) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 456c7a3a..7bb317da 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -14,12 +14,12 @@ internal interface IMotionStorage void Cancel(MotionHandle handle); void Complete(MotionHandle handle); void SetTime(MotionHandle handle, double time); + void AddToSequence(ref MotionHandle handle, out double motionDuration); ref MotionDataCore GetDataRef(MotionHandle handle); ref ManagedMotionData GetManagedDataRef(MotionHandle handle); void Reset(); } - internal sealed class MotionStorage : IMotionStorage where TValue : unmanaged where TOptions : unmanaged, IMotionOptions @@ -414,6 +414,33 @@ public unsafe void SetTime(MotionHandle handle, double time) } } + public void AddToSequence(ref MotionHandle handle, out double motionDuration) + { + ref var slot = ref GetSlotWithVarify(handle); + ref var dataRef = ref unmanagedDataArray[slot.DenseIndex]; + + if (dataRef.Core.Status is not MotionStatus.Scheduled) + { + throw new ArgumentException("Cannot add a running motion to a sequence."); + } + + motionDuration = handle.Duration; + if (double.IsInfinity(motionDuration)) + { + throw new ArgumentException("Cannot add an infinitely looping motion to a sequence."); + } + + dataRef.Core.IsPreserved = true; + dataRef.Core.SkipUpdate = true; + + ref var managedDataRef = ref managedDataArray[slot.DenseIndex]; + managedDataRef.SkipValuesDuringDelay = true; + + // increment version + slot.Version++; + handle.Version++; + } + public ref ManagedMotionData GetManagedDataRef(MotionHandle handle) { ref var slot = ref GetSlotWithVarify(handle); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index 027922e2..9ebba925 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -63,6 +63,9 @@ public unsafe void Update(double time, double unscaledTime, double realtime) for (int i = 0; i < managedDataSpan.Length; i++) { var currentDataPtr = dataPtr + i; + + if (currentDataPtr->Core.SkipUpdate) continue; + var status = currentDataPtr->Core.Status; ref var managedData = ref managedDataSpan[i]; if (status == MotionStatus.Playing || (status == MotionStatus.Delayed && !managedData.SkipValuesDuringDelay)) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs index 4bece48e..bf5a66be 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs @@ -35,6 +35,8 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) if (Hint.Likely(corePtr->Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing) || Hint.Unlikely(corePtr->IsPreserved && corePtr->Status is MotionStatus.Completed)) { + if (Hint.Unlikely(corePtr->SkipUpdate)) return; + var deltaTime = corePtr->TimeKind switch { MotionTimeKind.Time => DeltaTime, diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index eff8987e..13e0f1f5 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -43,12 +43,7 @@ public static void Return(MotionSequenceBuilderSource source) public void Append(MotionHandle handle) { - CheckHandle(handle, out var motionDuration); - - handle.Preserve(); - handle.PlaybackSpeed = 0; - MotionManager.GetManagedDataRef(handle).SkipValuesDuringDelay = true; - + MotionManager.AddToSequence(ref handle, out var motionDuration); AddItem(new MotionSequenceItem(tail, handle)); tail += motionDuration; duration += motionDuration; @@ -56,12 +51,7 @@ public void Append(MotionHandle handle) public void Insert(double position, MotionHandle handle) { - CheckHandle(handle, out var motionDuration); - - handle.Preserve(); - handle.PlaybackSpeed = 0; - MotionManager.GetManagedDataRef(handle).SkipValuesDuringDelay = true; - + MotionManager.AddToSequence(ref handle, out var motionDuration); AddItem(new MotionSequenceItem(position, handle)); duration = Math.Max(duration, position + motionDuration); } @@ -96,21 +86,6 @@ void AddItem(in MotionSequenceItem item) buffer[count] = item; count++; } - - void CheckHandle(MotionHandle handle, out double motionDuration) - { - ref var data = ref MotionManager.GetDataRef(handle); - if (data.Status is not MotionStatus.Scheduled) - { - throw new ArgumentException("Cannot add a running motion to a sequence."); - } - - motionDuration = handle.Duration; - if (double.IsInfinity(motionDuration)) - { - throw new ArgumentException("Cannot add an infinitely looping motion to a sequence."); - } - } } public struct MotionSequenceBuilder : IDisposable From 140efd5430a9666da6ab608b0d53cdec3ef2e298 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 4 Dec 2024 09:18:55 +0900 Subject: [PATCH 075/224] Add: `AppendInterval()` and `Join()` --- .../Sequences/MotionSequenceBuilder.cs | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index 13e0f1f5..a72cf43b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -25,6 +25,7 @@ public static void Return(MotionSequenceBuilderSource source) source.version++; source.buffer = null; source.tail = 0; + source.lastTail = 0; source.count = 0; source.duration = 0; @@ -39,14 +40,21 @@ public static void Return(MotionSequenceBuilderSource source) MotionSequenceItem[] buffer; int count; double tail; + double lastTail; double duration; public void Append(MotionHandle handle) { MotionManager.AddToSequence(ref handle, out var motionDuration); AddItem(new MotionSequenceItem(tail, handle)); - tail += motionDuration; - duration += motionDuration; + AppendInterval(motionDuration); + } + + public void AppendInterval(double interval) + { + lastTail = tail; + tail += interval; + duration = Math.Max(duration, tail + interval); } public void Insert(double position, MotionHandle handle) @@ -56,6 +64,11 @@ public void Insert(double position, MotionHandle handle) duration = Math.Max(duration, position + motionDuration); } + public void Join(MotionHandle handle) + { + Insert(lastTail, handle); + } + public MotionHandle Run() { var source = MotionSequenceSource.Rent(); @@ -107,6 +120,14 @@ public readonly MotionSequenceBuilder Append(MotionHandle handle) return this; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly MotionSequenceBuilder AppendInterval(float interval) + { + CheckIsDisposed(); + source.AppendInterval(interval); + return this; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly MotionSequenceBuilder Insert(float position, MotionHandle handle) { @@ -115,6 +136,14 @@ public readonly MotionSequenceBuilder Insert(float position, MotionHandle handle return this; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly MotionSequenceBuilder Join(MotionHandle handle) + { + CheckIsDisposed(); + source.Join(handle); + return this; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public MotionHandle Run() { From 83077df208e1f0ea8c91c9ab50bcb7430c001e40 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 4 Dec 2024 09:29:38 +0900 Subject: [PATCH 076/224] Fix: error occurs when sequences are nested --- .../Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index 9a21562f..c854d19d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -51,7 +51,7 @@ public void Initialize(MotionHandle handle, ReadOnlySpan ite { onCompleteDelegate = () => { - if (!MotionManager.GetDataRef(handle).IsPreserved) + if (MotionManager.IsActive(handle) && !MotionManager.GetDataRef(handle).IsPreserved) { Return(this); } From 923253526d1f7c8531fe3060dddf39df896fb602 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 4 Dec 2024 09:31:16 +0900 Subject: [PATCH 077/224] Fix: sequence duration --- .../Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index a72cf43b..d2992f58 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -54,7 +54,7 @@ public void AppendInterval(double interval) { lastTail = tail; tail += interval; - duration = Math.Max(duration, tail + interval); + duration = Math.Max(duration, tail); } public void Insert(double position, MotionHandle handle) From 4e711a0deda972cc53fcb10cfcc9e59fffd52981 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 4 Dec 2024 09:33:56 +0900 Subject: [PATCH 078/224] Change: `Run()` -> `Schedule()` --- .../Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index d2992f58..9ed13e5f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -145,7 +145,7 @@ public readonly MotionSequenceBuilder Join(MotionHandle handle) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public MotionHandle Run() + public MotionHandle Schedule() { CheckIsDisposed(); var handle = source.Run(); From 86a29608a39297d6e26c0f32b4d7becf10c9bb46 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 4 Dec 2024 11:04:50 +0900 Subject: [PATCH 079/224] Fix: reset time --- .../Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index c854d19d..51389965 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -45,6 +45,7 @@ public void Initialize(MotionHandle handle, ReadOnlySpan ite this.itemsBuffer = ArrayPool.Shared.Rent(itemCount); items.CopyTo(this.itemsBuffer); this.duration = duration; + this.time = 0; } MotionSequenceSource() From 8c95592d6c993b377003d4681c7b9d1ebd1c59ab Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 4 Dec 2024 17:49:54 +0900 Subject: [PATCH 080/224] Fix: Bind is not handled properly when time is rewound --- .../Runtime/Internal/MotionStorage.cs | 4 ++-- .../Runtime/Sequences/MotionSequenceSource.cs | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 7bb317da..d2301034 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -433,8 +433,8 @@ public void AddToSequence(ref MotionHandle handle, out double motionDuration) dataRef.Core.IsPreserved = true; dataRef.Core.SkipUpdate = true; - ref var managedDataRef = ref managedDataArray[slot.DenseIndex]; - managedDataRef.SkipValuesDuringDelay = true; + // ref var managedDataRef = ref managedDataArray[slot.DenseIndex]; + // managedDataRef.SkipValuesDuringDelay = true; // increment version slot.Version++; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index 51389965..63f0131a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -38,12 +38,12 @@ public static void Return(MotionSequenceSource source) pool.TryPush(source); } - public void Initialize(MotionHandle handle, ReadOnlySpan items, double duration) + public void Initialize(MotionHandle handle, ReadOnlySpan sortedItems, double duration) { this.handle = handle; - this.itemCount = items.Length; + this.itemCount = sortedItems.Length; this.itemsBuffer = ArrayPool.Shared.Rent(itemCount); - items.CopyTo(this.itemsBuffer); + sortedItems.CopyTo(this.itemsBuffer); this.duration = duration; this.time = 0; } @@ -82,7 +82,18 @@ public double Time { time = value; - foreach (var item in itemsBuffer.AsSpan(0, itemCount)) + var span = itemsBuffer.AsSpan(0, itemCount); + + var index = span.Length - 1; + while (index >= 0) + { + var item = span[index]; + if (item.Position < time) break; + item.Handle.Time = time - item.Position; + index--; + } + + foreach (var item in span[..(index + 1)]) { item.Handle.Time = time - item.Position; } From ba7d44b967280659ef35b3605d275ad662a55777 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 4 Dec 2024 18:35:04 +0900 Subject: [PATCH 081/224] Optimize: avoid copy buffer --- .../Runtime/Sequences/MotionSequenceBuilder.cs | 4 ++-- .../Runtime/Sequences/MotionSequenceSource.cs | 17 +++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index 9ed13e5f..fe9df927 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -77,8 +77,8 @@ public MotionHandle Run() .WithOnCancel(source.OnCancelDelegate) .Bind(source, (x, source) => source.Time = x); - Array.Sort(buffer, 0, count); - source.Initialize(handle, buffer.AsSpan(0, count), duration); + source.Initialize(handle, buffer, count, duration); + buffer = null; return handle; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index 63f0131a..ff05aa91 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -33,19 +33,20 @@ public static MotionSequenceSource Rent() public static void Return(MotionSequenceSource source) { - ArrayPool.Shared.Return(source.itemsBuffer); - source.itemsBuffer = null; + ArrayPool.Shared.Return(source.itemBuffer); + source.itemBuffer = null; pool.TryPush(source); } - public void Initialize(MotionHandle handle, ReadOnlySpan sortedItems, double duration) + public void Initialize(MotionHandle handle, MotionSequenceItem[] itemBuffer, int itemCount, double duration) { this.handle = handle; - this.itemCount = sortedItems.Length; - this.itemsBuffer = ArrayPool.Shared.Rent(itemCount); - sortedItems.CopyTo(this.itemsBuffer); + this.itemCount = itemCount; + this.itemBuffer = itemBuffer; this.duration = duration; this.time = 0; + + Array.Sort(itemBuffer, 0, itemCount); } MotionSequenceSource() @@ -65,7 +66,7 @@ public void Initialize(MotionHandle handle, ReadOnlySpan sor MotionSequenceSource next; MotionHandle handle; - MotionSequenceItem[] itemsBuffer; + MotionSequenceItem[] itemBuffer; int itemCount; double duration; double time; @@ -82,7 +83,7 @@ public double Time { time = value; - var span = itemsBuffer.AsSpan(0, itemCount); + var span = itemBuffer.AsSpan(0, itemCount); var index = span.Length - 1; while (index >= 0) From d58e4a3ab27719c891b2a7fcd5c4f1266a990ee6 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 4 Dec 2024 18:35:10 +0900 Subject: [PATCH 082/224] Add: tests --- .../LitMotion/Tests/Runtime/SequenceTest.cs | 141 ++++++++++++++++++ .../Tests/Runtime/SequenceTest.cs.meta | 2 + 2 files changed, 143 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs new file mode 100644 index 00000000..d6e5d8e8 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs @@ -0,0 +1,141 @@ +using System; +using System.Collections; +using LitMotion.Sequences; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +namespace LitMotion.Tests.Runtime +{ + public class SequenceTest + { + [UnityTest] + public IEnumerator Test_Append() + { + var x = 0f; + var y = 0f; + + LSequence.Create() + .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => x = v)) + .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => y = v)) + .Schedule(); + + yield return new WaitForSeconds(0.21f); + Assert.That(x, Is.EqualTo(1f)); + yield return new WaitForSeconds(0.21f); + Assert.That(y, Is.EqualTo(1f)); + } + + [UnityTest] + public IEnumerator Test_Join() + { + var x = 0f; + var y = 0f; + + LSequence.Create() + .Join(LMotion.Create(0f, 1f, 0.2f).Bind(v => x = v)) + .Join(LMotion.Create(0f, 1f, 0.2f).Bind(v => y = v)) + .Schedule(); + + yield return new WaitForSeconds(0.21f); + Assert.That(x, Is.EqualTo(1f)); + Assert.That(y, Is.EqualTo(1f)); + } + + [UnityTest] + public IEnumerator Test_Insert() + { + var x = 0f; + var y = 0f; + + LSequence.Create() + .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => x = v)) + .Insert(0.1f, LMotion.Create(0f, 1f, 0.2f).Bind(v => y = v)) + .Schedule(); + + yield return new WaitForSeconds(0.21f); + Assert.That(x, Is.EqualTo(1f)); + yield return new WaitForSeconds(0.11f); + Assert.That(y, Is.EqualTo(1f)); + } + + [UnityTest] + public IEnumerator Test_AppendInterval() + { + var x = 0f; + + LSequence.Create() + .AppendInterval(0.2f) + .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => x = v)) + .Schedule(); + + yield return new WaitForSeconds(0.19f); + Assert.That(x, Is.EqualTo(0f)); + yield return new WaitForSeconds(0.22f); + Assert.That(x, Is.EqualTo(1f)); + } + + [UnityTest] + public IEnumerator Test_Nested_Sequence() + { + var x = 0f; + var y = 0f; + + var sequence1 = LSequence.Create() + .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => x = v)) + .Append(LMotion.Create(1f, 0f, 0.2f).Bind(v => x = v)) + .Schedule(); + + var sequence2 = LSequence.Create() + .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => y = v)) + .Append(LMotion.Create(1f, 0f, 0.2f).Bind(v => y = v)) + .Schedule(); + + var handle = LSequence.Create() + .Append(sequence1) + .Append(sequence2) + .Schedule(); + + yield return new WaitForSeconds(0.2f); + Assert.That(x, Is.GreaterThan(0.9f)); + Assert.That(y, Is.EqualTo(0f)); + yield return new WaitForSeconds(0.2f); + Assert.That(x, Is.EqualTo(0f)); + Assert.That(y, Is.LessThan(0.1f)); + yield return new WaitForSeconds(0.2f); + Assert.That(x, Is.EqualTo(0f)); + Assert.That(y, Is.GreaterThan(0.9f)); + yield return new WaitForSeconds(0.2f); + Assert.That(x, Is.EqualTo(0f)); + Assert.That(y, Is.EqualTo(0f)); + } + + [UnityTest] + public IEnumerator Test_Error_AppendRunningMotion() + { + var handle = LMotion.Create(0f, 1f, 10f).RunWithoutBinding(); + yield return null; + + Assert.Throws(() => + { + LSequence.Create() + .Append(handle) + .Schedule(); + }, "Cannot add a running motion to a sequence."); + } + + [Test] + public void Test_Error_UseMotionHandleInSequence() + { + var handle = LMotion.Create(0f, 1f, 10f).RunWithoutBinding(); + LSequence.Create() + .Append(handle) + .Schedule(); + + Assert.Throws(() => + { + handle.Complete(); + }); + } + } +} diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs.meta new file mode 100644 index 00000000..6c5cf995 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 55b26ed55231746e9887d4292aac2cee \ No newline at end of file From 01eb2d3d0b9200622ba71b34c530a0fa10cc4dc3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 4 Dec 2024 18:39:01 +0900 Subject: [PATCH 083/224] Refactoring --- .../LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index fe9df927..0252235e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -69,7 +69,7 @@ public void Join(MotionHandle handle) Insert(lastTail, handle); } - public MotionHandle Run() + public MotionHandle Schedule() { var source = MotionSequenceSource.Rent(); var handle = LMotion.Create(0.0, duration, (float)duration) @@ -148,7 +148,7 @@ public readonly MotionSequenceBuilder Join(MotionHandle handle) public MotionHandle Schedule() { CheckIsDisposed(); - var handle = source.Run(); + var handle = source.Schedule(); Dispose(); return handle; } From e55f0f890c03feadca91aca574ca185345dde26b Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 4 Dec 2024 19:48:46 +0900 Subject: [PATCH 084/224] Change: separate asmdef --- .../Assets/LitMotion/Runtime/AssemblyInfo.cs | 1 + .../Runtime/Sequences/LitMotion.Sequences.asmdef | 16 ++++++++++++++++ .../Sequences/LitMotion.Sequences.asmdef.meta | 7 +++++++ .../Tests/Runtime/LitMotion.Tests.Runtime.asmdef | 1 + 4 files changed, 25 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs b/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs index abca0c61..9b9ed104 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs @@ -1,5 +1,6 @@ using System.Runtime.CompilerServices; +[assembly: InternalsVisibleTo("LitMotion.Sequences")] [assembly: InternalsVisibleTo("LitMotion.Extensions")] [assembly: InternalsVisibleTo("LitMotion.Editor")] [assembly: InternalsVisibleTo("LitMotion.Tests.Runtime")] diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef new file mode 100644 index 00000000..776fe6a9 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef @@ -0,0 +1,16 @@ +{ + "name": "LitMotion.Sequences", + "rootNamespace": "", + "references": [ + "GUID:3b570a5146f9d4f0fa107ed4559471a3" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef.meta b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef.meta new file mode 100644 index 00000000..2466e912 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aa9cad64d4fae43d2a90e595aea6cc7f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef b/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef index bbe5783a..234c2141 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef @@ -7,6 +7,7 @@ "Unity.Burst", "Unity.Collections", "LitMotion", + "LitMotion.Sequences", "LitMotion.Extensions", "UniTask", "UniRx" From b043227a5cd39a9360a9fdf863a463646fca40c7 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 08:56:15 +0900 Subject: [PATCH 085/224] Fix: duplicate callbacks are registered for PlayerLoop --- .../Runtime/Internal/PlayerLoopHelper.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/PlayerLoopHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/PlayerLoopHelper.cs index 2467b731..2feea583 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/PlayerLoopHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/PlayerLoopHelper.cs @@ -59,14 +59,17 @@ static void Init() if (initialized) return; #endif - OnInitialization += static () => MotionDispatcher.Update(PlayerLoopTiming.Initialization); - OnEarlyUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.EarlyUpdate); - OnFixedUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.FixedUpdate); - OnPreUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.PreUpdate); - OnUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.Update); - OnPreLateUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.PreLateUpdate); - OnPostLateUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.PostLateUpdate); - OnTimeUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.TimeUpdate); + if (!initialized) + { + OnInitialization += static () => MotionDispatcher.Update(PlayerLoopTiming.Initialization); + OnEarlyUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.EarlyUpdate); + OnFixedUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.FixedUpdate); + OnPreUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.PreUpdate); + OnUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.Update); + OnPreLateUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.PreLateUpdate); + OnPostLateUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.PostLateUpdate); + OnTimeUpdate += static () => MotionDispatcher.Update(PlayerLoopTiming.TimeUpdate); + } var playerLoop = PlayerLoop.GetCurrentPlayerLoop(); Initialize(ref playerLoop); From 0095c20e5993e93c2fba2524b7da217a08a712ce Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 08:58:14 +0900 Subject: [PATCH 086/224] Fix: sandbox --- src/LitMotion/Assets/Sandbox/Sandbox.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.cs b/src/LitMotion/Assets/Sandbox/Sandbox.cs index 076a34d4..9c61f2db 100644 --- a/src/LitMotion/Assets/Sandbox/Sandbox.cs +++ b/src/LitMotion/Assets/Sandbox/Sandbox.cs @@ -17,7 +17,7 @@ void Start() .Append(LMotion.Create(-5f, 5f, 0.5f).BindToPositionX(target)) .Append(LMotion.Create(0f, 5f, 0.5f).BindToPositionY(target)) .Append(LMotion.Create(-2f, 2f, 1f).BindToPositionZ(target)) - .Run(); + .Schedule(); } void Update() From 0fcc6cb39b3a8494b1589b9cc7234075bb8a78dd Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 09:04:32 +0900 Subject: [PATCH 087/224] Add: return value of `MotionHandle.Preserve()` for method chaining --- .../Assets/LitMotion/Runtime/MotionHandleExtensions.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 648de841..64ccaadb 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -23,10 +23,16 @@ public static bool IsActive(this MotionHandle handle) return MotionManager.IsActive(handle); } + /// + /// Preserves the MotionHandle so that it is not destroyed until Cancel() is explicitly called. + /// + /// This motion handle + /// Returns itself for method chaining [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Preserve(this MotionHandle handle) + public static MotionHandle Preserve(this MotionHandle handle) { MotionManager.GetDataRef(handle).IsPreserved = true; + return handle; } /// From 24265e650bcf574419c4ffc1f40a105f5ffd15fa Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 09:36:06 +0900 Subject: [PATCH 088/224] Improve: MotionSettings and SerializableMotionSettings --- .../SerializableMotionSettingsDrawer.cs | 2 - .../LitMotion/Runtime/MotionSettings.cs | 113 +++++++++++++++--- .../Runtime/SerializableMotionSettings.cs | 92 ++++---------- 3 files changed, 125 insertions(+), 82 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs index ec6d40b2..8c76ece5 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs @@ -1,9 +1,7 @@ using System; using System.Collections.Generic; -using System.Reflection; using UnityEditor; using UnityEditor.UIElements; -using UnityEngine; using UnityEngine.UIElements; namespace LitMotion.Editor diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs index 292fc093..52023789 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs @@ -11,19 +11,104 @@ public record MotionSettings where TValue : unmanaged where TOptions : unmanaged, IMotionOptions { - public TValue StartValue { get; set; } - public TValue EndValue { get; set; } - public float Duration { get; set; } - public TOptions Options { get; set; } - public Ease Ease { get; set; } - public AnimationCurve CustomEaseCurve { get; set; } - public float Delay { get; set; } - public DelayType DelayType { get; set; } - public int Loops { get; set; } = 1; - public LoopType LoopType { get; set; } - public bool CancelOnError { get; set; } - public bool SkipValuesDuringDelay { get; set; } - public bool BindOnSchedule { get; set; } - public IMotionScheduler Scheduler { get; set; } + public TValue StartValue + { + get => startValue; + init => startValue = value; + } + + public TValue EndValue + { + get => endValue; + init => endValue = value; + } + + public float Duration + { + get => duration; + init => duration = value; + } + + public TOptions Options + { + get => options; + init => options = value; + } + + public Ease Ease + { + get => ease; + init => ease = value; + } + + public AnimationCurve CustomEaseCurve + { + get => customEaseCurve; + init => customEaseCurve = value; + } + + public float Delay + { + get => delay; + init => delay = value; + } + + public DelayType DelayType + { + get => delayType; + init => delayType = value; + } + + public int Loops + { + get => loops; + init => loops = value; + } + + public LoopType LoopType + { + get => loopType; + init => loopType = value; + } + + public bool CancelOnError + { + get => cancelOnError; + init => cancelOnError = value; + } + + public bool SkipValuesDuringDelay + { + get => skipValuesDuringDelay; + init => skipValuesDuringDelay = value; + } + + public bool BindOnSchedule + { + get => bindOnSchedule; + init => bindOnSchedule = value; + } + + public IMotionScheduler Scheduler + { + get => scheduler; + init => scheduler = value; + } + + [SerializeField] TValue startValue; + [SerializeField] TValue endValue; + [SerializeField] float duration; + [SerializeField] TOptions options; + [SerializeField] Ease ease; + [SerializeField] AnimationCurve customEaseCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); + [SerializeField] float delay; + [SerializeField] DelayType delayType; + [SerializeField] int loops = 1; + [SerializeField] LoopType loopType; + [SerializeField] bool cancelOnError; + [SerializeField] bool skipValuesDuringDelay; + [SerializeField] bool bindOnSchedule; + + internal IMotionScheduler scheduler; } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs index 1fcc7275..56977d91 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs @@ -41,60 +41,20 @@ enum SchedulerType : byte Manual, } - [SerializeField] TValue startValue; - [SerializeField] TValue endValue; - [SerializeField] float duration; - [SerializeField] TOptions options; - [SerializeField] Ease ease; - [SerializeField] AnimationCurve customEaseCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); - [SerializeField] float delay; - [SerializeField] DelayType delayType; - [SerializeField] int loops = 1; - [SerializeField] LoopType loopType; - [SerializeField] bool cancelOnError; - [SerializeField] bool skipValuesDuringDelay; - [SerializeField] bool bindOnSchedule; - [SerializeField] SchedulerType scheduler; + [SerializeField] SchedulerType schedulerType; #if UNITY_EDITOR - [SerializeField] bool motionSettings; [SerializeField] bool additionalSettings; #endif public void OnBeforeSerialize() { - startValue = StartValue; - endValue = EndValue; - duration = Duration; - options = Options; - ease = Ease; - customEaseCurve = CustomEaseCurve; - delay = Delay; - delayType = DelayType; - loops = Loops; - loopType = LoopType; - cancelOnError = CancelOnError; - skipValuesDuringDelay = SkipValuesDuringDelay; - bindOnSchedule = BindOnSchedule; SetScheduler(Scheduler); } public void OnAfterDeserialize() { - StartValue = startValue; - EndValue = endValue; - Duration = duration; - Options = options; - Ease = ease; - CustomEaseCurve = customEaseCurve; - Delay = delay; - DelayType = delayType; - Loops = loops; - LoopType = loopType; - CancelOnError = cancelOnError; - SkipValuesDuringDelay = skipValuesDuringDelay; - BindOnSchedule = bindOnSchedule; - Scheduler = scheduler switch + scheduler = schedulerType switch { SchedulerType.Initialization => MotionScheduler.Initialization, SchedulerType.InitializationIgnoreTimeScale => MotionScheduler.InitializationIgnoreTimeScale, @@ -125,30 +85,30 @@ public void OnAfterDeserialize() void SetScheduler(IMotionScheduler value) { - if (value == null) scheduler = SchedulerType.Default; - else if (value == MotionScheduler.Update) scheduler = SchedulerType.Update; - else if (value == MotionScheduler.UpdateIgnoreTimeScale) scheduler = SchedulerType.UpdateIgnoreTimeScale; - else if (value == MotionScheduler.UpdateRealtime) scheduler = SchedulerType.UpdateRealtime; - else if (value == MotionScheduler.FixedUpdate) scheduler = SchedulerType.FixedUpdate; - else if (value == MotionScheduler.Manual) scheduler = SchedulerType.Manual; - else if (value == MotionScheduler.Initialization) scheduler = SchedulerType.Initialization; - else if (value == MotionScheduler.InitializationIgnoreTimeScale) scheduler = SchedulerType.InitializationIgnoreTimeScale; - else if (value == MotionScheduler.InitializationRealtime) scheduler = SchedulerType.InitializationRealtime; - else if (value == MotionScheduler.EarlyUpdate) scheduler = SchedulerType.EarlyUpdate; - else if (value == MotionScheduler.EarlyUpdateIgnoreTimeScale) scheduler = SchedulerType.EarlyUpdateIgnoreTimeScale; - else if (value == MotionScheduler.EarlyUpdateRealtime) scheduler = SchedulerType.EarlyUpdateRealtime; - else if (value == MotionScheduler.PreUpdate) scheduler = SchedulerType.PreUpdate; - else if (value == MotionScheduler.PreUpdateIgnoreTimeScale) scheduler = SchedulerType.PreUpdateIgnoreTimeScale; - else if (value == MotionScheduler.PreUpdateRealtime) scheduler = SchedulerType.PreUpdateRealtime; - else if (value == MotionScheduler.PreLateUpdate) scheduler = SchedulerType.PreLateUpdate; - else if (value == MotionScheduler.PreLateUpdateIgnoreTimeScale) scheduler = SchedulerType.PreLateUpdateIgnoreTimeScale; - else if (value == MotionScheduler.PreLateUpdateRealtime) scheduler = SchedulerType.PreLateUpdateRealtime; - else if (value == MotionScheduler.PostLateUpdate) scheduler = SchedulerType.PostLateUpdate; - else if (value == MotionScheduler.PostLateUpdateIgnoreTimeScale) scheduler = SchedulerType.PostLateUpdateIgnoreTimeScale; - else if (value == MotionScheduler.PostLateUpdateRealtime) scheduler = SchedulerType.PostLateUpdateRealtime; - else if (value == MotionScheduler.TimeUpdate) scheduler = SchedulerType.TimeUpdate; - else if (value == MotionScheduler.TimeUpdateIgnoreTimeScale) scheduler = SchedulerType.TimeUpdateIgnoreTimeScale; - else if (value == MotionScheduler.TimeUpdateRealtime) scheduler = SchedulerType.TimeUpdateRealtime; + if (value == null) schedulerType = SchedulerType.Default; + else if (value == MotionScheduler.Update) schedulerType = SchedulerType.Update; + else if (value == MotionScheduler.UpdateIgnoreTimeScale) schedulerType = SchedulerType.UpdateIgnoreTimeScale; + else if (value == MotionScheduler.UpdateRealtime) schedulerType = SchedulerType.UpdateRealtime; + else if (value == MotionScheduler.FixedUpdate) schedulerType = SchedulerType.FixedUpdate; + else if (value == MotionScheduler.Manual) schedulerType = SchedulerType.Manual; + else if (value == MotionScheduler.Initialization) schedulerType = SchedulerType.Initialization; + else if (value == MotionScheduler.InitializationIgnoreTimeScale) schedulerType = SchedulerType.InitializationIgnoreTimeScale; + else if (value == MotionScheduler.InitializationRealtime) schedulerType = SchedulerType.InitializationRealtime; + else if (value == MotionScheduler.EarlyUpdate) schedulerType = SchedulerType.EarlyUpdate; + else if (value == MotionScheduler.EarlyUpdateIgnoreTimeScale) schedulerType = SchedulerType.EarlyUpdateIgnoreTimeScale; + else if (value == MotionScheduler.EarlyUpdateRealtime) schedulerType = SchedulerType.EarlyUpdateRealtime; + else if (value == MotionScheduler.PreUpdate) schedulerType = SchedulerType.PreUpdate; + else if (value == MotionScheduler.PreUpdateIgnoreTimeScale) schedulerType = SchedulerType.PreUpdateIgnoreTimeScale; + else if (value == MotionScheduler.PreUpdateRealtime) schedulerType = SchedulerType.PreUpdateRealtime; + else if (value == MotionScheduler.PreLateUpdate) schedulerType = SchedulerType.PreLateUpdate; + else if (value == MotionScheduler.PreLateUpdateIgnoreTimeScale) schedulerType = SchedulerType.PreLateUpdateIgnoreTimeScale; + else if (value == MotionScheduler.PreLateUpdateRealtime) schedulerType = SchedulerType.PreLateUpdateRealtime; + else if (value == MotionScheduler.PostLateUpdate) schedulerType = SchedulerType.PostLateUpdate; + else if (value == MotionScheduler.PostLateUpdateIgnoreTimeScale) schedulerType = SchedulerType.PostLateUpdateIgnoreTimeScale; + else if (value == MotionScheduler.PostLateUpdateRealtime) schedulerType = SchedulerType.PostLateUpdateRealtime; + else if (value == MotionScheduler.TimeUpdate) schedulerType = SchedulerType.TimeUpdate; + else if (value == MotionScheduler.TimeUpdateIgnoreTimeScale) schedulerType = SchedulerType.TimeUpdateIgnoreTimeScale; + else if (value == MotionScheduler.TimeUpdateRealtime) schedulerType = SchedulerType.TimeUpdateRealtime; // else throw new ArgumentOutOfRangeException("SerializableMotionSettings does not support custom scheduler"); } } From ece1226499d5c19ebe887103eb1ed3609fa17b6e Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 09:44:54 +0900 Subject: [PATCH 089/224] Add: test --- .../Tests/Runtime/MotionSettingsTest.cs | 32 +++++++++++++++++++ .../Tests/Runtime/MotionSettingsTest.cs.meta | 2 ++ 2 files changed, 34 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs new file mode 100644 index 00000000..b7b02b84 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs @@ -0,0 +1,32 @@ +using System.Collections; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.TestTools; + +namespace LitMotion.Tests.Runtime +{ + public class MotionSettingsTest + { + [UnityTest] + public IEnumerator Test_Create() + + { + var settings = new MotionSettings + { + StartValue = 0f, + EndValue = 1f, + Duration = 1f, + BindOnSchedule = true, + }; + + var x = -1f; + + LMotion.Create(settings) + .Bind(v => x = v); + + Assert.That(x, Is.EqualTo(0f)); + yield return new WaitForSeconds(settings.Duration); + Assert.That(x, Is.EqualTo(1f)); + } + } +} diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs.meta new file mode 100644 index 00000000..ab93b2dd --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 71700259476c64cd2847c8258f52d5e0 \ No newline at end of file From eba4862a8f2fe74c63a699e1cc495614cb05a877 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 11:42:53 +0900 Subject: [PATCH 090/224] Change: rename BindToCanvasGroupAlpha -> BindToAlpha --- .../Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs index 2d4247be..db5a6337 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/uGUI/LitMotionUGUIExtensions.cs @@ -143,7 +143,7 @@ public static MotionHandle BindToFillAmount(this MotionBuild /// This builder /// /// Handle of the created motion data. - public static MotionHandle BindToCanvasGroupAlpha(this MotionBuilder builder, CanvasGroup canvasGroup) + public static MotionHandle BindToAlpha(this MotionBuilder builder, CanvasGroup canvasGroup) where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { From d07dbdd461349a8a3b6bc58b55e81f8a7602949c Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 11:54:27 +0900 Subject: [PATCH 091/224] Add: camera extensions --- .../General/LitMotionCameraExtensions.cs | 162 ++++++++++++++++++ .../General/LitMotionCameraExtensions.cs.meta | 2 + 2 files changed, 164 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionCameraExtensions.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionCameraExtensions.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionCameraExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionCameraExtensions.cs new file mode 100644 index 00000000..d0b93604 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionCameraExtensions.cs @@ -0,0 +1,162 @@ +using UnityEngine; + +namespace LitMotion.Extensions +{ + /// + /// Provides binding extension methods for Camera + /// + public static class LitMotionCameraExtensions + { + /// + /// Create a motion data and bind it to Camera.aspect + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// + /// Handle of the created motion data. + public static MotionHandle BindToAspect(this MotionBuilder builder, Camera camera) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(camera); + return builder.Bind(camera, static (x, camera) => + { + camera.aspect = x; + }); + } + + /// + /// Create a motion data and bind it to Camera.nearClipPlane + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// + /// Handle of the created motion data. + public static MotionHandle BindToNearClipPlane(this MotionBuilder builder, Camera camera) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(camera); + return builder.Bind(camera, static (x, camera) => + { + camera.nearClipPlane = x; + }); + } + + /// + /// Create a motion data and bind it to Camera.farClipPlane + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// + /// Handle of the created motion data. + public static MotionHandle BindToFarClipPlane(this MotionBuilder builder, Camera camera) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(camera); + return builder.Bind(camera, static (x, camera) => + { + camera.farClipPlane = x; + }); + } + + /// + /// Create a motion data and bind it to Camera.fieldOfView + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// + /// Handle of the created motion data. + public static MotionHandle BindToFieldOfView(this MotionBuilder builder, Camera camera) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(camera); + return builder.Bind(camera, static (x, camera) => + { + camera.fieldOfView = x; + }); + } + + /// + /// Create a motion data and bind it to Camera.orthographicSize + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// + /// Handle of the created motion data. + public static MotionHandle BindToOrthographicSize(this MotionBuilder builder, Camera camera) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(camera); + return builder.Bind(camera, static (x, camera) => + { + camera.orthographicSize = x; + }); + } + + /// + /// Create a motion data and bind it to Camera.rect + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// + /// Handle of the created motion data. + public static MotionHandle BindToRect(this MotionBuilder builder, Camera camera) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(camera); + return builder.Bind(camera, static (x, camera) => + { + camera.rect = x; + }); + } + + /// + /// Create a motion data and bind it to Camera.pixelRect + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// + /// Handle of the created motion data. + public static MotionHandle BindToPixelRect(this MotionBuilder builder, Camera camera) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(camera); + return builder.Bind(camera, static (x, camera) => + { + camera.pixelRect = x; + }); + } + + /// + /// Create a motion data and bind it to Camera.backgroundColor + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// + /// Handle of the created motion data. + public static MotionHandle BindToBackgroundColor(this MotionBuilder builder, Camera camera) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(camera); + return builder.Bind(camera, static (x, camera) => + { + camera.backgroundColor = x; + }); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionCameraExtensions.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionCameraExtensions.cs.meta new file mode 100644 index 00000000..92b142c4 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionCameraExtensions.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 30c2b5723ba554bb88e8c8547922bdaa \ No newline at end of file From dec8558ea3acf31050098be4146c9aa4a1c7499c Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 12:07:27 +0900 Subject: [PATCH 092/224] Add: Rigidbody extensions --- .../General/LitMotionRigidbodyExtensions.cs | 293 ++++++++++++++++++ .../LitMotionRigidbodyExtensions.cs.meta | 2 + .../Extensions/LitMotion.Extensions.asmdef | 5 + 3 files changed, 300 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbodyExtensions.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbodyExtensions.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbodyExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbodyExtensions.cs new file mode 100644 index 00000000..306f5da9 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbodyExtensions.cs @@ -0,0 +1,293 @@ +#if LITMOTION_SUPPORT_PHYSICS + +using UnityEngine; + +namespace LitMotion.Extensions +{ + /// + /// Provides binding extension methods for Rigidbody. + /// + public static class LitMotionRigidbodyExtensions + { + /// + /// Create a motion data and bind it to Rigidbody.position + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody.MovePosition() + /// Handle of the created motion data. + public static MotionHandle BindToPosition(this MotionBuilder builder, Rigidbody rigidbody, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody); + + if (useMovePosition) + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + rigidbody.MovePosition(x); + }); + } + else + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + rigidbody.position = x; + }); + } + } + + /// + /// Create a motion data and bind it to Rigidbody.position.x + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody.MovePosition() + /// Handle of the created motion data. + public static MotionHandle BindToPositionX(this MotionBuilder builder, Rigidbody rigidbody, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody); + + if (useMovePosition) + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + var p = rigidbody.position; + p.x = x; + rigidbody.MovePosition(p); + }); + } + else + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + var p = rigidbody.position; + p.x = x; + rigidbody.position = p; + }); + } + } + + /// + /// Create a motion data and bind it to Rigidbody.position.y + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody.MovePosition() + /// Handle of the created motion data. + public static MotionHandle BindToPositionY(this MotionBuilder builder, Rigidbody rigidbody, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody); + + if (useMovePosition) + { + return builder.Bind(rigidbody, static (y, rigidbody) => + { + var p = rigidbody.position; + p.y = y; + rigidbody.MovePosition(p); + }); + } + else + { + return builder.Bind(rigidbody, static (y, rigidbody) => + { + var p = rigidbody.position; + p.y = y; + rigidbody.position = p; + }); + } + } + + /// + /// Create a motion data and bind it to Rigidbody.position.z + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody.MovePosition() + /// Handle of the created motion data. + public static MotionHandle BindToPositionZ(this MotionBuilder builder, Rigidbody rigidbody, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody); + + if (useMovePosition) + { + return builder.Bind(rigidbody, static (z, rigidbody) => + { + var p = rigidbody.position; + p.z = z; + rigidbody.MovePosition(p); + }); + } + else + { + return builder.Bind(rigidbody, static (z, rigidbody) => + { + var p = rigidbody.position; + p.z = z; + rigidbody.position = p; + }); + } + } + + /// + /// Create a motion data and bind it to Rigidbody.position.xy + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody.MovePosition() + /// Handle of the created motion data. + public static MotionHandle BindToPositionXY(this MotionBuilder builder, Rigidbody rigidbody, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody); + + if (useMovePosition) + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + var p = rigidbody.position; + p.x = x.x; + p.y = x.y; + rigidbody.MovePosition(p); + }); + } + else + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + var p = rigidbody.position; + p.x = x.x; + p.y = x.y; + rigidbody.position = p; + }); + } + } + + /// + /// Create a motion data and bind it to Rigidbody.position.yz + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody.MovePosition() + /// Handle of the created motion data. + public static MotionHandle BindToPositionYZ(this MotionBuilder builder, Rigidbody rigidbody, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody); + + if (useMovePosition) + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + var p = rigidbody.position; + p.y = x.x; + p.z = x.y; + rigidbody.MovePosition(p); + }); + } + else + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + var p = rigidbody.position; + p.y = x.x; + p.z = x.y; + rigidbody.position = p; + }); + } + } + + + /// + /// Create a motion data and bind it to Rigidbody.position.xz + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody.MovePosition() + /// Handle of the created motion data. + public static MotionHandle BindToPositionXZ(this MotionBuilder builder, Rigidbody rigidbody, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody); + + if (useMovePosition) + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + var p = rigidbody.position; + p.x = x.x; + p.z = x.y; + rigidbody.MovePosition(p); + }); + } + else + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + var p = rigidbody.position; + p.x = x.x; + p.z = x.y; + rigidbody.position = p; + }); + } + } + + /// + /// Create a motion data and bind it to Rigidbody.rotation + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody.MoveRotation() + /// Handle of the created motion data. + public static MotionHandle BindToRotation(this MotionBuilder builder, Rigidbody rigidbody, bool useMoveRotation = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody); + + if (useMoveRotation) + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + rigidbody.MoveRotation(x); + }); + } + else + { + return builder.Bind(rigidbody, static (x, rigidbody) => + { + rigidbody.rotation = x; + }); + } + } + } +} + +#endif \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbodyExtensions.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbodyExtensions.cs.meta new file mode 100644 index 00000000..e99d41c6 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbodyExtensions.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fd8871a7c0a2449e692624f893dfd85f \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef index 11317d71..f2bbdbb6 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef @@ -49,6 +49,11 @@ "name": "com.unity.modules.audio", "expression": "", "define": "LITMOTION_SUPPORT_UNITY_AUDIO" + }, + { + "name": "com.unity.modules.physics", + "expression": "", + "define": "LITMOTION_SUPPORT_PHYSICS" } ], "noEngineReferences": false From 6858254b6d492f7625fab6295f6630e14ebb3fc3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 15:50:49 +0900 Subject: [PATCH 093/224] Add: Rigidbody2D extensions --- .../General/LitMotionRigidbody2DExtensions.cs | 143 ++++++++++++++++++ .../LitMotionRigidbody2DExtensions.cs.meta | 2 + .../Extensions/LitMotion.Extensions.asmdef | 5 + 3 files changed, 150 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbody2DExtensions.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbody2DExtensions.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbody2DExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbody2DExtensions.cs new file mode 100644 index 00000000..cb66cfec --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbody2DExtensions.cs @@ -0,0 +1,143 @@ +#if LITMOTION_SUPPORT_PHYSICS_2D + +using UnityEngine; + +namespace LitMotion.Extensions +{ + public static class LitMotionRigidbody2DExtensions + { + /// + /// Create a motion data and bind it to Rigidbody2D.position + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody2d.MovePosition() + /// Handle of the created motion data. + public static MotionHandle BindToPosition(this MotionBuilder builder, Rigidbody2D rigidbody2d, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody2d); + + if (useMovePosition) + { + return builder.Bind(rigidbody2d, static (x, rigidbody2d) => + { + rigidbody2d.MovePosition(x); + }); + } + else + { + return builder.Bind(rigidbody2d, static (x, rigidbody2d) => + { + rigidbody2d.position = x; + }); + } + } + + /// + /// Create a motion data and bind it to Rigidbody2D.position.x + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody2d.MovePosition() + /// Handle of the created motion data. + public static MotionHandle BindToPositionX(this MotionBuilder builder, Rigidbody2D rigidbody2d, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody2d); + + if (useMovePosition) + { + return builder.Bind(rigidbody2d, static (x, rigidbody2d) => + { + var p = rigidbody2d.position; + p.x = x; + rigidbody2d.MovePosition(p); + }); + } + else + { + return builder.Bind(rigidbody2d, static (x, rigidbody2d) => + { + var p = rigidbody2d.position; + p.x = x; + rigidbody2d.position = p; + }); + } + } + + /// + /// Create a motion data and bind it to Rigidbody2D.position.y + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody2d.MovePosition() + /// Handle of the created motion data. + public static MotionHandle BindToPositionY(this MotionBuilder builder, Rigidbody2D rigidbody2d, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody2d); + + if (useMovePosition) + { + return builder.Bind(rigidbody2d, static (y, rigidbody2d) => + { + var p = rigidbody2d.position; + p.y = y; + rigidbody2d.MovePosition(p); + }); + } + else + { + return builder.Bind(rigidbody2d, static (y, rigidbody2d) => + { + var p = rigidbody2d.position; + p.y = y; + rigidbody2d.position = p; + }); + } + } + + /// + /// Create a motion data and bind it to Rigidbody2D.rotation + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Whether to use rigidbody2d.MoveRotation() + /// Handle of the created motion data. + public static MotionHandle BindToRotation(this MotionBuilder builder, Rigidbody2D rigidbody2d, bool useMovePosition = true) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(rigidbody2d); + + if (useMovePosition) + { + return builder.Bind(rigidbody2d, static (x, rigidbody2d) => + { + rigidbody2d.MoveRotation(x); + }); + } + else + { + return builder.Bind(rigidbody2d, static (x, rigidbody2d) => + { + rigidbody2d.rotation = x; + }); + } + } + } +} + +#endif \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbody2DExtensions.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbody2DExtensions.cs.meta new file mode 100644 index 00000000..0ebdfbf9 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/General/LitMotionRigidbody2DExtensions.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ccd29652fe4f746899bfd475712a842a \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef index f2bbdbb6..d97a92a6 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef @@ -54,6 +54,11 @@ "name": "com.unity.modules.physics", "expression": "", "define": "LITMOTION_SUPPORT_PHYSICS" + }, + { + "name": "com.unity.modules.physics2d", + "expression": "", + "define": "LITMOTION_SUPPORT_PHYSICS_2D" } ], "noEngineReferences": false From c84f45130d19eaefe79c89e83c792769bdcdd7eb Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 16:23:21 +0900 Subject: [PATCH 094/224] Update: Built-in -> URP --- .../LitMotion/Runtime/Extensions/URP.meta | 8 + .../Assets/Sandbox/Volume Profile.asset | 44 + .../Assets/Sandbox/Volume Profile.asset.meta | 8 + src/LitMotion/Assets/Settings.meta | 8 + src/LitMotion/Assets/Settings/URP.meta | 8 + .../Settings/URP/DefaultVolumeProfile.asset | 795 ++++++++++++++++++ .../URP/DefaultVolumeProfile.asset.meta | 8 + .../Settings/URP/Medium_PipelineAsset.asset | 136 +++ .../URP/Medium_PipelineAsset.asset.meta | 8 + ...Medium_PipelineAsset_ForwardRenderer.asset | 53 ++ ...m_PipelineAsset_ForwardRenderer.asset.meta | 8 + ...niversalRenderPipelineGlobalSettings.asset | 248 ++++++ ...salRenderPipelineGlobalSettings.asset.meta | 8 + src/LitMotion/Packages/manifest.json | 1 + src/LitMotion/Packages/packages-lock.json | 18 + .../ProjectSettings/GraphicsSettings.asset | 21 +- .../ProjectSettings/QualitySettings.asset | 280 +----- .../ProjectSettings/URPProjectSettings.asset | 15 + 18 files changed, 1405 insertions(+), 270 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/URP.meta create mode 100644 src/LitMotion/Assets/Sandbox/Volume Profile.asset create mode 100644 src/LitMotion/Assets/Sandbox/Volume Profile.asset.meta create mode 100644 src/LitMotion/Assets/Settings.meta create mode 100644 src/LitMotion/Assets/Settings/URP.meta create mode 100644 src/LitMotion/Assets/Settings/URP/DefaultVolumeProfile.asset create mode 100644 src/LitMotion/Assets/Settings/URP/DefaultVolumeProfile.asset.meta create mode 100644 src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset.asset create mode 100644 src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset.asset.meta create mode 100644 src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset_ForwardRenderer.asset create mode 100644 src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset_ForwardRenderer.asset.meta create mode 100644 src/LitMotion/Assets/Settings/URP/UniversalRenderPipelineGlobalSettings.asset create mode 100644 src/LitMotion/Assets/Settings/URP/UniversalRenderPipelineGlobalSettings.asset.meta create mode 100644 src/LitMotion/ProjectSettings/URPProjectSettings.asset diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/URP.meta b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/URP.meta new file mode 100644 index 00000000..2379710a --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/URP.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a31768cb4b8ad4693a097921d0a1b413 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/Sandbox/Volume Profile.asset b/src/LitMotion/Assets/Sandbox/Volume Profile.asset new file mode 100644 index 00000000..91c07801 --- /dev/null +++ b/src/LitMotion/Assets/Sandbox/Volume Profile.asset @@ -0,0 +1,44 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: Volume Profile + m_EditorClassIdentifier: + components: + - {fileID: 8666286320660262589} +--- !u!114 &8666286320660262589 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66f335fb1ffd8684294ad653bf1c7564, type: 3} + m_Name: ColorAdjustments + m_EditorClassIdentifier: + active: 1 + postExposure: + m_OverrideState: 0 + m_Value: 0 + contrast: + m_OverrideState: 0 + m_Value: 0 + colorFilter: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + hueShift: + m_OverrideState: 0 + m_Value: 0 + saturation: + m_OverrideState: 0 + m_Value: 0 diff --git a/src/LitMotion/Assets/Sandbox/Volume Profile.asset.meta b/src/LitMotion/Assets/Sandbox/Volume Profile.asset.meta new file mode 100644 index 00000000..eeaf583b --- /dev/null +++ b/src/LitMotion/Assets/Sandbox/Volume Profile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2e98e0bb8ba2473683cf2489f5ff410 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/Settings.meta b/src/LitMotion/Assets/Settings.meta new file mode 100644 index 00000000..569592d3 --- /dev/null +++ b/src/LitMotion/Assets/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 36c0d3e2e1dcd40d999df3b02eec3a0b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/Settings/URP.meta b/src/LitMotion/Assets/Settings/URP.meta new file mode 100644 index 00000000..913ded98 --- /dev/null +++ b/src/LitMotion/Assets/Settings/URP.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c75071ee0aed1495e9e9bc9aeb7e67ec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/Settings/URP/DefaultVolumeProfile.asset b/src/LitMotion/Assets/Settings/URP/DefaultVolumeProfile.asset new file mode 100644 index 00000000..358ecb9a --- /dev/null +++ b/src/LitMotion/Assets/Settings/URP/DefaultVolumeProfile.asset @@ -0,0 +1,795 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8864707378549301282 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 97c23e3b12dc18c42a140437e53d3951, type: 3} + m_Name: Tonemapping + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 0 + neutralHDRRangeReductionMode: + m_OverrideState: 1 + m_Value: 2 + acesPreset: + m_OverrideState: 1 + m_Value: 3 + hueShiftAmount: + m_OverrideState: 1 + m_Value: 0 + detectPaperWhite: + m_OverrideState: 1 + m_Value: 0 + paperWhite: + m_OverrideState: 1 + m_Value: 300 + detectBrightnessLimits: + m_OverrideState: 1 + m_Value: 1 + minNits: + m_OverrideState: 1 + m_Value: 0.005 + maxNits: + m_OverrideState: 1 + m_Value: 1000 +--- !u!114 &-8673346110106030063 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb60a22f311433c4c962b888d1393f88, type: 3} + m_Name: PaniniProjection + m_EditorClassIdentifier: + active: 1 + distance: + m_OverrideState: 1 + m_Value: 0 + cropToFit: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &-6707516708103922266 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 06437c1ff663d574d9447842ba0a72e4, type: 3} + m_Name: ScreenSpaceLensFlare + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 0 + tintColor: + m_OverrideState: 1 + m_Value: {r: 1, g: 1, b: 1, a: 1} + bloomMip: + m_OverrideState: 1 + m_Value: 1 + firstFlareIntensity: + m_OverrideState: 1 + m_Value: 1 + secondaryFlareIntensity: + m_OverrideState: 1 + m_Value: 1 + warpedFlareIntensity: + m_OverrideState: 1 + m_Value: 1 + warpedFlareScale: + m_OverrideState: 1 + m_Value: {x: 1, y: 1} + samples: + m_OverrideState: 1 + m_Value: 1 + sampleDimmer: + m_OverrideState: 1 + m_Value: 0.5 + vignetteEffect: + m_OverrideState: 1 + m_Value: 1 + startingPosition: + m_OverrideState: 1 + m_Value: 1.25 + scale: + m_OverrideState: 1 + m_Value: 1.5 + streaksIntensity: + m_OverrideState: 1 + m_Value: 0 + streaksLength: + m_OverrideState: 1 + m_Value: 0.5 + streaksOrientation: + m_OverrideState: 1 + m_Value: 0 + streaksThreshold: + m_OverrideState: 1 + m_Value: 0.25 + resolution: + m_OverrideState: 1 + m_Value: 4 + chromaticAbberationIntensity: + m_OverrideState: 1 + m_Value: 0.5 +--- !u!114 &-6154830301837549588 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5485954d14dfb9a4c8ead8edb0ded5b1, type: 3} + m_Name: LiftGammaGain + m_EditorClassIdentifier: + active: 1 + lift: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + gamma: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + gain: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} +--- !u!114 &-5845893353155800966 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0b2db86121404754db890f4c8dfe81b2, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + skipIterations: + m_OverrideState: 1 + m_Value: 1 + threshold: + m_OverrideState: 1 + m_Value: 0.9 + intensity: + m_OverrideState: 1 + m_Value: 0 + scatter: + m_OverrideState: 1 + m_Value: 0.7 + clamp: + m_OverrideState: 1 + m_Value: 65472 + tint: + m_OverrideState: 1 + m_Value: {r: 1, g: 1, b: 1, a: 1} + highQualityFiltering: + m_OverrideState: 1 + m_Value: 0 + downscale: + m_OverrideState: 1 + m_Value: 0 + maxIterations: + m_OverrideState: 1 + m_Value: 6 + dirtTexture: + m_OverrideState: 1 + m_Value: {fileID: 0} + dimension: 1 + dirtIntensity: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-5650237656267204629 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdfbdbb87d3286943a057f7791b43141, type: 3} + m_Name: ChannelMixer + m_EditorClassIdentifier: + active: 1 + redOutRedIn: + m_OverrideState: 1 + m_Value: 100 + redOutGreenIn: + m_OverrideState: 1 + m_Value: 0 + redOutBlueIn: + m_OverrideState: 1 + m_Value: 0 + greenOutRedIn: + m_OverrideState: 1 + m_Value: 0 + greenOutGreenIn: + m_OverrideState: 1 + m_Value: 100 + greenOutBlueIn: + m_OverrideState: 1 + m_Value: 0 + blueOutRedIn: + m_OverrideState: 1 + m_Value: 0 + blueOutGreenIn: + m_OverrideState: 1 + m_Value: 0 + blueOutBlueIn: + m_OverrideState: 1 + m_Value: 100 +--- !u!114 &-3159614460740754243 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bd486065ce11414fa40e631affc4900, type: 3} + m_Name: ProbeVolumesOptions + m_EditorClassIdentifier: + active: 1 + normalBias: + m_OverrideState: 1 + m_Value: 0.05 + viewBias: + m_OverrideState: 1 + m_Value: 0.1 + scaleBiasWithMinProbeDistance: + m_OverrideState: 1 + m_Value: 0 + samplingNoise: + m_OverrideState: 1 + m_Value: 0.1 + animateSamplingNoise: + m_OverrideState: 1 + m_Value: 1 + leakReductionMode: + m_OverrideState: 1 + m_Value: 2 + minValidDotProductValue: + m_OverrideState: 1 + m_Value: 0.1 + occlusionOnlyReflectionNormalization: + m_OverrideState: 1 + m_Value: 1 + intensityMultiplier: + m_OverrideState: 1 + m_Value: 1 + skyOcclusionIntensityMultiplier: + m_OverrideState: 1 + m_Value: 1 + worldOffset: + m_OverrideState: 1 + m_Value: {x: 0, y: 0, z: 0} +--- !u!114 &-2242766036477351566 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 29fa0085f50d5e54f8144f766051a691, type: 3} + m_Name: FilmGrain + m_EditorClassIdentifier: + active: 1 + type: + m_OverrideState: 1 + m_Value: 0 + intensity: + m_OverrideState: 1 + m_Value: 0 + response: + m_OverrideState: 1 + m_Value: 0.8 + texture: + m_OverrideState: 1 + m_Value: {fileID: 0} +--- !u!114 &-1491736117436991749 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 221518ef91623a7438a71fef23660601, type: 3} + m_Name: WhiteBalance + m_EditorClassIdentifier: + active: 1 + temperature: + m_OverrideState: 1 + m_Value: 0 + tint: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-1435957405613983894 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c01700fd266d6914ababb731e09af2eb, type: 3} + m_Name: DepthOfField + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 0 + gaussianStart: + m_OverrideState: 1 + m_Value: 10 + gaussianEnd: + m_OverrideState: 1 + m_Value: 30 + gaussianMaxRadius: + m_OverrideState: 1 + m_Value: 1 + highQualitySampling: + m_OverrideState: 1 + m_Value: 0 + focusDistance: + m_OverrideState: 1 + m_Value: 10 + aperture: + m_OverrideState: 1 + m_Value: 5.6 + focalLength: + m_OverrideState: 1 + m_Value: 50 + bladeCount: + m_OverrideState: 1 + m_Value: 5 + bladeCurvature: + m_OverrideState: 1 + m_Value: 1 + bladeRotation: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-505653497687690755 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 558a8e2b6826cf840aae193990ba9f2e, type: 3} + m_Name: ShadowsMidtonesHighlights + m_EditorClassIdentifier: + active: 1 + shadows: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + midtones: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + highlights: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + shadowsStart: + m_OverrideState: 1 + m_Value: 0 + shadowsEnd: + m_OverrideState: 1 + m_Value: 0.3 + highlightsStart: + m_OverrideState: 1 + m_Value: 0.55 + highlightsEnd: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: DefaultVolumeProfile + m_EditorClassIdentifier: + components: + - {fileID: -5650237656267204629} + - {fileID: 2508393710734245928} + - {fileID: 415348900452463859} + - {fileID: -2242766036477351566} + - {fileID: -6154830301837549588} + - {fileID: 2962703219624254567} + - {fileID: 3713845769349984800} + - {fileID: -1435957405613983894} + - {fileID: -6707516708103922266} + - {fileID: -1491736117436991749} + - {fileID: -5845893353155800966} + - {fileID: 6295508436302129228} + - {fileID: 7682009740736208694} + - {fileID: -8864707378549301282} + - {fileID: 734821475422961701} + - {fileID: 4613318234544804825} + - {fileID: -8673346110106030063} + - {fileID: -505653497687690755} + - {fileID: -3159614460740754243} +--- !u!114 &415348900452463859 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 899c54efeace73346a0a16faa3afe726, type: 3} + m_Name: Vignette + m_EditorClassIdentifier: + active: 1 + color: + m_OverrideState: 1 + m_Value: {r: 0, g: 0, b: 0, a: 1} + center: + m_OverrideState: 1 + m_Value: {x: 0.5, y: 0.5} + intensity: + m_OverrideState: 1 + m_Value: 0 + smoothness: + m_OverrideState: 1 + m_Value: 0.2 + rounded: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &734821475422961701 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 70afe9e12c7a7ed47911bb608a23a8ff, type: 3} + m_Name: SplitToning + m_EditorClassIdentifier: + active: 1 + shadows: + m_OverrideState: 1 + m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1} + highlights: + m_OverrideState: 1 + m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1} + balance: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &2508393710734245928 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3eb4b772797da9440885e8bd939e9560, type: 3} + m_Name: ColorCurves + m_EditorClassIdentifier: + active: 1 + master: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + red: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + green: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + blue: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + hueVsHue: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 1 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + hueVsSat: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 1 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + satVsSat: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 0 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + lumVsSat: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 0 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &2962703219624254567 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ccf1aba9553839d41ae37dd52e9ebcce, type: 3} + m_Name: MotionBlur + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 0 + quality: + m_OverrideState: 1 + m_Value: 0 + intensity: + m_OverrideState: 1 + m_Value: 0 + clamp: + m_OverrideState: 1 + m_Value: 0.05 +--- !u!114 &3713845769349984800 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 81180773991d8724ab7f2d216912b564, type: 3} + m_Name: ChromaticAberration + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &4613318234544804825 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e021b4c809a781e468c2988c016ebbea, type: 3} + m_Name: ColorLookup + m_EditorClassIdentifier: + active: 1 + texture: + m_OverrideState: 1 + m_Value: {fileID: 0} + dimension: 1 + contribution: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &6295508436302129228 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c5e1dc532bcb41949b58bc4f2abfbb7e, type: 3} + m_Name: LensDistortion + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 0 + xMultiplier: + m_OverrideState: 1 + m_Value: 1 + yMultiplier: + m_OverrideState: 1 + m_Value: 1 + center: + m_OverrideState: 1 + m_Value: {x: 0.5, y: 0.5} + scale: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &7682009740736208694 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66f335fb1ffd8684294ad653bf1c7564, type: 3} + m_Name: ColorAdjustments + m_EditorClassIdentifier: + active: 1 + postExposure: + m_OverrideState: 1 + m_Value: 0 + contrast: + m_OverrideState: 1 + m_Value: 0 + colorFilter: + m_OverrideState: 1 + m_Value: {r: 1, g: 1, b: 1, a: 1} + hueShift: + m_OverrideState: 1 + m_Value: 0 + saturation: + m_OverrideState: 1 + m_Value: 0 diff --git a/src/LitMotion/Assets/Settings/URP/DefaultVolumeProfile.asset.meta b/src/LitMotion/Assets/Settings/URP/DefaultVolumeProfile.asset.meta new file mode 100644 index 00000000..2754766c --- /dev/null +++ b/src/LitMotion/Assets/Settings/URP/DefaultVolumeProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7d5f1cd815934de5a659f2df07c58dd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset.asset b/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset.asset new file mode 100644 index 00000000..f8ed88cd --- /dev/null +++ b/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset.asset @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3} + m_Name: Medium_PipelineAsset + m_EditorClassIdentifier: + k_AssetVersion: 12 + k_AssetPreviousVersion: 12 + m_RendererType: 1 + m_RendererData: {fileID: 0} + m_RendererDataList: + - {fileID: 11400000, guid: cc6887f028c754febac38a960e465875, type: 2} + m_DefaultRendererIndex: 0 + m_RequireDepthTexture: 0 + m_RequireOpaqueTexture: 0 + m_OpaqueDownsampling: 1 + m_SupportsTerrainHoles: 1 + m_SupportsHDR: 1 + m_HDRColorBufferPrecision: 0 + m_MSAA: 1 + m_RenderScale: 1 + m_UpscalingFilter: 0 + m_FsrOverrideSharpness: 0 + m_FsrSharpness: 0.92 + m_EnableLODCrossFade: 1 + m_LODCrossFadeDitheringType: 1 + m_ShEvalMode: 0 + m_LightProbeSystem: 0 + m_ProbeVolumeMemoryBudget: 1024 + m_ProbeVolumeBlendingMemoryBudget: 256 + m_SupportProbeVolumeGPUStreaming: 0 + m_SupportProbeVolumeDiskStreaming: 0 + m_SupportProbeVolumeScenarios: 0 + m_SupportProbeVolumeScenarioBlending: 0 + m_ProbeVolumeSHBands: 1 + m_MainLightRenderingMode: 1 + m_MainLightShadowsSupported: 1 + m_MainLightShadowmapResolution: 1024 + m_AdditionalLightsRenderingMode: 1 + m_AdditionalLightsPerObjectLimit: 1 + m_AdditionalLightShadowsSupported: 1 + m_AdditionalLightsShadowmapResolution: 1024 + m_AdditionalLightsShadowResolutionTierLow: 256 + m_AdditionalLightsShadowResolutionTierMedium: 512 + m_AdditionalLightsShadowResolutionTierHigh: 1024 + m_ReflectionProbeBlending: 1 + m_ReflectionProbeBoxProjection: 1 + m_ShadowDistance: 20 + m_ShadowCascadeCount: 1 + m_Cascade2Split: 0.33333334 + m_Cascade3Split: {x: 0.1, y: 0.3} + m_Cascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} + m_CascadeBorder: 0.2 + m_ShadowDepthBias: 1 + m_ShadowNormalBias: 1 + m_AnyShadowsSupported: 1 + m_SoftShadowsSupported: 0 + m_ConservativeEnclosingSphere: 0 + m_NumIterationsEnclosingSphere: 64 + m_SoftShadowQuality: 2 + m_AdditionalLightsCookieResolution: 2048 + m_AdditionalLightsCookieFormat: 3 + m_UseSRPBatcher: 1 + m_SupportsDynamicBatching: 0 + m_MixedLightingSupported: 1 + m_SupportsLightCookies: 1 + m_SupportsLightLayers: 0 + m_DebugLevel: 0 + m_StoreActionsOptimization: 0 + m_UseAdaptivePerformance: 1 + m_ColorGradingMode: 0 + m_ColorGradingLutSize: 32 + m_AllowPostProcessAlphaOutput: 0 + m_UseFastSRGBLinearConversion: 0 + m_SupportDataDrivenLensFlare: 1 + m_SupportScreenSpaceLensFlare: 1 + m_GPUResidentDrawerMode: 0 + m_SmallMeshScreenPercentage: 0 + m_GPUResidentDrawerEnableOcclusionCullingInCameras: 0 + m_ShadowType: 1 + m_LocalShadowsSupported: 0 + m_LocalShadowsAtlasResolution: 256 + m_MaxPixelLights: 0 + m_ShadowAtlasResolution: 256 + m_VolumeFrameworkUpdateMode: 0 + m_VolumeProfile: {fileID: 0} + apvScenesData: + obsoleteSceneBounds: + m_Keys: [] + m_Values: [] + obsoleteHasProbeVolumes: + m_Keys: [] + m_Values: + m_PrefilteringModeMainLightShadows: 1 + m_PrefilteringModeAdditionalLight: 4 + m_PrefilteringModeAdditionalLightShadows: 1 + m_PrefilterXRKeywords: 0 + m_PrefilteringModeForwardPlus: 1 + m_PrefilteringModeDeferredRendering: 1 + m_PrefilteringModeScreenSpaceOcclusion: 1 + m_PrefilterDebugKeywords: 0 + m_PrefilterWriteRenderingLayers: 0 + m_PrefilterHDROutput: 0 + m_PrefilterAlphaOutput: 0 + m_PrefilterSSAODepthNormals: 0 + m_PrefilterSSAOSourceDepthLow: 0 + m_PrefilterSSAOSourceDepthMedium: 0 + m_PrefilterSSAOSourceDepthHigh: 0 + m_PrefilterSSAOInterleaved: 0 + m_PrefilterSSAOBlueNoise: 0 + m_PrefilterSSAOSampleCountLow: 0 + m_PrefilterSSAOSampleCountMedium: 0 + m_PrefilterSSAOSampleCountHigh: 0 + m_PrefilterDBufferMRT1: 0 + m_PrefilterDBufferMRT2: 0 + m_PrefilterDBufferMRT3: 0 + m_PrefilterSoftShadowsQualityLow: 0 + m_PrefilterSoftShadowsQualityMedium: 0 + m_PrefilterSoftShadowsQualityHigh: 0 + m_PrefilterSoftShadows: 0 + m_PrefilterScreenCoord: 0 + m_PrefilterNativeRenderPass: 0 + m_PrefilterUseLegacyLightmaps: 0 + m_ShaderVariantLogLevel: 0 + m_ShadowCascades: 0 + m_Textures: + blueNoise64LTex: {fileID: 0} + bayerMatrixTex: {fileID: 0} diff --git a/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset.asset.meta b/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset.asset.meta new file mode 100644 index 00000000..27e3e4f5 --- /dev/null +++ b/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 119398a6f85244ccd974cb6c1664dec4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset_ForwardRenderer.asset b/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset_ForwardRenderer.asset new file mode 100644 index 00000000..cd55a5c8 --- /dev/null +++ b/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset_ForwardRenderer.asset @@ -0,0 +1,53 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: Medium_PipelineAsset_ForwardRenderer + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3} + hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3} + probeVolumeResources: + probeVolumeDebugShader: {fileID: 0} + probeVolumeFragmentationDebugShader: {fileID: 0} + probeVolumeOffsetDebugShader: {fileID: 0} + probeVolumeSamplingDebugShader: {fileID: 0} + probeSamplingDebugMesh: {fileID: 0} + probeSamplingDebugTexture: {fileID: 0} + probeVolumeBlendStatesCS: {fileID: 0} + m_RendererFeatures: [] + m_RendererFeatureMap: + m_UseNativeRenderPass: 0 + xrSystemData: {fileID: 0} + postProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + m_AssetVersion: 2 + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 2 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 1 + m_RenderingMode: 0 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 1 + m_DepthAttachmentFormat: 0 + m_DepthTextureFormat: 0 + m_AccurateGbufferNormals: 0 + m_IntermediateTextureMode: 1 diff --git a/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset_ForwardRenderer.asset.meta b/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset_ForwardRenderer.asset.meta new file mode 100644 index 00000000..dc60ee22 --- /dev/null +++ b/src/LitMotion/Assets/Settings/URP/Medium_PipelineAsset_ForwardRenderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc6887f028c754febac38a960e465875 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/Settings/URP/UniversalRenderPipelineGlobalSettings.asset b/src/LitMotion/Assets/Settings/URP/UniversalRenderPipelineGlobalSettings.asset new file mode 100644 index 00000000..19942398 --- /dev/null +++ b/src/LitMotion/Assets/Settings/URP/UniversalRenderPipelineGlobalSettings.asset @@ -0,0 +1,248 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2ec995e51a6e251468d2a3fd8a686257, type: 3} + m_Name: UniversalRenderPipelineGlobalSettings + m_EditorClassIdentifier: + m_ShaderStrippingSetting: + m_Version: 0 + m_ExportShaderVariants: 1 + m_ShaderVariantLogLevel: 0 + m_StripRuntimeDebugShaders: 1 + m_URPShaderStrippingSetting: + m_Version: 0 + m_StripUnusedPostProcessingVariants: 0 + m_StripUnusedVariants: 1 + m_StripScreenCoordOverrideVariants: 1 + m_ShaderVariantLogLevel: 0 + m_ExportShaderVariants: 1 + m_StripDebugVariants: 1 + m_StripUnusedPostProcessingVariants: 0 + m_StripUnusedVariants: 1 + m_StripScreenCoordOverrideVariants: 1 + supportRuntimeDebugDisplay: 0 + m_EnableRenderGraph: 0 + m_Settings: + m_SettingsList: + m_List: + - rid: 1071524756539572908 + - rid: 1071524756539572909 + - rid: 1071524756539572910 + - rid: 1071524756539572911 + - rid: 1071524756539572912 + - rid: 1071524756539572913 + - rid: 1071524756539572914 + - rid: 1071524756539572915 + - rid: 1071524756539572916 + - rid: 1071524756539572917 + - rid: 1071524756539572918 + - rid: 1071524756539572919 + - rid: 1071524756539572920 + - rid: 1071524756539572921 + - rid: 1071524756539572922 + - rid: 1071524756539572923 + - rid: 1071524756539572924 + - rid: 1071524756539572925 + - rid: 1071524756539572926 + - rid: 1071524756539572927 + - rid: 1071524756539572928 + m_RuntimeSettings: + m_List: [] + m_AssetVersion: 8 + m_ObsoleteDefaultVolumeProfile: {fileID: 0} + m_RenderingLayerNames: + - Default + m_ValidRenderingLayers: 0 + lightLayerName0: + lightLayerName1: + lightLayerName2: + lightLayerName3: + lightLayerName4: + lightLayerName5: + lightLayerName6: + lightLayerName7: + apvScenesData: + obsoleteSceneBounds: + m_Keys: [] + m_Values: [] + obsoleteHasProbeVolumes: + m_Keys: [] + m_Values: + references: + version: 2 + RefIds: + - rid: 1071524756539572908 + type: {class: UniversalRenderPipelineEditorMaterials, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_DefaultMaterial: {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_DefaultParticleMaterial: {fileID: 2100000, guid: e823cd5b5d27c0f4b8256e7c12ee3e6d, type: 2} + m_DefaultLineMaterial: {fileID: 2100000, guid: e823cd5b5d27c0f4b8256e7c12ee3e6d, type: 2} + m_DefaultTerrainMaterial: {fileID: 2100000, guid: 594ea882c5a793440b60ff72d896021e, type: 2} + m_DefaultDecalMaterial: {fileID: 2100000, guid: 31d0dcc6f2dd4e4408d18036a2c93862, type: 2} + - rid: 1071524756539572909 + type: {class: UniversalRenderPipelineEditorShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_AutodeskInteractive: {fileID: 4800000, guid: 0e9d5a909a1f7e84882a534d0d11e49f, type: 3} + m_AutodeskInteractiveTransparent: {fileID: 4800000, guid: 5c81372d981403744adbdda4433c9c11, type: 3} + m_AutodeskInteractiveMasked: {fileID: 4800000, guid: 80aa867ac363ac043847b06ad71604cd, type: 3} + m_TerrainDetailLit: {fileID: 4800000, guid: f6783ab646d374f94b199774402a5144, type: 3} + m_TerrainDetailGrassBillboard: {fileID: 4800000, guid: 29868e73b638e48ca99a19ea58c48d90, type: 3} + m_TerrainDetailGrass: {fileID: 4800000, guid: e507fdfead5ca47e8b9a768b51c291a1, type: 3} + m_DefaultSpeedTree7Shader: {fileID: 4800000, guid: 0f4122b9a743b744abe2fb6a0a88868b, type: 3} + m_DefaultSpeedTree8Shader: {fileID: -6465566751694194690, guid: 9920c1f1781549a46ba081a2a15a16ec, type: 3} + m_DefaultSpeedTree9Shader: {fileID: -6465566751694194690, guid: cbd3e1cc4ae141c42a30e33b4d666a61, type: 3} + - rid: 1071524756539572910 + type: {class: UniversalRenderPipelineRuntimeXRResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_xrOcclusionMeshPS: {fileID: 4800000, guid: 4431b1f1f743fbf4eb310a967890cbea, type: 3} + m_xrMirrorViewPS: {fileID: 4800000, guid: d5a307c014552314b9f560906d708772, type: 3} + m_xrMotionVector: {fileID: 4800000, guid: f89aac1e4f84468418fe30e611dff395, type: 3} + - rid: 1071524756539572911 + type: {class: RenderGraphSettings, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_EnableRenderCompatibilityMode: 0 + - rid: 1071524756539572912 + type: {class: UniversalRenderPipelineDebugShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_DebugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3} + m_HdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + m_ProbeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, type: 3} + - rid: 1071524756539572913 + type: {class: UniversalRenderPipelineRuntimeTextures, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 1 + m_BlueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} + m_BayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} + m_DebugFontTex: {fileID: 2800000, guid: 26a413214480ef144b2915d6ff4d0beb, type: 3} + - rid: 1071524756539572914 + type: {class: URPShaderStrippingSetting, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_StripUnusedPostProcessingVariants: 0 + m_StripUnusedVariants: 1 + m_StripScreenCoordOverrideVariants: 1 + - rid: 1071524756539572915 + type: {class: UniversalRenderPipelineRuntimeShaders, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_FallbackErrorShader: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + m_BlitHDROverlay: {fileID: 4800000, guid: a89bee29cffa951418fc1e2da94d1959, type: 3} + m_CoreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + m_CoreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, type: 3} + m_SamplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + - rid: 1071524756539572916 + type: {class: URPDefaultVolumeProfileSettings, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_VolumeProfile: {fileID: 11400000, guid: d7d5f1cd815934de5a659f2df07c58dd, type: 2} + - rid: 1071524756539572917 + type: {class: UniversalRendererResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + m_CameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, type: 3} + m_StencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3} + m_DBufferClear: {fileID: 4800000, guid: f056d8bd2a1c7e44e9729144b4c70395, type: 3} + - rid: 1071524756539572918 + type: {class: Renderer2DResources, ns: UnityEngine.Rendering.Universal, asm: Unity.RenderPipelines.Universal.Runtime} + data: + m_Version: 0 + m_LightShader: {fileID: 4800000, guid: 3f6c848ca3d7bca4bbe846546ac701a1, type: 3} + m_ProjectedShadowShader: {fileID: 4800000, guid: ce09d4a80b88c5a4eb9768fab4f1ee00, type: 3} + m_SpriteShadowShader: {fileID: 4800000, guid: 44fc62292b65ab04eabcf310e799ccf6, type: 3} + m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, type: 3} + m_GeometryShadowShader: {fileID: 4800000, guid: 19349a0f9a7ed4c48a27445bcf92e5e1, type: 3} + m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, type: 3} + m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3} + m_CopyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2} + m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2} + - rid: 1071524756539572919 + type: {class: GPUResidentDrawerResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.GPUDriven.Runtime} + data: + m_Version: 0 + m_InstanceDataBufferCopyKernels: {fileID: 7200000, guid: f984aeb540ded8b4fbb8a2047ab5b2e2, type: 3} + m_InstanceDataBufferUploadKernels: {fileID: 7200000, guid: 53864816eb00f2343b60e1a2c5a262ef, type: 3} + m_TransformUpdaterKernels: {fileID: 7200000, guid: 2a567b9b2733f8d47a700c3c85bed75b, type: 3} + m_WindDataUpdaterKernels: {fileID: 7200000, guid: fde76746e4fd0ed418c224f6b4084114, type: 3} + m_OccluderDepthPyramidKernels: {fileID: 7200000, guid: 08b2b5fb307b0d249860612774a987da, type: 3} + m_InstanceOcclusionCullingKernels: {fileID: 7200000, guid: f6d223acabc2f974795a5a7864b50e6c, type: 3} + m_OcclusionCullingDebugKernels: {fileID: 7200000, guid: b23e766bcf50ca4438ef186b174557df, type: 3} + m_DebugOcclusionTestPS: {fileID: 4800000, guid: d3f0849180c2d0944bc71060693df100, type: 3} + m_DebugOccluderPS: {fileID: 4800000, guid: b3c92426a88625841ab15ca6a7917248, type: 3} + - rid: 1071524756539572920 + type: {class: RenderGraphGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + m_EnableCompilationCaching: 1 + m_EnableValidityChecks: 1 + - rid: 1071524756539572921 + type: {class: ProbeVolumeRuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + probeVolumeBlendStatesCS: {fileID: 7200000, guid: a3f7b8c99de28a94684cb1daebeccf5d, type: 3} + probeVolumeUploadDataCS: {fileID: 7200000, guid: 0951de5992461754fa73650732c4954c, type: 3} + probeVolumeUploadDataL2CS: {fileID: 7200000, guid: 6196f34ed825db14b81fb3eb0ea8d931, type: 3} + - rid: 1071524756539572922 + type: {class: IncludeAdditionalRPAssets, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_version: 0 + m_IncludeReferencedInScenes: 0 + m_IncludeAssetsByLabel: 0 + m_LabelToInclude: + - rid: 1071524756539572923 + type: {class: ProbeVolumeBakingResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + dilationShader: {fileID: 7200000, guid: 6bb382f7de370af41b775f54182e491d, type: 3} + subdivideSceneCS: {fileID: 7200000, guid: bb86f1f0af829fd45b2ebddda1245c22, type: 3} + voxelizeSceneShader: {fileID: 4800000, guid: c8b6a681c7b4e2e4785ffab093907f9e, type: 3} + traceVirtualOffsetCS: {fileID: -6772857160820960102, guid: ff2cbab5da58bf04d82c5f34037ed123, type: 3} + traceVirtualOffsetRT: {fileID: -5126288278712620388, guid: ff2cbab5da58bf04d82c5f34037ed123, type: 3} + skyOcclusionCS: {fileID: -6772857160820960102, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3} + skyOcclusionRT: {fileID: -5126288278712620388, guid: 5a2a534753fbdb44e96c3c78b5a6999d, type: 3} + renderingLayerCS: {fileID: -6772857160820960102, guid: 94a070d33e408384bafc1dea4a565df9, type: 3} + renderingLayerRT: {fileID: -5126288278712620388, guid: 94a070d33e408384bafc1dea4a565df9, type: 3} + - rid: 1071524756539572924 + type: {class: STP/RuntimeResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_setupCS: {fileID: 7200000, guid: 33be2e9a5506b2843bdb2bdff9cad5e1, type: 3} + m_preTaaCS: {fileID: 7200000, guid: a679dba8ec4d9ce45884a270b0e22dda, type: 3} + m_taaCS: {fileID: 7200000, guid: 3923900e2b41b5e47bc25bfdcbcdc9e6, type: 3} + - rid: 1071524756539572925 + type: {class: RenderGraphUtilsResources, ns: UnityEngine.Rendering.RenderGraphModule.Util, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 0 + m_CoreCopyPS: {fileID: 4800000, guid: 12dc59547ea167a4ab435097dd0f9add, type: 3} + - rid: 1071524756539572926 + type: {class: ProbeVolumeDebugResources, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + probeVolumeDebugShader: {fileID: 4800000, guid: 3b21275fd12d65f49babb5286f040f2d, type: 3} + probeVolumeFragmentationDebugShader: {fileID: 4800000, guid: 3a80877c579b9144ebdcc6d923bca303, type: 3} + probeVolumeSamplingDebugShader: {fileID: 4800000, guid: bf54e6528c79a224e96346799064c393, type: 3} + probeVolumeOffsetDebugShader: {fileID: 4800000, guid: db8bd7436dc2c5f4c92655307d198381, type: 3} + probeSamplingDebugMesh: {fileID: -3555484719484374845, guid: 20be25aac4e22ee49a7db76fb3df6de2, type: 3} + numbersDisplayTex: {fileID: 2800000, guid: 73fe53b428c5b3440b7e87ee830b608a, type: 3} + - rid: 1071524756539572927 + type: {class: ProbeVolumeGlobalSettings, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 1 + m_ProbeVolumeDisableStreamingAssets: 0 + - rid: 1071524756539572928 + type: {class: ShaderStrippingSetting, ns: UnityEngine.Rendering, asm: Unity.RenderPipelines.Core.Runtime} + data: + m_Version: 0 + m_ExportShaderVariants: 1 + m_ShaderVariantLogLevel: 0 + m_StripRuntimeDebugShaders: 1 diff --git a/src/LitMotion/Assets/Settings/URP/UniversalRenderPipelineGlobalSettings.asset.meta b/src/LitMotion/Assets/Settings/URP/UniversalRenderPipelineGlobalSettings.asset.meta new file mode 100644 index 00000000..6b42ba72 --- /dev/null +++ b/src/LitMotion/Assets/Settings/URP/UniversalRenderPipelineGlobalSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa84dd5dc05414d4b80202fd256a3080 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Packages/manifest.json b/src/LitMotion/Packages/manifest.json index 2dafe178..93b50681 100644 --- a/src/LitMotion/Packages/manifest.json +++ b/src/LitMotion/Packages/manifest.json @@ -9,6 +9,7 @@ "com.unity.ide.visualstudio": "2.0.22", "com.unity.logging": "1.3.2", "com.unity.multiplayer.center": "1.0.0", + "com.unity.render-pipelines.universal": "17.0.3", "com.unity.timeline": "1.8.7", "com.unity.toolchain.macos-arm64-linux-x86_64": "2.0.3", "com.unity.ugui": "2.0.0", diff --git a/src/LitMotion/Packages/packages-lock.json b/src/LitMotion/Packages/packages-lock.json index 2d16e5c6..110b24d8 100644 --- a/src/LitMotion/Packages/packages-lock.json +++ b/src/LitMotion/Packages/packages-lock.json @@ -158,6 +158,24 @@ "com.unity.rendering.light-transport": "1.0.1" } }, + "com.unity.render-pipelines.universal": { + "version": "17.0.3", + "depth": 0, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.0.3", + "com.unity.shadergraph": "17.0.3", + "com.unity.render-pipelines.universal-config": "17.0.3" + } + }, + "com.unity.render-pipelines.universal-config": { + "version": "17.0.3", + "depth": 1, + "source": "builtin", + "dependencies": { + "com.unity.render-pipelines.core": "17.0.3" + } + }, "com.unity.rendering.light-transport": { "version": "1.0.1", "depth": 2, diff --git a/src/LitMotion/ProjectSettings/GraphicsSettings.asset b/src/LitMotion/ProjectSettings/GraphicsSettings.asset index 43369e3c..4351892d 100644 --- a/src/LitMotion/ProjectSettings/GraphicsSettings.asset +++ b/src/LitMotion/ProjectSettings/GraphicsSettings.asset @@ -3,7 +3,7 @@ --- !u!30 &1 GraphicsSettings: m_ObjectHideFlags: 0 - serializedVersion: 13 + serializedVersion: 16 m_Deferred: m_Mode: 1 m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} @@ -13,9 +13,6 @@ GraphicsSettings: m_ScreenSpaceShadows: m_Mode: 1 m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} - m_LegacyDeferred: - m_Mode: 1 - m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} m_DepthNormals: m_Mode: 1 m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} @@ -28,6 +25,7 @@ GraphicsSettings: m_LensFlare: m_Mode: 1 m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} + m_VideoShadersIncludeMode: 2 m_AlwaysIncludedShaders: - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} @@ -36,9 +34,9 @@ GraphicsSettings: - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} m_PreloadedShaders: [] - m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, - type: 0} - m_CustomRenderPipeline: {fileID: 0} + m_PreloadShadersBatchTimeLimit: -1 + m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_CustomRenderPipeline: {fileID: 11400000, guid: 119398a6f85244ccd974cb6c1664dec4, type: 2} m_TransparencySortMode: 0 m_TransparencySortAxis: {x: 0, y: 0, z: 1} m_DefaultRenderingPath: 1 @@ -47,6 +45,7 @@ GraphicsSettings: m_LightmapStripping: 0 m_FogStripping: 0 m_InstancingStripping: 0 + m_BrgStripping: 0 m_LightmapKeepPlain: 1 m_LightmapKeepDirCombined: 1 m_LightmapKeepDynamicPlain: 1 @@ -57,7 +56,11 @@ GraphicsSettings: m_FogKeepExp: 1 m_FogKeepExp2: 1 m_AlbedoSwatchInfos: [] + m_RenderPipelineGlobalSettingsMap: + UnityEngine.Rendering.Universal.UniversalRenderPipeline: {fileID: 11400000, guid: fa84dd5dc05414d4b80202fd256a3080, type: 2} m_LightsUseLinearIntensity: 0 - m_LightsUseColorTemperature: 0 + m_LightsUseColorTemperature: 1 m_LogWhenShaderIsCompiled: 0 - m_AllowEnlightenSupportForUpgradedProject: 0 + m_LightProbeOutsideHullStrategy: 0 + m_CameraRelativeLightCulling: 0 + m_CameraRelativeShadowCulling: 0 diff --git a/src/LitMotion/ProjectSettings/QualitySettings.asset b/src/LitMotion/ProjectSettings/QualitySettings.asset index 5e46e880..335f8da1 100644 --- a/src/LitMotion/ProjectSettings/QualitySettings.asset +++ b/src/LitMotion/ProjectSettings/QualitySettings.asset @@ -4,107 +4,9 @@ QualitySettings: m_ObjectHideFlags: 0 serializedVersion: 5 - m_CurrentQuality: 5 + m_CurrentQuality: 0 m_QualitySettings: - - serializedVersion: 3 - name: Very Low - pixelLightCount: 0 - shadows: 0 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 15 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - skinWeights: 1 - globalTextureMipmapLimit: 1 - textureMipmapLimitSettings: [] - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - useLegacyDetailDistribution: 1 - vSyncCount: 0 - realtimeGICPUUsage: 25 - lodBias: 0.3 - maximumLODLevel: 0 - enableLODCrossFade: 1 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 4 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - customRenderPipeline: {fileID: 0} - terrainQualityOverrides: 0 - terrainPixelError: 1 - terrainDetailDensityScale: 1 - terrainBasemapDistance: 1000 - terrainDetailDistance: 80 - terrainTreeDistance: 5000 - terrainBillboardStart: 50 - terrainFadeLength: 5 - terrainMaxTrees: 50 - excludedTargetPlatforms: [] - - serializedVersion: 3 - name: Low - pixelLightCount: 0 - shadows: 0 - shadowResolution: 0 - shadowProjection: 1 - shadowCascades: 1 - shadowDistance: 20 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 0 - skinWeights: 2 - globalTextureMipmapLimit: 0 - textureMipmapLimitSettings: [] - anisotropicTextures: 0 - antiAliasing: 0 - softParticles: 0 - softVegetation: 0 - realtimeReflectionProbes: 0 - billboardsFaceCameraPosition: 0 - useLegacyDetailDistribution: 1 - vSyncCount: 0 - realtimeGICPUUsage: 25 - lodBias: 0.4 - maximumLODLevel: 0 - enableLODCrossFade: 1 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 16 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - customRenderPipeline: {fileID: 0} - terrainQualityOverrides: 0 - terrainPixelError: 1 - terrainDetailDensityScale: 1 - terrainBasemapDistance: 1000 - terrainDetailDistance: 80 - terrainTreeDistance: 5000 - terrainBillboardStart: 50 - terrainFadeLength: 5 - terrainMaxTrees: 50 - excludedTargetPlatforms: [] - - serializedVersion: 3 + - serializedVersion: 4 name: Medium pixelLightCount: 1 shadows: 1 @@ -126,8 +28,11 @@ QualitySettings: realtimeReflectionProbes: 0 billboardsFaceCameraPosition: 0 useLegacyDetailDistribution: 1 + adaptiveVsync: 0 vSyncCount: 1 realtimeGICPUUsage: 25 + adaptiveVsyncExtraA: 0 + adaptiveVsyncExtraB: 0 lodBias: 0.7 maximumLODLevel: 0 enableLODCrossFade: 1 @@ -142,154 +47,7 @@ QualitySettings: asyncUploadBufferSize: 16 asyncUploadPersistentBuffer: 1 resolutionScalingFixedDPIFactor: 1 - customRenderPipeline: {fileID: 0} - terrainQualityOverrides: 0 - terrainPixelError: 1 - terrainDetailDensityScale: 1 - terrainBasemapDistance: 1000 - terrainDetailDistance: 80 - terrainTreeDistance: 5000 - terrainBillboardStart: 50 - terrainFadeLength: 5 - terrainMaxTrees: 50 - excludedTargetPlatforms: [] - - serializedVersion: 3 - name: High - pixelLightCount: 2 - shadows: 2 - shadowResolution: 1 - shadowProjection: 1 - shadowCascades: 2 - shadowDistance: 40 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - skinWeights: 2 - globalTextureMipmapLimit: 0 - textureMipmapLimitSettings: [] - anisotropicTextures: 1 - antiAliasing: 0 - softParticles: 0 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - useLegacyDetailDistribution: 1 - vSyncCount: 1 - realtimeGICPUUsage: 50 - lodBias: 1 - maximumLODLevel: 0 - enableLODCrossFade: 1 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 256 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - customRenderPipeline: {fileID: 0} - terrainQualityOverrides: 0 - terrainPixelError: 1 - terrainDetailDensityScale: 1 - terrainBasemapDistance: 1000 - terrainDetailDistance: 80 - terrainTreeDistance: 5000 - terrainBillboardStart: 50 - terrainFadeLength: 5 - terrainMaxTrees: 50 - excludedTargetPlatforms: [] - - serializedVersion: 3 - name: Very High - pixelLightCount: 3 - shadows: 2 - shadowResolution: 2 - shadowProjection: 1 - shadowCascades: 2 - shadowDistance: 70 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - skinWeights: 4 - globalTextureMipmapLimit: 0 - textureMipmapLimitSettings: [] - anisotropicTextures: 2 - antiAliasing: 2 - softParticles: 1 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - useLegacyDetailDistribution: 1 - vSyncCount: 1 - realtimeGICPUUsage: 50 - lodBias: 1.5 - maximumLODLevel: 0 - enableLODCrossFade: 1 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 1024 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - customRenderPipeline: {fileID: 0} - terrainQualityOverrides: 0 - terrainPixelError: 1 - terrainDetailDensityScale: 1 - terrainBasemapDistance: 1000 - terrainDetailDistance: 80 - terrainTreeDistance: 5000 - terrainBillboardStart: 50 - terrainFadeLength: 5 - terrainMaxTrees: 50 - excludedTargetPlatforms: [] - - serializedVersion: 3 - name: Ultra - pixelLightCount: 4 - shadows: 2 - shadowResolution: 2 - shadowProjection: 1 - shadowCascades: 4 - shadowDistance: 150 - shadowNearPlaneOffset: 3 - shadowCascade2Split: 0.33333334 - shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} - shadowmaskMode: 1 - skinWeights: 4 - globalTextureMipmapLimit: 0 - textureMipmapLimitSettings: [] - anisotropicTextures: 2 - antiAliasing: 2 - softParticles: 1 - softVegetation: 1 - realtimeReflectionProbes: 1 - billboardsFaceCameraPosition: 1 - useLegacyDetailDistribution: 1 - vSyncCount: 0 - realtimeGICPUUsage: 100 - lodBias: 2 - maximumLODLevel: 0 - enableLODCrossFade: 1 - streamingMipmapsActive: 0 - streamingMipmapsAddAllCameras: 1 - streamingMipmapsMemoryBudget: 512 - streamingMipmapsRenderersPerFrame: 512 - streamingMipmapsMaxLevelReduction: 2 - streamingMipmapsMaxFileIORequests: 1024 - particleRaycastBudget: 4096 - asyncUploadTimeSlice: 2 - asyncUploadBufferSize: 16 - asyncUploadPersistentBuffer: 1 - resolutionScalingFixedDPIFactor: 1 - customRenderPipeline: {fileID: 0} + customRenderPipeline: {fileID: 11400000, guid: 119398a6f85244ccd974cb6c1664dec4, type: 2} terrainQualityOverrides: 0 terrainPixelError: 1 terrainDetailDensityScale: 1 @@ -302,17 +60,17 @@ QualitySettings: excludedTargetPlatforms: [] m_TextureMipmapLimitGroupNames: [] m_PerPlatformDefaultQuality: - Android: 2 - Lumin: 5 - Nintendo 3DS: 5 - Nintendo Switch: 5 - PS4: 5 - PSP2: 2 + Android: 0 + Lumin: 0 + Nintendo 3DS: 0 + Nintendo Switch: 0 + PS4: 0 + PSP2: 0 Server: 0 - Stadia: 5 - Standalone: 5 - WebGL: 3 - Windows Store Apps: 5 - XboxOne: 5 - iPhone: 2 - tvOS: 2 + Stadia: 0 + Standalone: 0 + WebGL: 0 + Windows Store Apps: 0 + XboxOne: 0 + iPhone: 0 + tvOS: 0 diff --git a/src/LitMotion/ProjectSettings/URPProjectSettings.asset b/src/LitMotion/ProjectSettings/URPProjectSettings.asset new file mode 100644 index 00000000..08faf033 --- /dev/null +++ b/src/LitMotion/ProjectSettings/URPProjectSettings.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 247994e1f5a72c2419c26a37e9334c01, type: 3} + m_Name: + m_EditorClassIdentifier: + m_LastMaterialVersion: 9 From 3ff529677e8d53df54b30cd3e2aa4ae363c443b5 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 6 Dec 2024 20:17:50 +0900 Subject: [PATCH 095/224] Add: Volume extensions --- .../Extensions/LitMotion.Extensions.asmdef | 14 ++++++++- .../Extensions/{URP.meta => Rendering.meta} | 0 .../Rendering/LitMotionVolumeExtensions.cs | 30 +++++++++++++++++++ .../LitMotionVolumeExtensions.cs.meta | 2 ++ 4 files changed, 45 insertions(+), 1 deletion(-) rename src/LitMotion/Assets/LitMotion/Runtime/Extensions/{URP.meta => Rendering.meta} (100%) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/Rendering/LitMotionVolumeExtensions.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Extensions/Rendering/LitMotionVolumeExtensions.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef index d97a92a6..31ebb49c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/LitMotion.Extensions.asmdef @@ -5,7 +5,9 @@ "GUID:3b570a5146f9d4f0fa107ed4559471a3", "GUID:6055be8ebefd69e48b49212b09b47b2f", "GUID:e0cd26848372d4e5c891c569017e11f1", - "GUID:33661e06c33d31b4c9223810bf503247" + "GUID:33661e06c33d31b4c9223810bf503247", + "GUID:df380645f10b7bc4b97d4f5eb6303d95", + "GUID:15fc0a57446b3144c949da3e2b9737a9" ], "includePlatforms": [], "excludePlatforms": [], @@ -59,6 +61,16 @@ "name": "com.unity.modules.physics2d", "expression": "", "define": "LITMOTION_SUPPORT_PHYSICS_2D" + }, + { + "name": "com.unity.render-pipelines.core", + "expression": "", + "define": "LITMOTION_SUPPORT_RENDER_PIPELINES" + }, + { + "name": "com.unity.render-pipelines.universal", + "expression": "", + "define": "LITMOTION_SUPPORT_URP" } ], "noEngineReferences": false diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/URP.meta b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/Rendering.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Extensions/URP.meta rename to src/LitMotion/Assets/LitMotion/Runtime/Extensions/Rendering.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/Rendering/LitMotionVolumeExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/Rendering/LitMotionVolumeExtensions.cs new file mode 100644 index 00000000..84961ea5 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/Rendering/LitMotionVolumeExtensions.cs @@ -0,0 +1,30 @@ +#if LITMOTION_SUPPORT_RENDER_PIPELINES + +using UnityEngine.Rendering; + +namespace LitMotion.Extensions +{ + /// + /// Provides binding extension methods for Volume. + /// + public static class LitMotionVolumeExtensions + { + /// + /// Create a motion data and bind it to Volume.weight + /// + /// The type of special parameters given to the motion data + /// The type of adapter that support value animation + /// This builder + /// Target component + /// Handle of the created motion data. + public static MotionHandle BindToWeight(this MotionBuilder builder, Volume volume) + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Error.IsNull(volume); + return builder.Bind(volume, static (x, volume) => volume.weight = x); + } + } +} + +#endif \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/Rendering/LitMotionVolumeExtensions.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/Rendering/LitMotionVolumeExtensions.cs.meta new file mode 100644 index 00000000..c07b0b6a --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/Rendering/LitMotionVolumeExtensions.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c6539aca70dcd47f1859d27ec16ce838 \ No newline at end of file From ecf0f1aa2e2380cafc667a90d6ef9f5bb51b9019 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 7 Dec 2024 10:07:34 +0900 Subject: [PATCH 096/224] Fix: Complete and Cancel for Sequences do not work properly --- .../Runtime/Internal/MotionStorage.cs | 4 ++- .../Runtime/Sequences/MotionSequenceSource.cs | 33 +++++++++++++------ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index d2301034..dffb4014 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -234,7 +234,8 @@ int TryCancelCore(MotionHandle handle) return 1; } - if (unmanagedData.Core.Status is MotionStatus.None or MotionStatus.Canceled or MotionStatus.Completed) + if (unmanagedData.Core.Status is MotionStatus.None or MotionStatus.Canceled || + (unmanagedData.Core.Status is MotionStatus.Completed && !unmanagedData.Core.IsPreserved)) { return 2; } @@ -304,6 +305,7 @@ int TryCompleteCore(MotionHandle handle) ref var managedData = ref managedDataArray[slot.DenseIndex]; unmanagedData.Core.Status = MotionStatus.Completed; + unmanagedData.Core.Time = MotionHelper.GetTotalDuration(ref unmanagedData.Core); var endProgress = unmanagedData.Core.LoopType switch { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index ff05aa91..f6805822 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -51,14 +51,8 @@ public void Initialize(MotionHandle handle, MotionSequenceItem[] itemBuffer, int MotionSequenceSource() { - onCompleteDelegate = () => - { - if (MotionManager.IsActive(handle) && !MotionManager.GetDataRef(handle).IsPreserved) - { - Return(this); - } - }; - onCancelDelegate = () => Return(this); + onCompleteDelegate = OnComplete; + onCancelDelegate = OnCancel; } readonly Action onCompleteDelegate; @@ -76,6 +70,8 @@ public void Initialize(MotionHandle handle, MotionSequenceItem[] itemBuffer, int public Action OnCompleteDelegate => onCompleteDelegate; public Action OnCancelDelegate => onCancelDelegate; + public ReadOnlySpan Items => itemBuffer.AsSpan(0, itemCount); + public double Time { get => time; @@ -83,8 +79,7 @@ public double Time { time = value; - var span = itemBuffer.AsSpan(0, itemCount); - + var span = Items; var index = span.Length - 1; while (index >= 0) { @@ -102,5 +97,23 @@ public double Time } public double Duration => duration; + + void OnComplete() + { + if (!handle.IsActive()) return; + if (MotionManager.GetDataRef(handle).IsPreserved) return; + + Return(this); + } + + void OnCancel() + { + foreach (var item in Items) + { + item.Handle.Cancel(); + } + + Return(this); + } } } \ No newline at end of file From 8490b67de61d00dfaf941a567333b51558a64614 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 7 Dec 2024 12:48:25 +0900 Subject: [PATCH 097/224] Add: tests --- .../LitMotion/Tests/Runtime/SequenceTest.cs | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs index d6e5d8e8..4d7f65cc 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs @@ -110,6 +110,53 @@ public IEnumerator Test_Nested_Sequence() Assert.That(y, Is.EqualTo(0f)); } + [Test] + public void Test_Complete() + { + var flag1 = false; + var flag2 = false; + var x = 0f; + var y = 0f; + + var handle = LSequence.Create() + .Append(LMotion.Create(0f, 1f, 1f) + .WithOnComplete(() => flag1 = true) + .Bind(v => x = v)) + .Append(LMotion.Create(0f, 1f, 1f) + .WithOnComplete(() => flag2 = true) + .Bind(v => y = v)) + .Schedule(); + + handle.Complete(); + + Assert.IsTrue(flag1); + Assert.IsTrue(flag2); + Assert.That(x, Is.EqualTo(1f)); + Assert.That(y, Is.EqualTo(1f)); + } + + [Test] + public void Test_Cancel() + { + var flag1 = false; + var flag2 = false; + + var handle = LSequence.Create() + .Append(LMotion.Create(0f, 1f, 1f) + .WithOnCancel(() => flag1 = true) + .RunWithoutBinding()) + .Append(LMotion.Create(0f, 1f, 1f) + .WithOnCancel(() => flag2 = true) + .RunWithoutBinding()) + .Schedule(); + + handle.Cancel(); + + Assert.IsTrue(flag1); + Assert.IsTrue(flag2); + } + + [UnityTest] public IEnumerator Test_Error_AppendRunningMotion() { From 75ea1388c53c9aea47b31499425d503f1004e421 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 7 Dec 2024 14:31:54 +0900 Subject: [PATCH 098/224] Change: calculate random numbers using a hash value derived from the seed and time. --- .../Adapters/FixedStringMotionAdapters.cs | 15 +++----- .../Runtime/Adapters/ShakeMotionAdapters.cs | 31 +++------------- .../Runtime/Internal/MotionHelper.cs | 3 +- .../Runtime/Internal/MotionStorage.cs | 6 +++- .../Runtime/Internal/RandomHelper.cs | 36 +++++++++++++++++++ .../Runtime/Internal/RandomHelper.cs.meta | 2 ++ .../Runtime/Internal/SharedRandom.cs | 20 ----------- .../Runtime/Internal/SharedRandom.cs.meta | 11 ------ .../Runtime/MotionBuilderExtensions.cs | 4 +-- .../Runtime/MotionEvaluationContext.cs | 5 +++ .../LitMotion/Runtime/Options/ShakeOptions.cs | 6 ++-- .../Runtime/Options/StringOptions.cs | 6 ++-- 12 files changed, 67 insertions(+), 78 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/RandomHelper.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/RandomHelper.cs.meta delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/SharedRandom.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/SharedRandom.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Adapters/FixedStringMotionAdapters.cs b/src/LitMotion/Assets/LitMotion/Runtime/Adapters/FixedStringMotionAdapters.cs index e9b9fa00..27623b1b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Adapters/FixedStringMotionAdapters.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Adapters/FixedStringMotionAdapters.cs @@ -18,8 +18,7 @@ public FixedString32Bytes Evaluate(ref FixedString32Bytes startValue, ref FixedS var start = startValue; var end = endValue; var customScrambleChars = options.CustomScrambleChars; - ref var randomState = ref options.RandomState; - if (randomState.state == 0) randomState = ref SharedRandom.Random; + var randomState = RandomHelper.Create(options.RandomSeed, context.Time); FixedStringHelper.Interpolate(ref start, ref end, context.Progress, options.ScrambleMode, options.RichTextEnabled, ref randomState, ref customScrambleChars, out var result); return result; } @@ -32,8 +31,7 @@ public FixedString64Bytes Evaluate(ref FixedString64Bytes startValue, ref FixedS var start = startValue; var end = endValue; var customScrambleChars = options.CustomScrambleChars; - ref var randomState = ref options.RandomState; - if (randomState.state == 0) randomState = ref SharedRandom.Random; + var randomState = RandomHelper.Create(options.RandomSeed, context.Time); FixedStringHelper.Interpolate(ref start, ref end, context.Progress, options.ScrambleMode, options.RichTextEnabled, ref randomState, ref customScrambleChars, out var result); return result; } @@ -46,8 +44,7 @@ public FixedString128Bytes Evaluate(ref FixedString128Bytes startValue, ref Fixe var start = startValue; var end = endValue; var customScrambleChars = options.CustomScrambleChars; - ref var randomState = ref options.RandomState; - if (randomState.state == 0) randomState = ref SharedRandom.Random; + var randomState = RandomHelper.Create(options.RandomSeed, context.Time); FixedStringHelper.Interpolate(ref start, ref end, context.Progress, options.ScrambleMode, options.RichTextEnabled, ref randomState, ref customScrambleChars, out var result); return result; } @@ -60,8 +57,7 @@ public FixedString512Bytes Evaluate(ref FixedString512Bytes startValue, ref Fixe var start = startValue; var end = endValue; var customScrambleChars = options.CustomScrambleChars; - ref var randomState = ref options.RandomState; - if (randomState.state == 0) randomState = ref SharedRandom.Random; + var randomState = RandomHelper.Create(options.RandomSeed, context.Time); FixedStringHelper.Interpolate(ref start, ref end, context.Progress, options.ScrambleMode, options.RichTextEnabled, ref randomState, ref customScrambleChars, out var result); return result; } @@ -74,8 +70,7 @@ public FixedString4096Bytes Evaluate(ref FixedString4096Bytes startValue, ref Fi var start = startValue; var end = endValue; var customScrambleChars = options.CustomScrambleChars; - ref var randomState = ref options.RandomState; - if (randomState.state == 0) randomState = ref SharedRandom.Random; + var randomState = RandomHelper.Create(options.RandomSeed, context.Time); FixedStringHelper.Interpolate(ref start, ref end, context.Progress, options.ScrambleMode, options.RichTextEnabled, ref randomState, ref customScrambleChars, out var result); return result; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Adapters/ShakeMotionAdapters.cs b/src/LitMotion/Assets/LitMotion/Runtime/Adapters/ShakeMotionAdapters.cs index 06394aa3..3c878f9c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Adapters/ShakeMotionAdapters.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Adapters/ShakeMotionAdapters.cs @@ -2,6 +2,7 @@ using UnityEngine; using LitMotion; using LitMotion.Adapters; +using Unity.Mathematics; [assembly: RegisterGenericJobType(typeof(MotionUpdateJob))] [assembly: RegisterGenericJobType(typeof(MotionUpdateJob))] @@ -16,15 +17,7 @@ namespace LitMotion.Adapters public float Evaluate(ref float startValue, ref float endValue, ref ShakeOptions options, in MotionEvaluationContext context) { VibrationHelper.EvaluateStrength(endValue, options.Frequency, options.DampingRatio, context.Progress, out var s); - float multipliar; - if (options.RandomState.state == 0) - { - multipliar = SharedRandom.Random.NextFloat(-1f, 1f); - } - else - { - multipliar = options.RandomState.NextFloat(-1f, 1f); - } + var multipliar = RandomHelper.NextFloat(options.RandomSeed, context.Time, -1f, 1f); return startValue + s * multipliar; } } @@ -34,15 +27,7 @@ public float Evaluate(ref float startValue, ref float endValue, ref ShakeOptions public Vector2 Evaluate(ref Vector2 startValue, ref Vector2 endValue, ref ShakeOptions options, in MotionEvaluationContext context) { VibrationHelper.EvaluateStrength(endValue, options.Frequency, options.DampingRatio, context.Progress, out var s); - Vector2 multipliar; - if (options.RandomState.state == 0) - { - multipliar = new Vector2(SharedRandom.Random.NextFloat(-1f, 1f), SharedRandom.Random.NextFloat(-1f, 1f)); - } - else - { - multipliar = new Vector2(options.RandomState.NextFloat(-1f, 1f), options.RandomState.NextFloat(-1f, 1f)); - } + var multipliar = RandomHelper.NextFloat2(options.RandomSeed, context.Time, new float2(-1f, -1f), new float2(1f, 1f)); return startValue + new Vector2(s.x * multipliar.x, s.y * multipliar.y); } } @@ -52,15 +37,7 @@ public Vector2 Evaluate(ref Vector2 startValue, ref Vector2 endValue, ref ShakeO public Vector3 Evaluate(ref Vector3 startValue, ref Vector3 endValue, ref ShakeOptions options, in MotionEvaluationContext context) { VibrationHelper.EvaluateStrength(endValue, options.Frequency, options.DampingRatio, context.Progress, out var s); - Vector3 multipliar; - if (options.RandomState.state == 0) - { - multipliar = new Vector3(SharedRandom.Random.NextFloat(-1f, 1f), SharedRandom.Random.NextFloat(-1f, 1f), SharedRandom.Random.NextFloat(-1f, 1f)); - } - else - { - multipliar = new Vector3(options.RandomState.NextFloat(-1f, 1f), options.RandomState.NextFloat(-1f, 1f), options.RandomState.NextFloat(-1f, 1f)); - } + var multipliar = RandomHelper.NextFloat3(options.RandomSeed, context.Time, new float3(-1f, -1f, -1f), new float3(1f, 1f, 1f)); return startValue + new Vector3(s.x * multipliar.x, s.y * multipliar.y, s.z * multipliar.z); } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs index ea8192ad..d01739c3 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -133,7 +133,8 @@ public static void Update(MotionDataStartValue, ref ptr->EndValue, ref ptr->Options, context); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index dffb4014..52671944 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -327,7 +327,11 @@ int TryCompleteCore(MotionHandle handle) ref unmanagedData.StartValue, ref unmanagedData.EndValue, ref unmanagedData.Options, - new() { Progress = easedEndProgress } + new() + { + Progress = easedEndProgress, + Time = unmanagedData.Core.Time, + } ); managedData.UpdateUnsafe(endValue); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/RandomHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/RandomHelper.cs new file mode 100644 index 00000000..c82642af --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/RandomHelper.cs @@ -0,0 +1,36 @@ +using Unity.Mathematics; +using UnityEngine; + +namespace LitMotion +{ + internal static class RandomHelper + { + public static float NextFloat(uint seed, double time, float min, float max) + { + return Create(seed, time).NextFloat(min, max); + } + + public static float2 NextFloat2(uint seed, double time, in float2 min, in float2 max) + { + return Create(seed, time).NextFloat2(min, max); + } + + public static float3 NextFloat3(uint seed, double time, in float3 min, in float3 max) + { + return Create(seed, time).NextFloat3(min, max); + } + + static uint GetHash(uint seed, double time) + { + var hash = new Hash128(); + hash.Append(ref seed); + hash.Append(ref time); + return (uint)hash.GetHashCode(); + } + + public static Unity.Mathematics.Random Create(uint seed, double time) + { + return new Unity.Mathematics.Random(GetHash(seed, time)); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/RandomHelper.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/RandomHelper.cs.meta new file mode 100644 index 00000000..2e763f1d --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/RandomHelper.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 48c0aa60f5a06434a94c2b4892b7bcd2 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/SharedRandom.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/SharedRandom.cs deleted file mode 100644 index 9c4f8650..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/SharedRandom.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Unity.Burst; -using Unity.Mathematics; - -namespace LitMotion -{ - static class SharedRandom - { - readonly struct Key { } - static readonly SharedStatic sharedStatic = SharedStatic.GetOrCreate(); - - public static ref Random Random - { - get - { - if (sharedStatic.Data.state == 0) sharedStatic.Data.InitState(); - return ref sharedStatic.Data; - } - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/SharedRandom.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/SharedRandom.cs.meta deleted file mode 100644 index 51d9718a..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/SharedRandom.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 52577232f18cf4e13955b15d9b77f797 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs index 984e827d..b56113c2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilderExtensions.cs @@ -127,7 +127,7 @@ public static MotionBuilder WithRandomSeed { var options = builder.buffer.Options; - options.RandomState = new Unity.Mathematics.Random(seed); + options.RandomSeed = seed; builder.buffer.Options = options; return builder; } @@ -163,7 +163,7 @@ public static MotionBuilder WithRandomSeed { var options = builder.buffer.Options; - options.RandomState = new Unity.Mathematics.Random(seed); + options.RandomSeed = seed; builder.buffer.Options = options; return builder; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionEvaluationContext.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionEvaluationContext.cs index d4cd44da..fe1ed479 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionEvaluationContext.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionEvaluationContext.cs @@ -9,5 +9,10 @@ public struct MotionEvaluationContext /// Progress (0-1) /// public float Progress; + + /// + /// Current motion time + /// + public double Time; } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Options/ShakeOptions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Options/ShakeOptions.cs index ba337cee..7aa98fa3 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Options/ShakeOptions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Options/ShakeOptions.cs @@ -10,7 +10,7 @@ public struct ShakeOptions : IEquatable, IMotionOptions { public int Frequency; public float DampingRatio; - public Unity.Mathematics.Random RandomState; + public uint RandomSeed; public static ShakeOptions Default { @@ -28,7 +28,7 @@ public readonly bool Equals(ShakeOptions other) { return other.Frequency == Frequency && other.DampingRatio == DampingRatio && - other.RandomState.state == RandomState.state; + other.RandomSeed == RandomSeed; } public override readonly bool Equals(object obj) @@ -39,7 +39,7 @@ public override readonly bool Equals(object obj) public override readonly int GetHashCode() { - return HashCode.Combine(Frequency, DampingRatio, RandomState); + return HashCode.Combine(Frequency, DampingRatio, RandomSeed); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Options/StringOptions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Options/StringOptions.cs index 82bf63ff..d197c1d4 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Options/StringOptions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Options/StringOptions.cs @@ -43,14 +43,14 @@ public struct StringOptions : IMotionOptions, IEquatable public ScrambleMode ScrambleMode; public bool RichTextEnabled; public FixedString64Bytes CustomScrambleChars; - public Unity.Mathematics.Random RandomState; + public uint RandomSeed; public readonly bool Equals(StringOptions other) { return other.ScrambleMode == ScrambleMode && other.RichTextEnabled == RichTextEnabled && other.CustomScrambleChars == CustomScrambleChars && - other.RandomState.state == RandomState.state; + other.RandomSeed == RandomSeed; } public override readonly bool Equals(object obj) @@ -61,7 +61,7 @@ public override readonly bool Equals(object obj) public override readonly int GetHashCode() { - return HashCode.Combine(ScrambleMode, RichTextEnabled, CustomScrambleChars, RandomState); + return HashCode.Combine(ScrambleMode, RichTextEnabled, CustomScrambleChars, RandomSeed); } } } \ No newline at end of file From d5c8f462f1baf0f6909fb7391dad7eff598c7760 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 7 Dec 2024 14:40:00 +0900 Subject: [PATCH 099/224] Fix: context time not passed --- .../Assets/LitMotion/Runtime/Internal/MotionStorage.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 52671944..713be9ca 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -127,7 +127,8 @@ public unsafe MotionHandle Create(ref MotionBuilder { Ease.CustomAnimationCurve => buffer.AnimationCurve.Evaluate(0f), _ => EaseUtility.Evaluate(0f, dataRef.Core.Ease) - } + }, + Time = dataRef.Core.Time, } )); } From cbd6ed0de5f6565b2f98ee0b2836aee6db85c732 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 7 Dec 2024 15:09:11 +0900 Subject: [PATCH 100/224] Fix: BoxMinus1 --- src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs index e4755377..fd014d2c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Box.cs @@ -5,7 +5,7 @@ namespace LitMotion { internal static class Box { - static readonly Box BoxMinus1 = new(0); + static readonly Box BoxMinus1 = new(-1); static readonly Box Box0 = new(0); static readonly Box Box1 = new(1); static readonly Box Box2 = new(2); From a34733ca882b2c19a4a30a61711b2968a06f45e1 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 7 Dec 2024 20:56:03 +0900 Subject: [PATCH 101/224] Fix: TextMeshPro character motion Complete doesn't work --- src/LitMotion/.gitignore | 4 ++ .../LitMotionTextMeshProExtensions.cs | 72 +++++++++---------- .../TextMeshPro/TextMeshProMotionAnimator.cs | 56 +++++---------- 3 files changed, 58 insertions(+), 74 deletions(-) diff --git a/src/LitMotion/.gitignore b/src/LitMotion/.gitignore index 4c6fbcb8..fe754c7c 100644 --- a/src/LitMotion/.gitignore +++ b/src/LitMotion/.gitignore @@ -77,3 +77,7 @@ crashlytics-build.properties # DS_Store *.DS_Store + +# TextMesh Pro +/[Aa]ssets/TextMesh Pro/ +/[Aa]ssets/TextMesh Pro.meta \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs index 9d8e1f05..fdc3b84f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/LitMotionTextMeshProExtensions.cs @@ -511,11 +511,11 @@ public static MotionHandle BindToTMPCharColor(this MotionBui var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].color = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -537,11 +537,11 @@ public static MotionHandle BindToTMPCharColorR(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].color.r = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -563,11 +563,11 @@ public static MotionHandle BindToTMPCharColorG(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].color.g = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -589,11 +589,11 @@ public static MotionHandle BindToTMPCharColorB(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].color.b = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -615,11 +615,11 @@ public static MotionHandle BindToTMPCharColorA(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].color.a = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -641,11 +641,11 @@ public static MotionHandle BindToTMPCharPosition(this Motion var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].position = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -667,11 +667,11 @@ public static MotionHandle BindToTMPCharPositionX(this Motio var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].position.x = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -693,11 +693,11 @@ public static MotionHandle BindToTMPCharPositionY(this Motio var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].position.y = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -719,11 +719,11 @@ public static MotionHandle BindToTMPCharPositionZ(this Motio var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].position.z = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -745,11 +745,11 @@ public static MotionHandle BindToTMPCharRotation(this Motion var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].rotation = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -771,11 +771,11 @@ public static MotionHandle BindToTMPCharEulerAngles(this Mot var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].rotation = Quaternion.Euler(x); + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -797,13 +797,13 @@ public static MotionHandle BindToTMPCharEulerAnglesX(this Mo var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { var eulerAngles = animator.charInfoArray[charIndex.Value].rotation.eulerAngles; eulerAngles.x = x; animator.charInfoArray[charIndex.Value].rotation = Quaternion.Euler(eulerAngles); + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -825,13 +825,13 @@ public static MotionHandle BindToTMPCharEulerAnglesY(this Mo var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { var eulerAngles = animator.charInfoArray[charIndex.Value].rotation.eulerAngles; eulerAngles.y = x; animator.charInfoArray[charIndex.Value].rotation = Quaternion.Euler(eulerAngles); + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -853,13 +853,13 @@ public static MotionHandle BindToTMPCharEulerAnglesZ(this Mo var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { var eulerAngles = animator.charInfoArray[charIndex.Value].rotation.eulerAngles; eulerAngles.z = x; animator.charInfoArray[charIndex.Value].rotation = Quaternion.Euler(eulerAngles); + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -881,11 +881,11 @@ public static MotionHandle BindToTMPCharScale(this MotionBui var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].scale = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -907,11 +907,11 @@ public static MotionHandle BindToTMPCharScaleX(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].scale.x = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -933,11 +933,11 @@ public static MotionHandle BindToTMPCharScaleY(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].scale.y = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } @@ -959,11 +959,11 @@ public static MotionHandle BindToTMPCharScaleZ(this MotionBu var animator = TextMeshProMotionAnimator.Get(text); animator.EnsureCapacity(charIndex + 1); - var handle = builder.Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => + var handle = builder.WithOnComplete(animator.updateAction).Bind(animator, Box.Create(charIndex), static (x, animator, charIndex) => { animator.charInfoArray[charIndex.Value].scale.z = x; + animator.SetDirty(); }); - animator.motionHandleList.Add(handle); return handle; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/TextMeshProMotionAnimator.cs b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/TextMeshProMotionAnimator.cs index 2f76eb04..61e7cb0a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/TextMeshProMotionAnimator.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Extensions/TextMeshPro/TextMeshProMotionAnimator.cs @@ -47,8 +47,7 @@ internal static TextMeshProMotionAnimator Get(TMP_Text text) { if (textToAnimator.TryGetValue(text, out var animator)) { - animator.RemoveCompletedMotions(); - if (animator.motionHandleList.Length == 0) animator.Reset(); + animator.Reset(); return animator; } @@ -171,11 +170,14 @@ public TextMeshProMotionAnimator() charInfoArray[i].scale = Vector3.one; charInfoArray[i].position = Vector3.zero; } + + updateAction = UpdateCore; } TMP_Text target; + internal readonly Action updateAction; internal CharInfo[] charInfoArray; - internal FastListCore motionHandleList; + bool isDirty; TextMeshProMotionAnimator nextNode; @@ -207,27 +209,9 @@ public void Update() } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetCharColor(int charIndex, Color color) - { - charInfoArray[charIndex].color = color; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetCharPosition(int charIndex, Vector3 position) - { - charInfoArray[charIndex].position = position; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetCharRotation(int charIndex, Quaternion rotation) + public void SetDirty() { - charInfoArray[charIndex].rotation = rotation; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void SetCharScale(int charIndex, Vector3 scale) - { - charInfoArray[charIndex].scale = scale; + isDirty = true; } public void Reset() @@ -239,28 +223,26 @@ public void Reset() charInfoArray[i].scale = Vector3.one; charInfoArray[i].position = Vector3.zero; } - } - void RemoveCompletedMotions() - { - for (int i = 0; i < motionHandleList.Length; i++) - { - if (!motionHandleList[i].IsActive()) - { - motionHandleList.RemoveAtSwapback(i); - i--; - } - } + isDirty = false; } + [MethodImpl(MethodImplOptions.AggressiveInlining)] bool TryUpdate() { if (target == null) return false; - RemoveCompletedMotions(); - if (motionHandleList.Length == 0) return false; + if (isDirty) + { + UpdateCore(); + } + + return true; + } + void UpdateCore() + { target.ForceMeshUpdate(); var textInfo = target.textInfo; @@ -306,8 +288,6 @@ bool TryUpdate() textInfo.meshInfo[i].mesh.vertices = textInfo.meshInfo[i].vertices; target.UpdateGeometry(textInfo.meshInfo[i].mesh, i); } - - return true; } } } From 6a8368f8a2def4987e7faf8082b8136bbb52bd86 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 7 Dec 2024 22:06:47 +0900 Subject: [PATCH 102/224] Add: WithOnLoopComplete --- .../Runtime/Internal/ManagedMotionData.cs | 30 ++++++++-- .../LitMotion/Runtime/Internal/MotionData.cs | 15 +++-- .../Runtime/Internal/MotionHelper.cs | 9 ++- .../Runtime/Internal/MotionStatus.cs | 2 +- .../Runtime/Internal/MotionStorage.cs | 55 +++++-------------- .../Runtime/Internal/UpdateRunner.cs | 31 ++--------- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 17 +++++- 7 files changed, 79 insertions(+), 80 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs index 10ee6923..9538f8d2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs @@ -18,6 +18,7 @@ public unsafe struct ManagedMotionData public object State1; public object State2; public object UpdateAction; + public Action OnLoopCompleteAction; public Action OnCompleteAction; public Action OnCancelAction; @@ -42,7 +43,7 @@ public void UpdateUnsafe(in TValue value) where TValue : unmanaged } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public void InvokeCancel() + public readonly void InvokeOnCancel() { try { @@ -54,9 +55,30 @@ public void InvokeCancel() } } - public readonly static ManagedMotionData Default = new() + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly void InvokeOnComplete() + { + try + { + OnCompleteAction?.Invoke(); + } + catch (Exception ex) + { + MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly void InvokeOnLoopComplete(int completedLoops) { - SkipValuesDuringDelay = true, - }; + try + { + OnLoopCompleteAction?.Invoke(completedLoops); + } + catch (Exception ex) + { + MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + } + } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index f69e124c..5b2d067c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -8,12 +8,16 @@ public struct MotionDataCore { // state public MotionStatus Status; - public double Time; - public float PlaybackSpeed; + public MotionStatus PrevStatus; public bool IsPreserved; - public bool WasStatusChanged; public bool SkipUpdate; + public ushort ComplpetedLoops; + public ushort PrevCompletedLoops; + + public double Time; + public float PlaybackSpeed; + // parameters public float Duration; public Ease Ease; @@ -27,8 +31,11 @@ public struct MotionDataCore public int Loops; public DelayType DelayType; public LoopType LoopType; + + public readonly bool WasStatusChanged => Status != PrevStatus; + public readonly bool WasLoopCompleted => ComplpetedLoops > PrevCompletedLoops; } - + /// /// A structure representing motion data. /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs index d01739c3..8510ca16 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs @@ -14,10 +14,9 @@ public static void Update(MotionData { var corePtr = (MotionDataCore*)ptr; - var prevStatus = corePtr->Status; - // reset flag(s) - corePtr->WasStatusChanged = false; + corePtr->PrevCompletedLoops = corePtr->ComplpetedLoops; + corePtr->PrevStatus = corePtr->Status; corePtr->Time = time; time = math.max(time, 0.0); @@ -95,6 +94,8 @@ public static void Update(MotionDataComplpetedLoops = (ushort)clampedCompletedLoops; + float progress; switch (corePtr->LoopType) { @@ -129,8 +130,6 @@ public static void Update(MotionDataStatus = MotionStatus.Playing; } - corePtr->WasStatusChanged = prevStatus != corePtr->Status; - var context = new MotionEvaluationContext() { Progress = progress, diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStatus.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStatus.cs index 895f8483..77e5d8ae 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStatus.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStatus.cs @@ -3,7 +3,7 @@ namespace LitMotion /// /// Motion status. /// - public enum MotionStatus + public enum MotionStatus : byte { None = 0, Scheduled = 1, diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 713be9ca..abe3992b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -107,6 +107,7 @@ public unsafe MotionHandle Create(ref MotionBuilder managedDataRef.CancelOnError = buffer.CancelOnError; managedDataRef.SkipValuesDuringDelay = buffer.SkipValuesDuringDelay; managedDataRef.UpdateAction = buffer.UpdateAction; + managedDataRef.OnLoopCompleteAction = buffer.OnLoopCompleteAction; managedDataRef.OnCancelAction = buffer.OnCancelAction; managedDataRef.OnCompleteAction = buffer.OnCompleteAction; managedDataRef.StateCount = buffer.StateCount; @@ -244,14 +245,7 @@ int TryCancelCore(MotionHandle handle) unmanagedData.Core.Status = MotionStatus.Canceled; ref var managedData = ref managedDataArray[denseIndex]; - try - { - managedData.OnCancelAction?.Invoke(); - } - catch (Exception ex) - { - MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); - } + managedData.InvokeOnCancel(); return 0; } @@ -307,6 +301,7 @@ int TryCompleteCore(MotionHandle handle) unmanagedData.Core.Status = MotionStatus.Completed; unmanagedData.Core.Time = MotionHelper.GetTotalDuration(ref unmanagedData.Core); + unmanagedData.Core.ComplpetedLoops = (ushort)unmanagedData.Core.Loops; var endProgress = unmanagedData.Core.LoopType switch { @@ -329,7 +324,7 @@ int TryCompleteCore(MotionHandle handle) ref unmanagedData.EndValue, ref unmanagedData.Options, new() - { + { Progress = easedEndProgress, Time = unmanagedData.Core.Time, } @@ -342,15 +337,13 @@ int TryCompleteCore(MotionHandle handle) MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); } - try + if (unmanagedData.Core.WasLoopCompleted) { - managedData.OnCompleteAction?.Invoke(); - } - catch (Exception ex) - { - MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); + managedData.InvokeOnLoopComplete(unmanagedData.Core.ComplpetedLoops); } + managedData.InvokeOnComplete(); + return 0; } @@ -373,7 +366,7 @@ public unsafe void SetTime(MotionHandle handle, double time) var status = dataPtr->Core.Status; ref var managedData = ref managedDataArray[denseIndex]; - if (status == MotionStatus.Playing || (status == MotionStatus.Delayed && !managedData.SkipValuesDuringDelay)) + if (status is MotionStatus.Playing or MotionStatus.Completed || (status == MotionStatus.Delayed && !managedData.SkipValuesDuringDelay)) { try { @@ -386,36 +379,18 @@ public unsafe void SetTime(MotionHandle handle, double time) { dataPtr->Core.Status = MotionStatus.Canceled; managedData.OnCancelAction?.Invoke(); + return; } } - } - else if (status == MotionStatus.Completed) - { - try - { - managedData.UpdateUnsafe(result); - } - catch (Exception ex) + + if (dataPtr->Core.WasLoopCompleted) { - MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); - if (managedData.CancelOnError) - { - dataPtr->Core.Status = MotionStatus.Canceled; - managedData.OnCancelAction?.Invoke(); - return; - } + managedData.InvokeOnLoopComplete(dataPtr->Core.ComplpetedLoops); } - if (dataPtr->Core.WasStatusChanged) + if (status is MotionStatus.Completed && dataPtr->Core.WasStatusChanged) { - try - { - managedData.OnCompleteAction?.Invoke(); - } - catch (Exception ex) - { - MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); - } + managedData.InvokeOnComplete(); } } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index 9ebba925..99c1e82c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -68,7 +68,7 @@ public unsafe void Update(double time, double unscaledTime, double realtime) var status = currentDataPtr->Core.Status; ref var managedData = ref managedDataSpan[i]; - if (status == MotionStatus.Playing || (status == MotionStatus.Delayed && !managedData.SkipValuesDuringDelay)) + if (status is MotionStatus.Playing or MotionStatus.Completed || (status == MotionStatus.Delayed && !managedData.SkipValuesDuringDelay)) { try { @@ -83,34 +83,15 @@ public unsafe void Update(double time, double unscaledTime, double realtime) managedData.OnCancelAction?.Invoke(); } } - } - else if (status == MotionStatus.Completed) - { - try - { - managedData.UpdateUnsafe(outputPtr[i]); - } - catch (Exception ex) + + if (dataPtr->Core.WasLoopCompleted) { - MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); - if (managedData.CancelOnError) - { - currentDataPtr->Core.Status = MotionStatus.Canceled; - managedData.OnCancelAction?.Invoke(); - continue; - } + managedData.InvokeOnLoopComplete(dataPtr->Core.ComplpetedLoops); } - if (currentDataPtr->Core.WasStatusChanged) + if (status is MotionStatus.Completed && currentDataPtr->Core.WasStatusChanged) { - try - { - managedData.OnCompleteAction?.Invoke(); - } - catch (Exception ex) - { - MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); - } + managedData.InvokeOnComplete(); } } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index cbf7bd9d..bc90d31a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -49,6 +49,7 @@ public static void Return(MotionBuilderBuffer buffer) buffer.StateCount = default; buffer.UpdateAction = default; + buffer.OnLoopCompleteAction = default; buffer.OnCompleteAction = default; buffer.OnCancelAction = default; @@ -85,6 +86,7 @@ public static void Return(MotionBuilderBuffer buffer) public object State2; public byte StateCount; public object UpdateAction; + public Action OnLoopCompleteAction; public Action OnCompleteAction; public Action OnCancelAction; public AnimationCurve AnimationCurve; @@ -210,6 +212,19 @@ public readonly MotionBuilder WithOnComplete(Action return this; } + /// + /// Specify a callback to be performed when each loop finishes. + /// + /// Callback to be performed when each loop finishes. + /// This builder to allow chaining multiple method calls. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly MotionBuilder WithOnLoopComplete(Action callback) + { + CheckBuffer(); + buffer.OnLoopCompleteAction += callback; + return this; + } + /// /// Cancel Motion when an exception occurs during Bind processing. /// @@ -456,7 +471,7 @@ internal readonly void SetCallbackData(TState0 state0 [MethodImpl(MethodImplOptions.AggressiveInlining)] readonly void CheckBuffer() { - if (buffer == null || buffer.Version != version) throw new InvalidOperationException("MotionBuilder is either not initialized or has already run a Build (or Bind). If you want to build or bind multiple times, call Preseve() for MotionBuilder."); + if (buffer == null || buffer.Version != version) throw new InvalidOperationException("MotionBuilder is either not initialized or has already run a Build (or Bind)."); } [MethodImpl(MethodImplOptions.AggressiveInlining)] From 97f8fe1dee5e39c399a8f45fc79378fbec7d2f95 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 7 Dec 2024 22:19:44 +0900 Subject: [PATCH 103/224] Add: test --- .../LitMotion/Tests/Runtime/CallbackTest.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs index 2316224b..49acce15 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs @@ -31,6 +31,23 @@ public IEnumerator Test_OnComplete() Assert.IsTrue(completed); } + [UnityTest] + public IEnumerator Test_OnLoopComplete() + { + var loopCount = 0; + LMotion.Create(0f, 10f, 1f) + .WithLoops(3) + .WithOnLoopComplete(x => loopCount = x) + .RunWithoutBinding(); + yield return new WaitForSeconds(1f); + Assert.That(loopCount, Is.EqualTo(1)); + yield return new WaitForSeconds(1f); + Assert.That(loopCount, Is.EqualTo(2)); + yield return new WaitForSeconds(1f); + Assert.That(loopCount, Is.EqualTo(3)); + } + + [UnityTest] public IEnumerator Test_CreateOnCallback() { From 1032f66a5a3d334de427f59883bfd46fc8ca3ae9 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 7 Dec 2024 22:41:28 +0900 Subject: [PATCH 104/224] Add: MotionHandle.ComplatedLoops --- .../Assets/LitMotion/Runtime/MotionHandle.cs | 11 ++++++++ .../LitMotion/Tests/Runtime/CallbackTest.cs | 1 - .../Tests/Runtime/MotionHandleTest.cs | 26 ++++++++++++++++--- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index 8baa8814..c91fd1d4 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -48,6 +48,17 @@ public readonly double Duration } } + /// + /// The number of loops completed + /// + public readonly int ComplatedLoops + { + get + { + return MotionManager.GetDataRef(this).ComplpetedLoops; + } + } + /// /// Motion playback speed. /// diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs index 49acce15..88b9be30 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/CallbackTest.cs @@ -47,7 +47,6 @@ public IEnumerator Test_OnLoopComplete() Assert.That(loopCount, Is.EqualTo(3)); } - [UnityTest] public IEnumerator Test_CreateOnCallback() { diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs index 58591a16..6998cfd6 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs @@ -1,7 +1,9 @@ using System.Collections; +using NUnit.Framework; using UnityEngine; -using UnityEngine.Assertions; +using UnityEngine.Assertions.Comparers; using UnityEngine.TestTools; +using UnityEngine.TestTools.Utils; namespace LitMotion.Tests.Runtime { @@ -60,7 +62,7 @@ public IEnumerator Test_Complete() }); yield return new WaitForSeconds(1f); handle.Complete(); - Assert.AreApproximatelyEqual(value, endValue); + Assert.That(value, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); Assert.IsTrue(!handle.IsActive()); } @@ -78,7 +80,7 @@ public IEnumerator Test_TryComplete() yield return new WaitForSeconds(1f); var tryResult = handle.TryComplete(); Assert.IsTrue(tryResult); - Assert.AreApproximatelyEqual(value, endValue); + Assert.That(value, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); Assert.IsTrue(!handle.IsActive()); tryResult = handle.TryComplete(); @@ -99,7 +101,7 @@ public IEnumerator Test_Complete_WithYoyoLoop() }); yield return new WaitForSeconds(1f); handle.Complete(); - Assert.AreApproximatelyEqual(value, startValue); + Assert.That(value, Is.EqualTo(startValue).Using(FloatEqualityComparer.Instance)); Assert.IsTrue(!handle.IsActive()); } @@ -148,5 +150,21 @@ public IEnumerator Test_IsActive() yield return new WaitForSeconds(2.5f); Assert.IsFalse(handle.IsActive()); } + + [UnityTest] + public IEnumerator Test_CompletedLoops() + { + var handle = LMotion.Create(0f, 10f, 1f) + .WithLoops(3) + .RunWithoutBinding(); + + Assert.That(handle.ComplatedLoops, Is.EqualTo(0)); + yield return new WaitForSeconds(1f); + Assert.That(handle.ComplatedLoops, Is.EqualTo(1)); + yield return new WaitForSeconds(1f); + Assert.That(handle.ComplatedLoops, Is.EqualTo(2)); + yield return new WaitForSeconds(1f); + Assert.That(handle.ComplatedLoops, Is.EqualTo(3)); + } } } \ No newline at end of file From 3d6f1c145208aa79e4ab80736f632a086fcc3eba Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 7 Dec 2024 23:51:43 +0900 Subject: [PATCH 105/224] Remove: ManualMotionDispatcher --- .../Runtime/ManualMotionDispatcher.cs | 101 ------------------ .../Runtime/ManualMotionDispatcher.cs.meta | 11 -- .../Schedulers/ManualMotionScheduler.cs | 36 ++++++- .../Tests/Runtime/ManualUpdateTest.cs | 33 ------ .../Tests/Runtime/ManualUpdateTest.cs.meta | 11 -- 5 files changed, 34 insertions(+), 158 deletions(-) delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs.meta delete mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualUpdateTest.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualUpdateTest.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs deleted file mode 100644 index bf592136..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using LitMotion.Collections; - -namespace LitMotion -{ - /// - /// Manually updatable MotionDispatcher - /// - public static class ManualMotionDispatcher - { - static class Cache - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - public static MotionStorage updateStorage; - public static UpdateRunner updateRunner; - - public static MotionStorage GetOrCreate() - { - if (updateStorage == null) - { - var storage = new MotionStorage(MotionManager.MotionTypeCount); - MotionManager.Register(storage); - updateStorage = storage; - } - return updateStorage; - } - } - - static FastListCore updateRunners; - - /// - /// ManualMotionDispatcher time. It increases every time Update is called. - /// - public static double Time { get; set; } - - /// - /// Ensures the storage capacity until it reaches at least `capacity`. - /// - /// The minimum capacity to ensure. - public static void EnsureStorageCapacity(int capacity) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - Cache.GetOrCreate().EnsureCapacity(capacity); - } - - /// - /// Update all scheduled motions with MotionScheduler.Manual - /// - /// Delta time - public static void Update(double deltaTime) - { - if (deltaTime < 0f) throw new ArgumentException("deltaTime must be 0 or higher."); - Time += deltaTime; - Update(); - } - - /// - /// Update all scheduled motions with MotionScheduler.Manual - /// - public static void Update() - { - var span = updateRunners.AsSpan(); - for (int i = 0; i < span.Length; i++) - { - span[i].Update(Time, Time, Time); - } - } - - /// - /// Cancel all motions and reset data. - /// - public static void Reset() - { - var span = updateRunners.AsSpan(); - for (int i = 0; i < span.Length; i++) - { - span[i].Reset(); - } - } - - internal static MotionHandle Schedule(ref MotionBuilder builder) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - MotionStorage storage = Cache.GetOrCreate(); - if (Cache.updateRunner == null) - { - var runner = new UpdateRunner(storage, Time, Time, Time); - updateRunners.Add(runner); - Cache.updateRunner = runner; - } - - return storage.Create(ref builder); - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs.meta deleted file mode 100644 index 1c1d37e4..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fc43f3b3ebe7f4661aa26ccc079e6f7c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs index 34132dd4..6fc4484b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs @@ -2,14 +2,46 @@ namespace LitMotion { internal sealed class ManualMotionScheduler : IMotionScheduler { - public double Time => ManualMotionDispatcher.Time; + static class Cache + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + public static MotionStorage updateStorage; + + public static MotionStorage GetOrCreate() + { + if (updateStorage == null) + { + var storage = new MotionStorage(MotionManager.MotionTypeCount); + MotionManager.Register(storage); + updateStorage = storage; + } + return updateStorage; + } + } + + public double Time { get; } public MotionHandle Schedule(ref MotionBuilder builder) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { - return ManualMotionDispatcher.Schedule(ref builder); + var storage = Cache.GetOrCreate(); + return storage.Create(ref builder); + } + + /// + /// Ensures the storage capacity until it reaches at least `capacity`. + /// + /// The minimum capacity to ensure. + public static void EnsureStorageCapacity(int capacity) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + Cache.GetOrCreate().EnsureCapacity(capacity); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualUpdateTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualUpdateTest.cs deleted file mode 100644 index c11459bd..00000000 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualUpdateTest.cs +++ /dev/null @@ -1,33 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using UnityEngine.TestTools.Utils; - -namespace LitMotion.Tests.Runtime -{ - public class ManualUpdateTest - { - [Test] - public void Test_FloatMotion() - { - ManualMotionDispatcher.Reset(); - - var value = 0f; - var endValue = 10f; - var handle = LMotion.Create(value, endValue, 2f) - .WithScheduler(MotionScheduler.Manual) - .Bind(x => - { - value = x; - Debug.Log(x); - }); - - while (handle.IsActive()) - { - var deltaTime = 0.1f; - ManualMotionDispatcher.Update(deltaTime); - } - - Assert.That(value, Is.EqualTo(endValue).Using(FloatEqualityComparer.Instance)); - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualUpdateTest.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualUpdateTest.cs.meta deleted file mode 100644 index 9c557688..00000000 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualUpdateTest.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 62a961b36db224b8f82578764dcdfb9b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From 00b259be90387cea31c3d3e26157566b74dd4add Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 00:00:10 +0900 Subject: [PATCH 106/224] Remove: IMotionScheduler.Time --- .../LitMotion/Runtime/IMotionScheduler.cs | 5 ---- .../Schedulers/ManualMotionScheduler.cs | 14 ----------- .../Schedulers/PlayerLoopMotionScheduler.cs | 25 ------------------- 3 files changed, 44 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/IMotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Runtime/IMotionScheduler.cs index ce029cc1..fcb22b96 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/IMotionScheduler.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/IMotionScheduler.cs @@ -17,11 +17,6 @@ MotionHandle Schedule(ref MotionBuilder; - - /// - /// Returns the current time. - /// - double Time { get; } } /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs index 6fc4484b..e6fa13c8 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs @@ -21,8 +21,6 @@ public static MotionStorage GetOrCreate() } } - public double Time { get; } - public MotionHandle Schedule(ref MotionBuilder builder) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions @@ -31,17 +29,5 @@ public MotionHandle Schedule(ref MotionBuilder.GetOrCreate(); return storage.Create(ref builder); } - - /// - /// Ensures the storage capacity until it reaches at least `capacity`. - /// - /// The minimum capacity to ensure. - public static void EnsureStorageCapacity(int capacity) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - Cache.GetOrCreate().EnsureCapacity(capacity); - } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs index ebcf2843..16af3dc5 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs @@ -17,31 +17,6 @@ internal PlayerLoopMotionScheduler(PlayerLoopTiming playerLoopTiming, MotionTime this.timeKind = timeKind; } - public double Time - { - get - { - if (playerLoopTiming == PlayerLoopTiming.FixedUpdate) - { - return timeKind switch - { - MotionTimeKind.Time => UnityTime.fixedTimeAsDouble, - MotionTimeKind.UnscaledTime => UnityTime.fixedUnscaledTimeAsDouble, - MotionTimeKind.Realtime => UnityTime.realtimeSinceStartupAsDouble, - _ => throw new NotSupportedException("Invalid TimeKind") - }; - } - - return timeKind switch - { - MotionTimeKind.Time => UnityTime.timeAsDouble, - MotionTimeKind.UnscaledTime => UnityTime.unscaledTimeAsDouble, - MotionTimeKind.Realtime => UnityTime.realtimeSinceStartupAsDouble, - _ => throw new NotSupportedException("Invalid TimeKind") - }; - } - } - public MotionHandle Schedule(ref MotionBuilder builder) where TValue : unmanaged where TOptions : unmanaged, IMotionOptions From 19866686cd90eee45462ca2b281747fd35020ef2 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 01:06:45 +0900 Subject: [PATCH 107/224] Change: rename MotionTracker -> MotionDebugger --- ...rTreeView.cs => MotionDebuggerTreeView.cs} | 20 ++++++------ ...cs.meta => MotionDebuggerTreeView.cs.meta} | 0 ...ackerWindow.cs => MotionDebuggerWindow.cs} | 32 +++++++++---------- ...w.cs.meta => MotionDebuggerWindow.cs.meta} | 0 .../Assets/LitMotion/Runtime/MotionBuilder.cs | 4 +-- .../{MotionTracker.cs => MotionDebugger.cs} | 2 +- ...Tracker.cs.meta => MotionDebugger.cs.meta} | 0 7 files changed, 29 insertions(+), 29 deletions(-) rename src/LitMotion/Assets/LitMotion/Editor/{MotionTrackerTreeView.cs => MotionDebuggerTreeView.cs} (91%) rename src/LitMotion/Assets/LitMotion/Editor/{MotionTrackerTreeView.cs.meta => MotionDebuggerTreeView.cs.meta} (100%) rename src/LitMotion/Assets/LitMotion/Editor/{MotionTrackerWindow.cs => MotionDebuggerWindow.cs} (79%) rename src/LitMotion/Assets/LitMotion/Editor/{MotionTrackerWindow.cs.meta => MotionDebuggerWindow.cs.meta} (100%) rename src/LitMotion/Assets/LitMotion/Runtime/{MotionTracker.cs => MotionDebugger.cs} (98%) rename src/LitMotion/Assets/LitMotion/Runtime/{MotionTracker.cs.meta => MotionDebugger.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionTrackerTreeView.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs similarity index 91% rename from src/LitMotion/Assets/LitMotion/Editor/MotionTrackerTreeView.cs rename to src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs index 50bf8998..eb60fa65 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionTrackerTreeView.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs @@ -9,9 +9,9 @@ namespace LitMotion.Editor { - internal sealed class MotionTrackerViewItem : TreeViewItem + internal sealed class MotionDebuggerViewItem : TreeViewItem { - public MotionTrackerViewItem(int id) : base(id) { } + public MotionDebuggerViewItem(int id) : base(id) { } static readonly Regex removeHref = new("(.+)", RegexOptions.Compiled); @@ -48,13 +48,13 @@ static string GetFirstLine(string str) } } - internal sealed class MotionTrackerTreeView : TreeView + internal sealed class MotionDebuggerTreeView : TreeView { const string sortedColumnIndexStateKey = "MotionTrackerTreeView_sortedColumnIndex"; public IReadOnlyList CurrentBindingItems; - public MotionTrackerTreeView() + public MotionDebuggerTreeView() : this(new TreeViewState(), new MultiColumnHeader(new MultiColumnHeaderState(new[] { new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Motion Type"), width = 55}, @@ -66,7 +66,7 @@ public MotionTrackerTreeView() } - MotionTrackerTreeView(TreeViewState state, MultiColumnHeader header) + MotionDebuggerTreeView(TreeViewState state, MultiColumnHeader header) : base(state, header) { rowHeight = 20; @@ -94,8 +94,8 @@ void HeaderSortingChanged(MultiColumnHeader multiColumnHeader) var index = multiColumnHeader.sortedColumnIndex; var ascending = multiColumnHeader.IsSortedAscending(multiColumnHeader.sortedColumnIndex); - var items = rootItem.children.Cast(); - IOrderedEnumerable orderedEnumerable = index switch + var items = rootItem.children.Cast(); + IOrderedEnumerable orderedEnumerable = index switch { 0 => ascending ? items.OrderBy(item => item.MotionType) : items.OrderByDescending(item => item.MotionType), 1 => ascending ? items.OrderBy(item => item.SchedulerType) : items.OrderByDescending(item => item.SchedulerType), @@ -146,9 +146,9 @@ protected override TreeViewItem BuildRoot() var children = new List(); var id = 0; - foreach (var tracking in MotionTracker.Items) + foreach (var tracking in MotionDebugger.Items) { - children.Add(new MotionTrackerViewItem(id) + children.Add(new MotionDebuggerViewItem(id) { MotionType = $"[{tracking.ValueType.Name}, {tracking.OptionsType.Name}, {tracking.AdapterType.Name}]", SchedulerType = GetSchedulerName(tracking.Scheduler, tracking.CreatedOnEditor), @@ -170,7 +170,7 @@ protected override bool CanMultiSelect(TreeViewItem item) protected override void RowGUI(RowGUIArgs args) { - var item = args.item as MotionTrackerViewItem; + var item = args.item as MotionDebuggerViewItem; for (var visibleColumnIndex = 0; visibleColumnIndex < args.GetNumVisibleColumns(); visibleColumnIndex++) { diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionTrackerTreeView.cs.meta b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Editor/MotionTrackerTreeView.cs.meta rename to src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionTrackerWindow.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs similarity index 79% rename from src/LitMotion/Assets/LitMotion/Editor/MotionTrackerWindow.cs rename to src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs index 224bb789..35d6f72f 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionTrackerWindow.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs @@ -7,20 +7,20 @@ namespace LitMotion.Editor /// /// Editor window that displays a list of motions being tracked. /// - public class MotionTrackerWindow : EditorWindow + public class MotionDebuggerWindow : EditorWindow { - static MotionTrackerWindow instance; + static MotionDebuggerWindow instance; - [MenuItem("Window/LitMotion/Motion Tracker")] + [MenuItem("Window/LitMotion Debugger")] public static void OpenWindow() { if (instance != null) instance.Close(); - GetWindow("Motion Tracker").Show(); + GetWindow("LitMotion Debugger").Show(); } static readonly GUILayoutOption[] EmptyLayoutOption = new GUILayoutOption[0]; - MotionTrackerTreeView treeView; + MotionDebuggerTreeView treeView; object splitterState; const string EnableTrackingPrefsKey = "LitMotion-MotionTracker-EnableTracking"; @@ -30,9 +30,9 @@ void OnEnable() { instance = this; splitterState = SplitterGUILayout.CreateSplitterState(new float[] { 75f, 25f }, new int[] { 32, 32 }, null); - treeView = new MotionTrackerTreeView(); - MotionTracker.EnableTracking = EditorPrefs.GetBool(EnableTrackingPrefsKey, false); - MotionTracker.EnableStackTrace = EditorPrefs.GetBool(EnableStackTracePrefsKey, false); + treeView = new MotionDebuggerTreeView(); + MotionDebugger.EnableTracking = EditorPrefs.GetBool(EnableTrackingPrefsKey, false); + MotionDebugger.EnableStackTrace = EditorPrefs.GetBool(EnableStackTracePrefsKey, false); } void OnGUI() @@ -53,23 +53,23 @@ void RenderHeadPanel() EditorGUILayout.BeginVertical(EmptyLayoutOption); EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, EmptyLayoutOption); - if (GUILayout.Toggle(MotionTracker.EnableTracking, EnableTrackingHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption) != MotionTracker.EnableTracking) + if (GUILayout.Toggle(MotionDebugger.EnableTracking, EnableTrackingHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption) != MotionDebugger.EnableTracking) { - MotionTracker.EnableTracking = !MotionTracker.EnableTracking; - EditorPrefs.SetBool(EnableTrackingPrefsKey, MotionTracker.EnableTracking); + MotionDebugger.EnableTracking = !MotionDebugger.EnableTracking; + EditorPrefs.SetBool(EnableTrackingPrefsKey, MotionDebugger.EnableTracking); } - if (GUILayout.Toggle(MotionTracker.EnableStackTrace, EnableStackTraceHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption) != MotionTracker.EnableStackTrace) + if (GUILayout.Toggle(MotionDebugger.EnableStackTrace, EnableStackTraceHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption) != MotionDebugger.EnableStackTrace) { - MotionTracker.EnableStackTrace = !MotionTracker.EnableStackTrace; - EditorPrefs.SetBool(EnableStackTracePrefsKey, MotionTracker.EnableStackTrace); + MotionDebugger.EnableStackTrace = !MotionDebugger.EnableStackTrace; + EditorPrefs.SetBool(EnableStackTracePrefsKey, MotionDebugger.EnableStackTrace); } GUILayout.FlexibleSpace(); if (GUILayout.Button(ClearHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption)) { - MotionTracker.Clear(); + MotionDebugger.Clear(); treeView.ReloadAndSort(); Repaint(); } @@ -139,7 +139,7 @@ void RenderDetailsPanel() if (selected.Count > 0) { var first = selected[0]; - if (treeView.CurrentBindingItems.FirstOrDefault(x => x.id == first) is MotionTrackerViewItem item) + if (treeView.CurrentBindingItems.FirstOrDefault(x => x.id == first) is MotionDebuggerViewItem item) { message = item.Position; } diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionTrackerWindow.cs.meta b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Editor/MotionTrackerWindow.cs.meta rename to src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index bc90d31a..0f0c0523 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -408,9 +408,9 @@ internal MotionHandle ScheduleMotion() handle = buffer.Scheduler.Schedule(ref this); } - if (MotionTracker.EnableTracking) + if (MotionDebugger.EnableTracking) { - MotionTracker.AddTracking(handle, buffer.Scheduler); + MotionDebugger.AddTracking(handle, buffer.Scheduler); } Dispose(); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionTracker.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs similarity index 98% rename from src/LitMotion/Assets/LitMotion/Runtime/MotionTracker.cs rename to src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs index 3ea74392..b3c411dc 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionTracker.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs @@ -7,7 +7,7 @@ namespace LitMotion /// /// Provides functionality for tracking active motions. /// - public static class MotionTracker + public static class MotionDebugger { public static bool EnableTracking = false; public static bool EnableStackTrace = false; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionTracker.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/MotionTracker.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs.meta From e7a38910760b898228e829bd4b39d8db74a21e82 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 02:54:18 +0900 Subject: [PATCH 108/224] Remove: Scheduler menu --- .../Editor/MotionDebuggerTreeView.cs | 37 +++++++++---------- .../LitMotion/Editor/MotionDebuggerWindow.cs | 2 +- .../Runtime/Internal/MotionStorage.cs | 3 +- .../LitMotion/Runtime/MotionDebugger.cs | 12 ++++-- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs index eb60fa65..6ea4def8 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs @@ -17,20 +17,20 @@ public MotionDebuggerViewItem(int id) : base(id) { } public string MotionType { get; set; } public string SchedulerType { get; set; } - public string Elapsed { get; set; } + public string Time { get; set; } - string position; - public string Position + string stackTrace; + public string StackTrace { - get { return position; } + get { return stackTrace; } set { - position = value; - PositionFirstLine = value == null ? string.Empty : GetFirstLine(position); + stackTrace = value; + StackTraceFirstLine = value == null ? string.Empty : GetFirstLine(stackTrace); } } - public string PositionFirstLine { get; private set; } + public string StackTraceFirstLine { get; private set; } static string GetFirstLine(string str) { @@ -58,8 +58,7 @@ public MotionDebuggerTreeView() : this(new TreeViewState(), new MultiColumnHeader(new MultiColumnHeaderState(new[] { new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Motion Type"), width = 55}, - new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Scheduler"), width = 25}, - new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Elapsed"), width = 15}, + new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Time"), width = 15}, new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Stack Trace")}, }))) { @@ -95,12 +94,11 @@ void HeaderSortingChanged(MultiColumnHeader multiColumnHeader) var ascending = multiColumnHeader.IsSortedAscending(multiColumnHeader.sortedColumnIndex); var items = rootItem.children.Cast(); - IOrderedEnumerable orderedEnumerable = index switch + var orderedEnumerable = index switch { 0 => ascending ? items.OrderBy(item => item.MotionType) : items.OrderByDescending(item => item.MotionType), - 1 => ascending ? items.OrderBy(item => item.SchedulerType) : items.OrderByDescending(item => item.SchedulerType), - 2 => ascending ? items.OrderBy(item => double.Parse(item.Elapsed)) : items.OrderByDescending(item => double.Parse(item.Elapsed)), - 3 => ascending ? items.OrderBy(item => item.Position) : items.OrderByDescending(item => item.PositionFirstLine), + 1 => ascending ? items.OrderBy(item => double.Parse(item.Time)) : items.OrderByDescending(item => double.Parse(item.Time)), + 2 => ascending ? items.OrderBy(item => item.StackTrace) : items.OrderByDescending(item => item.StackTraceFirstLine), _ => throw new ArgumentOutOfRangeException(nameof(index), index, null), }; CurrentBindingItems = rootItem.children = orderedEnumerable.Cast().ToList(); @@ -148,12 +146,14 @@ protected override TreeViewItem BuildRoot() var id = 0; foreach (var tracking in MotionDebugger.Items) { + if (!tracking.Handle.IsActive()) continue; + children.Add(new MotionDebuggerViewItem(id) { MotionType = $"[{tracking.ValueType.Name}, {tracking.OptionsType.Name}, {tracking.AdapterType.Name}]", SchedulerType = GetSchedulerName(tracking.Scheduler, tracking.CreatedOnEditor), - Elapsed = (DateTime.UtcNow - tracking.CreationTime).TotalSeconds.ToString("00.00"), - Position = tracking.StackTrace?.AddHyperLink() + Time = MotionManager.GetDataRef(tracking.Handle).Time.ToString("00.00"), + StackTrace = tracking.StackTrace?.AddHyperLink() }); id++; } @@ -185,13 +185,10 @@ protected override void RowGUI(RowGUIArgs args) EditorGUI.LabelField(rect, item.MotionType, labelStyle); break; case 1: - EditorGUI.LabelField(rect, item.SchedulerType, labelStyle); + EditorGUI.LabelField(rect, item.Time, labelStyle); break; case 2: - EditorGUI.LabelField(rect, item.Elapsed, labelStyle); - break; - case 3: - EditorGUI.LabelField(rect, item.PositionFirstLine, labelStyle); + EditorGUI.LabelField(rect, item.StackTraceFirstLine, labelStyle); break; default: throw new ArgumentOutOfRangeException(nameof(columnIndex), columnIndex, null); diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs index 35d6f72f..91812a7d 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs @@ -141,7 +141,7 @@ void RenderDetailsPanel() var first = selected[0]; if (treeView.CurrentBindingItems.FirstOrDefault(x => x.id == first) is MotionDebuggerViewItem item) { - message = item.Position; + message = item.StackTrace; } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index abe3992b..26fae4c0 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -200,7 +200,8 @@ public bool IsActive(MotionHandle handle) if (IsInvalidVersion(slot.Version, handle)) return false; ref var motion = ref unmanagedDataArray[slot.DenseIndex]; - return motion.Core.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing; + return motion.Core.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing || + (motion.Core.Status is MotionStatus.Completed && motion.Core.IsPreserved); } public bool TryCancel(MotionHandle handle) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs index b3c411dc..5c8da178 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs @@ -20,7 +20,7 @@ public static void AddTracking(MotionHandle motionHandle, IMotionScheduler sched var state = TrackingState.Create(); (state.ValueType, state.OptionsType, state.AdapterType) = MotionManager.GetMotionType(motionHandle); state.Scheduler = scheduler; - state.CreationTime = DateTime.UtcNow; + state.Handle = motionHandle; #if UNITY_EDITOR state.CreatedOnEditor = UnityEditor.EditorApplication.isPlaying; #endif @@ -64,7 +64,7 @@ public static TrackingState Create() public Type OptionsType; public Type AdapterType; public IMotionScheduler Scheduler; - public DateTime CreationTime; + public MotionHandle Handle; public StackTrace StackTrace; public bool CreatedOnEditor; public Action OriginalOnCompleteCallback; @@ -83,7 +83,11 @@ void OnComplete() { MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); } - Release(); + + if (Handle.IsActive() && !MotionManager.GetDataRef(Handle).IsPreserved) + { + Release(); + } } void OnCancel() @@ -106,7 +110,7 @@ void Release() OptionsType = default; AdapterType = default; Scheduler = default; - CreationTime = default; + Handle = default; StackTrace = default; CreatedOnEditor = default; OriginalOnCompleteCallback = default; From 5b7e2e6d03bec155a63794a2a7c7561674754485 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 11:06:56 +0900 Subject: [PATCH 109/224] Change: override MotionHandle.ToString() --- src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index c91fd1d4..d36369e1 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -74,6 +74,11 @@ public readonly float PlaybackSpeed } } + public override readonly string ToString() + { + return $"MotionHandle`{StorageId} ({Index}:{Version})"; + } + public readonly bool Equals(MotionHandle other) { return Index == other.Index && Version == other.Version && StorageId == other.StorageId; From f8a337f1b792af5629364fdc93b89ee42ffa9404 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 11:42:38 +0900 Subject: [PATCH 110/224] Add: DebugName --- .../Editor/MotionDebuggerTreeView.cs | 19 ++++++++----- .../Runtime/Internal/ManagedMotionData.cs | 8 ++++++ .../Runtime/Internal/MotionStorage.cs | 8 ++++++ .../Assets/LitMotion/Runtime/MotionBuilder.cs | 27 +++++++++++++++++++ .../Runtime/MotionHandleExtensions.cs | 19 +++++++++++++ 5 files changed, 75 insertions(+), 6 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs index 6ea4def8..0ac4979e 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs @@ -15,6 +15,7 @@ public MotionDebuggerViewItem(int id) : base(id) { } static readonly Regex removeHref = new("(.+)", RegexOptions.Compiled); + public string DebugName { get; set; } public string MotionType { get; set; } public string SchedulerType { get; set; } public string Time { get; set; } @@ -57,7 +58,8 @@ internal sealed class MotionDebuggerTreeView : TreeView public MotionDebuggerTreeView() : this(new TreeViewState(), new MultiColumnHeader(new MultiColumnHeaderState(new[] { - new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Motion Type"), width = 55}, + new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Name"), width = 40}, + new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Motion Type"), width = 75}, new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Time"), width = 15}, new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Stack Trace")}, }))) @@ -96,9 +98,10 @@ void HeaderSortingChanged(MultiColumnHeader multiColumnHeader) var items = rootItem.children.Cast(); var orderedEnumerable = index switch { - 0 => ascending ? items.OrderBy(item => item.MotionType) : items.OrderByDescending(item => item.MotionType), - 1 => ascending ? items.OrderBy(item => double.Parse(item.Time)) : items.OrderByDescending(item => double.Parse(item.Time)), - 2 => ascending ? items.OrderBy(item => item.StackTrace) : items.OrderByDescending(item => item.StackTraceFirstLine), + 0 => ascending ? items.OrderBy(item => item.DebugName) : items.OrderByDescending(item => item.DebugName), + 1 => ascending ? items.OrderBy(item => item.MotionType) : items.OrderByDescending(item => item.MotionType), + 2 => ascending ? items.OrderBy(item => double.Parse(item.Time)) : items.OrderByDescending(item => double.Parse(item.Time)), + 3 => ascending ? items.OrderBy(item => item.StackTrace) : items.OrderByDescending(item => item.StackTraceFirstLine), _ => throw new ArgumentOutOfRangeException(nameof(index), index, null), }; CurrentBindingItems = rootItem.children = orderedEnumerable.Cast().ToList(); @@ -150,6 +153,7 @@ protected override TreeViewItem BuildRoot() children.Add(new MotionDebuggerViewItem(id) { + DebugName = tracking.Handle.GetDebugName(), MotionType = $"[{tracking.ValueType.Name}, {tracking.OptionsType.Name}, {tracking.AdapterType.Name}]", SchedulerType = GetSchedulerName(tracking.Scheduler, tracking.CreatedOnEditor), Time = MotionManager.GetDataRef(tracking.Handle).Time.ToString("00.00"), @@ -182,12 +186,15 @@ protected override void RowGUI(RowGUIArgs args) switch (columnIndex) { case 0: - EditorGUI.LabelField(rect, item.MotionType, labelStyle); + EditorGUI.LabelField(rect, item.DebugName, labelStyle); break; case 1: - EditorGUI.LabelField(rect, item.Time, labelStyle); + EditorGUI.LabelField(rect, item.MotionType, labelStyle); break; case 2: + EditorGUI.LabelField(rect, item.Time, labelStyle); + break; + case 3: EditorGUI.LabelField(rect, item.StackTraceFirstLine, labelStyle); break; default: diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs index 9538f8d2..16d85870 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/ManagedMotionData.cs @@ -1,3 +1,7 @@ +#if DEVELOPMENT_BUILD || UNITY_EDITOR +#define LITMOTION_DEBUG +#endif + using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -22,6 +26,10 @@ public unsafe struct ManagedMotionData public Action OnCompleteAction; public Action OnCancelAction; +#if LITMOTION_DEBUG + public string DebugName; +#endif + [MethodImpl(MethodImplOptions.AggressiveInlining)] public void UpdateUnsafe(in TValue value) where TValue : unmanaged { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 26fae4c0..929e186a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -1,3 +1,7 @@ +#if DEVELOPMENT_BUILD || UNITY_EDITOR +#define LITMOTION_DEBUG +#endif + using System; using System.Runtime.CompilerServices; using LitMotion.Collections; @@ -115,6 +119,10 @@ public unsafe MotionHandle Create(ref MotionBuilder managedDataRef.State1 = buffer.State1; managedDataRef.State2 = buffer.State2; +#if LITMOTION_DEBUG + managedDataRef.DebugName = buffer.DebugName; +#endif + if (buffer.BindOnSchedule && buffer.UpdateAction != null) { managedDataRef.UpdateUnsafe( diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index 0f0c0523..eecdf431 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -1,3 +1,7 @@ +#if DEVELOPMENT_BUILD || UNITY_EDITOR +#define LITMOTION_DEBUG +#endif + using System; using System.Runtime.CompilerServices; using UnityEngine; @@ -58,6 +62,10 @@ public static void Return(MotionBuilderBuffer buffer) buffer.Scheduler = default; +#if LITMOTION_DEBUG + buffer.DebugName = default; +#endif + if (buffer.Version != ushort.MaxValue) { buffer.NextNode = PoolRoot; @@ -91,6 +99,10 @@ public static void Return(MotionBuilderBuffer buffer) public Action OnCancelAction; public AnimationCurve AnimationCurve; public IMotionScheduler Scheduler; + +#if LITMOTION_DEBUG + public string DebugName; +#endif } /// @@ -264,6 +276,21 @@ public readonly MotionBuilder WithScheduler(IMotionS return this; } + /// + /// Specifies the name that will be displayed in the debugger. + /// + /// Debug name + /// This builder to allow chaining multiple method calls. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public readonly MotionBuilder WithDebugName(string debugName) + { +#if LITMOTION_DEBUG + CheckBuffer(); + buffer.DebugName = debugName; +#endif + return this; + } + /// /// Create motion and play it without binding it to a specific object. /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 64ccaadb..89938325 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -1,3 +1,7 @@ +#if DEVELOPMENT_BUILD || UNITY_EDITOR +#define LITMOTION_DEBUG +#endif + using System; using System.Collections; using System.Runtime.CompilerServices; @@ -23,6 +27,21 @@ public static bool IsActive(this MotionHandle handle) return MotionManager.IsActive(handle); } + /// + /// Gets the debug name set for the MotionHandle. If not specified, returns the result of ToString(). + /// + /// This motion handle + /// Debug name + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static string GetDebugName(this MotionHandle handle) + { +#if LITMOTION_DEBUG + return MotionManager.GetManagedDataRef(handle).DebugName ?? handle.ToString(); +#else + return handle.ToString(); +#endif + } + /// /// Preserves the MotionHandle so that it is not destroyed until Cancel() is explicitly called. /// From 4f199ecd79bb8baed8f5035cdffe9c6e58dc2871 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 11:56:46 +0900 Subject: [PATCH 111/224] Refactoring --- .../LitMotion/Editor/MotionDebuggerTreeView.cs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs index 0ac4979e..e40dd2d1 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs @@ -15,10 +15,9 @@ public MotionDebuggerViewItem(int id) : base(id) { } static readonly Regex removeHref = new("(.+)", RegexOptions.Compiled); - public string DebugName { get; set; } + public MotionHandle Handle { get; set; } public string MotionType { get; set; } public string SchedulerType { get; set; } - public string Time { get; set; } string stackTrace; public string StackTrace @@ -98,9 +97,9 @@ void HeaderSortingChanged(MultiColumnHeader multiColumnHeader) var items = rootItem.children.Cast(); var orderedEnumerable = index switch { - 0 => ascending ? items.OrderBy(item => item.DebugName) : items.OrderByDescending(item => item.DebugName), + 0 => ascending ? items.OrderBy(item => item.Handle.GetDebugName()) : items.OrderByDescending(item => item.Handle.GetDebugName()), 1 => ascending ? items.OrderBy(item => item.MotionType) : items.OrderByDescending(item => item.MotionType), - 2 => ascending ? items.OrderBy(item => double.Parse(item.Time)) : items.OrderByDescending(item => double.Parse(item.Time)), + 2 => ascending ? items.OrderBy(item => item.Handle.Time) : items.OrderByDescending(item => item.Handle.Time), 3 => ascending ? items.OrderBy(item => item.StackTrace) : items.OrderByDescending(item => item.StackTraceFirstLine), _ => throw new ArgumentOutOfRangeException(nameof(index), index, null), }; @@ -153,10 +152,9 @@ protected override TreeViewItem BuildRoot() children.Add(new MotionDebuggerViewItem(id) { - DebugName = tracking.Handle.GetDebugName(), + Handle = tracking.Handle, MotionType = $"[{tracking.ValueType.Name}, {tracking.OptionsType.Name}, {tracking.AdapterType.Name}]", SchedulerType = GetSchedulerName(tracking.Scheduler, tracking.CreatedOnEditor), - Time = MotionManager.GetDataRef(tracking.Handle).Time.ToString("00.00"), StackTrace = tracking.StackTrace?.AddHyperLink() }); id++; @@ -186,13 +184,13 @@ protected override void RowGUI(RowGUIArgs args) switch (columnIndex) { case 0: - EditorGUI.LabelField(rect, item.DebugName, labelStyle); + EditorGUI.LabelField(rect, item.Handle.GetDebugName(), labelStyle); break; case 1: EditorGUI.LabelField(rect, item.MotionType, labelStyle); break; case 2: - EditorGUI.LabelField(rect, item.Time, labelStyle); + EditorGUI.LabelField(rect, item.Handle.Time.ToString("00.00"), labelStyle); break; case 3: EditorGUI.LabelField(rect, item.StackTraceFirstLine, labelStyle); From 692331ddf0ad2a37a38982c4467f552fad921a03 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 13:44:56 +0900 Subject: [PATCH 112/224] Improve: debugger --- .../LitMotion/Editor/LitMotion.Editor.asmdef | 3 +- .../LitMotion/Editor/MotionDebuggerWindow.cs | 103 +++++++++++++++--- .../Runtime/Internal/MotionManager.cs | 7 ++ .../Runtime/Internal/MotionStorage.cs | 21 ++++ 4 files changed, 119 insertions(+), 15 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/LitMotion.Editor.asmdef b/src/LitMotion/Assets/LitMotion/Editor/LitMotion.Editor.asmdef index 0164630a..de921da0 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/LitMotion.Editor.asmdef +++ b/src/LitMotion/Assets/LitMotion/Editor/LitMotion.Editor.asmdef @@ -2,7 +2,8 @@ "name": "LitMotion.Editor", "rootNamespace": "LitMotion.Editor", "references": [ - "GUID:3b570a5146f9d4f0fa107ed4559471a3" + "GUID:3b570a5146f9d4f0fa107ed4559471a3", + "GUID:e0cd26848372d4e5c891c569017e11f1" ], "includePlatforms": [ "Editor" diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs index 91812a7d..2e2d6799 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs @@ -134,27 +134,102 @@ void RenderDetailsPanel() detailsStyle.margin.right = 15; } - string message = ""; var selected = treeView.state.selectedIDs; - if (selected.Count > 0) + + if (selected.Count <= 0) return; + var first = selected[0]; + + if (treeView.CurrentBindingItems.FirstOrDefault(x => x.id == first) is not MotionDebuggerViewItem item) return; + + detailsScroll = EditorGUILayout.BeginScrollView(this.detailsScroll, tableListStyle, EmptyLayoutOption); { - var first = selected[0]; - if (treeView.CurrentBindingItems.FirstOrDefault(x => x.id == first) is MotionDebuggerViewItem item) + ref var unmanagedData = ref MotionManager.GetDataRef(item.Handle); + ref var managedData = ref MotionManager.GetManagedDataRef(item.Handle); + var debugInfo = MotionManager.GetDebugInfo(item.Handle); + + GenericField("Name", managedData.DebugName); + EditorGUILayout.Space(2); + + using (new EditorGUILayout.VerticalScope(GUI.skin.box)) + { + EditorGUILayout.LabelField("Motion Data", EditorStyles.boldLabel); + + GenericField("Start Value", debugInfo.StartValue); + GenericField("End Value", debugInfo.EndValue); + + EditorGUILayout.Space(2); + GenericField("Duration", unmanagedData.Duration); + GenericField("Delay", unmanagedData.Delay); + GenericField("Delay Type", unmanagedData.DelayType); + GenericField("Loops", unmanagedData.Loops); + GenericField("Loop Type", unmanagedData.LoopType); + + EditorGUILayout.Space(2); + GenericField("Ease", unmanagedData.Ease); + if (unmanagedData.Ease is Ease.CustomAnimationCurve) + { + GenericField("Custom Ease Curve", unmanagedData.AnimationCurve); + } + + EditorGUILayout.Space(2); + GenericField("Type", item.MotionType); + GenericField("Scheduler", item.SchedulerType); + GenericField("Cancel On Error", managedData.CancelOnError); + GenericField("Skip Values During Delay", managedData.SkipValuesDuringDelay); + + EditorGUILayout.Space(2); + GenericField("State[0]", managedData.State0); + GenericField("State[1]", managedData.State1); + GenericField("State[2]", managedData.State2); + } + + EditorGUILayout.Space(2); + + using (new EditorGUILayout.VerticalScope(GUI.skin.box)) + { + EditorGUILayout.LabelField("Status", EditorStyles.boldLabel); + EditorGUILayout.LabelField("Status", unmanagedData.Status.ToString()); + GenericField("Time", unmanagedData.Time); + GenericField("Completed Loops", unmanagedData.ComplpetedLoops); + EditorGUILayout.Space(2); + GenericField("Playback Speed", unmanagedData.PlaybackSpeed); + GenericField("Is Preserved", unmanagedData.IsPreserved); + } + + EditorGUILayout.Space(2); + + using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { - message = item.StackTrace; + EditorGUILayout.LabelField("Stack Trace", EditorStyles.boldLabel); + + var vector = detailsStyle.CalcSize(new GUIContent(item.StackTrace)); + EditorGUILayout.SelectableLabel(item.StackTrace, detailsStyle, new GUILayoutOption[] + { + GUILayout.ExpandWidth(true), + GUILayout.MinWidth(vector.x), + GUILayout.MinHeight(vector.y) + }); } } + EditorGUILayout.EndScrollView(); + } + + static void GenericField(string label, T value) + { + if (value is null) return; - detailsScroll = EditorGUILayout.BeginScrollView(this.detailsScroll, EmptyLayoutOption); - var vector = detailsStyle.CalcSize(new GUIContent(message)); - EditorGUILayout.SelectableLabel(message, detailsStyle, new GUILayoutOption[] + switch (value) { - GUILayout.ExpandHeight(true), - GUILayout.ExpandWidth(true), - GUILayout.MinWidth(vector.x), - GUILayout.MinHeight(vector.y) - }); - EditorGUILayout.EndScrollView(); + default: + EditorGUILayout.LabelField(label, value.ToString()); + break; + case UnityEngine.AnimationCurve v: + EditorGUILayout.CurveField(label, v); + break; + case UnityEngine.Object v: + EditorGUILayout.ObjectField(label, v, v.GetType(), true); + break; + } } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs index f9e3d2ca..1bf341dd 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs @@ -33,6 +33,13 @@ public static ref ManagedMotionData GetManagedDataRef(MotionHandle handle) return ref list[handle.StorageId].GetManagedDataRef(handle); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static MotionDebugInfo GetDebugInfo(MotionHandle handle) + { + CheckTypeId(handle); + return list[handle.StorageId].GetDebugInfo(handle); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Complete(MotionHandle handle) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 929e186a..6d9a152b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -10,6 +10,13 @@ namespace LitMotion { + internal record MotionDebugInfo + { + public object StartValue; + public object EndValue; + public object Options; + } + internal interface IMotionStorage { bool IsActive(MotionHandle handle); @@ -21,6 +28,7 @@ internal interface IMotionStorage void AddToSequence(ref MotionHandle handle, out double motionDuration); ref MotionDataCore GetDataRef(MotionHandle handle); ref ManagedMotionData GetManagedDataRef(MotionHandle handle); + MotionDebugInfo GetDebugInfo(MotionHandle handle); void Reset(); } @@ -444,6 +452,19 @@ public ref MotionDataCore GetDataRef(MotionHandle handle) return ref UnsafeUtility.As, MotionDataCore>(ref unmanagedDataArray[slot.DenseIndex]); } + public MotionDebugInfo GetDebugInfo(MotionHandle handle) + { + ref var slot = ref GetSlotWithVarify(handle); + ref var dataRef = ref unmanagedDataArray[slot.DenseIndex]; + + return new() + { + StartValue = dataRef.StartValue, + EndValue = dataRef.EndValue, + Options = dataRef.Options, + }; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] ref SparseSetCore.Slot GetSlotWithVarify(MotionHandle handle) { From 901ae70c78ba25744aeb5a51d2adbb77d86c23f3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 15:02:13 +0900 Subject: [PATCH 113/224] Improve: redesign the layout of LitMotionDebugger window --- .../Editor/MotionDebuggerTreeView.cs | 15 +- .../LitMotion/Editor/MotionDebuggerWindow.cs | 154 ++++++++++-------- .../LitMotion/Editor/SplitterGUILayout.cs | 48 ++++-- 3 files changed, 125 insertions(+), 92 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs index e40dd2d1..60656e01 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs @@ -57,10 +57,9 @@ internal sealed class MotionDebuggerTreeView : TreeView public MotionDebuggerTreeView() : this(new TreeViewState(), new MultiColumnHeader(new MultiColumnHeaderState(new[] { - new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Name"), width = 40}, - new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Motion Type"), width = 75}, - new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Time"), width = 15}, - new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Stack Trace")}, + new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Name"), width = 50}, + new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Motion Type"), width = 80}, + new MultiColumnHeaderState.Column() { headerContent = new GUIContent("Time"), width = 30}, }))) { @@ -70,8 +69,8 @@ public MotionDebuggerTreeView() : base(state, header) { rowHeight = 20; - showAlternatingRowBackgrounds = true; - showBorder = true; + showAlternatingRowBackgrounds = false; + showBorder = false; header.sortingChanged += HeaderSortingChanged; header.ResizeToFit(); @@ -100,7 +99,6 @@ void HeaderSortingChanged(MultiColumnHeader multiColumnHeader) 0 => ascending ? items.OrderBy(item => item.Handle.GetDebugName()) : items.OrderByDescending(item => item.Handle.GetDebugName()), 1 => ascending ? items.OrderBy(item => item.MotionType) : items.OrderByDescending(item => item.MotionType), 2 => ascending ? items.OrderBy(item => item.Handle.Time) : items.OrderByDescending(item => item.Handle.Time), - 3 => ascending ? items.OrderBy(item => item.StackTrace) : items.OrderByDescending(item => item.StackTraceFirstLine), _ => throw new ArgumentOutOfRangeException(nameof(index), index, null), }; CurrentBindingItems = rootItem.children = orderedEnumerable.Cast().ToList(); @@ -192,9 +190,6 @@ protected override void RowGUI(RowGUIArgs args) case 2: EditorGUI.LabelField(rect, item.Handle.Time.ToString("00.00"), labelStyle); break; - case 3: - EditorGUI.LabelField(rect, item.StackTraceFirstLine, labelStyle); - break; default: throw new ArgumentOutOfRangeException(nameof(columnIndex), columnIndex, null); } diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs index 2e2d6799..28055864 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs @@ -21,7 +21,8 @@ public static void OpenWindow() static readonly GUILayoutOption[] EmptyLayoutOption = new GUILayoutOption[0]; MotionDebuggerTreeView treeView; - object splitterState; + object horizontalSplitterState; + object verticalSplitterState; const string EnableTrackingPrefsKey = "LitMotion-MotionTracker-EnableTracking"; const string EnableStackTracePrefsKey = "LitMotion-MotionTracker-EnableStackTrace"; @@ -29,7 +30,8 @@ public static void OpenWindow() void OnEnable() { instance = this; - splitterState = SplitterGUILayout.CreateSplitterState(new float[] { 75f, 25f }, new int[] { 32, 32 }, null); + horizontalSplitterState = SplitterGUILayout.CreateSplitterState(new float[] { 50f, 50f }, new int[] { 32, 32 }, null); + verticalSplitterState = SplitterGUILayout.CreateSplitterState(new float[] { 50f, 15f }, new int[] { 32, 32 }, null); treeView = new MotionDebuggerTreeView(); MotionDebugger.EnableTracking = EditorPrefs.GetBool(EnableTrackingPrefsKey, false); MotionDebugger.EnableStackTrace = EditorPrefs.GetBool(EnableStackTracePrefsKey, false); @@ -38,10 +40,10 @@ void OnEnable() void OnGUI() { RenderHeadPanel(); - SplitterGUILayout.BeginVerticalSplit(this.splitterState, EmptyLayoutOption); + SplitterGUILayout.BeginHorizontalSplit(horizontalSplitterState, EmptyLayoutOption); RenderTable(); RenderDetailsPanel(); - SplitterGUILayout.EndVerticalSplit(); + SplitterGUILayout.EndHorizontalSplit(); } static readonly GUIContent ClearHeadContent = EditorGUIUtility.TrTextContent(" Clear "); @@ -78,21 +80,21 @@ void RenderHeadPanel() EditorGUILayout.EndVertical(); } + static GUIStyle windowStyle; Vector2 tableScroll; - GUIStyle tableListStyle; void RenderTable() { - if (tableListStyle == null) + if (windowStyle == null) { - tableListStyle = new GUIStyle("CN Box"); - tableListStyle.margin.top = 0; - tableListStyle.padding.left = 3; + windowStyle = new GUIStyle("GroupBox") + { + margin = new RectOffset(0, 0, 0, 0), + padding = new RectOffset(0, 0, 0, 0) + }; } - EditorGUILayout.BeginVertical(tableListStyle, EmptyLayoutOption); - - tableScroll = EditorGUILayout.BeginScrollView(this.tableScroll, new GUILayoutOption[] + tableScroll = EditorGUILayout.BeginScrollView(tableScroll, windowStyle, new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.MaxWidth(2000f) @@ -106,7 +108,6 @@ void RenderTable() treeView?.OnGUI(controlRect); EditorGUILayout.EndScrollView(); - EditorGUILayout.EndVertical(); } static int interval; @@ -119,8 +120,10 @@ void Update() } } + static GUIStyle detailsStyle; Vector2 detailsScroll; + Vector2 stackTraceScroll; void RenderDetailsPanel() { @@ -134,74 +137,85 @@ void RenderDetailsPanel() detailsStyle.margin.right = 15; } - var selected = treeView.state.selectedIDs; - - if (selected.Count <= 0) return; - var first = selected[0]; + SplitterGUILayout.BeginVerticalSplit(verticalSplitterState, EmptyLayoutOption); - if (treeView.CurrentBindingItems.FirstOrDefault(x => x.id == first) is not MotionDebuggerViewItem item) return; - - detailsScroll = EditorGUILayout.BeginScrollView(this.detailsScroll, tableListStyle, EmptyLayoutOption); + detailsScroll = EditorGUILayout.BeginScrollView(detailsScroll, windowStyle, EmptyLayoutOption); { - ref var unmanagedData = ref MotionManager.GetDataRef(item.Handle); - ref var managedData = ref MotionManager.GetManagedDataRef(item.Handle); - var debugInfo = MotionManager.GetDebugInfo(item.Handle); - - GenericField("Name", managedData.DebugName); - EditorGUILayout.Space(2); - - using (new EditorGUILayout.VerticalScope(GUI.skin.box)) + var selected = treeView.state.selectedIDs; + if (selected.Count > 0 && treeView.CurrentBindingItems.FirstOrDefault(x => x.id == selected[0]) is MotionDebuggerViewItem item) { - EditorGUILayout.LabelField("Motion Data", EditorStyles.boldLabel); - - GenericField("Start Value", debugInfo.StartValue); - GenericField("End Value", debugInfo.EndValue); + ref var unmanagedData = ref MotionManager.GetDataRef(item.Handle); + ref var managedData = ref MotionManager.GetManagedDataRef(item.Handle); + var debugInfo = MotionManager.GetDebugInfo(item.Handle); - EditorGUILayout.Space(2); - GenericField("Duration", unmanagedData.Duration); - GenericField("Delay", unmanagedData.Delay); - GenericField("Delay Type", unmanagedData.DelayType); - GenericField("Loops", unmanagedData.Loops); - GenericField("Loop Type", unmanagedData.LoopType); - - EditorGUILayout.Space(2); - GenericField("Ease", unmanagedData.Ease); - if (unmanagedData.Ease is Ease.CustomAnimationCurve) + using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { - GenericField("Custom Ease Curve", unmanagedData.AnimationCurve); - } + EditorGUILayout.LabelField("Motion Handle", EditorStyles.boldLabel); + EditorGUILayout.Space(1); - EditorGUILayout.Space(2); - GenericField("Type", item.MotionType); - GenericField("Scheduler", item.SchedulerType); - GenericField("Cancel On Error", managedData.CancelOnError); - GenericField("Skip Values During Delay", managedData.SkipValuesDuringDelay); + GenericField("Name", item.Handle.GetDebugName()); + GenericField("Index", item.Handle.Index); + GenericField("Version", item.Handle.Version); - EditorGUILayout.Space(2); - GenericField("State[0]", managedData.State0); - GenericField("State[1]", managedData.State1); - GenericField("State[2]", managedData.State2); - } + EditorGUILayout.Space(4); + GenericField("Type", item.MotionType); + GenericField("Scheduler", item.SchedulerType); + } - EditorGUILayout.Space(2); + using (new EditorGUILayout.VerticalScope(GUI.skin.box)) + { + EditorGUILayout.LabelField("Parameters", EditorStyles.boldLabel); + EditorGUILayout.Space(1); + + GenericField("Start Value", debugInfo.StartValue); + GenericField("End Value", debugInfo.EndValue); + + EditorGUILayout.Space(4); + GenericField("Duration", unmanagedData.Duration); + GenericField("Delay", unmanagedData.Delay); + GenericField("Delay Type", unmanagedData.DelayType); + GenericField("Loops", unmanagedData.Loops); + GenericField("Loop Type", unmanagedData.LoopType); + + EditorGUILayout.Space(4); + GenericField("Ease", unmanagedData.Ease); + if (unmanagedData.Ease is Ease.CustomAnimationCurve) + { + GenericField("Custom Ease Curve", unmanagedData.AnimationCurve); + } + + EditorGUILayout.Space(4); + GenericField("Cancel On Error", managedData.CancelOnError); + GenericField("Skip Values During Delay", managedData.SkipValuesDuringDelay); + + EditorGUILayout.Space(4); + GenericField("State[0]", managedData.State0); + GenericField("State[1]", managedData.State1); + GenericField("State[2]", managedData.State2); + } - using (new EditorGUILayout.VerticalScope(GUI.skin.box)) - { - EditorGUILayout.LabelField("Status", EditorStyles.boldLabel); - EditorGUILayout.LabelField("Status", unmanagedData.Status.ToString()); - GenericField("Time", unmanagedData.Time); - GenericField("Completed Loops", unmanagedData.ComplpetedLoops); - EditorGUILayout.Space(2); - GenericField("Playback Speed", unmanagedData.PlaybackSpeed); - GenericField("Is Preserved", unmanagedData.IsPreserved); + using (new EditorGUILayout.VerticalScope(GUI.skin.box)) + { + EditorGUILayout.LabelField("Status", EditorStyles.boldLabel); + EditorGUILayout.Space(1); + + EditorGUILayout.LabelField("Status", unmanagedData.Status.ToString()); + GenericField("Time", unmanagedData.Time); + GenericField("Completed Loops", unmanagedData.ComplpetedLoops); + EditorGUILayout.Space(4); + GenericField("Playback Speed", unmanagedData.PlaybackSpeed); + GenericField("Is Preserved", unmanagedData.IsPreserved); + } } + } + EditorGUILayout.EndScrollView(); - EditorGUILayout.Space(2); - - using (new EditorGUILayout.VerticalScope(GUI.skin.box)) + stackTraceScroll = EditorGUILayout.BeginScrollView(stackTraceScroll, windowStyle, EmptyLayoutOption); + { + var selected = treeView.state.selectedIDs; + if (selected.Count > 0 && treeView.CurrentBindingItems.FirstOrDefault(x => x.id == selected[0]) is MotionDebuggerViewItem item) { - EditorGUILayout.LabelField("Stack Trace", EditorStyles.boldLabel); - + EditorGUILayout.LabelField("Stack Trace"); var vector = detailsStyle.CalcSize(new GUIContent(item.StackTrace)); EditorGUILayout.SelectableLabel(item.StackTrace, detailsStyle, new GUILayoutOption[] { @@ -212,6 +226,8 @@ void RenderDetailsPanel() } } EditorGUILayout.EndScrollView(); + + SplitterGUILayout.EndVerticalSplit(); } static void GenericField(string label, T value) diff --git a/src/LitMotion/Assets/LitMotion/Editor/SplitterGUILayout.cs b/src/LitMotion/Assets/LitMotion/Editor/SplitterGUILayout.cs index 40ffb7f6..6c0f4f8e 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/SplitterGUILayout.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/SplitterGUILayout.cs @@ -8,51 +8,73 @@ namespace LitMotion.Editor { internal static class SplitterGUILayout { - static readonly BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static; + static BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static; - static readonly Lazy splitterStateType = new(() => + static readonly Lazy SplitterStateType = new Lazy(() => { var type = typeof(EditorWindow).Assembly.GetTypes().First(x => x.FullName == "UnityEditor.SplitterState"); return type; }); - static readonly Lazy splitterStateCtor = new(() => + static readonly Lazy SplitterStateCtor = new Lazy(() => { - var type = splitterStateType.Value; + var type = SplitterStateType.Value; return type.GetConstructor(flags, null, new Type[] { typeof(float[]), typeof(int[]), typeof(int[]) }, null); }); - static readonly Lazy splitterGUILayoutType = new(() => + static readonly Lazy SplitterGUILayoutType = new Lazy(() => { var type = typeof(EditorWindow).Assembly.GetTypes().First(x => x.FullName == "UnityEditor.SplitterGUILayout"); return type; }); - static readonly Lazy beginVerticalSplit = new(() => + static readonly Lazy BeginVerticalSplitInfo = new Lazy(() => { - var type = splitterGUILayoutType.Value; - return type.GetMethod("BeginVerticalSplit", flags, null, new Type[] { splitterStateType.Value, typeof(GUILayoutOption[]) }, null); + var type = SplitterGUILayoutType.Value; + return type.GetMethod("BeginVerticalSplit", flags, null, new Type[] { SplitterStateType.Value, typeof(GUILayoutOption[]) }, null); }); - static readonly Lazy endVerticalSplit = new(() => + static readonly Lazy EndVerticalSplitInfo = new Lazy(() => { - var type = splitterGUILayoutType.Value; + var type = SplitterGUILayoutType.Value; return type.GetMethod("EndVerticalSplit", flags, null, Type.EmptyTypes, null); }); + static readonly Lazy BeginHorizontalSplitInfo = new Lazy(() => + { + var type = SplitterGUILayoutType.Value; + return type.GetMethod("BeginHorizontalSplit", flags, null, new Type[] { SplitterStateType.Value, typeof(GUILayoutOption[]) }, null); + }); + + static readonly Lazy EndHorizontalSplitInfo = new Lazy(() => + { + var type = SplitterGUILayoutType.Value; + return type.GetMethod("EndHorizontalSplit", flags, null, Type.EmptyTypes, null); + }); + public static object CreateSplitterState(float[] relativeSizes, int[] minSizes, int[] maxSizes) { - return splitterStateCtor.Value.Invoke(new object[] { relativeSizes, minSizes, maxSizes }); + return SplitterStateCtor.Value.Invoke(new object[] { relativeSizes, minSizes, maxSizes }); } public static void BeginVerticalSplit(object splitterState, params GUILayoutOption[] options) { - beginVerticalSplit.Value.Invoke(null, new object[] { splitterState, options }); + BeginVerticalSplitInfo.Value.Invoke(null, new object[] { splitterState, options }); } public static void EndVerticalSplit() { - endVerticalSplit.Value.Invoke(null, Type.EmptyTypes); + EndVerticalSplitInfo.Value.Invoke(null, Array.Empty()); + } + + public static void BeginHorizontalSplit(object splitterState, params GUILayoutOption[] options) + { + BeginHorizontalSplitInfo.Value.Invoke(null, new object[] { splitterState, options }); + } + + public static void EndHorizontalSplit() + { + EndHorizontalSplitInfo.Value.Invoke(null, Array.Empty()); } } } \ No newline at end of file From e7e9876e8f5538fffa642362a534888f96d3a304 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 15:15:17 +0900 Subject: [PATCH 114/224] Change: EnableTracking -> Enabled --- .../LitMotion/Editor/MotionDebuggerWindow.cs | 36 +++++++++---------- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 2 +- .../LitMotion/Runtime/MotionDebugger.cs | 2 +- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs index 28055864..c2380d51 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs @@ -18,14 +18,12 @@ public static void OpenWindow() GetWindow("LitMotion Debugger").Show(); } - static readonly GUILayoutOption[] EmptyLayoutOption = new GUILayoutOption[0]; - MotionDebuggerTreeView treeView; object horizontalSplitterState; object verticalSplitterState; - const string EnableTrackingPrefsKey = "LitMotion-MotionTracker-EnableTracking"; - const string EnableStackTracePrefsKey = "LitMotion-MotionTracker-EnableStackTrace"; + const string EnabledPrefsKey = "LitMotion-Debugger-Enabled"; + const string EnableStackTracePrefsKey = "LitMotion-Debugger-EnableStackTrace"; void OnEnable() { @@ -33,35 +31,35 @@ void OnEnable() horizontalSplitterState = SplitterGUILayout.CreateSplitterState(new float[] { 50f, 50f }, new int[] { 32, 32 }, null); verticalSplitterState = SplitterGUILayout.CreateSplitterState(new float[] { 50f, 15f }, new int[] { 32, 32 }, null); treeView = new MotionDebuggerTreeView(); - MotionDebugger.EnableTracking = EditorPrefs.GetBool(EnableTrackingPrefsKey, false); + MotionDebugger.Enabled = EditorPrefs.GetBool(EnabledPrefsKey, false); MotionDebugger.EnableStackTrace = EditorPrefs.GetBool(EnableStackTracePrefsKey, false); } void OnGUI() { RenderHeadPanel(); - SplitterGUILayout.BeginHorizontalSplit(horizontalSplitterState, EmptyLayoutOption); + SplitterGUILayout.BeginHorizontalSplit(horizontalSplitterState); RenderTable(); RenderDetailsPanel(); SplitterGUILayout.EndHorizontalSplit(); } - static readonly GUIContent ClearHeadContent = EditorGUIUtility.TrTextContent(" Clear "); - static readonly GUIContent EnableTrackingHeadContent = EditorGUIUtility.TrTextContent("Enable Tracking"); - static readonly GUIContent EnableStackTraceHeadContent = EditorGUIUtility.TrTextContent("Enable Stack Trace"); + static readonly GUIContent ClearHeadContent = new("Clear"); + static readonly GUIContent EnabledHeadContent = new("Enable"); + static readonly GUIContent EnableStackTraceHeadContent = new("Stack Trace"); void RenderHeadPanel() { - EditorGUILayout.BeginVertical(EmptyLayoutOption); - EditorGUILayout.BeginHorizontal(EditorStyles.toolbar, EmptyLayoutOption); + EditorGUILayout.BeginVertical(); + EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); - if (GUILayout.Toggle(MotionDebugger.EnableTracking, EnableTrackingHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption) != MotionDebugger.EnableTracking) + if (GUILayout.Toggle(MotionDebugger.Enabled, EnabledHeadContent, EditorStyles.toolbarButton, GUILayout.Width(110f)) != MotionDebugger.Enabled) { - MotionDebugger.EnableTracking = !MotionDebugger.EnableTracking; - EditorPrefs.SetBool(EnableTrackingPrefsKey, MotionDebugger.EnableTracking); + MotionDebugger.Enabled = !MotionDebugger.Enabled; + EditorPrefs.SetBool(EnabledPrefsKey, MotionDebugger.Enabled); } - if (GUILayout.Toggle(MotionDebugger.EnableStackTrace, EnableStackTraceHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption) != MotionDebugger.EnableStackTrace) + if (GUILayout.Toggle(MotionDebugger.EnableStackTrace, EnableStackTraceHeadContent, EditorStyles.toolbarButton, GUILayout.Width(90f)) != MotionDebugger.EnableStackTrace) { MotionDebugger.EnableStackTrace = !MotionDebugger.EnableStackTrace; EditorPrefs.SetBool(EnableStackTracePrefsKey, MotionDebugger.EnableStackTrace); @@ -69,7 +67,7 @@ void RenderHeadPanel() GUILayout.FlexibleSpace(); - if (GUILayout.Button(ClearHeadContent, EditorStyles.toolbarButton, EmptyLayoutOption)) + if (GUILayout.Button(ClearHeadContent, EditorStyles.toolbarButton, GUILayout.Width(70f))) { MotionDebugger.Clear(); treeView.ReloadAndSort(); @@ -137,9 +135,9 @@ void RenderDetailsPanel() detailsStyle.margin.right = 15; } - SplitterGUILayout.BeginVerticalSplit(verticalSplitterState, EmptyLayoutOption); + SplitterGUILayout.BeginVerticalSplit(verticalSplitterState); - detailsScroll = EditorGUILayout.BeginScrollView(detailsScroll, windowStyle, EmptyLayoutOption); + detailsScroll = EditorGUILayout.BeginScrollView(detailsScroll, windowStyle); { var selected = treeView.state.selectedIDs; if (selected.Count > 0 && treeView.CurrentBindingItems.FirstOrDefault(x => x.id == selected[0]) is MotionDebuggerViewItem item) @@ -210,7 +208,7 @@ void RenderDetailsPanel() } EditorGUILayout.EndScrollView(); - stackTraceScroll = EditorGUILayout.BeginScrollView(stackTraceScroll, windowStyle, EmptyLayoutOption); + stackTraceScroll = EditorGUILayout.BeginScrollView(stackTraceScroll, windowStyle); { var selected = treeView.state.selectedIDs; if (selected.Count > 0 && treeView.CurrentBindingItems.FirstOrDefault(x => x.id == selected[0]) is MotionDebuggerViewItem item) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index eecdf431..effebd42 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -435,7 +435,7 @@ internal MotionHandle ScheduleMotion() handle = buffer.Scheduler.Schedule(ref this); } - if (MotionDebugger.EnableTracking) + if (MotionDebugger.Enabled) { MotionDebugger.AddTracking(handle, buffer.Scheduler); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs index 5c8da178..1235ead9 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs @@ -9,7 +9,7 @@ namespace LitMotion /// public static class MotionDebugger { - public static bool EnableTracking = false; + public static bool Enabled = false; public static bool EnableStackTrace = false; public static IReadOnlyList Items => trackings; From 150f2dc850383a95bcfb46e04bf9a14b72b25ada Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 15:22:32 +0900 Subject: [PATCH 115/224] Add: search field --- .../LitMotion/Editor/MotionDebuggerTreeView.cs | 13 +++++++++++-- .../Assets/LitMotion/Editor/MotionDebuggerWindow.cs | 5 +++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs index 60656e01..80272032 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs @@ -16,6 +16,9 @@ public MotionDebuggerViewItem(int id) : base(id) { } static readonly Regex removeHref = new("(.+)", RegexOptions.Compiled); public MotionHandle Handle { get; set; } + public string DebugName => debugName ??= Handle.GetDebugName(); + string debugName; + public string MotionType { get; set; } public string SchedulerType { get; set; } @@ -96,7 +99,7 @@ void HeaderSortingChanged(MultiColumnHeader multiColumnHeader) var items = rootItem.children.Cast(); var orderedEnumerable = index switch { - 0 => ascending ? items.OrderBy(item => item.Handle.GetDebugName()) : items.OrderByDescending(item => item.Handle.GetDebugName()), + 0 => ascending ? items.OrderBy(item => item.DebugName) : items.OrderByDescending(item => item.DebugName), 1 => ascending ? items.OrderBy(item => item.MotionType) : items.OrderByDescending(item => item.MotionType), 2 => ascending ? items.OrderBy(item => item.Handle.Time) : items.OrderByDescending(item => item.Handle.Time), _ => throw new ArgumentOutOfRangeException(nameof(index), index, null), @@ -182,7 +185,7 @@ protected override void RowGUI(RowGUIArgs args) switch (columnIndex) { case 0: - EditorGUI.LabelField(rect, item.Handle.GetDebugName(), labelStyle); + EditorGUI.LabelField(rect, item.DebugName, labelStyle); break; case 1: EditorGUI.LabelField(rect, item.MotionType, labelStyle); @@ -195,6 +198,12 @@ protected override void RowGUI(RowGUIArgs args) } } } + + protected override bool DoesItemMatchSearch(TreeViewItem item, string search) + { + var viewItem = item as MotionDebuggerViewItem; + return viewItem.DebugName.Contains(search, StringComparison.InvariantCultureIgnoreCase); + } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs index c2380d51..88043c9e 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs @@ -1,6 +1,7 @@ using System.Linq; using UnityEngine; using UnityEditor; +using UnityEditor.IMGUI.Controls; namespace LitMotion.Editor { @@ -19,6 +20,7 @@ public static void OpenWindow() } MotionDebuggerTreeView treeView; + SearchField searchField; object horizontalSplitterState; object verticalSplitterState; @@ -31,6 +33,7 @@ void OnEnable() horizontalSplitterState = SplitterGUILayout.CreateSplitterState(new float[] { 50f, 50f }, new int[] { 32, 32 }, null); verticalSplitterState = SplitterGUILayout.CreateSplitterState(new float[] { 50f, 15f }, new int[] { 32, 32 }, null); treeView = new MotionDebuggerTreeView(); + searchField = new SearchField(); MotionDebugger.Enabled = EditorPrefs.GetBool(EnabledPrefsKey, false); MotionDebugger.EnableStackTrace = EditorPrefs.GetBool(EnableStackTracePrefsKey, false); } @@ -67,6 +70,8 @@ void RenderHeadPanel() GUILayout.FlexibleSpace(); + treeView.searchString = searchField.OnToolbarGUI(treeView.searchString); + if (GUILayout.Button(ClearHeadContent, EditorStyles.toolbarButton, GUILayout.Width(70f))) { MotionDebugger.Clear(); From 4b9ed871aa8dbaeda82f2a8b801843e61ec03d45 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 16:45:29 +0900 Subject: [PATCH 116/224] Change: rename SkipUpdate->IsInSequence --- src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs | 2 +- .../Assets/LitMotion/Runtime/Internal/MotionStorage.cs | 2 +- src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs | 2 +- src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index 5b2d067c..2595585e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -10,7 +10,7 @@ public struct MotionDataCore public MotionStatus Status; public MotionStatus PrevStatus; public bool IsPreserved; - public bool SkipUpdate; + public bool IsInSequence; public ushort ComplpetedLoops; public ushort PrevCompletedLoops; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 6d9a152b..32cdbb33 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -430,7 +430,7 @@ public void AddToSequence(ref MotionHandle handle, out double motionDuration) } dataRef.Core.IsPreserved = true; - dataRef.Core.SkipUpdate = true; + dataRef.Core.IsInSequence = true; // ref var managedDataRef = ref managedDataArray[slot.DenseIndex]; // managedDataRef.SkipValuesDuringDelay = true; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index 99c1e82c..6dfa95d7 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -64,7 +64,7 @@ public unsafe void Update(double time, double unscaledTime, double realtime) { var currentDataPtr = dataPtr + i; - if (currentDataPtr->Core.SkipUpdate) continue; + if (currentDataPtr->Core.IsInSequence) continue; var status = currentDataPtr->Core.Status; ref var managedData = ref managedDataSpan[i]; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs index bf5a66be..caf21145 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs @@ -35,7 +35,7 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) if (Hint.Likely(corePtr->Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing) || Hint.Unlikely(corePtr->IsPreserved && corePtr->Status is MotionStatus.Completed)) { - if (Hint.Unlikely(corePtr->SkipUpdate)) return; + if (Hint.Unlikely(corePtr->IsInSequence)) return; var deltaTime = corePtr->TimeKind switch { From 71e64584ee9e387bab60c55a9fb56e9bf1407d01 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 18:05:48 +0900 Subject: [PATCH 117/224] Add: MotionStoragePermission --- .../LitMotion/Editor/MotionDebuggerWindow.cs | 4 +- .../LitMotion/Runtime/Internal/Error.cs | 5 + .../Runtime/Internal/MotionManager.cs | 28 ++--- .../Runtime/Internal/MotionStorage.cs | 106 ++++++++++++------ .../Tasks/MotionConfiguredSourceBase.cs | 4 +- .../Assets/LitMotion/Runtime/MotionAwaiter.cs | 2 +- .../LitMotion/Runtime/MotionDebugger.cs | 4 +- .../Assets/LitMotion/Runtime/MotionHandle.cs | 12 +- .../Runtime/MotionHandleExtensions.cs | 14 +-- .../Runtime/Sequences/MotionSequenceSource.cs | 8 +- 10 files changed, 112 insertions(+), 75 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs index 88043c9e..4308256b 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs @@ -147,8 +147,8 @@ void RenderDetailsPanel() var selected = treeView.state.selectedIDs; if (selected.Count > 0 && treeView.CurrentBindingItems.FirstOrDefault(x => x.id == selected[0]) is MotionDebuggerViewItem item) { - ref var unmanagedData = ref MotionManager.GetDataRef(item.Handle); - ref var managedData = ref MotionManager.GetManagedDataRef(item.Handle); + ref var unmanagedData = ref MotionManager.GetDataRef(item.Handle, MotionStoragePermission.Admin); + ref var managedData = ref MotionManager.GetManagedDataRef(item.Handle, MotionStoragePermission.Admin); var debugInfo = MotionManager.GetDebugInfo(item.Handle); using (new EditorGUILayout.VerticalScope(GUI.skin.box)) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs index 2a33efa5..e866b730 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Error.cs @@ -35,5 +35,10 @@ public static void MotionHasBeenCanceledOrCompleted() { throw new InvalidOperationException("Motion has already been canceled or completed."); } + + public static void MotionIsInSequence() + { + throw new InvalidOperationException("Cannot access the motion in sequence."); + } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs index 1bf341dd..aaf6a447 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs @@ -20,17 +20,17 @@ public static void Register(MotionStorage + /// Represents the permissions for a motion in MotionStorage. + /// + internal enum MotionStoragePermission : byte + { + /// + /// Only root motions can be accessed, motions inside a sequence cannot be accessed. + /// + User, + /// + /// Allows access to motions within a sequence. + /// + Admin, + } + internal interface IMotionStorage { bool IsActive(MotionHandle handle); - bool TryCancel(MotionHandle handle); - bool TryComplete(MotionHandle handle); - void Cancel(MotionHandle handle); - void Complete(MotionHandle handle); - void SetTime(MotionHandle handle, double time); + bool TryCancel(MotionHandle handle, MotionStoragePermission permission); + bool TryComplete(MotionHandle handle, MotionStoragePermission permission); + void Cancel(MotionHandle handle, MotionStoragePermission permission); + void Complete(MotionHandle handle, MotionStoragePermission permission); + void SetTime(MotionHandle handle, double time, MotionStoragePermission permission); + ref MotionDataCore GetDataRef(MotionHandle handle, MotionStoragePermission permission); + ref ManagedMotionData GetManagedDataRef(MotionHandle handle, MotionStoragePermission permission); void AddToSequence(ref MotionHandle handle, out double motionDuration); - ref MotionDataCore GetDataRef(MotionHandle handle); - ref ManagedMotionData GetManagedDataRef(MotionHandle handle); MotionDebugInfo GetDebugInfo(MotionHandle handle); void Reset(); } @@ -220,14 +235,14 @@ public bool IsActive(MotionHandle handle) (motion.Core.Status is MotionStatus.Completed && motion.Core.IsPreserved); } - public bool TryCancel(MotionHandle handle) + public bool TryCancel(MotionHandle handle, MotionStoragePermission permission) { - return TryCancelCore(handle) == 0; + return TryCancelCore(handle, permission) == 0; } - public void Cancel(MotionHandle handle) + public void Cancel(MotionHandle handle, MotionStoragePermission permission) { - switch (TryCancelCore(handle)) + switch (TryCancelCore(handle, permission)) { case 1: Error.MotionNotExists(); @@ -235,10 +250,13 @@ public void Cancel(MotionHandle handle) case 2: Error.MotionHasBeenCanceledOrCompleted(); return; + case 3: + Error.MotionIsInSequence(); + return; } } - int TryCancelCore(MotionHandle handle) + int TryCancelCore(MotionHandle handle, MotionStoragePermission permission) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; @@ -259,6 +277,11 @@ int TryCancelCore(MotionHandle handle) return 2; } + if (permission < MotionStoragePermission.Admin && unmanagedData.Core.IsInSequence) + { + return 3; + } + unmanagedData.Core.Status = MotionStatus.Canceled; ref var managedData = ref managedDataArray[denseIndex]; @@ -267,14 +290,14 @@ int TryCancelCore(MotionHandle handle) return 0; } - public bool TryComplete(MotionHandle handle) + public bool TryComplete(MotionHandle handle, MotionStoragePermission permission) { - return TryCompleteCore(handle) == 0; + return TryCompleteCore(handle, permission) == 0; } - public void Complete(MotionHandle handle) + public void Complete(MotionHandle handle, MotionStoragePermission permission) { - switch (TryCompleteCore(handle)) + switch (TryCompleteCore(handle, permission)) { case 1: Error.MotionNotExists(); @@ -283,11 +306,14 @@ public void Complete(MotionHandle handle) Error.MotionHasBeenCanceledOrCompleted(); return; case 3: + Error.MotionIsInSequence(); + return; + case 4: throw new InvalidOperationException("Complete was ignored because it is not possible to complete a motion that loops infinitely. If you want to end the motion, call Cancel() instead."); } } - int TryCompleteCore(MotionHandle handle) + int TryCompleteCore(MotionHandle handle, MotionStoragePermission permission) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); @@ -309,11 +335,16 @@ int TryCompleteCore(MotionHandle handle) return 2; } - if (unmanagedData.Core.Loops < 0) + if (permission < MotionStoragePermission.Admin && unmanagedData.Core.IsInSequence) { return 3; } + if (unmanagedData.Core.Loops < 0) + { + return 4; + } + ref var managedData = ref managedDataArray[slot.DenseIndex]; unmanagedData.Core.Status = MotionStatus.Completed; @@ -364,19 +395,21 @@ int TryCompleteCore(MotionHandle handle) return 0; } - public unsafe void SetTime(MotionHandle handle, double time) + public unsafe void SetTime(MotionHandle handle, double time, MotionStoragePermission permission) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; if (IsDenseIndexOutOfRange(denseIndex)) Error.MotionNotExists(); + var version = slot.Version; + if (version <= 0 || version != handle.Version) Error.MotionNotExists(); + fixed (MotionData* ptr = unmanagedDataArray) { var dataPtr = ptr + denseIndex; - var version = slot.Version; - if (version <= 0 || version != handle.Version) Error.MotionNotExists(); + if (permission < MotionStoragePermission.Admin && dataPtr->Core.IsInSequence) Error.MotionIsInSequence(); MotionHelper.Update(dataPtr, time, out var result); @@ -415,7 +448,7 @@ public unsafe void SetTime(MotionHandle handle, double time) public void AddToSequence(ref MotionHandle handle, out double motionDuration) { - ref var slot = ref GetSlotWithVarify(handle); + ref var slot = ref GetSlotWithVarify(handle, MotionStoragePermission.Admin); ref var dataRef = ref unmanagedDataArray[slot.DenseIndex]; if (dataRef.Core.Status is not MotionStatus.Scheduled) @@ -431,30 +464,23 @@ public void AddToSequence(ref MotionHandle handle, out double motionDuration) dataRef.Core.IsPreserved = true; dataRef.Core.IsInSequence = true; - - // ref var managedDataRef = ref managedDataArray[slot.DenseIndex]; - // managedDataRef.SkipValuesDuringDelay = true; - - // increment version - slot.Version++; - handle.Version++; } - public ref ManagedMotionData GetManagedDataRef(MotionHandle handle) + public ref ManagedMotionData GetManagedDataRef(MotionHandle handle, MotionStoragePermission permission) { - ref var slot = ref GetSlotWithVarify(handle); + ref var slot = ref GetSlotWithVarify(handle, permission); return ref managedDataArray[slot.DenseIndex]; } - public ref MotionDataCore GetDataRef(MotionHandle handle) + public ref MotionDataCore GetDataRef(MotionHandle handle, MotionStoragePermission permission) { - ref var slot = ref GetSlotWithVarify(handle); + ref var slot = ref GetSlotWithVarify(handle, permission); return ref UnsafeUtility.As, MotionDataCore>(ref unmanagedDataArray[slot.DenseIndex]); } public MotionDebugInfo GetDebugInfo(MotionHandle handle) { - ref var slot = ref GetSlotWithVarify(handle); + ref var slot = ref GetSlotWithVarify(handle, MotionStoragePermission.Admin); ref var dataRef = ref unmanagedDataArray[slot.DenseIndex]; return new() @@ -466,17 +492,23 @@ public MotionDebugInfo GetDebugInfo(MotionHandle handle) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - ref SparseSetCore.Slot GetSlotWithVarify(MotionHandle handle) + ref SparseSetCore.Slot GetSlotWithVarify(MotionHandle handle, MotionStoragePermission permission) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); if (IsDenseIndexOutOfRange(slot.DenseIndex)) Error.MotionNotExists(); - if (IsInvalidVersion(slot.Version, handle) || - unmanagedDataArray[slot.DenseIndex].Core.Status == MotionStatus.None) + ref var dataRef = ref unmanagedDataArray[slot.DenseIndex]; + + if (IsInvalidVersion(slot.Version, handle) || dataRef.Core.Status == MotionStatus.None) { Error.MotionNotExists(); } + if (permission < MotionStoragePermission.Admin && dataRef.Core.IsInSequence) + { + Error.MotionIsInSequence(); + } + return ref slot; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs index 8a0a7af2..9a133257 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs @@ -74,7 +74,7 @@ protected void Initialize(MotionHandle motionHandle, MotionCancelBehavior cancel this.cancelAwaitOnMotionCanceled = cancelAwaitOnMotionCanceled; this.cancellationToken = cancellationToken; - ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle); + ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle, MotionStoragePermission.Admin); originalCancelAction = managedData.OnCancelAction; originalCompleteAction = managedData.OnCompleteAction; managedData.OnCancelAction = onCancelCallbackDelegate; @@ -129,7 +129,7 @@ protected void RestoreOriginalCallback(bool checkIsActive = true) { if (checkIsActive && !motionHandle.IsActive()) return; - ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle); + ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle, MotionStoragePermission.Admin); managedData.OnCancelAction = originalCancelAction; managedData.OnCompleteAction = originalCompleteAction; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs index ea1acefb..926dc862 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs @@ -31,7 +31,7 @@ public void UnsafeOnCompleted(Action continuation) { if (continuation == null) return; - ref var managedData = ref MotionManager.GetManagedDataRef(handle); + ref var managedData = ref MotionManager.GetManagedDataRef(handle, MotionStoragePermission.Admin); managedData.OnCompleteAction += continuation; managedData.OnCancelAction += continuation; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs index 1235ead9..07f29e09 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs @@ -27,7 +27,7 @@ public static void AddTracking(MotionHandle motionHandle, IMotionScheduler sched if (EnableStackTrace) state.StackTrace = new StackTrace(skipFrames, true); - ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle); + ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle, MotionStoragePermission.Admin); state.OriginalOnCompleteCallback = managedData.OnCompleteAction; managedData.OnCompleteAction = state.OnCompleteDelegate; state.OriginalOnCancelCallback = managedData.OnCancelAction; @@ -84,7 +84,7 @@ void OnComplete() MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); } - if (Handle.IsActive() && !MotionManager.GetDataRef(Handle).IsPreserved) + if (Handle.IsActive() && !MotionManager.GetDataRef(Handle, MotionStoragePermission.Admin).IsPreserved) { Release(); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index d36369e1..b10d1652 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -29,11 +29,11 @@ public readonly double Time { get { - return MotionManager.GetDataRef(this).Time; + return MotionManager.GetDataRef(this, MotionStoragePermission.Admin).Time; } set { - MotionManager.SetTime(this, value); + MotionManager.SetTime(this, value, MotionStoragePermission.User); } } @@ -44,7 +44,7 @@ public readonly double Duration { get { - return MotionHelper.GetTotalDuration(ref MotionManager.GetDataRef(this)); + return MotionHelper.GetTotalDuration(ref MotionManager.GetDataRef(this, MotionStoragePermission.Admin)); } } @@ -55,7 +55,7 @@ public readonly int ComplatedLoops { get { - return MotionManager.GetDataRef(this).ComplpetedLoops; + return MotionManager.GetDataRef(this, MotionStoragePermission.User).ComplpetedLoops; } } @@ -66,11 +66,11 @@ public readonly float PlaybackSpeed { get { - return MotionManager.GetDataRef(this).PlaybackSpeed; + return MotionManager.GetDataRef(this, MotionStoragePermission.User).PlaybackSpeed; } set { - MotionManager.GetDataRef(this).PlaybackSpeed = value; + MotionManager.GetDataRef(this, MotionStoragePermission.User).PlaybackSpeed = value; } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 89938325..1070794e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -36,7 +36,7 @@ public static bool IsActive(this MotionHandle handle) public static string GetDebugName(this MotionHandle handle) { #if LITMOTION_DEBUG - return MotionManager.GetManagedDataRef(handle).DebugName ?? handle.ToString(); + return MotionManager.GetManagedDataRef(handle, MotionStoragePermission.Admin).DebugName ?? handle.ToString(); #else return handle.ToString(); #endif @@ -50,10 +50,10 @@ public static string GetDebugName(this MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static MotionHandle Preserve(this MotionHandle handle) { - MotionManager.GetDataRef(handle).IsPreserved = true; + MotionManager.GetDataRef(handle, MotionStoragePermission.User).IsPreserved = true; return handle; } - + /// /// Complete motion. /// @@ -61,7 +61,7 @@ public static MotionHandle Preserve(this MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Complete(this MotionHandle handle) { - MotionManager.Complete(handle); + MotionManager.Complete(handle, MotionStoragePermission.User); } /// @@ -72,7 +72,7 @@ public static void Complete(this MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryComplete(this MotionHandle handle) { - return MotionManager.TryComplete(handle); + return MotionManager.TryComplete(handle, MotionStoragePermission.User); } /// @@ -82,7 +82,7 @@ public static bool TryComplete(this MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Cancel(this MotionHandle handle) { - MotionManager.Cancel(handle); + MotionManager.Cancel(handle, MotionStoragePermission.User); } /// @@ -93,7 +93,7 @@ public static void Cancel(this MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryCancel(this MotionHandle handle) { - return MotionManager.TryCancel(handle); + return MotionManager.TryCancel(handle, MotionStoragePermission.User); } /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index f6805822..e001f8ae 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -85,13 +85,13 @@ public double Time { var item = span[index]; if (item.Position < time) break; - item.Handle.Time = time - item.Position; + MotionManager.SetTime(item.Handle, time - item.Position, MotionStoragePermission.Admin); index--; } foreach (var item in span[..(index + 1)]) { - item.Handle.Time = time - item.Position; + MotionManager.SetTime(item.Handle, time - item.Position, MotionStoragePermission.Admin); } } } @@ -101,7 +101,7 @@ public double Time void OnComplete() { if (!handle.IsActive()) return; - if (MotionManager.GetDataRef(handle).IsPreserved) return; + if (MotionManager.GetDataRef(handle, MotionStoragePermission.Admin).IsPreserved) return; Return(this); } @@ -110,7 +110,7 @@ void OnCancel() { foreach (var item in Items) { - item.Handle.Cancel(); + MotionManager.Cancel(item.Handle, MotionStoragePermission.Admin); } Return(this); From 33aa375db225072a4168509b1d10bcec957af1df Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 18:09:39 +0900 Subject: [PATCH 118/224] Update: tests --- .../LitMotion/Tests/Runtime/MotionHandleTest.cs | 3 ++- .../Assets/LitMotion/Tests/Runtime/SequenceTest.cs | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs index 6998cfd6..4a22a844 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionHandleTest.cs @@ -156,7 +156,8 @@ public IEnumerator Test_CompletedLoops() { var handle = LMotion.Create(0f, 10f, 1f) .WithLoops(3) - .RunWithoutBinding(); + .RunWithoutBinding() + .Preserve(); Assert.That(handle.ComplatedLoops, Is.EqualTo(0)); yield return new WaitForSeconds(1f); diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs index 4d7f65cc..1aae2a52 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs @@ -182,7 +182,17 @@ public void Test_Error_UseMotionHandleInSequence() Assert.Throws(() => { handle.Complete(); - }); + }, "Cannot access the motion in sequence."); + + Assert.Throws(() => + { + handle.Cancel(); + }, "Cannot access the motion in sequence."); + + Assert.Throws(() => + { + handle.Time = 0; + }, "Cannot access the motion in sequence."); } } } From 4247763369494d93f359990863609d42d09a0d36 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 18:22:39 +0900 Subject: [PATCH 119/224] Remove: ref keyword --- .../Assets/LitMotion/Runtime/Internal/MotionManager.cs | 4 ++-- .../Assets/LitMotion/Runtime/Internal/MotionStorage.cs | 4 ++-- .../LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs index aaf6a447..d4c07496 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs @@ -83,10 +83,10 @@ public static void SetTime(MotionHandle handle, double time, MotionStoragePermis } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void AddToSequence(ref MotionHandle handle, out double motionDuration) + public static void AddToSequence(MotionHandle handle, out double motionDuration) { CheckTypeId(handle); - list[handle.StorageId].AddToSequence(ref handle, out motionDuration); + list[handle.StorageId].AddToSequence(handle, out motionDuration); } // For MotionTracker diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 6181929b..510fea5e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -42,7 +42,7 @@ internal interface IMotionStorage void SetTime(MotionHandle handle, double time, MotionStoragePermission permission); ref MotionDataCore GetDataRef(MotionHandle handle, MotionStoragePermission permission); ref ManagedMotionData GetManagedDataRef(MotionHandle handle, MotionStoragePermission permission); - void AddToSequence(ref MotionHandle handle, out double motionDuration); + void AddToSequence(MotionHandle handle, out double motionDuration); MotionDebugInfo GetDebugInfo(MotionHandle handle); void Reset(); } @@ -446,7 +446,7 @@ public unsafe void SetTime(MotionHandle handle, double time, MotionStoragePermis } } - public void AddToSequence(ref MotionHandle handle, out double motionDuration) + public void AddToSequence(MotionHandle handle, out double motionDuration) { ref var slot = ref GetSlotWithVarify(handle, MotionStoragePermission.Admin); ref var dataRef = ref unmanagedDataArray[slot.DenseIndex]; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index 0252235e..2887ded1 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -45,7 +45,7 @@ public static void Return(MotionSequenceBuilderSource source) public void Append(MotionHandle handle) { - MotionManager.AddToSequence(ref handle, out var motionDuration); + MotionManager.AddToSequence(handle, out var motionDuration); AddItem(new MotionSequenceItem(tail, handle)); AppendInterval(motionDuration); } @@ -59,7 +59,7 @@ public void AppendInterval(double interval) public void Insert(double position, MotionHandle handle) { - MotionManager.AddToSequence(ref handle, out var motionDuration); + MotionManager.AddToSequence(handle, out var motionDuration); AddItem(new MotionSequenceItem(position, handle)); duration = Math.Max(duration, position + motionDuration); } From 94f0988dab5cf1bba3fbde51d9b38e5b7f649395 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 18:33:22 +0900 Subject: [PATCH 120/224] Fix: OnLoopComplete is called for the wrong motion --- .../Assets/LitMotion/Runtime/Internal/UpdateRunner.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index 6dfa95d7..bc2bc31c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -84,9 +84,9 @@ public unsafe void Update(double time, double unscaledTime, double realtime) } } - if (dataPtr->Core.WasLoopCompleted) + if (currentDataPtr->Core.WasLoopCompleted) { - managedData.InvokeOnLoopComplete(dataPtr->Core.ComplpetedLoops); + managedData.InvokeOnLoopComplete(currentDataPtr->Core.ComplpetedLoops); } if (status is MotionStatus.Completed && currentDataPtr->Core.WasStatusChanged) From 0ad093fffc293ca1d1018a7babe9ff2533c6ccc0 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 18:40:10 +0900 Subject: [PATCH 121/224] Add: MotionSequenceBuilder.Schedule(configuration) --- .../Runtime/Sequences/MotionSequenceBuilder.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index 2887ded1..f3398390 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -69,13 +69,15 @@ public void Join(MotionHandle handle) Insert(lastTail, handle); } - public MotionHandle Schedule() + public MotionHandle Schedule(Action> configuration) { var source = MotionSequenceSource.Rent(); - var handle = LMotion.Create(0.0, duration, (float)duration) + var builder = LMotion.Create(0.0, duration, (float)duration) .WithOnComplete(source.OnCompleteDelegate) - .WithOnCancel(source.OnCancelDelegate) - .Bind(source, (x, source) => source.Time = x); + .WithOnCancel(source.OnCancelDelegate); + + configuration?.Invoke(builder); + var handle = builder.Bind(source, (x, source) => source.Time = x); source.Initialize(handle, buffer, count, duration); buffer = null; @@ -146,9 +148,15 @@ public readonly MotionSequenceBuilder Join(MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public MotionHandle Schedule() + { + return Schedule(null); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public MotionHandle Schedule(Action> configuration) { CheckIsDisposed(); - var handle = source.Schedule(); + var handle = source.Schedule(configuration); Dispose(); return handle; } From c069de9af2d31a3ad656a091df5d4379fe49290e Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 8 Dec 2024 22:02:23 +0900 Subject: [PATCH 122/224] Add: package folder --- src/LitMotion/Assets/LitMotion.Animation.meta | 8 ++++++++ .../Assets/LitMotion.Animation/Editor.meta | 8 ++++++++ .../Editor/LitMotion.Animation.Editor.asmdef | 20 +++++++++++++++++++ .../LitMotion.Animation.Editor.asmdef.meta | 7 +++++++ .../Assets/LitMotion.Animation/Runtime.meta | 8 ++++++++ .../Runtime/LitMotion.Animation.asmdef | 17 ++++++++++++++++ .../Runtime/LitMotion.Animation.asmdef.meta | 7 +++++++ .../Runtime/LitMotionAnimation.cs | 19 ++++++++++++++++++ .../Runtime/LitMotionAnimation.cs.meta | 2 ++ .../Assets/LitMotion.Animation/package.json | 16 +++++++++++++++ .../LitMotion.Animation/package.json.meta | 7 +++++++ 11 files changed, 119 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion.Animation.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/package.json create mode 100644 src/LitMotion/Assets/LitMotion.Animation/package.json.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation.meta b/src/LitMotion/Assets/LitMotion.Animation.meta new file mode 100644 index 00000000..7fc4af65 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0939fe3a0dae048628bcbb663d4036c8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor.meta new file mode 100644 index 00000000..fd1bbefa --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b667778060a1244d4867a59fe9e823b6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef new file mode 100644 index 00000000..a48ea511 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef @@ -0,0 +1,20 @@ +{ + "name": "LitMotion.VisualEditor.Editor", + "rootNamespace": "", + "references": [ + "GUID:3b570a5146f9d4f0fa107ed4559471a3", + "GUID:aa9cad64d4fae43d2a90e595aea6cc7f", + "GUID:4368f6075359c4611b74470590e3ec1f" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef.meta new file mode 100644 index 00000000..75eebd3d --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 52f1a7b1118134b9983b49a8d367591e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime.meta new file mode 100644 index 00000000..f80f0e5d --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3b9713b3bb4df42b494c9b052e41963a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef new file mode 100644 index 00000000..40803843 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef @@ -0,0 +1,17 @@ +{ + "name": "LitMotion.Animation", + "rootNamespace": "", + "references": [ + "GUID:3b570a5146f9d4f0fa107ed4559471a3", + "GUID:aa9cad64d4fae43d2a90e595aea6cc7f" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef.meta new file mode 100644 index 00000000..be6896f8 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4368f6075359c4611b74470590e3ec1f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs new file mode 100644 index 00000000..181322b0 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace LitMotion.Animation +{ + public class LitMotionAnimation : MonoBehaviour + { + // Start is called once before the first execution of Update after the MonoBehaviour is created + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs.meta new file mode 100644 index 00000000..2f1eacfd --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 9cc6819e64e4c44beb63ea2ef45e1a6d \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/package.json b/src/LitMotion/Assets/LitMotion.Animation/package.json new file mode 100644 index 00000000..5c19c1ac --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/package.json @@ -0,0 +1,16 @@ +{ + "name": "com.annulusgames.lit-motion.animation", + "version": "2.0.0", + "displayName": "LitMotion.Animation", + "description": "Animation component (visual editor) for LitMotion", + "keywords": [ + "dots", + "tween" + ], + "dependencies": { + "com.annulusgames.lit-motion": "2.0.0" + }, + "author": { + "name": "Annulus Games" + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/package.json.meta b/src/LitMotion/Assets/LitMotion.Animation/package.json.meta new file mode 100644 index 00000000..b6991f21 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a06af499eaaf3439e97c3bd6bcb5863c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 9c1948f9dec5a01634fffc08220cbe0391345802 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Mon, 9 Dec 2024 23:38:11 +0900 Subject: [PATCH 123/224] Add: component view --- .../Editor/AnimationComponentView.cs | 102 ++++++++++++++++++ .../Editor/AnimationComponentView.cs.meta | 2 + .../Editor/LitMotionAnimationEditor.cs | 53 +++++++++ .../Editor/LitMotionAnimationEditor.cs.meta | 2 + .../Runtime/Components.meta | 8 ++ .../Runtime/Components/PositionComponent.cs | 20 ++++ .../Components/PositionComponent.cs.meta | 2 + .../Runtime/LitMotion.Animation.asmdef | 3 +- .../Runtime/LitMotionAnimation.cs | 25 +++-- .../Runtime/LitMotionAnimationComponent.cs | 10 ++ .../LitMotionAnimationComponent.cs.meta | 2 + 11 files changed, 221 insertions(+), 8 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs new file mode 100644 index 00000000..b3b54cc6 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs @@ -0,0 +1,102 @@ +using UnityEditor; +using UnityEngine; +using UnityEngine.UIElements; + +namespace LitMotion.Animation.Editor +{ + public class AnimationComponentView : VisualElement + { + VisualElement container; + readonly Foldout foldout; + readonly VisualElement icon; + readonly Toggle enabledToggle; + readonly ProgressBar progressBar; + + public string Text + { + get => enabledToggle.text; + set => enabledToggle.text = value; + } + + public float Progress + { + get => progressBar.value; + set => progressBar.value = value; + } + + public StyleBackground Icon + { + get => icon.style.backgroundImage; + set => icon.style.backgroundImage = value; + } + + public override VisualElement contentContainer => container; + + public AnimationComponentView() + { + container = this; + + var root = new HelpBox + { + style = { + flexDirection = FlexDirection.Column, + flexGrow = 1f, + } + }; + Add(root); + + foldout = new Foldout + { + style = { + marginLeft = 15f, + paddingRight = 3f, + alignSelf = Align.Stretch, + } + }; + root.Add(foldout); + foldout.Add(new VisualElement() { style = { height = 5f } }); + var foldoutCheck = foldout.Q("unity-checkmark"); + icon = new VisualElement + { + style = { + width = 16f, + height = 16f, + marginTop = 0.5f, + marginRight = 2f, + backgroundImage = (Texture2D)EditorGUIUtility.IconContent("ScriptableObject Icon").image, + } + }; + foldoutCheck.parent.Add(icon); + enabledToggle = new Toggle(); + enabledToggle.Q("unity-checkmark").style.marginRight = 6f; + foldoutCheck.parent.Add(enabledToggle); + + progressBar = new ProgressBar + { + lowValue = 0f, + highValue = 1f, + value = 0f, + style = { + height = 2.5f, + position = Position.Absolute, + top = 22f, + left = 24f, + right = 2f, + alignSelf = Align.Stretch, + } + }; + var background = progressBar.Q(null, "unity-progress-bar__background"); + background.style.borderTopWidth = 0f; + background.style.borderBottomWidth = 0f; + background.style.borderLeftWidth = 0f; + background.style.borderRightWidth = 0f; + var progress = progressBar.Q(null, "unity-progress-bar__progress"); + progress.style.backgroundColor = Color.white; + progress.style.minWidth = 0f; + + root.Add(progressBar); + + container = foldout.contentContainer; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs.meta new file mode 100644 index 00000000..d2bf2d1d --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8291551a8e2c7429ba3fec7bfc15f977 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs new file mode 100644 index 00000000..d581d375 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using UnityEngine.UIElements; +using UnityEditor; +using System.Collections; +using UnityEditor.UIElements; + +namespace LitMotion.Animation.Editor +{ + [CustomEditor(typeof(LitMotionAnimation))] + public sealed class LitMotionAnimationEditor : UnityEditor.Editor + { + public override VisualElement CreateInspectorGUI() + { + var root = new VisualElement(); + + var property = serializedObject.FindProperty("components"); + for (int i = 0; i < property.arraySize; i++) + { + var element = CreateComponentGUI(property.GetArrayElementAtIndex(i)); + root.Add(element); + } + + var button = new Button() + { + text = "Add..." + }; + + root.Add(button); + + return root; + } + + VisualElement CreateComponentGUI(SerializedProperty property) + { + var view = new AnimationComponentView() + { + Text = property.displayName + }; + + var endProperty = property.GetEndProperty(); + var isFirst = true; + while (property.NextVisible(isFirst)) + { + if (SerializedProperty.EqualContents(property, endProperty)) break; + isFirst = false; + + view.Add(new PropertyField(property)); + } + + return view; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs.meta new file mode 100644 index 00000000..7c76ec36 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 076c012cca3a04a2fb851a1ea1024e84 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components.meta new file mode 100644 index 00000000..421abda5 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75cc72c33e07d4ebc86cae21e377b638 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs new file mode 100644 index 00000000..86e9d33b --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs @@ -0,0 +1,20 @@ + +using System; +using LitMotion.Extensions; +using UnityEngine; + +namespace LitMotion.Animation.Components +{ + [Serializable] + public sealed class PositionComponent : LitMotionAnimationComponent + { + [SerializeField] Transform target; + [SerializeField] SerializableMotionSettings settings; + + public override MotionHandle Play() + { + return LMotion.Create(settings) + .BindToPosition(target); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs.meta new file mode 100644 index 00000000..97054cf0 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8ae828f3e1b4b4eb9918ed17339d0de4 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef index 40803843..5dc9fae2 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef @@ -3,7 +3,8 @@ "rootNamespace": "", "references": [ "GUID:3b570a5146f9d4f0fa107ed4559471a3", - "GUID:aa9cad64d4fae43d2a90e595aea6cc7f" + "GUID:aa9cad64d4fae43d2a90e595aea6cc7f", + "GUID:3aa1866a824b5472da50fe142777d95f" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 181322b0..6f38120b 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -1,19 +1,30 @@ +using System.Collections.Generic; +using LitMotion.Animation.Components; +using LitMotion.Sequences; using UnityEngine; namespace LitMotion.Animation { - public class LitMotionAnimation : MonoBehaviour + [AddComponentMenu("LitMotion Animation")] + public sealed class LitMotionAnimation : MonoBehaviour { - // Start is called once before the first execution of Update after the MonoBehaviour is created - void Start() + [SerializeReference] + LitMotionAnimationComponent[] components = new LitMotionAnimationComponent[] { + new PositionComponent(), + new PositionComponent(), + }; - } - - // Update is called once per frame - void Update() + public MotionHandle Play() { + var builder = LSequence.Create(); + + foreach (var component in components) + { + builder.Join(component.Play()); + } + return builder.Schedule(); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs new file mode 100644 index 00000000..ffc646ee --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs @@ -0,0 +1,10 @@ +using System; + +namespace LitMotion.Animation +{ + [Serializable] + public abstract class LitMotionAnimationComponent + { + public abstract MotionHandle Play(); + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs.meta new file mode 100644 index 00000000..5dbd9ddd --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0467094de70fc4e65973009d440eaa62 \ No newline at end of file From c6de4492852f03ba69ae8def796d42e95b5f292c Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Tue, 10 Dec 2024 10:52:04 +0900 Subject: [PATCH 124/224] Add: property drawer --- .../LitMotionAnimationComponentDrawer.cs | 30 +++++++++++++++++++ .../LitMotionAnimationComponentDrawer.cs.meta | 2 ++ .../Editor/LitMotionAnimationEditor.cs | 26 ++-------------- 3 files changed, 34 insertions(+), 24 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs new file mode 100644 index 00000000..6e1d605c --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs @@ -0,0 +1,30 @@ +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace LitMotion.Animation.Editor +{ + [CustomPropertyDrawer(typeof(LitMotionAnimationComponent), true)] + public class LitMotionAnimationComponentDrawer : PropertyDrawer + { + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + var view = new AnimationComponentView() + { + Text = property.displayName + }; + + var endProperty = property.GetEndProperty(); + var isFirst = true; + while (property.NextVisible(isFirst)) + { + if (SerializedProperty.EqualContents(property, endProperty)) break; + isFirst = false; + + view.Add(new PropertyField(property)); + } + + return view; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs.meta new file mode 100644 index 00000000..059a80a8 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 44d42c2542ae14559b2ee246182b27ce \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index d581d375..ec8db23e 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -1,7 +1,5 @@ -using UnityEngine; using UnityEngine.UIElements; using UnityEditor; -using System.Collections; using UnityEditor.UIElements; namespace LitMotion.Animation.Editor @@ -16,8 +14,8 @@ public override VisualElement CreateInspectorGUI() var property = serializedObject.FindProperty("components"); for (int i = 0; i < property.arraySize; i++) { - var element = CreateComponentGUI(property.GetArrayElementAtIndex(i)); - root.Add(element); + var field = new PropertyField(property.GetArrayElementAtIndex(i)); + root.Add(field); } var button = new Button() @@ -29,25 +27,5 @@ public override VisualElement CreateInspectorGUI() return root; } - - VisualElement CreateComponentGUI(SerializedProperty property) - { - var view = new AnimationComponentView() - { - Text = property.displayName - }; - - var endProperty = property.GetEndProperty(); - var isFirst = true; - while (property.NextVisible(isFirst)) - { - if (SerializedProperty.EqualContents(property, endProperty)) break; - isFirst = false; - - view.Add(new PropertyField(property)); - } - - return view; - } } } \ No newline at end of file From 8fb3b97f5d8eed0b1253b2cf2a9463251ee6a0c2 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Tue, 10 Dec 2024 14:50:39 +0900 Subject: [PATCH 125/224] Add: editor (in-progress) --- .../Editor/AnimationComponentView.cs | 8 +- .../LitMotionAnimationComponentDrawer.cs | 30 -- .../LitMotionAnimationComponentDrawer.cs.meta | 2 - .../Editor/LitMotionAnimationEditor.cs | 89 ++++- .../Editor/ReflectionHelper.cs | 314 ++++++++++++++++ .../Editor/ReflectionHelper.cs.meta | 2 + .../Editor/SerializedPropertyExtensions.cs | 339 ++++++++++++++++++ .../SerializedPropertyExtensions.cs.meta | 2 + .../{PositionComponent.cs => Position.cs} | 2 +- ...tionComponent.cs.meta => Position.cs.meta} | 0 .../Runtime/LitMotionAnimation.cs | 4 +- .../Runtime/LitMotionAnimationComponent.cs | 12 + 12 files changed, 762 insertions(+), 42 deletions(-) delete mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs delete mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/SerializedPropertyExtensions.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/SerializedPropertyExtensions.cs.meta rename src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/{PositionComponent.cs => Position.cs} (85%) rename src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/{PositionComponent.cs.meta => Position.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs index b3b54cc6..3d8af6bc 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs @@ -12,6 +12,9 @@ public class AnimationComponentView : VisualElement readonly Toggle enabledToggle; readonly ProgressBar progressBar; + public Foldout Foldout => foldout; + public Toggle EnabledToggle => enabledToggle; + public string Text { get => enabledToggle.text; @@ -67,7 +70,10 @@ public AnimationComponentView() } }; foldoutCheck.parent.Add(icon); - enabledToggle = new Toggle(); + enabledToggle = new Toggle + { + toggleOnLabelClick = false + }; enabledToggle.Q("unity-checkmark").style.marginRight = 6f; foldoutCheck.parent.Add(enabledToggle); diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs deleted file mode 100644 index 6e1d605c..00000000 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs +++ /dev/null @@ -1,30 +0,0 @@ -using UnityEditor; -using UnityEditor.UIElements; -using UnityEngine.UIElements; - -namespace LitMotion.Animation.Editor -{ - [CustomPropertyDrawer(typeof(LitMotionAnimationComponent), true)] - public class LitMotionAnimationComponentDrawer : PropertyDrawer - { - public override VisualElement CreatePropertyGUI(SerializedProperty property) - { - var view = new AnimationComponentView() - { - Text = property.displayName - }; - - var endProperty = property.GetEndProperty(); - var isFirst = true; - while (property.NextVisible(isFirst)) - { - if (SerializedProperty.EqualContents(property, endProperty)) break; - isFirst = false; - - view.Add(new PropertyField(property)); - } - - return view; - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs.meta deleted file mode 100644 index 059a80a8..00000000 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationComponentDrawer.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 44d42c2542ae14559b2ee246182b27ce \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index ec8db23e..a10e6f6d 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -1,21 +1,66 @@ using UnityEngine.UIElements; using UnityEditor; using UnityEditor.UIElements; +using UnityEngine; namespace LitMotion.Animation.Editor { [CustomEditor(typeof(LitMotionAnimation))] public sealed class LitMotionAnimationEditor : UnityEditor.Editor { + VisualElement root; + SerializedProperty componentsProperty; + int prevArraySize; + public override VisualElement CreateInspectorGUI() { - var root = new VisualElement(); + root = new VisualElement(); + componentsProperty = serializedObject.FindProperty("components"); + prevArraySize = componentsProperty.arraySize; + + RefleshInspector(false); + + root.schedule.Execute(() => + { + if (componentsProperty.arraySize != prevArraySize) + { + RefleshInspector(true); + } + prevArraySize = componentsProperty.arraySize; + }) + .Every(10); + + return root; + } + + ContextualMenuManipulator CreateContextMenuManipulator(SerializedProperty property, int arrayIndex) + { + return new ContextualMenuManipulator(evt => + { + evt.menu.AppendAction("Remove Component", x => + { + property.DeleteArrayElementAtIndex(arrayIndex); + RefleshInspector(true); + }); + }); + } + + void RefleshInspector(bool applyModifiedProperties) + { + if (applyModifiedProperties) + { + serializedObject.ApplyModifiedProperties(); + } + + root.Clear(); - var property = serializedObject.FindProperty("components"); - for (int i = 0; i < property.arraySize; i++) + for (int i = 0; i < componentsProperty.arraySize; i++) { - var field = new PropertyField(property.GetArrayElementAtIndex(i)); - root.Add(field); + var property = componentsProperty.GetArrayElementAtIndex(i); + var view = CreateComponentGUI(property.Copy()); + CreateContextMenuManipulator(componentsProperty, i).target = view.Foldout.Q(); + view.EnabledToggle.BindProperty(property.FindPropertyRelative("enabled")); + root.Add(view); } var button = new Button() @@ -24,8 +69,40 @@ public override VisualElement CreateInspectorGUI() }; root.Add(button); + } - return root; + AnimationComponentView CreateComponentGUI(SerializedProperty property) + { + var view = new AnimationComponentView + { + Text = property.FindPropertyRelative("displayName").stringValue + }; + + var targetProperty = property.FindPropertyRelative("target"); + if (targetProperty != null) + { + view.Icon = AssetPreview.GetMiniTypeThumbnail(targetProperty.GetPropertyType()); + } + + view.TrackPropertyValue(property.FindPropertyRelative("displayName"), x => + { + view.Text = x.stringValue; + }); + + view.Foldout.BindProperty(property); + + var endProperty = property.GetEndProperty(); + var isFirst = true; + while (property.NextVisible(isFirst)) + { + if (SerializedProperty.EqualContents(property, endProperty)) break; + if (property.name == "enabled") continue; + isFirst = false; + + view.Add(new PropertyField(property)); + } + + return view; } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs new file mode 100644 index 00000000..d5a79d16 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs @@ -0,0 +1,314 @@ +using System; +using System.Reflection; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; + +namespace LitMotion.Animation.Editor +{ + internal static class ReflectionHelper + { + static readonly Dictionary<(Type, string, BindingFlags, bool), FieldInfo> cacheFieldInfo = new(); + static readonly Dictionary<(Type, string, BindingFlags, bool), MethodInfo> cacheMethodInfo = new(); + static readonly Dictionary<(Type, string, BindingFlags, bool), PropertyInfo> cachePropertyInfo = new(); + static readonly Dictionary<(Type, BindingFlags, bool), MemberInfo[]> cacheAllMembers = new(); + + static readonly Dictionary<(Type, string), Func> cacheGetFieldValue = new(); + static readonly Dictionary<(Type, string), Func> cacheGetPropertyValue = new(); + static readonly Dictionary<(Type, string), Func> cacheGetMethodValue = new(); + + public static Func CreateGetter(FieldInfo fieldInfo) + { + if (fieldInfo == null) return null; + if (fieldInfo.IsStatic) + { + var body = Expression.Convert(Expression.MakeMemberAccess(null, fieldInfo), typeof(object)); + var lambda = Expression.Lambda>(body).Compile(); + return _ => lambda(); + } + if (fieldInfo.DeclaringType != null) + { + var objParam = Expression.Parameter(typeof(object), "obj"); + var tParam = Expression.Convert(objParam, fieldInfo.DeclaringType); + var body = Expression.Convert(Expression.MakeMemberAccess(tParam, fieldInfo), typeof(object)); + return Expression.Lambda>(body, objParam).Compile(); + } + return null; + } + + public static Func CreateGetter(PropertyInfo propertyInfo) + { + if (propertyInfo == null) return null; + if (propertyInfo.GetGetMethod(true).IsStatic) + { + var body = Expression.Convert(Expression.MakeMemberAccess(null, propertyInfo), typeof(object)); + var lambda = Expression.Lambda>(body).Compile(); + return _ => lambda(); + } + if (propertyInfo.DeclaringType != null) + { + var objParam = Expression.Parameter(typeof(object), "obj"); + var tParam = Expression.Convert(objParam, propertyInfo.DeclaringType); + var body = Expression.Convert(Expression.MakeMemberAccess(tParam, propertyInfo), typeof(object)); + return Expression.Lambda>(body, objParam).Compile(); + } + return null; + } + + public static Func CreateGetter(MethodInfo methodInfo) + { + if (methodInfo == null) return null; + if (methodInfo.IsStatic) + { + var body = Expression.Convert(Expression.Call(null, methodInfo), typeof(object)); + var lambda = Expression.Lambda>(body).Compile(); + return _ => lambda(); + } + if (methodInfo.DeclaringType != null) + { + var objParam = Expression.Parameter(typeof(object), "obj"); + var tParam = Expression.Convert(objParam, methodInfo.DeclaringType); + var body = Expression.Convert(Expression.Call(tParam, methodInfo), typeof(object)); + return Expression.Lambda>(body, objParam).Compile(); + } + return null; + } + + public static object GetFieldValue(object target, Type type, string name, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static) + { + if (!cacheGetFieldValue.TryGetValue((type, name), out var value)) + { + var info = type.GetField(name, bindingAttr); + value = CreateGetter(info); + cacheGetFieldValue.Add((type, name), value); + } + return value?.Invoke(target); + } + + public static object GetPropertyValue(object target, Type type, string name, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static) + { + if (!cacheGetPropertyValue.TryGetValue((type, name), out var value)) + { + var info = type.GetProperty(name, bindingAttr); + value = CreateGetter(info); + cacheGetPropertyValue.Add((type, name), value); + } + return value?.Invoke(target); + } + + public static object GetMethodValue(object target, Type type, string name, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static) + { + if (!cacheGetMethodValue.TryGetValue((type, name), out var value)) + { + var info = type.GetMethod(name, bindingAttr); + value = CreateGetter(info); + cacheGetMethodValue.Add((type, name), value); + } + return value?.Invoke(target); + } + + public static FieldInfo GetField(Type type, string name, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static, bool includingBaseNonPublic = false) + { + if (!cacheFieldInfo.TryGetValue((type, name, bindingAttr, includingBaseNonPublic), out var info)) + { + if (includingBaseNonPublic) + { + info = GetAllFieldsIncludingBaseNonPublic(type, bindingAttr).FirstOrDefault(x => x.Name == name); + } + else + { + info = type.GetField(name, bindingAttr); + } + cacheFieldInfo.Add((type, name, bindingAttr, includingBaseNonPublic), info); + } + return info; + } + + static IEnumerable EnumerateTypeHierarchy(Type type) + { + while (type != null) + { + yield return type; + type = type.BaseType; + } + } + + public static IEnumerable GetAllFieldsIncludingBaseNonPublic(Type type, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static) + { + return EnumerateTypeHierarchy(type).Reverse().SelectMany(t => t.GetFields(bindingAttr | BindingFlags.DeclaredOnly)); + } + + public static PropertyInfo GetProperty(Type type, string name, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static, bool includingBaseNonPublic = false) + { + if (!cachePropertyInfo.TryGetValue((type, name, bindingAttr, includingBaseNonPublic), out var info)) + { + if (includingBaseNonPublic) + { + info = GetAllPropertiesIncludingBaseNonPublic(type, bindingAttr).FirstOrDefault(x => x.Name == name); + } + else + { + info = type.GetProperty(name, bindingAttr); + } + cachePropertyInfo.Add((type, name, bindingAttr, includingBaseNonPublic), info); + } + return info; + } + + public static IEnumerable GetAllPropertiesIncludingBaseNonPublic(Type type, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static) + { + return EnumerateTypeHierarchy(type).Reverse().SelectMany(t => t.GetProperties(bindingAttr | BindingFlags.DeclaredOnly)); + } + + public static MethodInfo GetMethod(Type type, string name, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static, bool includingBaseNonPublic = false) + { + if (!cacheMethodInfo.TryGetValue((type, name, bindingAttr, includingBaseNonPublic), out var info)) + { + if (includingBaseNonPublic) + { + info = GetAllMethodsIncludingBaseNonPublic(type, bindingAttr).FirstOrDefault(x => x.Name == name); + } + else + { + info = type.GetMethods(bindingAttr).Where(x => x.Name == name).FirstOrDefault(); + } + cacheMethodInfo.Add((type, name, bindingAttr, includingBaseNonPublic), info); + } + return info; + } + + public static IEnumerable GetAllMethodsIncludingBaseNonPublic(Type type, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static) + { + return EnumerateTypeHierarchy(type).Reverse().SelectMany(t => t.GetMethods(bindingAttr | BindingFlags.DeclaredOnly)); + } + + public static object GetValue(object target, string name, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static, bool allowProperty = true, bool allowMethod = true) + { + if (target == null) return null; + Type type = target.GetType(); + object result; + + while (type != null) + { + result = GetFieldValue(target, type, name, bindingAttr); + if (result != null) return result; + + if (allowProperty) + { + result = GetPropertyValue(target, type, name, bindingAttr); + if (result != null) return result; + } + + if (allowMethod) + { + result = GetMethodValue(target, type, name, bindingAttr); + if (result != null) return result; + } + + type = type.BaseType; + } + return null; + } + + public static object GetValue(object target, string name, int index) + { + if (GetValue(target, name, allowMethod: false) is not IEnumerable enumerable) return null; + IEnumerator enumerator = enumerable.GetEnumerator(); + + for (int i = 0; i <= index; i++) + { + if (!enumerator.MoveNext()) return null; + } + return enumerator.Current; + } + + public static bool GetValueBool(object target, string name) + { + if (GetValue(target, name) is bool cond) + { + return cond; + } + return false; + } + + public static MemberInfo[] GetMembers(Type type, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static, bool includingBaseNonPublic = false) + { + if (cacheAllMembers.TryGetValue((type, bindingAttr, includingBaseNonPublic), out var memberInfoArray)) + { + return memberInfoArray; + } + else + { + if (includingBaseNonPublic) + { + memberInfoArray = GetMembersIncludingBaseNonPublic(type, bindingAttr).ToArray(); + } + else + { + memberInfoArray = type.GetMembers(bindingAttr); + } + cacheAllMembers.Add((type, bindingAttr, includingBaseNonPublic), memberInfoArray); + return memberInfoArray; + } + } + + public static IEnumerable GetMembersIncludingBaseNonPublic(Type type, BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static) + { + return EnumerateTypeHierarchy(type).Reverse().SelectMany(t => t.GetMembers(bindingAttr | BindingFlags.DeclaredOnly)); + } + + public static object Invoke(object target, string name, params object[] parameters) + { + if (target == null) return false; + Type type = target.GetType(); + BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly; + + while (type != null) + { + var m = GetMethod(type, name, bindingAttr); + if (m != null) return m.Invoke(m.IsStatic ? null : target, parameters); + + type = type.BaseType; + } + return false; + } + + public static bool TryInvoke(object target, string name, object[] parameters, out object result) + { + if (target == null) + { + result = default; + return false; + } + + Type type = target.GetType(); + BindingFlags bindingAttr = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static; + + while (type != null) + { + var m = GetMethod(type, name, bindingAttr); + if (m != null) + { + result = m.Invoke(m.IsStatic ? null : target, parameters); + return true; + } + + type = type.BaseType; + } + + result = default; + return false; + } + + public static object GetCollectionValue(object target, int index) + { + var type = target.GetType(); + + if (type.IsArray) return ((Array)target).GetValue(index); + else if (target is IList list) return list[index]; + + return null; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs.meta new file mode 100644 index 00000000..cac42172 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2187b1afee0a74b12acb361dbfd668ab \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/SerializedPropertyExtensions.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/SerializedPropertyExtensions.cs new file mode 100644 index 00000000..092819d4 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/SerializedPropertyExtensions.cs @@ -0,0 +1,339 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Linq; +using System.Text.RegularExpressions; +using UnityEngine; +using UnityEditor; + +namespace LitMotion.Animation.Editor +{ + internal static class SerializedPropertyExtensions + { + public static bool TryGetAttribute(this SerializedProperty property, out TAttribute result) where TAttribute : Attribute + { + return TryGetAttribute(property, false, out result); + } + + public static bool TryGetAttribute(this SerializedProperty property, bool inherit, out TAttribute result) where TAttribute : Attribute + { + TAttribute attribute = GetAttribute(property, inherit); + result = attribute; + return attribute != null; + } + + public static TAttribute GetAttribute(this SerializedProperty property, bool inherit = false) where TAttribute : Attribute + { + if (property == null) throw new ArgumentNullException(nameof(property)); + return property.GetFieldInfo().GetCustomAttribute(inherit); + } + + public static IEnumerable GetAttributes(this SerializedProperty property, bool inherit) where TAttribute : Attribute + { + if (property == null) throw new ArgumentNullException(nameof(property)); + return property.GetFieldInfo().GetCustomAttributes(inherit); + } + + public static float GetHeight(this SerializedProperty property) + { + return EditorGUI.GetPropertyHeight(property, true); + } + + public static float GetHeight(this SerializedProperty property, bool includeChildren) + { + return EditorGUI.GetPropertyHeight(property, includeChildren); + } + + public static float GetHeight(this SerializedProperty property, GUIContent label, bool includeChildren) + { + return EditorGUI.GetPropertyHeight(property, label, includeChildren); + } + + public static T GetValue(this SerializedProperty property) + { + return GetNestedObject(property.propertyPath, GetSerializedPropertyRootObject(property)); + } + + public static bool SetValue(this SerializedProperty property, T value) + { + object obj = GetSerializedPropertyRootObject(property); + var fieldStructure = property.propertyPath.Split('.'); + for (int i = 0; i < fieldStructure.Length - 1; i++) + { + obj = GetFieldOrPropertyValue(fieldStructure[i], obj); + } + var fieldName = fieldStructure.Last(); + + return SetFieldOrPropertyValue(fieldName, obj, value); + } + + static readonly Regex IndexerRegex = new(@"[^0-9]+"); + + public static FieldInfo GetFieldInfo(this SerializedProperty property) + { + object target = property.serializedObject.targetObject; + var splits = property.propertyPath.Split('.'); + + var fieldInfo = ReflectionHelper.GetField(target.GetType(), splits[0], includingBaseNonPublic: true); + target = fieldInfo.GetValue(target); + + for (var i = 1; i < splits.Length; i++) + { + if (target == null) return null; + + if (splits[i] == "Array") + { + i++; + if (i >= splits.Length) continue; + + var index = int.Parse(IndexerRegex.Replace(splits[i], string.Empty)); + var targetType = target.GetType(); + + if (targetType.IsArray) target = (target as Array).GetValue(index); + else target = (target as IList)[index]; + + i++; + if (i >= splits.Length) continue; + + targetType = target.GetType(); + fieldInfo = ReflectionHelper.GetField(targetType, splits[i], includingBaseNonPublic: true); + } + else + { + var targetType = target.GetType(); + fieldInfo = ReflectionHelper.GetField(targetType, splits[i], includingBaseNonPublic: true); + } + + target = fieldInfo?.GetValue(target); + } + + return fieldInfo; + } + + public static Type GetPropertyType(this SerializedProperty property, bool isCollectionType = false) + { + var fieldInfo = property.GetFieldInfo(); + + if (isCollectionType && property.propertyType != SerializedPropertyType.String) + return fieldInfo.FieldType.IsArray ? + fieldInfo.FieldType.GetElementType() : + fieldInfo.FieldType.GetGenericArguments()[0]; + return fieldInfo.FieldType; + } + + public static object SetManagedReferenceType(this SerializedProperty property, Type type) + { + var obj = (type != null) ? Activator.CreateInstance(type) : null; + property.managedReferenceValue = obj; + return obj; + } + + public static string GetManagedReferenceFieldTypeName(this SerializedProperty property) + { + var typeName = property.managedReferenceFieldTypename; + var splitIndex = typeName.IndexOf(' '); + return typeName[(splitIndex + 1)..]; + } + + public static Type GetManagedReferenceFieldType(this SerializedProperty property) + { + var typeName = property.managedReferenceFieldTypename; + var splitIndex = typeName.IndexOf(' '); + var assembly = Assembly.Load(typeName[..splitIndex]); + return assembly.GetType(typeName[(splitIndex + 1)..]); + } + + static UnityEngine.Object GetSerializedPropertyRootObject(SerializedProperty property) + { + return property.serializedObject.targetObject; + } + + static T GetNestedObject(string path, object obj, bool includeAllBases = false) + { + var parts = path.Split('.'); + for (int i = 0; i < parts.Length; i++) + { + string part = parts[i]; + + if (part == "Array") + { + var regex = new Regex(@"[^0-9]"); + var countText = regex.Replace(parts[i + 1], ""); + if (!int.TryParse(countText, out var index)) + { + index = -1; + } + + obj = GetElementAtOrDefault(obj, index); + + i++; + } + else + { + obj = GetFieldOrPropertyValue(part, obj, includeAllBases); + } + } + return (T)obj; + } + + static object GetElementAtOrDefault(object arrayOrListObj, int index) + { + if (arrayOrListObj is IEnumerable referenceEnumerable) + { + return referenceEnumerable.ElementAtOrDefault(index); + } + + if (arrayOrListObj is IList valueList) + { + object result; + if (index < 0 || index >= valueList.Count) + { + Type listType = valueList.GetType(); + Type elementType = listType.IsArray ? listType.GetElementType() : listType.GetGenericArguments()[0]; + result = Activator.CreateInstance(elementType); + } + else + { + result = valueList[index]; + } + + return result; + } + + throw new ArgumentException($"Can't parse {arrayOrListObj.GetType()} as Array or List"); + } + + public static object GetParentObject(this SerializedProperty property) + { + if (property == null) return null; + + var path = property.propertyPath.Replace(".Array.data[", "["); + object obj = property.serializedObject.targetObject; + var elements = path.Split('.'); + foreach (var element in elements) + { + if (element.Contains("[")) + { + var elementName = element[..element.IndexOf("[")]; + var index = Convert.ToInt32(element[element.IndexOf("[")..].Replace("[", "").Replace("]", "")); + obj = ReflectionHelper.GetValue(obj, elementName, index); + } + else + { + obj = ReflectionHelper.GetValue(obj, element); + } + } + return obj; + } + + + public static object GetDeclaredObject(this SerializedProperty property) + { + if (property == null) return null; + + var path = property.propertyPath.Replace(".Array.data[", "["); + object obj = property.serializedObject.targetObject; + var elements = path.Split('.'); + for (int i = 0; i < elements.Length - 1; i++) + { + var element = elements[i]; + if (element.Contains("[")) + { + var elementName = element[..element.IndexOf("[")]; + var index = Convert.ToInt32(element[element.IndexOf("[")..].Replace("[", "").Replace("]", "")); + obj = ReflectionHelper.GetValue(obj, elementName, index); + } + else + { + obj = ReflectionHelper.GetValue(obj, element); + } + } + return obj; + } + + static T GetFieldOrPropertyValue(string fieldName, object obj, bool includeAllBases = false, BindingFlags bindings = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) + { + var field = obj.GetType().GetField(fieldName, bindings); + if (field != null) return (T)field.GetValue(obj); + + var property = obj.GetType().GetProperty(fieldName, bindings); + if (property != null) return (T)property.GetValue(obj, null); + + if (includeAllBases) + { + foreach (var type in GetBaseClassesAndInterfaces(obj.GetType())) + { + field = type.GetField(fieldName, bindings); + if (field != null) return (T)field.GetValue(obj); + + property = type.GetProperty(fieldName, bindings); + if (property != null) return (T)property.GetValue(obj, null); + } + } + + return default; + } + + static bool SetFieldOrPropertyValue(string fieldName, object obj, object value, bool includeAllBases = false, BindingFlags bindings = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic) + { + var field = obj.GetType().GetField(fieldName, bindings); + if (field != null) + { + field.SetValue(obj, value); + return true; + } + + var property = obj.GetType().GetProperty(fieldName, bindings); + if (property != null) + { + property.SetValue(obj, value, null); + return true; + } + + if (includeAllBases) + { + foreach (var type in GetBaseClassesAndInterfaces(obj.GetType())) + { + field = type.GetField(fieldName, bindings); + if (field != null) + { + field.SetValue(obj, value); + return true; + } + + property = type.GetProperty(fieldName, bindings); + if (property != null) + { + property.SetValue(obj, value, null); + return true; + } + } + } + return false; + } + + static IEnumerable GetBaseClassesAndInterfaces(Type type, bool includeSelf = false) + { + if (includeSelf) yield return type; + + if (type.BaseType == typeof(object)) + { + foreach (var interfaceType in type.GetInterfaces()) + { + yield return interfaceType; + } + } + else + { + foreach (var baseType in Enumerable.Repeat(type.BaseType, 1) + .Concat(type.GetInterfaces()) + .Concat(GetBaseClassesAndInterfaces(type.BaseType)) + .Distinct()) + { + yield return baseType; + } + } + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/SerializedPropertyExtensions.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor/SerializedPropertyExtensions.cs.meta new file mode 100644 index 00000000..9a08e1e4 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/SerializedPropertyExtensions.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 55b23327915884093b24cdc7ab3c6713 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs similarity index 85% rename from src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs rename to src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs index 86e9d33b..bbf72461 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs @@ -6,7 +6,7 @@ namespace LitMotion.Animation.Components { [Serializable] - public sealed class PositionComponent : LitMotionAnimationComponent + public sealed class Position : LitMotionAnimationComponent { [SerializeField] Transform target; [SerializeField] SerializableMotionSettings settings; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/PositionComponent.cs.meta rename to src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 6f38120b..ecf80b46 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -11,8 +11,8 @@ public sealed class LitMotionAnimation : MonoBehaviour [SerializeReference] LitMotionAnimationComponent[] components = new LitMotionAnimationComponent[] { - new PositionComponent(), - new PositionComponent(), + new Position(), + new Position(), }; public MotionHandle Play() diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs index ffc646ee..12ed07d0 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs @@ -1,10 +1,22 @@ using System; +using UnityEngine; namespace LitMotion.Animation { [Serializable] public abstract class LitMotionAnimationComponent { + public LitMotionAnimationComponent() + { + displayName = GetType().Name; + } + + [SerializeField] string displayName; + [SerializeField] bool enabled = true; + + public bool Enabled => enabled; + public string DisplayName => displayName; + public abstract MotionHandle Play(); } } \ No newline at end of file From dced04d5e6e04da7efd84266752bbba30bd1d720 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Tue, 10 Dec 2024 22:40:20 +0900 Subject: [PATCH 126/224] Update --- .../Editor/AnimationComponentView.cs | 21 +++++++++- .../Editor/LitMotionAnimationEditor.cs | 38 ++++++++++++------- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs index 3d8af6bc..8664b5c4 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs @@ -7,6 +7,7 @@ namespace LitMotion.Animation.Editor public class AnimationComponentView : VisualElement { VisualElement container; + readonly VisualElement contextMenuButton; readonly Foldout foldout; readonly VisualElement icon; readonly Toggle enabledToggle; @@ -14,6 +15,7 @@ public class AnimationComponentView : VisualElement public Foldout Foldout => foldout; public Toggle EnabledToggle => enabledToggle; + public VisualElement ContextMenuButton => contextMenuButton; public string Text { @@ -72,7 +74,10 @@ public AnimationComponentView() foldoutCheck.parent.Add(icon); enabledToggle = new Toggle { - toggleOnLabelClick = false + toggleOnLabelClick = false, + style = { + unityFontStyleAndWeight = FontStyle.Bold, + } }; enabledToggle.Q("unity-checkmark").style.marginRight = 6f; foldoutCheck.parent.Add(enabledToggle); @@ -99,9 +104,21 @@ public AnimationComponentView() var progress = progressBar.Q(null, "unity-progress-bar__progress"); progress.style.backgroundColor = Color.white; progress.style.minWidth = 0f; - root.Add(progressBar); + contextMenuButton = new VisualElement + { + style = { + height = 15f, + width = 15f, + top = 4f, + right = 4f, + position = Position.Absolute, + backgroundImage = (Texture2D)EditorGUIUtility.IconContent("_Menu").image, + } + }; + root.Add(contextMenuButton); + container = foldout.contentContainer; } } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index a10e6f6d..321d4534 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -1,7 +1,6 @@ using UnityEngine.UIElements; using UnityEditor; using UnityEditor.UIElements; -using UnityEngine; namespace LitMotion.Animation.Editor { @@ -33,18 +32,6 @@ public override VisualElement CreateInspectorGUI() return root; } - ContextualMenuManipulator CreateContextMenuManipulator(SerializedProperty property, int arrayIndex) - { - return new ContextualMenuManipulator(evt => - { - evt.menu.AppendAction("Remove Component", x => - { - property.DeleteArrayElementAtIndex(arrayIndex); - RefleshInspector(true); - }); - }); - } - void RefleshInspector(bool applyModifiedProperties) { if (applyModifiedProperties) @@ -58,9 +45,10 @@ void RefleshInspector(bool applyModifiedProperties) { var property = componentsProperty.GetArrayElementAtIndex(i); var view = CreateComponentGUI(property.Copy()); - CreateContextMenuManipulator(componentsProperty, i).target = view.Foldout.Q(); + CreateContextMenuManipulator(componentsProperty, i, false).target = view.Foldout.Q(); view.EnabledToggle.BindProperty(property.FindPropertyRelative("enabled")); root.Add(view); + CreateContextMenuManipulator(componentsProperty, i, true).target = view.ContextMenuButton; } var button = new Button() @@ -104,5 +92,27 @@ AnimationComponentView CreateComponentGUI(SerializedProperty property) return view; } + + ContextualMenuManipulator CreateContextMenuManipulator(SerializedProperty property, int arrayIndex, bool activeLeftClick) + { + var manipulator = new ContextualMenuManipulator(evt => + { + evt.menu.AppendAction("Remove Component", x => + { + property.DeleteArrayElementAtIndex(arrayIndex); + RefleshInspector(true); + }); + }); + + if (activeLeftClick) + { + manipulator.activators.Add(new ManipulatorActivationFilter + { + button = MouseButton.LeftMouse, + }); + } + + return manipulator; + } } } \ No newline at end of file From 15ac4f59f7df4af009755c728c7e7ad2d4e5e50f Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 11 Dec 2024 16:02:54 +0900 Subject: [PATCH 127/224] Update: add component menu --- .../Editor/AddAnimationComponentDropdown.cs | 77 +++++++++++++++++++ .../AddAnimationComponentDropdown.cs.meta | 2 + .../Editor/LitMotionAnimationEditor.cs | 21 ++++- .../Editor/ReflectionHelper.cs | 10 +++ .../AddAnimationComponentMenuAttribute.cs | 15 ++++ ...AddAnimationComponentMenuAttribute.cs.meta | 2 + .../Runtime/Components/Position.cs | 1 + 7 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs new file mode 100644 index 00000000..578c828d --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs @@ -0,0 +1,77 @@ +using System; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEditor.IMGUI.Controls; + +namespace LitMotion.Animation.Editor +{ + public sealed class AddAnimationComponentDropdown : AdvancedDropdown + { + class Item : AdvancedDropdownItem + { + public Item(Type type, string menuName) : base(menuName) + { + Type = type; + } + + public Type Type { get; } + } + + static readonly (Type Type, string MenuName)[] cache = TypeCache.GetTypesDerivedFrom() + .Select(x => + { + var attribute = x.GetCustomAttribute(); + var menuName = attribute == null ? x.GetType().Name : attribute.MenuName; + return (x, menuName); + }) + .ToArray(); + + public event Action OnTypeSelected; + + public AddAnimationComponentDropdown(AdvancedDropdownState state) : base(state) + { + } + + protected override AdvancedDropdownItem BuildRoot() + { + var root = new AdvancedDropdownItem("Component"); + foreach ((var type, var menuName) in cache) + { + var splitStrings = menuName.Split('/'); + var parent = root; + Item lastItem = null; + + foreach (var str in splitStrings) + { + var foundChildItem = parent.children.FirstOrDefault(item => item.name == str); + + if (foundChildItem != null) + { + parent = foundChildItem; + lastItem = (Item)foundChildItem; + continue; + } + + var child = new Item(type, str); + parent.AddChild(child); + + parent = child; + lastItem = child; + } + } + + return root; + } + + protected override void ItemSelected(AdvancedDropdownItem item) + { + base.ItemSelected(item); + + if (item is Item componentItem) + { + OnTypeSelected?.Invoke(componentItem.Type); + } + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs.meta new file mode 100644 index 00000000..26e933b7 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 95f5eeb2d27b747bbaca4d321afe6f8f \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 321d4534..06767d65 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -11,12 +11,25 @@ public sealed class LitMotionAnimationEditor : UnityEditor.Editor SerializedProperty componentsProperty; int prevArraySize; + AddAnimationComponentDropdown dropdown; + Button button; + public override VisualElement CreateInspectorGUI() { root = new VisualElement(); componentsProperty = serializedObject.FindProperty("components"); prevArraySize = componentsProperty.arraySize; + dropdown = new AddAnimationComponentDropdown(new()); + dropdown.OnTypeSelected += type => + { + var last = componentsProperty.arraySize; + componentsProperty.InsertArrayElementAtIndex(componentsProperty.arraySize); + var property = componentsProperty.GetArrayElementAtIndex(last); + property.managedReferenceValue = ReflectionHelper.CreateDefaultInstance(type); + serializedObject.ApplyModifiedProperties(); + }; + RefleshInspector(false); root.schedule.Execute(() => @@ -51,9 +64,13 @@ void RefleshInspector(bool applyModifiedProperties) CreateContextMenuManipulator(componentsProperty, i, true).target = view.ContextMenuButton; } - var button = new Button() + button = new Button(() => dropdown.Show(button.worldBound)) { - text = "Add..." + text = "Add...", + style = { + width = 200f, + alignSelf = Align.Center + } }; root.Add(button); diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs index d5a79d16..ef5f5276 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/ReflectionHelper.cs @@ -310,5 +310,15 @@ public static object GetCollectionValue(object target, int index) return null; } + + public static object CreateDefaultInstance(Type type) + { + if (type == null) throw new ArgumentNullException(nameof(type)); + + if (type == typeof(string)) return ""; + if (type.IsSubclassOf(typeof(UnityEngine.Object))) return null; + return Activator.CreateInstance(type); + } + } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs new file mode 100644 index 00000000..fdec0efc --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace LitMotion.Animation +{ + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] + public sealed class AddAnimationComponentMenuAttribute : Attribute + { + public AddAnimationComponentMenuAttribute(string menuName) + { + MenuName = menuName; + } + + public string MenuName { get; } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs.meta new file mode 100644 index 00000000..b67a09ea --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f12106dc0e63b49ccb6e24900c10fefa \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs index bbf72461..634483c7 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs @@ -6,6 +6,7 @@ namespace LitMotion.Animation.Components { [Serializable] + [AddAnimationComponentMenu("Transform/Position")] public sealed class Position : LitMotionAnimationComponent { [SerializeField] Transform target; From 1952e37a24b41c8800698bbe9a7902de1a51319c Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 11:20:11 +0900 Subject: [PATCH 128/224] Update: progressbar --- .../Editor/AddAnimationComponentDropdown.cs | 3 ++ .../Editor/LitMotion.Animation.Editor.asmdef | 2 +- .../Editor/LitMotionAnimationEditor.cs | 17 ++++++++- .../Runtime/Components/Position.cs | 17 +++++++++ .../Runtime/Components/Rotation.cs | 38 +++++++++++++++++++ .../Runtime/Components/Rotation.cs.meta | 2 + .../Runtime/LitMotionAnimation.cs | 16 +++++++- .../Runtime/LitMotionAnimationComponent.cs | 2 + 8 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs index 578c828d..962ca1b4 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs @@ -31,6 +31,9 @@ static readonly (Type Type, string MenuName)[] cache = TypeCache.GetTypesDerived public AddAnimationComponentDropdown(AdvancedDropdownState state) : base(state) { + var minimumSize = this.minimumSize; + minimumSize.y = 120f; + this.minimumSize = minimumSize; } protected override AdvancedDropdownItem BuildRoot() diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef index a48ea511..d0a6a15d 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotion.Animation.Editor.asmdef @@ -1,5 +1,5 @@ { - "name": "LitMotion.VisualEditor.Editor", + "name": "LitMotion.Animation.Editor", "rootNamespace": "", "references": [ "GUID:3b570a5146f9d4f0fa107ed4559471a3", diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 06767d65..d48fac01 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -1,6 +1,9 @@ using UnityEngine.UIElements; using UnityEditor; using UnityEditor.UIElements; +using System.Collections.Generic; +using System; +using UnityEngine; namespace LitMotion.Animation.Editor { @@ -13,6 +16,7 @@ public sealed class LitMotionAnimationEditor : UnityEditor.Editor AddAnimationComponentDropdown dropdown; Button button; + List views = new(); public override VisualElement CreateInspectorGUI() { @@ -37,8 +41,17 @@ public override VisualElement CreateInspectorGUI() if (componentsProperty.arraySize != prevArraySize) { RefleshInspector(true); + prevArraySize = componentsProperty.arraySize; + } + + var components = ((LitMotionAnimation)target).Components; + for (int i = 0; i < components.Count; i++) + { + var handle = components[i].TrackedHandle; + views[i].Progress = handle.IsActive() + ? Mathf.InverseLerp(0f, (float)handle.Duration, (float)handle.Time) + : 0; } - prevArraySize = componentsProperty.arraySize; }) .Every(10); @@ -53,6 +66,7 @@ void RefleshInspector(bool applyModifiedProperties) } root.Clear(); + views.Clear(); for (int i = 0; i < componentsProperty.arraySize; i++) { @@ -61,6 +75,7 @@ void RefleshInspector(bool applyModifiedProperties) CreateContextMenuManipulator(componentsProperty, i, false).target = view.Foldout.Q(); view.EnabledToggle.BindProperty(property.FindPropertyRelative("enabled")); root.Add(view); + views.Add(view); CreateContextMenuManipulator(componentsProperty, i, true).target = view.ContextMenuButton; } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs index 634483c7..bc999966 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs @@ -12,9 +12,26 @@ public sealed class Position : LitMotionAnimationComponent [SerializeField] Transform target; [SerializeField] SerializableMotionSettings settings; + Vector3 startPosition; + readonly Action revertAction; + + public Position() + { + revertAction = Revert; + } + + void Revert() + { + if (target != null) return; + target.position = startPosition; + } + public override MotionHandle Play() { + startPosition = target.position; + return LMotion.Create(settings) + .WithOnCancel(revertAction) .BindToPosition(target); } } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs new file mode 100644 index 00000000..cd25c289 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs @@ -0,0 +1,38 @@ + +using System; +using LitMotion.Extensions; +using UnityEngine; + +namespace LitMotion.Animation.Components +{ + [Serializable] + [AddAnimationComponentMenu("Transform/Rotation")] + public sealed class Rotation : LitMotionAnimationComponent + { + [SerializeField] Transform target; + [SerializeField] SerializableMotionSettings settings; + + Vector3 startRotation; + readonly Action revertAction; + + public Rotation() + { + revertAction = Revert; + } + + void Revert() + { + if (target != null) return; + target.eulerAngles = startRotation; + } + + public override MotionHandle Play() + { + startRotation = target.eulerAngles; + + return LMotion.Create(settings) + .WithOnCancel(revertAction) + .BindToEulerAngles(target); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs.meta new file mode 100644 index 00000000..46e24658 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4da83eb69d085475f8f410baaa3e3a6c diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index ecf80b46..5faac5d2 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -15,16 +15,28 @@ public sealed class LitMotionAnimation : MonoBehaviour new Position(), }; + MotionHandle handle; + + public IReadOnlyList Components => components; + public MotionHandle Handle => handle; + public MotionHandle Play() { + handle.TryCancel(); + var builder = LSequence.Create(); foreach (var component in components) { - builder.Join(component.Play()); + var handle = component.Play(); +#if UNITY_EDITOR + component.TrackedHandle = handle; +#endif + builder.Join(handle); } - return builder.Schedule(); + handle = builder.Schedule(); + return handle; } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs index 12ed07d0..39a1184a 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs @@ -18,5 +18,7 @@ public LitMotionAnimationComponent() public string DisplayName => displayName; public abstract MotionHandle Play(); + + public MotionHandle TrackedHandle { get; set; } } } \ No newline at end of file From c3283942f4c770d2fddedead33fe1bffe3326517 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 13:50:19 +0900 Subject: [PATCH 129/224] Add: preview --- .../Editor/AnimationComponentView.cs | 9 +++ .../Editor/LitMotionAnimationEditor.cs | 79 ++++++++++++++++++- .../Runtime/Components/Position.cs | 2 +- .../Runtime/Components/Rotation.cs | 2 +- .../Runtime/LitMotionAnimation.cs | 4 +- 5 files changed, 88 insertions(+), 8 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs index 8664b5c4..59f4ba0b 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs @@ -121,5 +121,14 @@ public AnimationComponentView() container = foldout.contentContainer; } + + public new void SetEnabled(bool enabled) + { + Foldout.contentContainer.SetEnabled(enabled); + EnabledToggle.SetEnabled(enabled); + icon.SetEnabled(enabled); + contextMenuButton.SetEnabled(enabled); + progressBar.SetEnabled(enabled); + } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index d48fac01..c43cf55f 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -15,7 +15,7 @@ public sealed class LitMotionAnimationEditor : UnityEditor.Editor int prevArraySize; AddAnimationComponentDropdown dropdown; - Button button; + Button addButton; List views = new(); public override VisualElement CreateInspectorGUI() @@ -58,6 +58,29 @@ public override VisualElement CreateInspectorGUI() return root; } + void OnEnable() + { + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + } + + void OnDisable() + { + if (!EditorApplication.isPlayingOrWillChangePlaymode && target != null) + { + ((LitMotionAnimation)target).Handle.TryCancel(); + } + + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + } + + void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (state == PlayModeStateChange.ExitingEditMode) + { + ((LitMotionAnimation)target).Handle.TryCancel(); + } + } + void RefleshInspector(bool applyModifiedProperties) { if (applyModifiedProperties) @@ -68,6 +91,15 @@ void RefleshInspector(bool applyModifiedProperties) root.Clear(); views.Clear(); + root.schedule.Execute(() => + { + var enabled = !((LitMotionAnimation)target).Handle.IsActive(); + foreach (var view in views) + { + view.SetEnabled(enabled); + } + }).Every(10); + for (int i = 0; i < componentsProperty.arraySize; i++) { var property = componentsProperty.GetArrayElementAtIndex(i); @@ -79,7 +111,7 @@ void RefleshInspector(bool applyModifiedProperties) CreateContextMenuManipulator(componentsProperty, i, true).target = view.ContextMenuButton; } - button = new Button(() => dropdown.Show(button.worldBound)) + addButton = new Button(() => dropdown.Show(addButton.worldBound)) { text = "Add...", style = { @@ -87,8 +119,49 @@ void RefleshInspector(bool applyModifiedProperties) alignSelf = Align.Center } }; + root.Add(addButton); - root.Add(button); + var box = new Box + { + style = { + marginTop = 6f, + marginBottom = 2f, + alignItems = Align.FlexStart, + flexDirection = FlexDirection.Column + } + }; + box.Add(new Label("Debug") + { + style = { + marginTop = 5f, + marginBottom = 2f, + marginLeft = 5f, + unityFontStyleAndWeight = FontStyle.Bold + } + }); + var controlPanel = new VisualElement + { + style = { + flexDirection = FlexDirection.Row, + flexGrow = 1f, + } + }; + controlPanel.Add(new Button(() => ((LitMotionAnimation)target).Play()) + { + text = "Play", + style = { + flexGrow = 1f, + } + }); + controlPanel.Add(new Button(() => ((LitMotionAnimation)target).Handle.TryCancel()) + { + text = "Stop", + style = { + flexGrow = 1f, + } + }); + box.Add(controlPanel); + root.Add(box); } AnimationComponentView CreateComponentGUI(SerializedProperty property) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs index bc999966..fa13472b 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs @@ -22,7 +22,7 @@ public Position() void Revert() { - if (target != null) return; + if (target == null) return; target.position = startPosition; } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs index cd25c289..12fc4c6c 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs @@ -22,7 +22,7 @@ public Rotation() void Revert() { - if (target != null) return; + if (target == null) return; target.eulerAngles = startRotation; } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 5faac5d2..e47ca5b4 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -29,13 +29,11 @@ public MotionHandle Play() foreach (var component in components) { var handle = component.Play(); -#if UNITY_EDITOR component.TrackedHandle = handle; -#endif builder.Join(handle); } - handle = builder.Schedule(); + handle = builder.Schedule().Preserve(); return handle; } } From eabd6d618d6c38325013312dc8671d9e871f68dc Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 14:13:03 +0900 Subject: [PATCH 130/224] Fix: add button enabled --- .../LitMotion.Animation/Editor/LitMotionAnimationEditor.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index c43cf55f..56fbc60a 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -98,6 +98,7 @@ void RefleshInspector(bool applyModifiedProperties) { view.SetEnabled(enabled); } + addButton.SetEnabled(enabled); }).Every(10); for (int i = 0; i < componentsProperty.arraySize; i++) From 8cedcc647d9b3d63f6907d35607c4974532d3711 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 15:32:02 +0900 Subject: [PATCH 131/224] Add: LitMotionAnimation api --- .../Editor/LitMotionAnimationEditor.cs | 79 +++++++++++++------ .../Runtime/LitMotionAnimation.cs | 25 +++++- 2 files changed, 77 insertions(+), 27 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 56fbc60a..5f818ec3 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -67,7 +67,7 @@ void OnDisable() { if (!EditorApplication.isPlayingOrWillChangePlaymode && target != null) { - ((LitMotionAnimation)target).Handle.TryCancel(); + ((LitMotionAnimation)target).Reset(); } EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; @@ -77,7 +77,7 @@ void OnPlayModeStateChanged(PlayModeStateChange state) { if (state == PlayModeStateChange.ExitingEditMode) { - ((LitMotionAnimation)target).Handle.TryCancel(); + ((LitMotionAnimation)target).Reset(); } } @@ -93,7 +93,7 @@ void RefleshInspector(bool applyModifiedProperties) root.schedule.Execute(() => { - var enabled = !((LitMotionAnimation)target).Handle.IsActive(); + var enabled = IsHandleActive(); foreach (var view in views) { view.SetEnabled(enabled); @@ -140,27 +140,7 @@ void RefleshInspector(bool applyModifiedProperties) unityFontStyleAndWeight = FontStyle.Bold } }); - var controlPanel = new VisualElement - { - style = { - flexDirection = FlexDirection.Row, - flexGrow = 1f, - } - }; - controlPanel.Add(new Button(() => ((LitMotionAnimation)target).Play()) - { - text = "Play", - style = { - flexGrow = 1f, - } - }); - controlPanel.Add(new Button(() => ((LitMotionAnimation)target).Handle.TryCancel()) - { - text = "Stop", - style = { - flexGrow = 1f, - } - }); + var controlPanel = CreateControlPanel(); box.Add(controlPanel); root.Add(box); } @@ -220,5 +200,56 @@ ContextualMenuManipulator CreateContextMenuManipulator(SerializedProperty proper return manipulator; } + + VisualElement CreateControlPanel() + { + var element = new VisualElement + { + style = { + flexDirection = FlexDirection.Row, + flexGrow = 1f, + } + }; + var playButton = new Button(() => ((LitMotionAnimation)target).Play()) + { + text = "Play", + style = { + flexGrow = 1f, + } + }; + var stopButton = new Button(() => ((LitMotionAnimation)target).Stop()) + { + text = "Stop", + style = { + flexGrow = 1f, + } + }; + var resetButton = new Button(() => ((LitMotionAnimation)target).Reset()) + { + text = "Reset", + style = { + flexGrow = 1f, + } + }; + + element.Add(playButton); + element.Add(stopButton); + element.Add(resetButton); + + element.schedule.Execute(() => + { + var enabled = !IsHandleActive(); + stopButton.SetEnabled(enabled); + resetButton.SetEnabled(enabled); + }) + .Every(10); + + return element; + } + + bool IsHandleActive() + { + return !((LitMotionAnimation)target).Handle.IsActive(); + } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index e47ca5b4..1773f90e 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -20,9 +20,13 @@ public sealed class LitMotionAnimation : MonoBehaviour public IReadOnlyList Components => components; public MotionHandle Handle => handle; - public MotionHandle Play() + public void Play() { - handle.TryCancel(); + if (handle.IsActive()) + { + handle.PlaybackSpeed = 1f; + return; + } var builder = LSequence.Create(); @@ -34,7 +38,22 @@ public MotionHandle Play() } handle = builder.Schedule().Preserve(); - return handle; + } + + public void Stop() + { + if (!handle.IsActive()) return; + handle.PlaybackSpeed = 0f; + } + + public void Reset() + { + handle.TryCancel(); + } + + void OnDestroy() + { + handle.TryCancel(); } } } \ No newline at end of file From be646f9dc5076a34b4e203b1281dd7807b39e332 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 16:31:35 +0900 Subject: [PATCH 132/224] Add: PropertyAnimationComponent --- .../Runtime/Components/Position.cs | 38 ------------ .../Runtime/Components/Rotation.cs | 38 ------------ .../Runtime/Components/Rotation.cs.meta | 2 - .../Runtime/Components/TransformComponents.cs | 58 +++++++++++++++++++ ...on.cs.meta => TransformComponents.cs.meta} | 0 .../Runtime/PropertyAnimationComponent.cs | 44 ++++++++++++++ .../PropertyAnimationComponent.cs.meta | 2 + 7 files changed, 104 insertions(+), 78 deletions(-) delete mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs delete mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs delete mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs rename src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/{Position.cs.meta => TransformComponents.cs.meta} (100%) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs deleted file mode 100644 index fa13472b..00000000 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs +++ /dev/null @@ -1,38 +0,0 @@ - -using System; -using LitMotion.Extensions; -using UnityEngine; - -namespace LitMotion.Animation.Components -{ - [Serializable] - [AddAnimationComponentMenu("Transform/Position")] - public sealed class Position : LitMotionAnimationComponent - { - [SerializeField] Transform target; - [SerializeField] SerializableMotionSettings settings; - - Vector3 startPosition; - readonly Action revertAction; - - public Position() - { - revertAction = Revert; - } - - void Revert() - { - if (target == null) return; - target.position = startPosition; - } - - public override MotionHandle Play() - { - startPosition = target.position; - - return LMotion.Create(settings) - .WithOnCancel(revertAction) - .BindToPosition(target); - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs deleted file mode 100644 index 12fc4c6c..00000000 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs +++ /dev/null @@ -1,38 +0,0 @@ - -using System; -using LitMotion.Extensions; -using UnityEngine; - -namespace LitMotion.Animation.Components -{ - [Serializable] - [AddAnimationComponentMenu("Transform/Rotation")] - public sealed class Rotation : LitMotionAnimationComponent - { - [SerializeField] Transform target; - [SerializeField] SerializableMotionSettings settings; - - Vector3 startRotation; - readonly Action revertAction; - - public Rotation() - { - revertAction = Revert; - } - - void Revert() - { - if (target == null) return; - target.eulerAngles = startRotation; - } - - public override MotionHandle Play() - { - startRotation = target.eulerAngles; - - return LMotion.Create(settings) - .WithOnCancel(revertAction) - .BindToEulerAngles(target); - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs.meta deleted file mode 100644 index 46e24658..00000000 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rotation.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 4da83eb69d085475f8f410baaa3e3a6c diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs new file mode 100644 index 00000000..08a68f1d --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs @@ -0,0 +1,58 @@ + +using System; +using LitMotion.Adapters; +using UnityEngine; + +namespace LitMotion.Animation.Components +{ + [Serializable] + [AddAnimationComponentMenu("Transform/Position")] + public sealed class Position : PropertyAnimationComponent + { + [SerializeField] bool useWorldSpace; + + protected override Vector3 GetValue(Transform target) + { + return useWorldSpace ? target.position : target.localPosition; + } + + protected override void SetValue(Transform target, in Vector3 value) + { + if (useWorldSpace) target.position = value; + else target.localPosition = value; + } + } + + [Serializable] + [AddAnimationComponentMenu("Transform/Rotation")] + public sealed class Rotation : PropertyAnimationComponent + { + [SerializeField] bool useWorldSpace; + + protected override Vector3 GetValue(Transform target) + { + return useWorldSpace ? target.eulerAngles : target.localEulerAngles; + } + + protected override void SetValue(Transform target, in Vector3 value) + { + if (useWorldSpace) target.eulerAngles = value; + else target.localEulerAngles = value; + } + } + + [Serializable] + [AddAnimationComponentMenu("Transform/Scale")] + public sealed class Scale : PropertyAnimationComponent + { + protected override Vector3 GetValue(Transform target) + { + return target.localScale; + } + + protected override void SetValue(Transform target, in Vector3 value) + { + target.localScale = value; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Position.cs.meta rename to src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs new file mode 100644 index 00000000..9f56112a --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs @@ -0,0 +1,44 @@ +using System; +using UnityEngine; + +namespace LitMotion.Animation +{ + public abstract class PropertyAnimationComponent : LitMotionAnimationComponent + where TObject : UnityEngine.Object + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + [SerializeField] TObject target; + [SerializeField] SerializableMotionSettings settings; + + readonly Action revertAction; + TValue startValue; + + public PropertyAnimationComponent() + { + revertAction = Revert; + } + + void Revert() + { + if (target == null) return; + SetValue(target, startValue); + } + + public override MotionHandle Play() + { + startValue = GetValue(target); + + return LMotion.Create(settings) + .WithOnCancel(revertAction) + .Bind(this, (x, state) => + { + state.SetValue(target, x); + }); + } + + protected abstract TValue GetValue(TObject target); + protected abstract void SetValue(TObject target, in TValue value); + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs.meta new file mode 100644 index 00000000..b8702cfd --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 48d5b3dc01dfe4544a88754d3e5f86b9 \ No newline at end of file From 2686811932def7287b4511cf2f2b70469b298ed8 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 16:41:05 +0900 Subject: [PATCH 133/224] Fix: enabled not working --- .../Assets/LitMotion.Animation/Editor/AnimationComponentView.cs | 2 +- .../Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs index 59f4ba0b..971db5e3 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs @@ -124,7 +124,7 @@ public AnimationComponentView() public new void SetEnabled(bool enabled) { - Foldout.contentContainer.SetEnabled(enabled); + Foldout.contentContainer.SetEnabled(enabled && EnabledToggle.value); EnabledToggle.SetEnabled(enabled); icon.SetEnabled(enabled); contextMenuButton.SetEnabled(enabled); diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 1773f90e..a72bf73a 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -32,6 +32,8 @@ public void Play() foreach (var component in components) { + if (!component.Enabled) continue; + var handle = component.Play(); component.TrackedHandle = handle; builder.Join(handle); From b296e28f6c6da2849441e3b54be5196c30feabd7 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 16:41:26 +0900 Subject: [PATCH 134/224] Fix: error when itemBuffer is null --- .../LitMotion/Runtime/Sequences/MotionSequenceSource.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index e001f8ae..7f8ceaa2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -33,8 +33,11 @@ public static MotionSequenceSource Rent() public static void Return(MotionSequenceSource source) { - ArrayPool.Shared.Return(source.itemBuffer); - source.itemBuffer = null; + if (source.itemBuffer != null) + { + ArrayPool.Shared.Return(source.itemBuffer); + source.itemBuffer = null; + } pool.TryPush(source); } @@ -46,7 +49,7 @@ public void Initialize(MotionHandle handle, MotionSequenceItem[] itemBuffer, int this.duration = duration; this.time = 0; - Array.Sort(itemBuffer, 0, itemCount); + if (itemBuffer != null) Array.Sort(itemBuffer, 0, itemCount); } MotionSequenceSource() From 8472ec6cebfc7af739ff1d59c62696e3d4c43ad8 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 17:16:13 +0900 Subject: [PATCH 135/224] Fix: dropdown --- .../Editor/AddAnimationComponentDropdown.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs index 962ca1b4..db397411 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs @@ -19,6 +19,8 @@ public Item(Type type, string menuName) : base(menuName) } static readonly (Type Type, string MenuName)[] cache = TypeCache.GetTypesDerivedFrom() + .Where(x => !x.IsAbstract) + .Where(x => !x.IsSpecialName) .Select(x => { var attribute = x.GetCustomAttribute(); @@ -32,7 +34,7 @@ static readonly (Type Type, string MenuName)[] cache = TypeCache.GetTypesDerived public AddAnimationComponentDropdown(AdvancedDropdownState state) : base(state) { var minimumSize = this.minimumSize; - minimumSize.y = 120f; + minimumSize.y = 200f; this.minimumSize = minimumSize; } From 355a3627417fb7a6c94cb1101bd31644d54a7fad Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 22:07:49 +0900 Subject: [PATCH 136/224] Change: remove sequence --- .../Editor/LitMotionAnimationEditor.cs | 14 +++-- .../Runtime/LitMotion.Animation.asmdef | 1 - .../Runtime/LitMotionAnimation.cs | 55 ++++++++++++++----- 3 files changed, 50 insertions(+), 20 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 5f818ec3..ff6477b7 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -48,9 +48,15 @@ public override VisualElement CreateInspectorGUI() for (int i = 0; i < components.Count; i++) { var handle = components[i].TrackedHandle; - views[i].Progress = handle.IsActive() - ? Mathf.InverseLerp(0f, (float)handle.Duration, (float)handle.Time) - : 0; + + if (handle.IsActive() && !double.IsInfinity(handle.Duration)) + { + views[i].Progress = Mathf.InverseLerp(0f, (float)handle.Duration, (float)handle.Time); + } + else + { + views[i].Progress = 0f; + } } }) .Every(10); @@ -249,7 +255,7 @@ VisualElement CreateControlPanel() bool IsHandleActive() { - return !((LitMotionAnimation)target).Handle.IsActive(); + return !((LitMotionAnimation)target).IsPlaying; } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef index 5dc9fae2..035b4127 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef @@ -3,7 +3,6 @@ "rootNamespace": "", "references": [ "GUID:3b570a5146f9d4f0fa107ed4559471a3", - "GUID:aa9cad64d4fae43d2a90e595aea6cc7f", "GUID:3aa1866a824b5472da50fe142777d95f" ], "includePlatforms": [], diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index a72bf73a..74823098 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using LitMotion.Animation.Components; -using LitMotion.Sequences; +using LitMotion.Collections; using UnityEngine; namespace LitMotion.Animation @@ -15,47 +15,72 @@ public sealed class LitMotionAnimation : MonoBehaviour new Position(), }; - MotionHandle handle; + FastListCore handles; public IReadOnlyList Components => components; - public MotionHandle Handle => handle; public void Play() { - if (handle.IsActive()) + var isPlaying = false; + + foreach (var handle in handles.AsSpan()) { - handle.PlaybackSpeed = 1f; - return; + if (handle.IsActive()) + { + handle.PlaybackSpeed = 1f; + isPlaying = true; + } } - var builder = LSequence.Create(); + if (isPlaying) return; + + handles.Clear(); foreach (var component in components) { if (!component.Enabled) continue; - var handle = component.Play(); + var handle = component.Play().Preserve(); component.TrackedHandle = handle; - builder.Join(handle); + handles.Add(handle); } - - handle = builder.Schedule().Preserve(); } public void Stop() { - if (!handle.IsActive()) return; - handle.PlaybackSpeed = 0f; + foreach (var handle in handles.AsSpan()) + { + if (handle.IsActive()) handle.PlaybackSpeed = 0f; + } } public void Reset() { - handle.TryCancel(); + foreach (var handle in handles.AsSpan()) + { + handle.TryCancel(); + } + + handles.Clear(); + } + + public bool IsPlaying + { + get + { + foreach (var handle in handles.AsSpan()) + { + if (handle.IsActive()) return true; + } + + handles.Clear(); + return false; + } } void OnDestroy() { - handle.TryCancel(); + Reset(); } } } \ No newline at end of file From 8aa4a73b1a663f0206a642dd59dd3b4816f58706 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 22:07:55 +0900 Subject: [PATCH 137/224] Add: relative option --- .../Runtime/Components/TransformComponents.cs | 17 ++++++++++++ .../Runtime/PropertyAnimationComponent.cs | 26 ++++++++++++++----- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs index 08a68f1d..f61b499d 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs @@ -21,6 +21,12 @@ protected override void SetValue(Transform target, in Vector3 value) if (useWorldSpace) target.position = value; else target.localPosition = value; } + + protected override void SetRelativeValue(Transform target, in Vector3 startValue, in Vector3 relativeValue) + { + if (useWorldSpace) target.position = startValue + relativeValue; + else target.localPosition = startValue + relativeValue; + } } [Serializable] @@ -39,6 +45,12 @@ protected override void SetValue(Transform target, in Vector3 value) if (useWorldSpace) target.eulerAngles = value; else target.localEulerAngles = value; } + + protected override void SetRelativeValue(Transform target, in Vector3 startValue, in Vector3 relativeValue) + { + if (useWorldSpace) target.eulerAngles = startValue + relativeValue; + else target.localEulerAngles = startValue + relativeValue; + } } [Serializable] @@ -54,5 +66,10 @@ protected override void SetValue(Transform target, in Vector3 value) { target.localScale = value; } + + protected override void SetRelativeValue(Transform target, in Vector3 startValue, in Vector3 relativeValue) + { + target.localScale = startValue + relativeValue; + } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs index 9f56112a..80eefdcc 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs @@ -11,6 +11,7 @@ public abstract class PropertyAnimationComponent settings; + [SerializeField] bool relative; readonly Action revertAction; TValue startValue; @@ -30,15 +31,28 @@ public override MotionHandle Play() { startValue = GetValue(target); - return LMotion.Create(settings) - .WithOnCancel(revertAction) - .Bind(this, (x, state) => - { - state.SetValue(target, x); - }); + if (relative) + { + return LMotion.Create(settings) + .WithOnCancel(revertAction) + .Bind(this, (x, state) => + { + state.SetRelativeValue(target, state.startValue, x); + }); + } + else + { + return LMotion.Create(settings) + .WithOnCancel(revertAction) + .Bind(this, (x, state) => + { + state.SetValue(target, x); + }); + } } protected abstract TValue GetValue(TObject target); protected abstract void SetValue(TObject target, in TValue value); + protected abstract void SetRelativeValue(TObject target, in TValue startValue, in TValue relativeValue); } } \ No newline at end of file From 1855a49a32440ddcc50937a71f649ed79edc5183 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 23:31:34 +0900 Subject: [PATCH 138/224] Update: displayName default value --- .../Runtime/LitMotionAnimationComponent.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs index 39a1184a..cf30bac5 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs @@ -1,4 +1,6 @@ using System; +using System.Linq; +using System.Reflection; using UnityEngine; namespace LitMotion.Animation @@ -8,7 +10,13 @@ public abstract class LitMotionAnimationComponent { public LitMotionAnimationComponent() { - displayName = GetType().Name; +#if UNITY_EDITOR + var type = GetType(); + var attribute = type.GetCustomAttribute(); + displayName = attribute != null + ? attribute.MenuName.Split('/').Last() + : type.Name; +#endif } [SerializeField] string displayName; From 3f70ac07250f0ded8c2dfce8895b02a960f87cdd Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Thu, 12 Dec 2024 23:57:54 +0900 Subject: [PATCH 139/224] Add: renderer components --- .../Runtime/Components/RendererComponents.cs | 114 ++++++++++++++++++ .../Components/RendererComponents.cs.meta | 2 + .../Runtime/PropertyAnimationComponent.cs | 19 ++- 3 files changed, 132 insertions(+), 3 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs new file mode 100644 index 00000000..d99b1d89 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs @@ -0,0 +1,114 @@ +using System; +using LitMotion.Adapters; +using UnityEngine; + +namespace LitMotion.Animation.Components +{ + [Serializable] + [AddAnimationComponentMenu("Rendering/Material Float")] + public sealed class MaterialFloat : PropertyAnimationComponent + { + [SerializeField] string propertyName = ""; + + protected override float GetValue(Material target) + { + return target.GetFloat(propertyName); + } + + protected override void SetRelativeValue(Material target, in float startValue, in float relativeValue) + { + target.SetFloat(propertyName, startValue + relativeValue); + } + + protected override void SetValue(Material target, in float value) + { + target.SetFloat(propertyName, value); + } + } + + [Serializable] + [AddAnimationComponentMenu("Rendering/Material Int")] + public sealed class MaterialInt : PropertyAnimationComponent + { + [SerializeField] string propertyName = ""; + + protected override int GetValue(Material target) + { + return target.GetInteger(propertyName); + } + + protected override void SetRelativeValue(Material target, in int startValue, in int relativeValue) + { + target.SetInteger(propertyName, startValue + relativeValue); + } + + protected override void SetValue(Material target, in int value) + { + target.SetInteger(propertyName, value); + } + } + + [Serializable] + [AddAnimationComponentMenu("Rendering/Material Vector")] + public sealed class MaterialVector : PropertyAnimationComponent + { + [SerializeField] string propertyName = ""; + + protected override Vector4 GetValue(Material target) + { + return target.GetVector(propertyName); + } + + protected override void SetRelativeValue(Material target, in Vector4 startValue, in Vector4 relativeValue) + { + target.SetVector(propertyName, startValue + relativeValue); + } + + protected override void SetValue(Material target, in Vector4 value) + { + target.SetVector(propertyName, value); + } + } + + [Serializable] + [AddAnimationComponentMenu("Rendering/Material Color")] + public sealed class MaterialColor : PropertyAnimationComponent + { + [SerializeField] string propertyName = "_Color"; + + protected override Color GetValue(Material target) + { + return target.GetColor(propertyName); + } + + protected override void SetRelativeValue(Material target, in Color startValue, in Color relativeValue) + { + target.SetColor(propertyName, startValue + relativeValue); + } + + protected override void SetValue(Material target, in Color value) + { + target.SetColor(propertyName, value); + } + } + + [Serializable] + [AddAnimationComponentMenu("Rendering/Sprite Renderer Color")] + public sealed class SpriteRendererColor : PropertyAnimationComponent + { + protected override Color GetValue(SpriteRenderer target) + { + return target.color; + } + + protected override void SetRelativeValue(SpriteRenderer target, in Color startValue, in Color relativeValue) + { + target.color = startValue + relativeValue; + } + + protected override void SetValue(SpriteRenderer target, in Color value) + { + target.color = value; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs.meta new file mode 100644 index 00000000..83c7908a --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f8220e04726c3401586a924ee68dd894 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs index 80eefdcc..40dd7096 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs @@ -21,19 +21,28 @@ public PropertyAnimationComponent() revertAction = Revert; } - void Revert() + protected void Revert() { if (target == null) return; SetValue(target, startValue); + OnRevert(target); } + protected virtual void OnBeforePlay(TObject target) { } + protected virtual void OnAfterPlay(TObject target) { } + protected virtual void OnRevert(TObject target) { } + public override MotionHandle Play() { startValue = GetValue(target); + OnBeforePlay(target); + + MotionHandle handle; + if (relative) { - return LMotion.Create(settings) + handle = LMotion.Create(settings) .WithOnCancel(revertAction) .Bind(this, (x, state) => { @@ -42,13 +51,17 @@ public override MotionHandle Play() } else { - return LMotion.Create(settings) + handle = LMotion.Create(settings) .WithOnCancel(revertAction) .Bind(this, (x, state) => { state.SetValue(target, x); }); } + + OnAfterPlay(target); + + return handle; } protected abstract TValue GetValue(TObject target); From 3f37c8f322321b1945d85789ff89e5e15e4cebc9 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 13 Dec 2024 09:24:36 +0900 Subject: [PATCH 140/224] Add: value components --- .../Editor/AddAnimationComponentDropdown.cs | 1 + .../Runtime/Components/ValueComponents.cs | 57 +++++++++++++++++++ .../Components/ValueComponents.cs.meta | 2 + 3 files changed, 60 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs index db397411..b913d2ba 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs @@ -21,6 +21,7 @@ public Item(Type type, string menuName) : base(menuName) static readonly (Type Type, string MenuName)[] cache = TypeCache.GetTypesDerivedFrom() .Where(x => !x.IsAbstract) .Where(x => !x.IsSpecialName) + .Where(x => !x.IsGenericType) .Select(x => { var attribute = x.GetCustomAttribute(); diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs new file mode 100644 index 00000000..4198b304 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs @@ -0,0 +1,57 @@ +using System; +using LitMotion.Adapters; +using UnityEngine; +using UnityEngine.Events; + +namespace LitMotion.Animation.Components +{ + public abstract class ValueComponent : LitMotionAnimationComponent + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + [SerializeField] SerializableMotionSettings settings; + [SerializeField] UnityEvent onValueChanged; + + public override MotionHandle Play() + { + return LMotion.Create(settings) + .Bind(this, (x, state) => + { + state.onValueChanged.Invoke(x); + }); + } + } + + [Serializable] + [AddAnimationComponentMenu("Value/Float")] + public sealed class FloatValue : ValueComponent { } + + [Serializable] + [AddAnimationComponentMenu("Value/Double")] + public sealed class DoubleValue : ValueComponent { } + + [Serializable] + [AddAnimationComponentMenu("Value/Int")] + public sealed class IntValue : ValueComponent { } + + [Serializable] + [AddAnimationComponentMenu("Value/Long")] + public sealed class LongValue : ValueComponent { } + + [Serializable] + [AddAnimationComponentMenu("Value/Vector2")] + public sealed class Vector2Value : ValueComponent { } + + [Serializable] + [AddAnimationComponentMenu("Value/Vector3")] + public sealed class Vector3Value : ValueComponent { } + + [Serializable] + [AddAnimationComponentMenu("Value/Vector4")] + public sealed class Vector4Value : ValueComponent { } + + [Serializable] + [AddAnimationComponentMenu("Value/Color")] + public sealed class ColorValue : ValueComponent { } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs.meta new file mode 100644 index 00000000..00e9a0c2 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 19863683691df4fbf99107ced53ddbd9 \ No newline at end of file From 8313cc52cb53c0b96d1def1a9df7c835cb13208d Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 13 Dec 2024 09:38:11 +0900 Subject: [PATCH 141/224] Add: punch/shake components for Transfrom --- .../Runtime/Components/TransformComponents.cs | 50 ++++++++++++++++--- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs index f61b499d..24bac0f3 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs @@ -5,9 +5,9 @@ namespace LitMotion.Animation.Components { - [Serializable] - [AddAnimationComponentMenu("Transform/Position")] - public sealed class Position : PropertyAnimationComponent + public abstract class PositionBase : PropertyAnimationComponent + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter { [SerializeField] bool useWorldSpace; @@ -30,8 +30,20 @@ protected override void SetRelativeValue(Transform target, in Vector3 startValue } [Serializable] - [AddAnimationComponentMenu("Transform/Rotation")] - public sealed class Rotation : PropertyAnimationComponent + [AddAnimationComponentMenu("Transform/Position")] + public sealed class Position : PositionBase { } + + [Serializable] + [AddAnimationComponentMenu("Transform/Position (Punch)")] + public sealed class PositionPunch : PositionBase { } + + [Serializable] + [AddAnimationComponentMenu("Transform/Position (Shake)")] + public sealed class PositionShake : PositionBase { } + + public abstract class RotationBase : PropertyAnimationComponent + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter { [SerializeField] bool useWorldSpace; @@ -54,8 +66,20 @@ protected override void SetRelativeValue(Transform target, in Vector3 startValue } [Serializable] - [AddAnimationComponentMenu("Transform/Scale")] - public sealed class Scale : PropertyAnimationComponent + [AddAnimationComponentMenu("Transform/Rotation")] + public sealed class Rotation : RotationBase { } + + [Serializable] + [AddAnimationComponentMenu("Transform/Rotation (Punch)")] + public sealed class RotationPunch : RotationBase { } + + [Serializable] + [AddAnimationComponentMenu("Transform/Rotation (Shake)")] + public sealed class RotationShake : RotationBase { } + + public abstract class ScaleBase : PropertyAnimationComponent + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter { protected override Vector3 GetValue(Transform target) { @@ -72,4 +96,16 @@ protected override void SetRelativeValue(Transform target, in Vector3 startValue target.localScale = startValue + relativeValue; } } + + [Serializable] + [AddAnimationComponentMenu("Transform/Scale")] + public sealed class Scale : ScaleBase { } + + [Serializable] + [AddAnimationComponentMenu("Transform/Scale (Punch)")] + public sealed class ScalePunch : ScaleBase { } + + [Serializable] + [AddAnimationComponentMenu("Transform/Scale (Shake)")] + public sealed class ScaleShake : ScaleBase { } } \ No newline at end of file From be2fa9c9414be588206adce1b97c1318df3912e0 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 13 Dec 2024 09:38:30 +0900 Subject: [PATCH 142/224] Improve: sort add component menu by menuName --- .../LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs index b913d2ba..cabeab66 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs @@ -28,6 +28,7 @@ static readonly (Type Type, string MenuName)[] cache = TypeCache.GetTypesDerived var menuName = attribute == null ? x.GetType().Name : attribute.MenuName; return (x, menuName); }) + .OrderBy(x => x.menuName) .ToArray(); public event Action OnTypeSelected; From e9e02ba53d3689eaf6a51c59632665793c4e61f9 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 13 Dec 2024 10:06:10 +0900 Subject: [PATCH 143/224] Change: PropertyAnimationComponent --- .../Runtime/Components/RendererComponents.cs | 35 ++------ .../Runtime/Components/TransformComponents.cs | 14 ++-- .../Runtime/PropertyAnimationComponent.cs | 79 ++++++++++++++++++- 3 files changed, 88 insertions(+), 40 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs index d99b1d89..abf4562d 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs @@ -6,7 +6,7 @@ namespace LitMotion.Animation.Components { [Serializable] [AddAnimationComponentMenu("Rendering/Material Float")] - public sealed class MaterialFloat : PropertyAnimationComponent + public sealed class MaterialFloat : FloatPropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -15,11 +15,6 @@ protected override float GetValue(Material target) return target.GetFloat(propertyName); } - protected override void SetRelativeValue(Material target, in float startValue, in float relativeValue) - { - target.SetFloat(propertyName, startValue + relativeValue); - } - protected override void SetValue(Material target, in float value) { target.SetFloat(propertyName, value); @@ -28,7 +23,7 @@ protected override void SetValue(Material target, in float value) [Serializable] [AddAnimationComponentMenu("Rendering/Material Int")] - public sealed class MaterialInt : PropertyAnimationComponent + public sealed class MaterialInt : IntPropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -37,11 +32,6 @@ protected override int GetValue(Material target) return target.GetInteger(propertyName); } - protected override void SetRelativeValue(Material target, in int startValue, in int relativeValue) - { - target.SetInteger(propertyName, startValue + relativeValue); - } - protected override void SetValue(Material target, in int value) { target.SetInteger(propertyName, value); @@ -50,7 +40,7 @@ protected override void SetValue(Material target, in int value) [Serializable] [AddAnimationComponentMenu("Rendering/Material Vector")] - public sealed class MaterialVector : PropertyAnimationComponent + public sealed class MaterialVector : Vector4PropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -59,11 +49,6 @@ protected override Vector4 GetValue(Material target) return target.GetVector(propertyName); } - protected override void SetRelativeValue(Material target, in Vector4 startValue, in Vector4 relativeValue) - { - target.SetVector(propertyName, startValue + relativeValue); - } - protected override void SetValue(Material target, in Vector4 value) { target.SetVector(propertyName, value); @@ -72,7 +57,7 @@ protected override void SetValue(Material target, in Vector4 value) [Serializable] [AddAnimationComponentMenu("Rendering/Material Color")] - public sealed class MaterialColor : PropertyAnimationComponent + public sealed class MaterialColor : ColorPropertyAnimationComponent { [SerializeField] string propertyName = "_Color"; @@ -81,11 +66,6 @@ protected override Color GetValue(Material target) return target.GetColor(propertyName); } - protected override void SetRelativeValue(Material target, in Color startValue, in Color relativeValue) - { - target.SetColor(propertyName, startValue + relativeValue); - } - protected override void SetValue(Material target, in Color value) { target.SetColor(propertyName, value); @@ -94,18 +74,13 @@ protected override void SetValue(Material target, in Color value) [Serializable] [AddAnimationComponentMenu("Rendering/Sprite Renderer Color")] - public sealed class SpriteRendererColor : PropertyAnimationComponent + public sealed class SpriteRendererColor : ColorPropertyAnimationComponent { protected override Color GetValue(SpriteRenderer target) { return target.color; } - protected override void SetRelativeValue(SpriteRenderer target, in Color startValue, in Color relativeValue) - { - target.color = startValue + relativeValue; - } - protected override void SetValue(SpriteRenderer target, in Color value) { target.color = value; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs index 24bac0f3..f9552265 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs @@ -22,10 +22,9 @@ protected override void SetValue(Transform target, in Vector3 value) else target.localPosition = value; } - protected override void SetRelativeValue(Transform target, in Vector3 startValue, in Vector3 relativeValue) + protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 relativeValue) { - if (useWorldSpace) target.position = startValue + relativeValue; - else target.localPosition = startValue + relativeValue; + return startValue + relativeValue; } } @@ -58,10 +57,9 @@ protected override void SetValue(Transform target, in Vector3 value) else target.localEulerAngles = value; } - protected override void SetRelativeValue(Transform target, in Vector3 startValue, in Vector3 relativeValue) + protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 relativeValue) { - if (useWorldSpace) target.eulerAngles = startValue + relativeValue; - else target.localEulerAngles = startValue + relativeValue; + return startValue + relativeValue; } } @@ -91,9 +89,9 @@ protected override void SetValue(Transform target, in Vector3 value) target.localScale = value; } - protected override void SetRelativeValue(Transform target, in Vector3 startValue, in Vector3 relativeValue) + protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 relativeValue) { - target.localScale = startValue + relativeValue; + return startValue + relativeValue; } } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs index 40dd7096..b4a1427b 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs @@ -1,4 +1,5 @@ using System; +using LitMotion.Adapters; using UnityEngine; namespace LitMotion.Animation @@ -46,7 +47,7 @@ public override MotionHandle Play() .WithOnCancel(revertAction) .Bind(this, (x, state) => { - state.SetRelativeValue(target, state.startValue, x); + state.SetValue(target, state.GetRelativeValue(state.startValue, x)); }); } else @@ -66,6 +67,80 @@ public override MotionHandle Play() protected abstract TValue GetValue(TObject target); protected abstract void SetValue(TObject target, in TValue value); - protected abstract void SetRelativeValue(TObject target, in TValue startValue, in TValue relativeValue); + protected abstract TValue GetRelativeValue(in TValue startValue, in TValue relativeValue); + } + + // I wish we could use Generic Math in Unity... :( + + public abstract class FloatPropertyAnimationComponent : PropertyAnimationComponent + where TObject : UnityEngine.Object + { + protected override float GetRelativeValue(in float startValue, in float relativeValue) + { + return startValue + relativeValue; + } + } + + public abstract class DoublePropertyAnimationComponent : PropertyAnimationComponent + where TObject : UnityEngine.Object + { + protected override double GetRelativeValue(in double startValue, in double relativeValue) + { + return startValue + relativeValue; + } + } + + public abstract class IntPropertyAnimationComponent : PropertyAnimationComponent + where TObject : UnityEngine.Object + { + protected override int GetRelativeValue(in int startValue, in int relativeValue) + { + return startValue + relativeValue; + } + } + + public abstract class LongPropertyAnimationComponent : PropertyAnimationComponent + where TObject : UnityEngine.Object + { + protected override long GetRelativeValue(in long startValue, in long relativeValue) + { + return startValue + relativeValue; + } + } + + public abstract class Vector2PropertyAnimationComponent : PropertyAnimationComponent + where TObject : UnityEngine.Object + { + protected override Vector2 GetRelativeValue(in Vector2 startValue, in Vector2 relativeValue) + { + return startValue + relativeValue; + } + } + + public abstract class Vector3PropertyAnimationComponent : PropertyAnimationComponent + where TObject : UnityEngine.Object + { + protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 relativeValue) + { + return startValue + relativeValue; + } + } + + public abstract class Vector4PropertyAnimationComponent : PropertyAnimationComponent + where TObject : UnityEngine.Object + { + protected override Vector4 GetRelativeValue(in Vector4 startValue, in Vector4 relativeValue) + { + return startValue + relativeValue; + } + } + + public abstract class ColorPropertyAnimationComponent : PropertyAnimationComponent + where TObject : UnityEngine.Object + { + protected override Color GetRelativeValue(in Color startValue, in Color relativeValue) + { + return startValue + relativeValue; + } } } \ No newline at end of file From f0a2458d38af05f6dbafeca463f645175202d456 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 13 Dec 2024 10:06:17 +0900 Subject: [PATCH 144/224] Add: restart button --- .../Editor/LitMotionAnimationEditor.cs | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index ff6477b7..b00f25d7 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -99,7 +99,7 @@ void RefleshInspector(bool applyModifiedProperties) root.schedule.Execute(() => { - var enabled = IsHandleActive(); + var enabled = IsPlaying(); foreach (var view in views) { view.SetEnabled(enabled); @@ -223,6 +223,18 @@ VisualElement CreateControlPanel() flexGrow = 1f, } }; + var restartButton = new Button(() => + { + var animation = (LitMotionAnimation)target; + animation.Reset(); + animation.Play(); + }) + { + text = "Restart", + style = { + flexGrow = 1f, + } + }; var stopButton = new Button(() => ((LitMotionAnimation)target).Stop()) { text = "Stop", @@ -239,12 +251,14 @@ VisualElement CreateControlPanel() }; element.Add(playButton); + element.Add(restartButton); element.Add(stopButton); element.Add(resetButton); element.schedule.Execute(() => { - var enabled = !IsHandleActive(); + var enabled = !IsPlaying(); + restartButton.SetEnabled(enabled); stopButton.SetEnabled(enabled); resetButton.SetEnabled(enabled); }) @@ -253,7 +267,7 @@ VisualElement CreateControlPanel() return element; } - bool IsHandleActive() + bool IsPlaying() { return !((LitMotionAnimation)target).IsPlaying; } From 1fc4b7b63d63d8fdfe0a2957c19ac1666596a126 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 13 Dec 2024 23:48:40 +0900 Subject: [PATCH 145/224] Fix: SerializableMotionSettingsDrawer --- .../SerializableMotionSettingsDrawer.cs | 2 +- .../Runtime/SerializableMotionSettings.cs | 56 +++++++++---------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs index 8c76ece5..ec33c64c 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs @@ -77,7 +77,7 @@ public override VisualElement CreatePropertyGUI(SerializedProperty property) AddPropertyField(group, property, "cancelOnError"); AddPropertyField(group, property, "skipValuesDuringDelay"); AddPropertyField(group, property, "bindOnSchedule"); - AddPropertyField(group, property, "scheduler"); + group.Add(new PropertyField(property.FindPropertyRelative("schedulerType"), "Scheduler")); }); }); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs index 56977d91..352f0861 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/SerializableMotionSettings.cs @@ -3,6 +3,34 @@ namespace LitMotion { + internal enum SchedulerType : byte + { + Default, + Initialization, + InitializationIgnoreTimeScale, + InitializationRealtime, + EarlyUpdate, + EarlyUpdateIgnoreTimeScale, + EarlyUpdateRealtime, + FixedUpdate, + PreUpdate, + PreUpdateIgnoreTimeScale, + PreUpdateRealtime, + Update, + UpdateIgnoreTimeScale, + UpdateRealtime, + PreLateUpdate, + PreLateUpdateIgnoreTimeScale, + PreLateUpdateRealtime, + PostLateUpdate, + PostLateUpdateIgnoreTimeScale, + PostLateUpdateRealtime, + TimeUpdate, + TimeUpdateIgnoreTimeScale, + TimeUpdateRealtime, + Manual, + } + /// /// Serializable(editable from the Inspector) MotionSettings. /// @@ -13,34 +41,6 @@ public sealed record SerializableMotionSettings : MotionSettin where TValue : unmanaged where TOptions : unmanaged, IMotionOptions { - enum SchedulerType : byte - { - Default, - Initialization, - InitializationIgnoreTimeScale, - InitializationRealtime, - EarlyUpdate, - EarlyUpdateIgnoreTimeScale, - EarlyUpdateRealtime, - FixedUpdate, - PreUpdate, - PreUpdateIgnoreTimeScale, - PreUpdateRealtime, - Update, - UpdateIgnoreTimeScale, - UpdateRealtime, - PreLateUpdate, - PreLateUpdateIgnoreTimeScale, - PreLateUpdateRealtime, - PostLateUpdate, - PostLateUpdateIgnoreTimeScale, - PostLateUpdateRealtime, - TimeUpdate, - TimeUpdateIgnoreTimeScale, - TimeUpdateRealtime, - Manual, - } - [SerializeField] SchedulerType schedulerType; #if UNITY_EDITOR From c40f590f18ea7d695f54191df8676922ad53650a Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 00:31:43 +0900 Subject: [PATCH 146/224] Add: StringOptionsDrawer --- .../LitMotion/Editor/PropertyFieldHelper.cs | 45 +++++++++++++++++ .../Editor/PropertyFieldHelper.cs.meta | 2 + .../SerializableMotionSettingsDrawer.cs | 46 +++++++++++++----- .../Editor/SerializedFixedBytesView.cs | 48 +++++++++++++++++++ .../Editor/SerializedFixedBytesView.cs.meta | 2 + .../LitMotion/Editor/StringOptionsDrawer.cs | 38 +++++++++++++++ .../Editor/StringOptionsDrawer.cs.meta | 2 + 7 files changed, 172 insertions(+), 11 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs create mode 100644 src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs create mode 100644 src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs create mode 100644 src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs b/src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs new file mode 100644 index 00000000..2c139d5f --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs @@ -0,0 +1,45 @@ +using System.Buffers; +using System.Text; +using UnityEditor; +using UnityEngine.UIElements; + +namespace LitMotion.Editor +{ + internal static class PropertyFieldHelper + { + public static VisualElement CreateFixedStringField(SerializedProperty property, int maxLength) + { + var textField = new TextField(property.displayName) + { + maxLength = maxLength + }; + + // set initial value + var byteProperties = new SerializedFixedBytesView(property); + textField.SetValueWithoutNotify(Encoding.UTF8.GetString(byteProperties.GetBytes())); + + textField.RegisterValueChangedCallback(x => + { + var buffer = ArrayPool.Shared.Rent(x.newValue.Length * 3); + try + { + var lengthProperty = property.FindPropertyRelative("utf8LengthInBytes"); + Encoding.UTF8.GetBytes(x.newValue, buffer); + + byteProperties.SetBytes(buffer); + lengthProperty.intValue = buffer.Length; + + property.serializedObject.ApplyModifiedProperties(); + } + finally + { + ArrayPool.Shared.Return(buffer); + } + }); + + textField.AddToClassList("unity-base-field__aligned"); + + return textField; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs.meta b/src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs.meta new file mode 100644 index 00000000..a039cdaa --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 94d2a5834c300494985966dbfc1befe7 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs index ec33c64c..8198ab03 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using Unity.Collections; using UnityEditor; using UnityEditor.UIElements; using UnityEngine.UIElements; @@ -21,8 +22,38 @@ public override VisualElement CreatePropertyGUI(SerializedProperty property) Group(foldout, group => { - AddPropertyField(group, property, "startValue"); - AddPropertyField(group, property, "endValue"); + var valueType = fieldInfo.FieldType.GenericTypeArguments[0]; + if (valueType == typeof(FixedString32Bytes)) + { + group.Add(PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("startValue"), FixedString32Bytes.UTF8MaxLengthInBytes)); + group.Add(PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("endValue"), FixedString32Bytes.UTF8MaxLengthInBytes)); + } + else if (valueType == typeof(FixedString64Bytes)) + { + group.Add(PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("startValue"), FixedString64Bytes.UTF8MaxLengthInBytes)); + group.Add(PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("endValue"), FixedString64Bytes.UTF8MaxLengthInBytes)); + } + else if (valueType == typeof(FixedString128Bytes)) + { + group.Add(PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("startValue"), FixedString128Bytes.UTF8MaxLengthInBytes)); + group.Add(PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("endValue"), FixedString128Bytes.UTF8MaxLengthInBytes)); + } + else if (valueType == typeof(FixedString512Bytes)) + { + group.Add(PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("startValue"), FixedString512Bytes.UTF8MaxLengthInBytes)); + group.Add(PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("endValue"), FixedString512Bytes.UTF8MaxLengthInBytes)); + } + else if (valueType == typeof(FixedString4096Bytes)) + { + group.Add(PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("startValue"), FixedString4096Bytes.UTF8MaxLengthInBytes)); + group.Add(PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("endValue"), FixedString4096Bytes.UTF8MaxLengthInBytes)); + } + else + { + AddPropertyField(group, property, "startValue"); + AddPropertyField(group, property, "endValue"); + } + AddPropertyField(group, property, "duration"); }); @@ -57,15 +88,8 @@ public override VisualElement CreatePropertyGUI(SerializedProperty property) { Group(foldout, group => { - var optionTypeName = ObjectNames.NicifyVariableName(fieldInfo.FieldType.GenericTypeArguments[1].Name); - FoldoutGroup(group, optionTypeName, options, group => - { - group.style.marginLeft = 15f; - foreach (var child in GetChildren(options)) - { - group.Add(new PropertyField(child.Copy())); - } - }); + group.style.paddingLeft = 15f; + group.Add(new PropertyField(options)); }); } diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs b/src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs new file mode 100644 index 00000000..cd995a8c --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs @@ -0,0 +1,48 @@ +using System; +using System.Buffers; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using UnityEditor; + +namespace LitMotion.Editor +{ + internal readonly struct SerializedFixedBytesView + { + static readonly Regex byteRegex = new(@"byte\d\d\d\d", RegexOptions.Compiled); + readonly SerializedProperty property; + + public SerializedFixedBytesView(SerializedProperty property) + { + this.property = property; + } + + public byte[] GetBytes() => GetByteProperties() + .Select(prop => (byte)prop.intValue) + .ToArray(); + + public void SetBytes(ReadOnlySpan bytes) + { + var index = 0; + foreach (var property in GetByteProperties()) + { + property.intValue = bytes[index]; + index++; + } + } + + IEnumerable GetByteProperties() + { + var property = this.property.Copy(); + var currentDepth = property.depth; + + while (property.Next(true) && property.depth > currentDepth) + { + if (byteRegex.IsMatch(property.name) && property.propertyType == SerializedPropertyType.Integer) + { + yield return property.Copy(); + } + } + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs.meta b/src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs.meta new file mode 100644 index 00000000..70670c95 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 294ac443a10fb499389b8af23c75cfa5 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs b/src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs new file mode 100644 index 00000000..ed34c1fe --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs @@ -0,0 +1,38 @@ +using Unity.Collections; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace LitMotion.Editor +{ + [CustomPropertyDrawer(typeof(StringOptions))] + public sealed class StringOptionsDrawer : PropertyDrawer + { + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + var foldout = new Foldout + { + text = property.displayName, + toggleOnLabelClick = true, + }; + foldout.BindProperty(property); + + var scrambleModeProperty = property.FindPropertyRelative("ScrambleMode"); + foldout.Add(new PropertyField(scrambleModeProperty)); + + var customScrambleCharsField = PropertyFieldHelper.CreateFixedStringField(property.FindPropertyRelative("CustomScrambleChars"), FixedString64Bytes.UTF8MaxLengthInBytes); + customScrambleCharsField.schedule.Execute(() => + { + customScrambleCharsField.style.display = scrambleModeProperty.enumValueIndex == (int)ScrambleMode.Custom + ? DisplayStyle.Flex + : DisplayStyle.None; + }).Every(10); + foldout.Add(customScrambleCharsField); + + foldout.Add(new PropertyField(property.FindPropertyRelative("RichTextEnabled"))); + foldout.Add(new PropertyField(property.FindPropertyRelative("RandomSeed"))); + + return foldout; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs.meta b/src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs.meta new file mode 100644 index 00000000..5ecb9617 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fda3802b61a86416f94d215fe3e2528f \ No newline at end of file From 0196f067af2a350d198c0dc9f97310bb6ca63144 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 00:47:26 +0900 Subject: [PATCH 147/224] Add: StringValue --- .../Runtime/Components/ValueComponents.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs index 4198b304..ee242fa5 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs @@ -1,5 +1,6 @@ using System; using LitMotion.Adapters; +using Unity.Collections; using UnityEngine; using UnityEngine.Events; @@ -54,4 +55,22 @@ public sealed class Vector4Value : ValueComponent { } + + [Serializable] + [AddAnimationComponentMenu("Value/String")] + public sealed class StringValue : LitMotionAnimationComponent + { + [SerializeField] SerializableMotionSettings settings; + [SerializeField] UnityEvent onValueChanged; + + public override MotionHandle Play() + { + return LMotion.Create(settings) + .Bind(this, static (x, state) => + { + // TODO: avoid allocation + state.onValueChanged.Invoke(x.ConvertToString()); + }); + } + } } \ No newline at end of file From b8820d10ebd735d2634d2dfb698968a74d8aae7b Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 16:04:51 +0900 Subject: [PATCH 148/224] Fix: FixedString property field --- .../LitMotion/Editor/PropertyFieldHelper.cs | 16 +++++++--------- .../LitMotion/Editor/SerializedFixedBytesView.cs | 9 +++++++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs b/src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs index 2c139d5f..43aca2c8 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/PropertyFieldHelper.cs @@ -1,3 +1,4 @@ +using System; using System.Buffers; using System.Text; using UnityEditor; @@ -11,24 +12,21 @@ public static VisualElement CreateFixedStringField(SerializedProperty property, { var textField = new TextField(property.displayName) { - maxLength = maxLength + maxLength = maxLength, }; // set initial value - var byteProperties = new SerializedFixedBytesView(property); - textField.SetValueWithoutNotify(Encoding.UTF8.GetString(byteProperties.GetBytes())); + var propertyView = new SerializedFixedBytesView(property); + textField.SetValueWithoutNotify(Encoding.UTF8.GetString(propertyView.GetBytes())); textField.RegisterValueChangedCallback(x => { var buffer = ArrayPool.Shared.Rent(x.newValue.Length * 3); try { - var lengthProperty = property.FindPropertyRelative("utf8LengthInBytes"); - Encoding.UTF8.GetBytes(x.newValue, buffer); - - byteProperties.SetBytes(buffer); - lengthProperty.intValue = buffer.Length; - + var lengthProperty = propertyView.LengthProperty; + var newLength = Encoding.UTF8.GetBytes(x.newValue, buffer); + propertyView.SetBytes(buffer.AsSpan(0, newLength)); property.serializedObject.ApplyModifiedProperties(); } finally diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs b/src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs index cd995a8c..1fb9e19b 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializedFixedBytesView.cs @@ -11,14 +11,19 @@ internal readonly struct SerializedFixedBytesView { static readonly Regex byteRegex = new(@"byte\d\d\d\d", RegexOptions.Compiled); readonly SerializedProperty property; + readonly SerializedProperty lengthProperty; public SerializedFixedBytesView(SerializedProperty property) { this.property = property; + this.lengthProperty = property.FindPropertyRelative("utf8LengthInBytes"); } + public SerializedProperty LengthProperty => lengthProperty; + public byte[] GetBytes() => GetByteProperties() .Select(prop => (byte)prop.intValue) + .Take(lengthProperty.intValue) .ToArray(); public void SetBytes(ReadOnlySpan bytes) @@ -26,9 +31,13 @@ public void SetBytes(ReadOnlySpan bytes) var index = 0; foreach (var property in GetByteProperties()) { + if (index >= bytes.Length) break; + property.intValue = bytes[index]; index++; } + + lengthProperty.intValue = bytes.Length; } IEnumerable GetByteProperties() From 6fec8ee28e9ac664ebf04700226343566d42f220 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 20:02:09 +0900 Subject: [PATCH 149/224] Add: uGUI components --- .../Runtime/Components/UGUIComponents.cs | 88 +++++++++++++++++++ .../Runtime/Components/UGUIComponents.cs.meta | 2 + .../Runtime/LitMotion.Animation.asmdef | 12 ++- .../Runtime/PropertyAnimationComponent.cs | 28 ++++-- 4 files changed, 120 insertions(+), 10 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs new file mode 100644 index 00000000..82a378e8 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs @@ -0,0 +1,88 @@ +#if LITMOTION_ANIMATION_UGUI + +using System; +using Unity.Collections; +using UnityEngine; +using UnityEngine.UI; + +namespace LitMotion.Animation.Components +{ + [Serializable] + [AddAnimationComponentMenu("UI/Text")] + public sealed class TextValue : FixedString512BytesPropertyAnimationComponent + { + protected override FixedString512Bytes GetValue(Text target) => target.text; + protected override void SetValue(Text target, in FixedString512Bytes value) => target.text = value.ToString(); + } + + [Serializable] + [AddAnimationComponentMenu("UI/Text Color")] + public sealed class TextColor : ColorPropertyAnimationComponent + { + protected override Color GetValue(Text target) => target.color; + protected override void SetValue(Text target, in Color value) => target.color = value; + } + + [Serializable] + [AddAnimationComponentMenu("UI/Text Font Size")] + public sealed class TextFontSize : IntPropertyAnimationComponent + { + protected override int GetValue(Text target) => target.fontSize; + protected override void SetValue(Text target, in int value) => target.fontSize = value; + } + + [Serializable] + [AddAnimationComponentMenu("UI/Graphic Color")] + public sealed class GraphicColor : ColorPropertyAnimationComponent + { + protected override Color GetValue(Graphic target) => target.color; + protected override void SetValue(Graphic target, in Color value) => target.color = value; + } + + [Serializable] + [AddAnimationComponentMenu("UI/Image Color")] + public sealed class ImageColor : ColorPropertyAnimationComponent + { + protected override Color GetValue(Image target) => target.color; + protected override void SetValue(Image target, in Color value) => target.color = value; + } + + [Serializable] + [AddAnimationComponentMenu("UI/Image Color (Alpha)")] + public sealed class ImageColorAlpha : FloatPropertyAnimationComponent + { + protected override float GetValue(Image target) => target.color.a; + protected override void SetValue(Image target, in float value) + { + var c = target.color; + c.a = value; + target.color = c; + } + } + + [Serializable] + [AddAnimationComponentMenu("UI/Image Fill Amount")] + public sealed class ImageFillAmount : FloatPropertyAnimationComponent + { + protected override float GetValue(Image target) => target.fillAmount; + protected override void SetValue(Image target, in float value) => target.fillAmount = value; + } + + [Serializable] + [AddAnimationComponentMenu("UI/Slider")] + public sealed class SliderValue : FloatPropertyAnimationComponent + { + protected override float GetValue(Slider target) => target.value; + protected override void SetValue(Slider target, in float value) => target.value = value; + } + + [Serializable] + [AddAnimationComponentMenu("UI/Canvas Group Alpha")] + public sealed class CanvasGroupAlpha : FloatPropertyAnimationComponent + { + protected override float GetValue(CanvasGroup target) => target.alpha; + protected override void SetValue(CanvasGroup target, in float value) => target.alpha = value; + } +} + +#endif \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs.meta new file mode 100644 index 00000000..03ea0a32 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e464338304c314a9db640a8346c8592c \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef index 035b4127..44a86f23 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef @@ -2,8 +2,10 @@ "name": "LitMotion.Animation", "rootNamespace": "", "references": [ + "GUID:e0cd26848372d4e5c891c569017e11f1", "GUID:3b570a5146f9d4f0fa107ed4559471a3", - "GUID:3aa1866a824b5472da50fe142777d95f" + "GUID:3aa1866a824b5472da50fe142777d95f", + "GUID:2bafac87e7f4b9b418d9448d219b01ab" ], "includePlatforms": [], "excludePlatforms": [], @@ -12,6 +14,12 @@ "precompiledReferences": [], "autoReferenced": true, "defineConstraints": [], - "versionDefines": [], + "versionDefines": [ + { + "name": "com.unity.ugui", + "expression": "", + "define": "LITMOTION_ANIMATION_UGUI" + } + ], "noEngineReferences": false } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs index b4a1427b..e5e9cebc 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs @@ -1,5 +1,6 @@ using System; using LitMotion.Adapters; +using Unity.Collections; using UnityEngine; namespace LitMotion.Animation @@ -75,7 +76,7 @@ public override MotionHandle Play() public abstract class FloatPropertyAnimationComponent : PropertyAnimationComponent where TObject : UnityEngine.Object { - protected override float GetRelativeValue(in float startValue, in float relativeValue) + protected sealed override float GetRelativeValue(in float startValue, in float relativeValue) { return startValue + relativeValue; } @@ -84,7 +85,7 @@ protected override float GetRelativeValue(in float startValue, in float relative public abstract class DoublePropertyAnimationComponent : PropertyAnimationComponent where TObject : UnityEngine.Object { - protected override double GetRelativeValue(in double startValue, in double relativeValue) + protected sealed override double GetRelativeValue(in double startValue, in double relativeValue) { return startValue + relativeValue; } @@ -93,7 +94,7 @@ protected override double GetRelativeValue(in double startValue, in double relat public abstract class IntPropertyAnimationComponent : PropertyAnimationComponent where TObject : UnityEngine.Object { - protected override int GetRelativeValue(in int startValue, in int relativeValue) + protected sealed override int GetRelativeValue(in int startValue, in int relativeValue) { return startValue + relativeValue; } @@ -102,7 +103,7 @@ protected override int GetRelativeValue(in int startValue, in int relativeValue) public abstract class LongPropertyAnimationComponent : PropertyAnimationComponent where TObject : UnityEngine.Object { - protected override long GetRelativeValue(in long startValue, in long relativeValue) + protected sealed override long GetRelativeValue(in long startValue, in long relativeValue) { return startValue + relativeValue; } @@ -111,7 +112,7 @@ protected override long GetRelativeValue(in long startValue, in long relativeVal public abstract class Vector2PropertyAnimationComponent : PropertyAnimationComponent where TObject : UnityEngine.Object { - protected override Vector2 GetRelativeValue(in Vector2 startValue, in Vector2 relativeValue) + protected sealed override Vector2 GetRelativeValue(in Vector2 startValue, in Vector2 relativeValue) { return startValue + relativeValue; } @@ -120,7 +121,7 @@ protected override Vector2 GetRelativeValue(in Vector2 startValue, in Vector2 re public abstract class Vector3PropertyAnimationComponent : PropertyAnimationComponent where TObject : UnityEngine.Object { - protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 relativeValue) + protected sealed override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 relativeValue) { return startValue + relativeValue; } @@ -129,7 +130,7 @@ protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 re public abstract class Vector4PropertyAnimationComponent : PropertyAnimationComponent where TObject : UnityEngine.Object { - protected override Vector4 GetRelativeValue(in Vector4 startValue, in Vector4 relativeValue) + protected sealed override Vector4 GetRelativeValue(in Vector4 startValue, in Vector4 relativeValue) { return startValue + relativeValue; } @@ -138,9 +139,20 @@ protected override Vector4 GetRelativeValue(in Vector4 startValue, in Vector4 re public abstract class ColorPropertyAnimationComponent : PropertyAnimationComponent where TObject : UnityEngine.Object { - protected override Color GetRelativeValue(in Color startValue, in Color relativeValue) + protected sealed override Color GetRelativeValue(in Color startValue, in Color relativeValue) { return startValue + relativeValue; } } + + public abstract class FixedString512BytesPropertyAnimationComponent : PropertyAnimationComponent + where TObject : UnityEngine.Object + { + protected sealed override FixedString512Bytes GetRelativeValue(in FixedString512Bytes startValue, in FixedString512Bytes relativeValue) + { + var value = startValue; + value.Append(relativeValue); + return value; + } + } } \ No newline at end of file From 1b6bd32718bf422359086f4736495eac20f5e550 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 20:18:32 +0900 Subject: [PATCH 150/224] Change: rename components --- .../Runtime/Components/RendererComponents.cs | 19 +++++++-------- .../Runtime/Components/TransformComponents.cs | 24 +++++++++---------- .../Runtime/Components/UGUIComponents.cs | 18 +++++++------- .../Runtime/Components/ValueComponents.cs | 20 ++++++++-------- .../Runtime/LitMotionAnimation.cs | 4 ++-- 5 files changed, 42 insertions(+), 43 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs index abf4562d..a0b5ba36 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs @@ -1,12 +1,11 @@ using System; -using LitMotion.Adapters; using UnityEngine; namespace LitMotion.Animation.Components { [Serializable] - [AddAnimationComponentMenu("Rendering/Material Float")] - public sealed class MaterialFloat : FloatPropertyAnimationComponent + [AddAnimationComponentMenu("Rendering/Material Property (Float)")] + public sealed class MaterialFloatAnimation : FloatPropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -22,8 +21,8 @@ protected override void SetValue(Material target, in float value) } [Serializable] - [AddAnimationComponentMenu("Rendering/Material Int")] - public sealed class MaterialInt : IntPropertyAnimationComponent + [AddAnimationComponentMenu("Rendering/Material Property (Int)")] + public sealed class MaterialIntAnimation : IntPropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -39,8 +38,8 @@ protected override void SetValue(Material target, in int value) } [Serializable] - [AddAnimationComponentMenu("Rendering/Material Vector")] - public sealed class MaterialVector : Vector4PropertyAnimationComponent + [AddAnimationComponentMenu("Rendering/Material Property (Vector)")] + public sealed class MaterialVectorAnimation : Vector4PropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -56,8 +55,8 @@ protected override void SetValue(Material target, in Vector4 value) } [Serializable] - [AddAnimationComponentMenu("Rendering/Material Color")] - public sealed class MaterialColor : ColorPropertyAnimationComponent + [AddAnimationComponentMenu("Rendering/Material Property (Color)")] + public sealed class MaterialColorAnimation : ColorPropertyAnimationComponent { [SerializeField] string propertyName = "_Color"; @@ -74,7 +73,7 @@ protected override void SetValue(Material target, in Color value) [Serializable] [AddAnimationComponentMenu("Rendering/Sprite Renderer Color")] - public sealed class SpriteRendererColor : ColorPropertyAnimationComponent + public sealed class SpriteRendererColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(SpriteRenderer target) { diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs index f9552265..7ce35fe0 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs @@ -5,7 +5,7 @@ namespace LitMotion.Animation.Components { - public abstract class PositionBase : PropertyAnimationComponent + public abstract class PositionAnimationBase : PropertyAnimationComponent where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { @@ -30,17 +30,17 @@ protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 re [Serializable] [AddAnimationComponentMenu("Transform/Position")] - public sealed class Position : PositionBase { } + public sealed class PositionAnimation : PositionAnimationBase { } [Serializable] [AddAnimationComponentMenu("Transform/Position (Punch)")] - public sealed class PositionPunch : PositionBase { } + public sealed class PositionPunchAnimation : PositionAnimationBase { } [Serializable] [AddAnimationComponentMenu("Transform/Position (Shake)")] - public sealed class PositionShake : PositionBase { } + public sealed class PositionShakeAnimation : PositionAnimationBase { } - public abstract class RotationBase : PropertyAnimationComponent + public abstract class RotationAnimationBase : PropertyAnimationComponent where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { @@ -65,17 +65,17 @@ protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 re [Serializable] [AddAnimationComponentMenu("Transform/Rotation")] - public sealed class Rotation : RotationBase { } + public sealed class RotationAnimation : RotationAnimationBase { } [Serializable] [AddAnimationComponentMenu("Transform/Rotation (Punch)")] - public sealed class RotationPunch : RotationBase { } + public sealed class RotationPunchAnimation : RotationAnimationBase { } [Serializable] [AddAnimationComponentMenu("Transform/Rotation (Shake)")] - public sealed class RotationShake : RotationBase { } + public sealed class RotationShakeAnimation : RotationAnimationBase { } - public abstract class ScaleBase : PropertyAnimationComponent + public abstract class ScaleAnimationBase : PropertyAnimationComponent where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { @@ -97,13 +97,13 @@ protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 re [Serializable] [AddAnimationComponentMenu("Transform/Scale")] - public sealed class Scale : ScaleBase { } + public sealed class ScaleAnimation : ScaleAnimationBase { } [Serializable] [AddAnimationComponentMenu("Transform/Scale (Punch)")] - public sealed class ScalePunch : ScaleBase { } + public sealed class ScalePunchAnimation : ScaleAnimationBase { } [Serializable] [AddAnimationComponentMenu("Transform/Scale (Shake)")] - public sealed class ScaleShake : ScaleBase { } + public sealed class ScaleShakeAnimation : ScaleAnimationBase { } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs index 82a378e8..c1d9bbd4 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs @@ -9,7 +9,7 @@ namespace LitMotion.Animation.Components { [Serializable] [AddAnimationComponentMenu("UI/Text")] - public sealed class TextValue : FixedString512BytesPropertyAnimationComponent + public sealed class TextAnimation : FixedString512BytesPropertyAnimationComponent { protected override FixedString512Bytes GetValue(Text target) => target.text; protected override void SetValue(Text target, in FixedString512Bytes value) => target.text = value.ToString(); @@ -17,7 +17,7 @@ public sealed class TextValue : FixedString512BytesPropertyAnimationComponent + public sealed class TextColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(Text target) => target.color; protected override void SetValue(Text target, in Color value) => target.color = value; @@ -25,7 +25,7 @@ public sealed class TextColor : ColorPropertyAnimationComponent [Serializable] [AddAnimationComponentMenu("UI/Text Font Size")] - public sealed class TextFontSize : IntPropertyAnimationComponent + public sealed class TextFontSizeAnimation : IntPropertyAnimationComponent { protected override int GetValue(Text target) => target.fontSize; protected override void SetValue(Text target, in int value) => target.fontSize = value; @@ -33,7 +33,7 @@ public sealed class TextFontSize : IntPropertyAnimationComponent [Serializable] [AddAnimationComponentMenu("UI/Graphic Color")] - public sealed class GraphicColor : ColorPropertyAnimationComponent + public sealed class GraphicColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(Graphic target) => target.color; protected override void SetValue(Graphic target, in Color value) => target.color = value; @@ -41,7 +41,7 @@ public sealed class GraphicColor : ColorPropertyAnimationComponent [Serializable] [AddAnimationComponentMenu("UI/Image Color")] - public sealed class ImageColor : ColorPropertyAnimationComponent + public sealed class ImageColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(Image target) => target.color; protected override void SetValue(Image target, in Color value) => target.color = value; @@ -49,7 +49,7 @@ public sealed class ImageColor : ColorPropertyAnimationComponent [Serializable] [AddAnimationComponentMenu("UI/Image Color (Alpha)")] - public sealed class ImageColorAlpha : FloatPropertyAnimationComponent + public sealed class ImageColorAlphaAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Image target) => target.color.a; protected override void SetValue(Image target, in float value) @@ -62,7 +62,7 @@ protected override void SetValue(Image target, in float value) [Serializable] [AddAnimationComponentMenu("UI/Image Fill Amount")] - public sealed class ImageFillAmount : FloatPropertyAnimationComponent + public sealed class ImageFillAmountAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Image target) => target.fillAmount; protected override void SetValue(Image target, in float value) => target.fillAmount = value; @@ -70,7 +70,7 @@ public sealed class ImageFillAmount : FloatPropertyAnimationComponent [Serializable] [AddAnimationComponentMenu("UI/Slider")] - public sealed class SliderValue : FloatPropertyAnimationComponent + public sealed class SliderValueAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Slider target) => target.value; protected override void SetValue(Slider target, in float value) => target.value = value; @@ -78,7 +78,7 @@ public sealed class SliderValue : FloatPropertyAnimationComponent [Serializable] [AddAnimationComponentMenu("UI/Canvas Group Alpha")] - public sealed class CanvasGroupAlpha : FloatPropertyAnimationComponent + public sealed class CanvasGroupAlphaAnimation : FloatPropertyAnimationComponent { protected override float GetValue(CanvasGroup target) => target.alpha; protected override void SetValue(CanvasGroup target, in float value) => target.alpha = value; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs index ee242fa5..a3bf1378 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs @@ -6,7 +6,7 @@ namespace LitMotion.Animation.Components { - public abstract class ValueComponent : LitMotionAnimationComponent + public abstract class ValueAnimationComponent : LitMotionAnimationComponent where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter @@ -26,39 +26,39 @@ public override MotionHandle Play() [Serializable] [AddAnimationComponentMenu("Value/Float")] - public sealed class FloatValue : ValueComponent { } + public sealed class FloatValueAnimation : ValueAnimationComponent { } [Serializable] [AddAnimationComponentMenu("Value/Double")] - public sealed class DoubleValue : ValueComponent { } + public sealed class DoubleValueAnimation : ValueAnimationComponent { } [Serializable] [AddAnimationComponentMenu("Value/Int")] - public sealed class IntValue : ValueComponent { } + public sealed class IntValueAnimation : ValueAnimationComponent { } [Serializable] [AddAnimationComponentMenu("Value/Long")] - public sealed class LongValue : ValueComponent { } + public sealed class LongValueAnimation : ValueAnimationComponent { } [Serializable] [AddAnimationComponentMenu("Value/Vector2")] - public sealed class Vector2Value : ValueComponent { } + public sealed class Vector2ValueAnimation : ValueAnimationComponent { } [Serializable] [AddAnimationComponentMenu("Value/Vector3")] - public sealed class Vector3Value : ValueComponent { } + public sealed class Vector3ValueAnimation : ValueAnimationComponent { } [Serializable] [AddAnimationComponentMenu("Value/Vector4")] - public sealed class Vector4Value : ValueComponent { } + public sealed class Vector4ValueAnimation : ValueAnimationComponent { } [Serializable] [AddAnimationComponentMenu("Value/Color")] - public sealed class ColorValue : ValueComponent { } + public sealed class ColorValueAnimation : ValueAnimationComponent { } [Serializable] [AddAnimationComponentMenu("Value/String")] - public sealed class StringValue : LitMotionAnimationComponent + public sealed class StringValueAnimation : LitMotionAnimationComponent { [SerializeField] SerializableMotionSettings settings; [SerializeField] UnityEvent onValueChanged; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 74823098..62829edf 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -11,8 +11,8 @@ public sealed class LitMotionAnimation : MonoBehaviour [SerializeReference] LitMotionAnimationComponent[] components = new LitMotionAnimationComponent[] { - new Position(), - new Position(), + new PositionAnimation(), + new PositionAnimation(), }; FastListCore handles; From feb8a97096c3e023f3aae2e93e274c291aa033d3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 20:31:44 +0900 Subject: [PATCH 151/224] Fix: default menu name --- .../LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs index cabeab66..2bfb8803 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs @@ -25,7 +25,7 @@ static readonly (Type Type, string MenuName)[] cache = TypeCache.GetTypesDerived .Select(x => { var attribute = x.GetCustomAttribute(); - var menuName = attribute == null ? x.GetType().Name : attribute.MenuName; + var menuName = attribute == null ? x.Name : attribute.MenuName; return (x, menuName); }) .OrderBy(x => x.menuName) From 2fd2a8028cee9d752fb0ddf8fce733c3cfc4a90c Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 20:58:18 +0900 Subject: [PATCH 152/224] Add: error helpbox when serialize reference type is missing --- .../Editor/LitMotionAnimationEditor.cs | 60 ++++++++++++------- 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index b00f25d7..9d4d7999 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System; using UnityEngine; +using System.Linq; namespace LitMotion.Animation.Editor { @@ -112,7 +113,13 @@ void RefleshInspector(bool applyModifiedProperties) var property = componentsProperty.GetArrayElementAtIndex(i); var view = CreateComponentGUI(property.Copy()); CreateContextMenuManipulator(componentsProperty, i, false).target = view.Foldout.Q(); - view.EnabledToggle.BindProperty(property.FindPropertyRelative("enabled")); + + var enabledProperty = property.FindPropertyRelative("enabled"); + if (enabledProperty != null) + { + view.EnabledToggle.BindProperty(enabledProperty); + } + root.Add(view); views.Add(view); CreateContextMenuManipulator(componentsProperty, i, true).target = view.ContextMenuButton; @@ -153,33 +160,44 @@ void RefleshInspector(bool applyModifiedProperties) AnimationComponentView CreateComponentGUI(SerializedProperty property) { - var view = new AnimationComponentView - { - Text = property.FindPropertyRelative("displayName").stringValue - }; + var view = new AnimationComponentView(); - var targetProperty = property.FindPropertyRelative("target"); - if (targetProperty != null) + if (string.IsNullOrEmpty(property.managedReferenceFullTypename)) { - view.Icon = AssetPreview.GetMiniTypeThumbnail(targetProperty.GetPropertyType()); + view.Text = "(Missing)"; + view.Icon = (Texture2D)EditorGUIUtility.IconContent("Error").image; + view.EnabledToggle.value = true; + view.SetEnabled(true); + view.EnabledToggle.Q("unity-checkmark").style.visibility = Visibility.Hidden; + view.Add(new HelpBox("The type referenced in SerializeReference is missing. You may have renamed the type or moved the namespace or assembly of the type.", HelpBoxMessageType.Error)); } - - view.TrackPropertyValue(property.FindPropertyRelative("displayName"), x => + else { - view.Text = x.stringValue; - }); + view.Text = property.FindPropertyRelative("displayName").stringValue; - view.Foldout.BindProperty(property); + var targetProperty = property.FindPropertyRelative("target"); + if (targetProperty != null) + { + view.Icon = AssetPreview.GetMiniTypeThumbnail(targetProperty.GetPropertyType()); + } - var endProperty = property.GetEndProperty(); - var isFirst = true; - while (property.NextVisible(isFirst)) - { - if (SerializedProperty.EqualContents(property, endProperty)) break; - if (property.name == "enabled") continue; - isFirst = false; + view.TrackPropertyValue(property.FindPropertyRelative("displayName"), x => + { + view.Text = x.stringValue; + }); - view.Add(new PropertyField(property)); + view.Foldout.BindProperty(property); + + var endProperty = property.GetEndProperty(); + var isFirst = true; + while (property.NextVisible(isFirst)) + { + if (SerializedProperty.EqualContents(property, endProperty)) break; + if (property.name == "enabled") continue; + isFirst = false; + + view.Add(new PropertyField(property)); + } } return view; From 318ace4231462e2b976e281b07f42766cfa61a48 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 21:24:09 +0900 Subject: [PATCH 153/224] Add: reset component command --- .../Editor/LitMotionAnimationEditor.cs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 9d4d7999..ef40c33e 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -48,7 +48,14 @@ public override VisualElement CreateInspectorGUI() var components = ((LitMotionAnimation)target).Components; for (int i = 0; i < components.Count; i++) { - var handle = components[i].TrackedHandle; + var component = components[i]; + if (component == null) + { + views[i].Progress = 0f; + continue; + } + + var handle = component.TrackedHandle; if (handle.IsActive() && !double.IsInfinity(handle.Duration)) { @@ -207,6 +214,16 @@ ContextualMenuManipulator CreateContextMenuManipulator(SerializedProperty proper { var manipulator = new ContextualMenuManipulator(evt => { + evt.menu.AppendAction("Reset", x => + { + Undo.RecordObject(serializedObject.targetObject, "Reset LitMotionAnimation component"); + var elementProperty = property.GetArrayElementAtIndex(arrayIndex); + elementProperty.managedReferenceValue = ReflectionHelper.CreateDefaultInstance(elementProperty.managedReferenceValue.GetType()); + RefleshInspector(true); + }, string.IsNullOrEmpty(property.GetArrayElementAtIndex(arrayIndex).managedReferenceFullTypename) ? DropdownMenuAction.Status.Disabled : DropdownMenuAction.Status.Normal); + + evt.menu.AppendSeparator(); + evt.menu.AppendAction("Remove Component", x => { property.DeleteArrayElementAtIndex(arrayIndex); @@ -241,7 +258,7 @@ VisualElement CreateControlPanel() flexGrow = 1f, } }; - var restartButton = new Button(() => + var restartButton = new Button(() => { var animation = (LitMotionAnimation)target; animation.Reset(); From 8e992b17b4499c7c7fcfcf0607850ca133129f89 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 21:25:15 +0900 Subject: [PATCH 154/224] Change: error message --- .../LitMotion.Animation/Editor/LitMotionAnimationEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index ef40c33e..1517fb5e 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -176,7 +176,7 @@ AnimationComponentView CreateComponentGUI(SerializedProperty property) view.EnabledToggle.value = true; view.SetEnabled(true); view.EnabledToggle.Q("unity-checkmark").style.visibility = Visibility.Hidden; - view.Add(new HelpBox("The type referenced in SerializeReference is missing. You may have renamed the type or moved the namespace or assembly of the type.", HelpBoxMessageType.Error)); + view.Add(new HelpBox("The type referenced in SerializeReference is missing. You may have renamed the type or moved it to a different namespace or assembly.", HelpBoxMessageType.Error)); } else { From d3ccda751fb02ebd7927f6fb963059a8a8715e3d Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 22:05:49 +0900 Subject: [PATCH 155/224] Fix: add null check --- .../Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 62829edf..9bc76901 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -38,6 +38,7 @@ public void Play() foreach (var component in components) { + if (component == null) continue; if (!component.Enabled) continue; var handle = component.Play().Preserve(); From a12745d8aff158000480f71e2d28f01f33ea65cd Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 22:12:06 +0900 Subject: [PATCH 156/224] Update: error view toggle --- .../LitMotion.Animation/Editor/LitMotionAnimationEditor.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 1517fb5e..156f856a 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -175,6 +175,7 @@ AnimationComponentView CreateComponentGUI(SerializedProperty property) view.Icon = (Texture2D)EditorGUIUtility.IconContent("Error").image; view.EnabledToggle.value = true; view.SetEnabled(true); + view.EnabledToggle.toggleOnLabelClick = false; view.EnabledToggle.Q("unity-checkmark").style.visibility = Visibility.Hidden; view.Add(new HelpBox("The type referenced in SerializeReference is missing. You may have renamed the type or moved it to a different namespace or assembly.", HelpBoxMessageType.Error)); } From 65d0ab7fc82535f45a7df7f2d2d660d37fbad260 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 14 Dec 2024 23:52:33 +0900 Subject: [PATCH 157/224] Add: Volume weight --- .../Runtime/Components/RendererComponents.cs | 15 +++++++++++++++ .../Runtime/LitMotion.Animation.asmdef | 8 +++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs index a0b5ba36..b338cca1 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs @@ -1,5 +1,8 @@ using System; using UnityEngine; +#if LITMOTION_ANIMATION_RENDER_PIPELINES +using UnityEngine.Rendering; +#endif namespace LitMotion.Animation.Components { @@ -85,4 +88,16 @@ protected override void SetValue(SpriteRenderer target, in Color value) target.color = value; } } + +#if LITMOTION_ANIMATION_RENDER_PIPELINES + + [Serializable] + [AddAnimationComponentMenu("Rendering/Volume Weight")] + public sealed class VolumeWeightAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(Volume target) => target.weight; + protected override void SetValue(Volume target, in float value) => target.weight = value; + } + +#endif } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef index 44a86f23..4ae5b6c8 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef @@ -5,7 +5,8 @@ "GUID:e0cd26848372d4e5c891c569017e11f1", "GUID:3b570a5146f9d4f0fa107ed4559471a3", "GUID:3aa1866a824b5472da50fe142777d95f", - "GUID:2bafac87e7f4b9b418d9448d219b01ab" + "GUID:2bafac87e7f4b9b418d9448d219b01ab", + "GUID:df380645f10b7bc4b97d4f5eb6303d95" ], "includePlatforms": [], "excludePlatforms": [], @@ -19,6 +20,11 @@ "name": "com.unity.ugui", "expression": "", "define": "LITMOTION_ANIMATION_UGUI" + }, + { + "name": "com.unity.render-pipelines.core", + "expression": "", + "define": "LITMOTION_ANIMATION_RENDER_PIPELINES" } ], "noEngineReferences": false From b821426cf60ead61564cba674b8427f9a002ac30 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 00:29:53 +0900 Subject: [PATCH 158/224] Add: audio animation components --- .../Runtime/Components/AudioComponents.cs | 25 +++++++++++++++++++ .../Components/AudioComponents.cs.meta | 2 ++ .../Runtime/LitMotion.Animation.asmdef | 5 ++++ 3 files changed, 32 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs new file mode 100644 index 00000000..7ea5fcc9 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs @@ -0,0 +1,25 @@ +#if LITMOTION_ANIMATION_UNITY_AUDIO + +using System; +using UnityEngine; + +namespace LitMotion.Animation.Components +{ + [Serializable] + [AddAnimationComponentMenu("Audio/Audio Source Volume")] + public sealed class AudioSourceVolumeAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(AudioSource target) => target.volume; + protected override void SetValue(AudioSource target, in float value) => target.volume = value; + } + + [Serializable] + [AddAnimationComponentMenu("Audio/Audio Source Pitch")] + public sealed class AudioSourcePitchAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(AudioSource target) => target.pitch; + protected override void SetValue(AudioSource target, in float value) => target.pitch = value; + } +} + +#endif \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs.meta new file mode 100644 index 00000000..d475beea --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 21cb56c4237d84c6e9e98d2dc8ae9f2c \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef index 4ae5b6c8..d925aadb 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef @@ -25,6 +25,11 @@ "name": "com.unity.render-pipelines.core", "expression": "", "define": "LITMOTION_ANIMATION_RENDER_PIPELINES" + }, + { + "name": "com.unity.modules.audio", + "expression": "", + "define": "LITMOTION_ANIMATION_UNITY_AUDIO" } ], "noEngineReferences": false From 03f4cb598cc3114b23b309df5ee16bb9d835a4b4 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 01:12:42 +0900 Subject: [PATCH 159/224] Change: rename attribute --- .../Editor/AddAnimationComponentDropdown.cs | 4 ++-- .../Runtime/Components/AudioComponents.cs | 4 ++-- .../Runtime/Components/RendererComponents.cs | 12 ++++++------ .../Runtime/Components/TransformComponents.cs | 18 +++++++++--------- .../Runtime/Components/UGUIComponents.cs | 18 +++++++++--------- .../Runtime/Components/ValueComponents.cs | 18 +++++++++--------- .../Runtime/LitMotionAnimationComponent.cs | 4 ++-- ...itMotionAnimationComponentMenuAttribute.cs} | 4 ++-- ...ionAnimationComponentMenuAttribute.cs.meta} | 0 9 files changed, 41 insertions(+), 41 deletions(-) rename src/LitMotion/Assets/LitMotion.Animation/Runtime/{AddAnimationComponentMenuAttribute.cs => LitMotionAnimationComponentMenuAttribute.cs} (61%) rename src/LitMotion/Assets/LitMotion.Animation/Runtime/{AddAnimationComponentMenuAttribute.cs.meta => LitMotionAnimationComponentMenuAttribute.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs index 2bfb8803..048b7eb3 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs @@ -24,13 +24,13 @@ static readonly (Type Type, string MenuName)[] cache = TypeCache.GetTypesDerived .Where(x => !x.IsGenericType) .Select(x => { - var attribute = x.GetCustomAttribute(); + var attribute = x.GetCustomAttribute(); var menuName = attribute == null ? x.Name : attribute.MenuName; return (x, menuName); }) .OrderBy(x => x.menuName) .ToArray(); - + public event Action OnTypeSelected; public AddAnimationComponentDropdown(AdvancedDropdownState state) : base(state) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs index 7ea5fcc9..c609b22a 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs @@ -6,7 +6,7 @@ namespace LitMotion.Animation.Components { [Serializable] - [AddAnimationComponentMenu("Audio/Audio Source Volume")] + [LitMotionAnimationComponentMenu("Audio/Audio Source Volume")] public sealed class AudioSourceVolumeAnimation : FloatPropertyAnimationComponent { protected override float GetValue(AudioSource target) => target.volume; @@ -14,7 +14,7 @@ public sealed class AudioSourceVolumeAnimation : FloatPropertyAnimationComponent } [Serializable] - [AddAnimationComponentMenu("Audio/Audio Source Pitch")] + [LitMotionAnimationComponentMenu("Audio/Audio Source Pitch")] public sealed class AudioSourcePitchAnimation : FloatPropertyAnimationComponent { protected override float GetValue(AudioSource target) => target.pitch; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs index b338cca1..3a42ffc0 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs @@ -7,7 +7,7 @@ namespace LitMotion.Animation.Components { [Serializable] - [AddAnimationComponentMenu("Rendering/Material Property (Float)")] + [LitMotionAnimationComponentMenu("Rendering/Material Property (Float)")] public sealed class MaterialFloatAnimation : FloatPropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -24,7 +24,7 @@ protected override void SetValue(Material target, in float value) } [Serializable] - [AddAnimationComponentMenu("Rendering/Material Property (Int)")] + [LitMotionAnimationComponentMenu("Rendering/Material Property (Int)")] public sealed class MaterialIntAnimation : IntPropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -41,7 +41,7 @@ protected override void SetValue(Material target, in int value) } [Serializable] - [AddAnimationComponentMenu("Rendering/Material Property (Vector)")] + [LitMotionAnimationComponentMenu("Rendering/Material Property (Vector)")] public sealed class MaterialVectorAnimation : Vector4PropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -58,7 +58,7 @@ protected override void SetValue(Material target, in Vector4 value) } [Serializable] - [AddAnimationComponentMenu("Rendering/Material Property (Color)")] + [LitMotionAnimationComponentMenu("Rendering/Material Property (Color)")] public sealed class MaterialColorAnimation : ColorPropertyAnimationComponent { [SerializeField] string propertyName = "_Color"; @@ -75,7 +75,7 @@ protected override void SetValue(Material target, in Color value) } [Serializable] - [AddAnimationComponentMenu("Rendering/Sprite Renderer Color")] + [LitMotionAnimationComponentMenu("Rendering/Sprite Renderer Color")] public sealed class SpriteRendererColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(SpriteRenderer target) @@ -92,7 +92,7 @@ protected override void SetValue(SpriteRenderer target, in Color value) #if LITMOTION_ANIMATION_RENDER_PIPELINES [Serializable] - [AddAnimationComponentMenu("Rendering/Volume Weight")] + [LitMotionAnimationComponentMenu("Rendering/Volume Weight")] public sealed class VolumeWeightAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Volume target) => target.weight; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs index 7ce35fe0..8858df85 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs @@ -29,15 +29,15 @@ protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 re } [Serializable] - [AddAnimationComponentMenu("Transform/Position")] + [LitMotionAnimationComponentMenu("Transform/Position")] public sealed class PositionAnimation : PositionAnimationBase { } [Serializable] - [AddAnimationComponentMenu("Transform/Position (Punch)")] + [LitMotionAnimationComponentMenu("Transform/Position (Punch)")] public sealed class PositionPunchAnimation : PositionAnimationBase { } [Serializable] - [AddAnimationComponentMenu("Transform/Position (Shake)")] + [LitMotionAnimationComponentMenu("Transform/Position (Shake)")] public sealed class PositionShakeAnimation : PositionAnimationBase { } public abstract class RotationAnimationBase : PropertyAnimationComponent @@ -64,15 +64,15 @@ protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 re } [Serializable] - [AddAnimationComponentMenu("Transform/Rotation")] + [LitMotionAnimationComponentMenu("Transform/Rotation")] public sealed class RotationAnimation : RotationAnimationBase { } [Serializable] - [AddAnimationComponentMenu("Transform/Rotation (Punch)")] + [LitMotionAnimationComponentMenu("Transform/Rotation (Punch)")] public sealed class RotationPunchAnimation : RotationAnimationBase { } [Serializable] - [AddAnimationComponentMenu("Transform/Rotation (Shake)")] + [LitMotionAnimationComponentMenu("Transform/Rotation (Shake)")] public sealed class RotationShakeAnimation : RotationAnimationBase { } public abstract class ScaleAnimationBase : PropertyAnimationComponent @@ -96,14 +96,14 @@ protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 re } [Serializable] - [AddAnimationComponentMenu("Transform/Scale")] + [LitMotionAnimationComponentMenu("Transform/Scale")] public sealed class ScaleAnimation : ScaleAnimationBase { } [Serializable] - [AddAnimationComponentMenu("Transform/Scale (Punch)")] + [LitMotionAnimationComponentMenu("Transform/Scale (Punch)")] public sealed class ScalePunchAnimation : ScaleAnimationBase { } [Serializable] - [AddAnimationComponentMenu("Transform/Scale (Shake)")] + [LitMotionAnimationComponentMenu("Transform/Scale (Shake)")] public sealed class ScaleShakeAnimation : ScaleAnimationBase { } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs index c1d9bbd4..209c6a59 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs @@ -8,7 +8,7 @@ namespace LitMotion.Animation.Components { [Serializable] - [AddAnimationComponentMenu("UI/Text")] + [LitMotionAnimationComponentMenu("UI/Text")] public sealed class TextAnimation : FixedString512BytesPropertyAnimationComponent { protected override FixedString512Bytes GetValue(Text target) => target.text; @@ -16,7 +16,7 @@ public sealed class TextAnimation : FixedString512BytesPropertyAnimationComponen } [Serializable] - [AddAnimationComponentMenu("UI/Text Color")] + [LitMotionAnimationComponentMenu("UI/Text Color")] public sealed class TextColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(Text target) => target.color; @@ -24,7 +24,7 @@ public sealed class TextColorAnimation : ColorPropertyAnimationComponent } [Serializable] - [AddAnimationComponentMenu("UI/Text Font Size")] + [LitMotionAnimationComponentMenu("UI/Text Font Size")] public sealed class TextFontSizeAnimation : IntPropertyAnimationComponent { protected override int GetValue(Text target) => target.fontSize; @@ -32,7 +32,7 @@ public sealed class TextFontSizeAnimation : IntPropertyAnimationComponent } [Serializable] - [AddAnimationComponentMenu("UI/Graphic Color")] + [LitMotionAnimationComponentMenu("UI/Graphic Color")] public sealed class GraphicColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(Graphic target) => target.color; @@ -40,7 +40,7 @@ public sealed class GraphicColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(Image target) => target.color; @@ -48,7 +48,7 @@ public sealed class ImageColorAnimation : ColorPropertyAnimationComponent } [Serializable] - [AddAnimationComponentMenu("UI/Image Color (Alpha)")] + [LitMotionAnimationComponentMenu("UI/Image Color (Alpha)")] public sealed class ImageColorAlphaAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Image target) => target.color.a; @@ -61,7 +61,7 @@ protected override void SetValue(Image target, in float value) } [Serializable] - [AddAnimationComponentMenu("UI/Image Fill Amount")] + [LitMotionAnimationComponentMenu("UI/Image Fill Amount")] public sealed class ImageFillAmountAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Image target) => target.fillAmount; @@ -69,7 +69,7 @@ public sealed class ImageFillAmountAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Slider target) => target.value; @@ -77,7 +77,7 @@ public sealed class SliderValueAnimation : FloatPropertyAnimationComponent { protected override float GetValue(CanvasGroup target) => target.alpha; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs index a3bf1378..87db67a9 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs @@ -25,39 +25,39 @@ public override MotionHandle Play() } [Serializable] - [AddAnimationComponentMenu("Value/Float")] + [LitMotionAnimationComponentMenu("Value/Float")] public sealed class FloatValueAnimation : ValueAnimationComponent { } [Serializable] - [AddAnimationComponentMenu("Value/Double")] + [LitMotionAnimationComponentMenu("Value/Double")] public sealed class DoubleValueAnimation : ValueAnimationComponent { } [Serializable] - [AddAnimationComponentMenu("Value/Int")] + [LitMotionAnimationComponentMenu("Value/Int")] public sealed class IntValueAnimation : ValueAnimationComponent { } [Serializable] - [AddAnimationComponentMenu("Value/Long")] + [LitMotionAnimationComponentMenu("Value/Long")] public sealed class LongValueAnimation : ValueAnimationComponent { } [Serializable] - [AddAnimationComponentMenu("Value/Vector2")] + [LitMotionAnimationComponentMenu("Value/Vector2")] public sealed class Vector2ValueAnimation : ValueAnimationComponent { } [Serializable] - [AddAnimationComponentMenu("Value/Vector3")] + [LitMotionAnimationComponentMenu("Value/Vector3")] public sealed class Vector3ValueAnimation : ValueAnimationComponent { } [Serializable] - [AddAnimationComponentMenu("Value/Vector4")] + [LitMotionAnimationComponentMenu("Value/Vector4")] public sealed class Vector4ValueAnimation : ValueAnimationComponent { } [Serializable] - [AddAnimationComponentMenu("Value/Color")] + [LitMotionAnimationComponentMenu("Value/Color")] public sealed class ColorValueAnimation : ValueAnimationComponent { } [Serializable] - [AddAnimationComponentMenu("Value/String")] + [LitMotionAnimationComponentMenu("Value/String")] public sealed class StringValueAnimation : LitMotionAnimationComponent { [SerializeField] SerializableMotionSettings settings; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs index cf30bac5..29fabb73 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs @@ -12,7 +12,7 @@ public LitMotionAnimationComponent() { #if UNITY_EDITOR var type = GetType(); - var attribute = type.GetCustomAttribute(); + var attribute = type.GetCustomAttribute(); displayName = attribute != null ? attribute.MenuName.Split('/').Last() : type.Name; @@ -26,7 +26,7 @@ public LitMotionAnimationComponent() public string DisplayName => displayName; public abstract MotionHandle Play(); - + public MotionHandle TrackedHandle { get; set; } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponentMenuAttribute.cs similarity index 61% rename from src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs rename to src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponentMenuAttribute.cs index fdec0efc..0245184d 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponentMenuAttribute.cs @@ -3,9 +3,9 @@ namespace LitMotion.Animation { [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)] - public sealed class AddAnimationComponentMenuAttribute : Attribute + public sealed class LitMotionAnimationComponentMenuAttribute : Attribute { - public AddAnimationComponentMenuAttribute(string menuName) + public LitMotionAnimationComponentMenuAttribute(string menuName) { MenuName = menuName; } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponentMenuAttribute.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion.Animation/Runtime/AddAnimationComponentMenuAttribute.cs.meta rename to src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponentMenuAttribute.cs.meta From 4c3351010a828741020b0a26ee825eb9ee61cb49 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 10:55:42 +0900 Subject: [PATCH 160/224] Add: RectTransform components --- .../Components/RectTransformComponents.cs | 19 +++++++++++++++++++ .../RectTransformComponents.cs.meta | 2 ++ 2 files changed, 21 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs new file mode 100644 index 00000000..e5d33776 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs @@ -0,0 +1,19 @@ +using System; +using LitMotion.Animation; +using UnityEngine; + +[Serializable] +[LitMotionAnimationComponentMenu("UI/Rect Transform Size Delta")] +public sealed class RectTransformSizeDeltaAnimation : Vector2PropertyAnimationComponent +{ + protected override Vector2 GetValue(RectTransform target) => target.sizeDelta; + protected override void SetValue(RectTransform target, in Vector2 value) => target.sizeDelta = value; +} + +[Serializable] +[LitMotionAnimationComponentMenu("UI/Rect Transform Pivot")] +public sealed class RectTransformPivotAnimation : Vector2PropertyAnimationComponent +{ + protected override Vector2 GetValue(RectTransform target) => target.pivot; + protected override void SetValue(RectTransform target, in Vector2 value) => target.pivot = value; +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs.meta new file mode 100644 index 00000000..ef362a9f --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e1893e813d7674a77ba89e0599559f76 \ No newline at end of file From 6316b11e974719d0c0d0841165dda23d042c66db Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 13:03:25 +0900 Subject: [PATCH 161/224] Refactoring --- .../Editor/LitMotionAnimationEditor.cs | 291 ++++++++++-------- .../Runtime/LitMotionAnimation.cs | 7 + 2 files changed, 166 insertions(+), 132 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 156f856a..b0b1671d 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -2,26 +2,24 @@ using UnityEditor; using UnityEditor.UIElements; using System.Collections.Generic; -using System; using UnityEngine; -using System.Linq; namespace LitMotion.Animation.Editor { [CustomEditor(typeof(LitMotionAnimation))] public sealed class LitMotionAnimationEditor : UnityEditor.Editor { - VisualElement root; SerializedProperty componentsProperty; int prevArraySize; AddAnimationComponentDropdown dropdown; - Button addButton; - List views = new(); + VisualElement componentRoot; public override VisualElement CreateInspectorGUI() { - root = new VisualElement(); + var root = new VisualElement(); + componentRoot = new VisualElement(); + componentsProperty = serializedObject.FindProperty("components"); prevArraySize = componentsProperty.arraySize; @@ -35,39 +33,10 @@ public override VisualElement CreateInspectorGUI() serializedObject.ApplyModifiedProperties(); }; - RefleshInspector(false); - - root.schedule.Execute(() => - { - if (componentsProperty.arraySize != prevArraySize) - { - RefleshInspector(true); - prevArraySize = componentsProperty.arraySize; - } - - var components = ((LitMotionAnimation)target).Components; - for (int i = 0; i < components.Count; i++) - { - var component = components[i]; - if (component == null) - { - views[i].Progress = 0f; - continue; - } - - var handle = component.TrackedHandle; - - if (handle.IsActive() && !double.IsInfinity(handle.Duration)) - { - views[i].Progress = Mathf.InverseLerp(0f, (float)handle.Duration, (float)handle.Time); - } - else - { - views[i].Progress = 0f; - } - } - }) - .Every(10); + root.Add(CreateSettingsPanel()); + componentRoot.Add(CreateComponentsPanel()); + root.Add(componentRoot); + root.Add(CreateDebugPanel()); return root; } @@ -95,25 +64,46 @@ void OnPlayModeStateChanged(PlayModeStateChange state) } } - void RefleshInspector(bool applyModifiedProperties) + VisualElement CreateBox(string label = null) { - if (applyModifiedProperties) + var box = new Box { - serializedObject.ApplyModifiedProperties(); - } - - root.Clear(); - views.Clear(); + style = { + marginTop = 6f, + marginBottom = 2f, + paddingLeft = 4f, + alignItems = Align.Stretch, + flexDirection = FlexDirection.Column, + flexGrow = 1f, + } + }; - root.schedule.Execute(() => + if (label != null) { - var enabled = IsPlaying(); - foreach (var view in views) + box.Add(new Label(label) { - view.SetEnabled(enabled); - } - addButton.SetEnabled(enabled); - }).Every(10); + style = { + marginTop = 5f, + marginBottom = 2f, + unityFontStyleAndWeight = FontStyle.Bold + } + }); + } + + return box; + } + + VisualElement CreateSettingsPanel() + { + var box = CreateBox("Settings"); + box.Add(new PropertyField(serializedObject.FindProperty("playOnAwake"))); + return box; + } + + VisualElement CreateComponentsPanel() + { + var box = CreateBox("Components"); + var views = new List(); for (int i = 0; i < componentsProperty.arraySize; i++) { @@ -127,12 +117,12 @@ void RefleshInspector(bool applyModifiedProperties) view.EnabledToggle.BindProperty(enabledProperty); } - root.Add(view); + box.Add(view); views.Add(view); CreateContextMenuManipulator(componentsProperty, i, true).target = view.ContextMenuButton; } - addButton = new Button(() => dropdown.Show(addButton.worldBound)) + var addButton = new Button() { text = "Add...", style = { @@ -140,29 +130,126 @@ void RefleshInspector(bool applyModifiedProperties) alignSelf = Align.Center } }; - root.Add(addButton); + addButton.clicked += () => dropdown.Show(addButton.worldBound); + box.Add(addButton); - var box = new Box + box.schedule.Execute(() => + { + var enabled = IsPlaying(); + foreach (var view in views) + { + view.SetEnabled(enabled); + } + addButton.SetEnabled(enabled); + }).Every(10); + + box.schedule.Execute(() => + { + if (componentsProperty.arraySize != prevArraySize) + { + RefleshComponentsView(true); + prevArraySize = componentsProperty.arraySize; + } + + var components = ((LitMotionAnimation)target).Components; + for (int i = 0; i < views.Count; i++) + { + var component = components[i]; + if (component == null) + { + views[i].Progress = 0f; + continue; + } + + var handle = component.TrackedHandle; + + if (handle.IsActive() && !double.IsInfinity(handle.Duration)) + { + views[i].Progress = Mathf.InverseLerp(0f, (float)handle.Duration, (float)handle.Time); + } + else + { + views[i].Progress = 0f; + } + } + }) + .Every(10); + + return box; + } + + VisualElement CreateDebugPanel() + { + var box = CreateBox("Debug"); + var buttonGroup = new VisualElement { style = { - marginTop = 6f, - marginBottom = 2f, - alignItems = Align.FlexStart, - flexDirection = FlexDirection.Column + flexDirection = FlexDirection.Row, + flexGrow = 1f, } }; - box.Add(new Label("Debug") + var playButton = new Button(() => ((LitMotionAnimation)target).Play()) { + text = "Play", style = { - marginTop = 5f, - marginBottom = 2f, - marginLeft = 5f, - unityFontStyleAndWeight = FontStyle.Bold + flexGrow = 1f, } - }); - var controlPanel = CreateControlPanel(); - box.Add(controlPanel); - root.Add(box); + }; + var restartButton = new Button(() => + { + var animation = (LitMotionAnimation)target; + animation.Reset(); + animation.Play(); + }) + { + text = "Restart", + style = { + flexGrow = 1f, + } + }; + var stopButton = new Button(() => ((LitMotionAnimation)target).Stop()) + { + text = "Stop", + style = { + flexGrow = 1f, + } + }; + var resetButton = new Button(() => ((LitMotionAnimation)target).Reset()) + { + text = "Reset", + style = { + flexGrow = 1f, + } + }; + + buttonGroup.Add(playButton); + buttonGroup.Add(restartButton); + buttonGroup.Add(stopButton); + buttonGroup.Add(resetButton); + + buttonGroup.schedule.Execute(() => + { + var enabled = !IsPlaying(); + restartButton.SetEnabled(enabled); + stopButton.SetEnabled(enabled); + resetButton.SetEnabled(enabled); + }) + .Every(10); + + box.Add(buttonGroup); + + return box; + } + + void RefleshComponentsView(bool applyModifiedProperties) + { + if (applyModifiedProperties) + { + serializedObject.ApplyModifiedProperties(); + } + + componentRoot.Clear(); + componentRoot.Add(CreateComponentsPanel()); } AnimationComponentView CreateComponentGUI(SerializedProperty property) @@ -220,7 +307,7 @@ ContextualMenuManipulator CreateContextMenuManipulator(SerializedProperty proper Undo.RecordObject(serializedObject.targetObject, "Reset LitMotionAnimation component"); var elementProperty = property.GetArrayElementAtIndex(arrayIndex); elementProperty.managedReferenceValue = ReflectionHelper.CreateDefaultInstance(elementProperty.managedReferenceValue.GetType()); - RefleshInspector(true); + RefleshComponentsView(true); }, string.IsNullOrEmpty(property.GetArrayElementAtIndex(arrayIndex).managedReferenceFullTypename) ? DropdownMenuAction.Status.Disabled : DropdownMenuAction.Status.Normal); evt.menu.AppendSeparator(); @@ -228,7 +315,7 @@ ContextualMenuManipulator CreateContextMenuManipulator(SerializedProperty proper evt.menu.AppendAction("Remove Component", x => { property.DeleteArrayElementAtIndex(arrayIndex); - RefleshInspector(true); + RefleshComponentsView(true); }); }); @@ -243,66 +330,6 @@ ContextualMenuManipulator CreateContextMenuManipulator(SerializedProperty proper return manipulator; } - VisualElement CreateControlPanel() - { - var element = new VisualElement - { - style = { - flexDirection = FlexDirection.Row, - flexGrow = 1f, - } - }; - var playButton = new Button(() => ((LitMotionAnimation)target).Play()) - { - text = "Play", - style = { - flexGrow = 1f, - } - }; - var restartButton = new Button(() => - { - var animation = (LitMotionAnimation)target; - animation.Reset(); - animation.Play(); - }) - { - text = "Restart", - style = { - flexGrow = 1f, - } - }; - var stopButton = new Button(() => ((LitMotionAnimation)target).Stop()) - { - text = "Stop", - style = { - flexGrow = 1f, - } - }; - var resetButton = new Button(() => ((LitMotionAnimation)target).Reset()) - { - text = "Reset", - style = { - flexGrow = 1f, - } - }; - - element.Add(playButton); - element.Add(restartButton); - element.Add(stopButton); - element.Add(resetButton); - - element.schedule.Execute(() => - { - var enabled = !IsPlaying(); - restartButton.SetEnabled(enabled); - stopButton.SetEnabled(enabled); - resetButton.SetEnabled(enabled); - }) - .Every(10); - - return element; - } - bool IsPlaying() { return !((LitMotionAnimation)target).IsPlaying; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 9bc76901..73d25e46 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -8,6 +8,8 @@ namespace LitMotion.Animation [AddComponentMenu("LitMotion Animation")] public sealed class LitMotionAnimation : MonoBehaviour { + [SerializeField] bool playOnAwake; + [SerializeReference] LitMotionAnimationComponent[] components = new LitMotionAnimationComponent[] { @@ -19,6 +21,11 @@ public sealed class LitMotionAnimation : MonoBehaviour public IReadOnlyList Components => components; + void Start() + { + if (playOnAwake) Play(); + } + public void Play() { var isPlaying = false; From 5352bcb260701a3766d56ecbe845c8c1c7ab33ae Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 13:04:25 +0900 Subject: [PATCH 162/224] Update: adjust box label --- .../Editor/LitMotionAnimationEditor.cs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index b0b1671d..eea3c818 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -64,7 +64,7 @@ void OnPlayModeStateChanged(PlayModeStateChange state) } } - VisualElement CreateBox(string label = null) + VisualElement CreateBox(string label) { var box = new Box { @@ -78,17 +78,14 @@ VisualElement CreateBox(string label = null) } }; - if (label != null) + box.Add(new Label(label) { - box.Add(new Label(label) - { - style = { - marginTop = 5f, - marginBottom = 2f, - unityFontStyleAndWeight = FontStyle.Bold - } - }); - } + style = { + marginTop = 5f, + marginBottom = 3f, + unityFontStyleAndWeight = FontStyle.Bold + } + }); return box; } From a156b7a97f8bca1cdb30fcc7328aa85853610170 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 15:40:20 +0900 Subject: [PATCH 163/224] Add: MotionHandle.IsPlaying() --- .../LitMotion/Runtime/Internal/MotionStorage.cs | 12 ++++++++++++ .../LitMotion/Runtime/MotionHandleExtensions.cs | 14 +++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 510fea5e..5deae2ee 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -35,6 +35,7 @@ internal enum MotionStoragePermission : byte internal interface IMotionStorage { bool IsActive(MotionHandle handle); + bool IsPlaying(MotionHandle handle); bool TryCancel(MotionHandle handle, MotionStoragePermission permission); bool TryComplete(MotionHandle handle, MotionStoragePermission permission); void Cancel(MotionHandle handle, MotionStoragePermission permission); @@ -235,6 +236,17 @@ public bool IsActive(MotionHandle handle) (motion.Core.Status is MotionStatus.Completed && motion.Core.IsPreserved); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool IsPlaying(MotionHandle handle) + { + ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); + if (IsDenseIndexOutOfRange(slot.DenseIndex)) return false; + if (IsInvalidVersion(slot.Version, handle)) return false; + + ref var motion = ref unmanagedDataArray[slot.DenseIndex]; + return motion.Core.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing; + } + public bool TryCancel(MotionHandle handle, MotionStoragePermission permission) { return TryCancelCore(handle, permission) == 0; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 1070794e..e4f1bf8c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -17,7 +17,7 @@ namespace LitMotion public static class MotionHandleExtensions { /// - /// Checks if a motion is currently playing. + /// Checks if a motion is active. /// /// This motion handle /// True if motion is active, otherwise false. @@ -27,6 +27,18 @@ public static bool IsActive(this MotionHandle handle) return MotionManager.IsActive(handle); } + /// + /// Checks if a motion is currently playing. + /// + /// This motion handle + /// True if motion is playing, otherwise false. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsPlaying(this MotionHandle handle) + { + return MotionManager.IsPlaying(handle); + } + + /// /// Gets the debug name set for the MotionHandle. If not specified, returns the result of ToString(). /// From 9ad52deae37b745c19fd67c9080ec4fec5a25523 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 15:40:27 +0900 Subject: [PATCH 164/224] Add: AnimationMode --- .../Editor/LitMotionAnimationEditor.cs | 1 + .../Runtime/LitMotionAnimation.cs | 63 ++++++++++++++++--- 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index eea3c818..2b285808 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -94,6 +94,7 @@ VisualElement CreateSettingsPanel() { var box = CreateBox("Settings"); box.Add(new PropertyField(serializedObject.FindProperty("playOnAwake"))); + box.Add(new PropertyField(serializedObject.FindProperty("animationMode"))); return box; } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 73d25e46..7905843d 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -6,9 +6,17 @@ namespace LitMotion.Animation { [AddComponentMenu("LitMotion Animation")] + [ExecuteAlways] public sealed class LitMotionAnimation : MonoBehaviour { + enum AnimationMode + { + Parallel, + Sequential + } + [SerializeField] bool playOnAwake; + [SerializeField] AnimationMode animationMode; [SerializeReference] LitMotionAnimationComponent[] components = new LitMotionAnimationComponent[] @@ -17,15 +25,36 @@ public sealed class LitMotionAnimation : MonoBehaviour new PositionAnimation(), }; + Queue queue = new(); FastListCore handles; public IReadOnlyList Components => components; void Start() { +#if UNITY_EDITOR + if (!UnityEditor.EditorApplication.isPlaying) return; +#endif if (playOnAwake) Play(); } + void Update() + { + if (animationMode != AnimationMode.Sequential) return; + + foreach (var handle in handles.AsSpan()) + { + if (handle.IsPlaying()) return; + } + + if (queue.TryDequeue(out var queuedComponent)) + { + var handle = queuedComponent.Play().Preserve(); + queuedComponent.TrackedHandle = handle; + handles.Add(handle); + } + } + public void Play() { var isPlaying = false; @@ -43,14 +72,30 @@ public void Play() handles.Clear(); - foreach (var component in components) + switch (animationMode) { - if (component == null) continue; - if (!component.Enabled) continue; - - var handle = component.Play().Preserve(); - component.TrackedHandle = handle; - handles.Add(handle); + case AnimationMode.Sequential: + foreach (var component in components) + { + if (component == null) continue; + if (!component.Enabled) continue; + queue.Enqueue(component); + } + + Update(); + + break; + case AnimationMode.Parallel: + foreach (var component in components) + { + if (component == null) continue; + if (!component.Enabled) continue; + + var handle = component.Play().Preserve(); + component.TrackedHandle = handle; + handles.Add(handle); + } + break; } } @@ -70,18 +115,20 @@ public void Reset() } handles.Clear(); + queue.Clear(); } public bool IsPlaying { get { + if (queue.Count > 0) return true; + foreach (var handle in handles.AsSpan()) { if (handle.IsActive()) return true; } - handles.Clear(); return false; } } From dbd3fa21d8e08905a63b9c82bf8a9009af37d8ff Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 15:50:48 +0900 Subject: [PATCH 165/224] Fix: ProgressBar style --- .../Assets/LitMotion.Animation/Editor/AnimationComponentView.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs index 971db5e3..be3ae199 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs @@ -104,6 +104,7 @@ public AnimationComponentView() var progress = progressBar.Q(null, "unity-progress-bar__progress"); progress.style.backgroundColor = Color.white; progress.style.minWidth = 0f; + progressBar.schedule.Execute(() => progress.style.display = progressBar.value > progressBar.lowValue ? DisplayStyle.Flex : DisplayStyle.None).Every(10); root.Add(progressBar); contextMenuButton = new VisualElement From c717e326f672eb11dc7a2e7dbb2cb8e14bcfb6f3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 16:24:01 +0900 Subject: [PATCH 166/224] Add: MoveUp/MoveDown command --- .../Editor/LitMotionAnimationEditor.cs | 13 +++++++++++++ .../Editor/SerializableMotionSettingsDrawer.cs | 12 +++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 2b285808..43916460 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -315,6 +315,19 @@ ContextualMenuManipulator CreateContextMenuManipulator(SerializedProperty proper property.DeleteArrayElementAtIndex(arrayIndex); RefleshComponentsView(true); }); + + evt.menu.AppendAction("Move Up", x => + { + property.MoveArrayElement(arrayIndex, arrayIndex - 1); + RefleshComponentsView(true); + }, arrayIndex == 0 ? DropdownMenuAction.Status.Disabled : DropdownMenuAction.Status.Normal); + + + evt.menu.AppendAction("Move Down", x => + { + property.MoveArrayElement(arrayIndex, arrayIndex + 1); + RefleshComponentsView(true); + }, arrayIndex == property.arraySize - 1 ? DropdownMenuAction.Status.Disabled : DropdownMenuAction.Status.Normal); }); if (activeLeftClick) diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs index 8198ab03..994edb51 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs @@ -67,7 +67,17 @@ public override VisualElement CreatePropertyGUI(SerializedProperty property) group.Add(customEaseCurve); customEaseCurve.schedule - .Execute(() => customEaseCurve.style.display = ease.enumValueIndex == (int)Ease.CustomAnimationCurve ? DisplayStyle.Flex : DisplayStyle.None) + .Execute(() => + { + try + { + customEaseCurve.style.display = ease.enumValueIndex == (int)Ease.CustomAnimationCurve ? DisplayStyle.Flex : DisplayStyle.None; + } + catch (InvalidOperationException) + { + // do nothing + } + }) .Every(10); }); From 4119a7765f82d5cfc2c92b3e010533427da0d5c7 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 16:28:49 +0900 Subject: [PATCH 167/224] Fix: compilation error --- .../LitMotion/Runtime/Internal/MotionManager.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs index d4c07496..bad46d44 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs @@ -50,7 +50,7 @@ public static void Complete(MotionHandle handle, MotionStoragePermission permiss [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryComplete(MotionHandle handle, MotionStoragePermission permission) { - CheckTypeId(handle); + if (handle.StorageId < 0 || handle.StorageId >= MotionTypeCount) return false; return list[handle.StorageId].TryComplete(handle, permission); } @@ -64,7 +64,7 @@ public static void Cancel(MotionHandle handle, MotionStoragePermission permissio [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryCancel(MotionHandle handle, MotionStoragePermission permission) { - CheckTypeId(handle); + if (handle.StorageId < 0 || handle.StorageId >= MotionTypeCount) return false; return list[handle.StorageId].TryCancel(handle, permission); } @@ -75,6 +75,13 @@ public static bool IsActive(MotionHandle handle) return list[handle.StorageId].IsActive(handle); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsPlaying(MotionHandle handle) + { + if (handle.StorageId < 0 || handle.StorageId >= MotionTypeCount) return false; + return list[handle.StorageId].IsPlaying(handle); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void SetTime(MotionHandle handle, double time, MotionStoragePermission permission) { From a8c4c0e7f184ca13fa6fa5c1ad38a81141c2824f Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 16:29:07 +0900 Subject: [PATCH 168/224] Change: sequential animation continution --- .../Runtime/LitMotionAnimation.cs | 17 +++-------------- .../Assets/LitMotion/Runtime/AssemblyInfo.cs | 1 + 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 7905843d..d29f1213 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -6,7 +6,6 @@ namespace LitMotion.Animation { [AddComponentMenu("LitMotion Animation")] - [ExecuteAlways] public sealed class LitMotionAnimation : MonoBehaviour { enum AnimationMode @@ -32,24 +31,15 @@ enum AnimationMode void Start() { -#if UNITY_EDITOR - if (!UnityEditor.EditorApplication.isPlaying) return; -#endif if (playOnAwake) Play(); } - void Update() + void MoveNextMotion() { - if (animationMode != AnimationMode.Sequential) return; - - foreach (var handle in handles.AsSpan()) - { - if (handle.IsPlaying()) return; - } - if (queue.TryDequeue(out var queuedComponent)) { var handle = queuedComponent.Play().Preserve(); + MotionManager.GetManagedDataRef(handle, MotionStoragePermission.Admin).OnCompleteAction += MoveNextMotion; queuedComponent.TrackedHandle = handle; handles.Add(handle); } @@ -82,8 +72,7 @@ public void Play() queue.Enqueue(component); } - Update(); - + MoveNextMotion(); break; case AnimationMode.Parallel: foreach (var component in components) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs b/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs index 9b9ed104..4373c9dc 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/AssemblyInfo.cs @@ -2,6 +2,7 @@ [assembly: InternalsVisibleTo("LitMotion.Sequences")] [assembly: InternalsVisibleTo("LitMotion.Extensions")] +[assembly: InternalsVisibleTo("LitMotion.Animation")] [assembly: InternalsVisibleTo("LitMotion.Editor")] [assembly: InternalsVisibleTo("LitMotion.Tests.Runtime")] [assembly: InternalsVisibleTo("LitMotion.Tests.Benchmark")] \ No newline at end of file From 49bbe86eb7a83395f2399268a29b6b19eaec9153 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 16:48:37 +0900 Subject: [PATCH 169/224] Add: control components --- .../Runtime/Components/ControlComponents.cs | 34 +++++++++++++++++++ .../Components/ControlComponents.cs.meta | 2 ++ 2 files changed, 36 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs new file mode 100644 index 00000000..1c42523c --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs @@ -0,0 +1,34 @@ +using System; +using UnityEngine; +using UnityEngine.Events; + +namespace LitMotion.Animation.Components +{ + [Serializable] + [LitMotionAnimationComponentMenu("Control/Delay")] + public sealed class DelayComponent : LitMotionAnimationComponent + { + [SerializeField] float delay; + + public override MotionHandle Play() + { + return LMotion.Create(0f, 1f, delay) + .RunWithoutBinding(); + } + } + + [Serializable] + [LitMotionAnimationComponentMenu("Control/Event")] + public sealed class EventComponent : LitMotionAnimationComponent + { + [Space(5f)] + [SerializeField] UnityEvent onPlay; + + public override MotionHandle Play() + { + return LMotion.Create(0f, 1f, 0f) + .WithOnComplete(() => onPlay.Invoke()) + .RunWithoutBinding(); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs.meta new file mode 100644 index 00000000..4b0476aa --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d9ce5211278c942e29c53ef040aa7250 \ No newline at end of file From 0703d0edff8c428368c6856f73aca15f4c802f66 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 17:05:59 +0900 Subject: [PATCH 170/224] Change: revert process --- .../Runtime/Components/ControlComponents.cs | 4 +++ .../Runtime/Components/ValueComponents.cs | 4 +++ .../Runtime/LitMotionAnimation.cs | 26 ++++++++++++------- .../Runtime/LitMotionAnimationComponent.cs | 1 + .../Runtime/PropertyAnimationComponent.cs | 10 +------ 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs index 1c42523c..734d3a52 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs @@ -15,6 +15,8 @@ public override MotionHandle Play() return LMotion.Create(0f, 1f, delay) .RunWithoutBinding(); } + + public override void Revert() { } } [Serializable] @@ -30,5 +32,7 @@ public override MotionHandle Play() .WithOnComplete(() => onPlay.Invoke()) .RunWithoutBinding(); } + + public override void Revert() { } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs index 87db67a9..fdbaeb71 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs @@ -22,6 +22,8 @@ public override MotionHandle Play() state.onValueChanged.Invoke(x); }); } + + public override void Revert() { } } [Serializable] @@ -72,5 +74,7 @@ public override MotionHandle Play() state.onValueChanged.Invoke(x.ConvertToString()); }); } + + public override void Revert() { } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index d29f1213..f774e898 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using LitMotion.Animation.Components; using LitMotion.Collections; @@ -25,7 +26,7 @@ enum AnimationMode }; Queue queue = new(); - FastListCore handles; + FastListCore playingComponents; public IReadOnlyList Components => components; @@ -41,7 +42,7 @@ void MoveNextMotion() var handle = queuedComponent.Play().Preserve(); MotionManager.GetManagedDataRef(handle, MotionStoragePermission.Admin).OnCompleteAction += MoveNextMotion; queuedComponent.TrackedHandle = handle; - handles.Add(handle); + playingComponents.Add(queuedComponent); } } @@ -49,8 +50,9 @@ public void Play() { var isPlaying = false; - foreach (var handle in handles.AsSpan()) + foreach (var component in playingComponents.AsSpan()) { + var handle = component.TrackedHandle; if (handle.IsActive()) { handle.PlaybackSpeed = 1f; @@ -60,7 +62,7 @@ public void Play() if (isPlaying) return; - handles.Clear(); + playingComponents.Clear(); switch (animationMode) { @@ -82,7 +84,7 @@ public void Play() var handle = component.Play().Preserve(); component.TrackedHandle = handle; - handles.Add(handle); + playingComponents.Add(component); } break; } @@ -90,20 +92,25 @@ public void Play() public void Stop() { - foreach (var handle in handles.AsSpan()) + foreach (var component in playingComponents.AsSpan()) { + var handle = component.TrackedHandle; if (handle.IsActive()) handle.PlaybackSpeed = 0f; } } public void Reset() { - foreach (var handle in handles.AsSpan()) + var span = playingComponents.AsSpan(); + span.Reverse(); + foreach (var component in span) { + var handle = component.TrackedHandle; handle.TryCancel(); + component.Revert(); } - handles.Clear(); + playingComponents.Clear(); queue.Clear(); } @@ -113,8 +120,9 @@ public bool IsPlaying { if (queue.Count > 0) return true; - foreach (var handle in handles.AsSpan()) + foreach (var component in playingComponents.AsSpan()) { + var handle = component.TrackedHandle; if (handle.IsActive()) return true; } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs index 29fabb73..22408e87 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs @@ -26,6 +26,7 @@ public LitMotionAnimationComponent() public string DisplayName => displayName; public abstract MotionHandle Play(); + public abstract void Revert(); public MotionHandle TrackedHandle { get; set; } } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs index e5e9cebc..d673ca48 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs @@ -15,15 +15,9 @@ public abstract class PropertyAnimationComponent settings; [SerializeField] bool relative; - readonly Action revertAction; TValue startValue; - public PropertyAnimationComponent() - { - revertAction = Revert; - } - - protected void Revert() + public sealed override void Revert() { if (target == null) return; SetValue(target, startValue); @@ -45,7 +39,6 @@ public override MotionHandle Play() if (relative) { handle = LMotion.Create(settings) - .WithOnCancel(revertAction) .Bind(this, (x, state) => { state.SetValue(target, state.GetRelativeValue(state.startValue, x)); @@ -54,7 +47,6 @@ public override MotionHandle Play() else { handle = LMotion.Create(settings) - .WithOnCancel(revertAction) .Bind(this, (x, state) => { state.SetValue(target, x); From 5b227b3707f815c2f427a1b825942c377fcbed7a Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 17:07:16 +0900 Subject: [PATCH 171/224] Add: onRevert --- .../Runtime/Components/ControlComponents.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs index 734d3a52..5aeb604d 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs @@ -25,14 +25,18 @@ public sealed class EventComponent : LitMotionAnimationComponent { [Space(5f)] [SerializeField] UnityEvent onPlay; + [SerializeField] UnityEvent onRevert; public override MotionHandle Play() { + onPlay.Invoke(); return LMotion.Create(0f, 1f, 0f) - .WithOnComplete(() => onPlay.Invoke()) .RunWithoutBinding(); } - public override void Revert() { } + public override void Revert() + { + onRevert.Invoke(); + } } } \ No newline at end of file From 41639c136da0a0f66d1431e0e4778b509c9a86e9 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 17:23:49 +0900 Subject: [PATCH 172/224] Add: TextMeshPro components --- .../Components/TextMeshProComponents.cs | 87 +++++++++++++++++++ .../Components/TextMeshProComponents.cs.meta | 2 + .../Runtime/LitMotion.Animation.asmdef | 13 ++- 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TextMeshProComponents.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TextMeshProComponents.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TextMeshProComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TextMeshProComponents.cs new file mode 100644 index 00000000..9da1e06d --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TextMeshProComponents.cs @@ -0,0 +1,87 @@ +#if LITMOTION_ANIMATION_TMP + +using System; +using TMPro; +using Unity.Collections; +using UnityEngine; + +namespace LitMotion.Animation.Components +{ + [Serializable] + [LitMotionAnimationComponentMenu("UI/TextMesh Pro/Text")] + public sealed class TMPTextAnimation : FixedString512BytesPropertyAnimationComponent + { + protected override FixedString512Bytes GetValue(TMP_Text target) + { + return target.text; + } + + protected override void SetValue(TMP_Text target, in FixedString512Bytes value) + { + target.text = value.ToString(); + } + } + + [Serializable] + [LitMotionAnimationComponentMenu("UI/TextMesh Pro/Character Spacing")] + public sealed class TMPTextCharacterSpacingAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(TMP_Text target) => target.characterSpacing; + protected override void SetValue(TMP_Text target, in float value) => target.characterSpacing = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("UI/TextMesh Pro/Word Spacing")] + public sealed class TMPTextWordSpacingAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(TMP_Text target) => target.wordSpacing; + protected override void SetValue(TMP_Text target, in float value) => target.wordSpacing = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("UI/TextMesh Pro/Line Spacing")] + public sealed class TMPTextLineSpacingAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(TMP_Text target) => target.lineSpacing; + protected override void SetValue(TMP_Text target, in float value) => target.lineSpacing = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("UI/TextMesh Pro/Paragraph Spacing")] + public sealed class TMPTextParagraphSpacingAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(TMP_Text target) => target.paragraphSpacing; + protected override void SetValue(TMP_Text target, in float value) => target.paragraphSpacing = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("UI/TextMesh Pro/Font Size")] + public sealed class TMPTextFontSizeAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(TMP_Text target) => target.fontSize; + protected override void SetValue(TMP_Text target, in float value) => target.fontSize = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("UI/TextMesh Pro/Color")] + public sealed class TMPTextColorAnimation : ColorPropertyAnimationComponent + { + protected override Color GetValue(TMP_Text target) => target.color; + protected override void SetValue(TMP_Text target, in Color value) => target.color = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("UI/TextMesh Pro/Color (Alpha)")] + public sealed class TMPTextColorAlphaAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(TMP_Text target) => target.color.a; + protected override void SetValue(TMP_Text target, in float value) + { + var c = target.color; + c.a = value; + target.color = c; + } + } +} + +#endif \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TextMeshProComponents.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TextMeshProComponents.cs.meta new file mode 100644 index 00000000..b6fbaecc --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TextMeshProComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1586fcd6a5d4d45d0ad978796307757f \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef index d925aadb..2cace5c5 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef @@ -6,7 +6,8 @@ "GUID:3b570a5146f9d4f0fa107ed4559471a3", "GUID:3aa1866a824b5472da50fe142777d95f", "GUID:2bafac87e7f4b9b418d9448d219b01ab", - "GUID:df380645f10b7bc4b97d4f5eb6303d95" + "GUID:df380645f10b7bc4b97d4f5eb6303d95", + "GUID:6055be8ebefd69e48b49212b09b47b2f" ], "includePlatforms": [], "excludePlatforms": [], @@ -21,6 +22,16 @@ "expression": "", "define": "LITMOTION_ANIMATION_UGUI" }, + { + "name": "com.unity.textmeshpro", + "expression": "", + "define": "LITMOTION_ANIMATION_TMP" + }, + { + "name": "com.unity.ugui", + "expression": "2.0.0", + "define": "LITMOTION_ANIMATION_TMP" + }, { "name": "com.unity.render-pipelines.core", "expression": "", From c0baf8582daf63eada253cd60cef3187b4d89959 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 17:34:23 +0900 Subject: [PATCH 173/224] Fix: TMP_Text icon --- .../Editor/LitMotionAnimationEditor.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 43916460..24ce7775 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -271,7 +271,17 @@ AnimationComponentView CreateComponentGUI(SerializedProperty property) var targetProperty = property.FindPropertyRelative("target"); if (targetProperty != null) { - view.Icon = AssetPreview.GetMiniTypeThumbnail(targetProperty.GetPropertyType()); + var type = targetProperty.GetPropertyType(); + + // HACK: AssetPreview.GetMiniTypeThumbnail doesn't work for TMP_Text, so set it separately. + if (type.FullName == "TMPro.TMP_Text") + { + view.Icon = AssetDatabase.LoadAssetAtPath("Packages/com.unity.ugui/Editor Resources/Gizmos/TMP - Text Component Icon.psd"); + } + else + { + view.Icon = AssetPreview.GetMiniTypeThumbnail(type); + } } view.TrackPropertyValue(property.FindPropertyRelative("displayName"), x => From 8e39c8b7c6aad5426a0ba433dcd4ea9426450179 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 17:37:41 +0900 Subject: [PATCH 174/224] Change: add component menu name --- .../Runtime/Components/AudioComponents.cs | 4 ++-- .../Components/RectTransformComponents.cs | 4 ++-- .../Runtime/Components/RendererComponents.cs | 12 ++++++------ .../Runtime/Components/UGUIComponents.cs | 18 +++++++++--------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs index c609b22a..9ad09672 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/AudioComponents.cs @@ -6,7 +6,7 @@ namespace LitMotion.Animation.Components { [Serializable] - [LitMotionAnimationComponentMenu("Audio/Audio Source Volume")] + [LitMotionAnimationComponentMenu("Audio/Audio Source/Volume")] public sealed class AudioSourceVolumeAnimation : FloatPropertyAnimationComponent { protected override float GetValue(AudioSource target) => target.volume; @@ -14,7 +14,7 @@ public sealed class AudioSourceVolumeAnimation : FloatPropertyAnimationComponent } [Serializable] - [LitMotionAnimationComponentMenu("Audio/Audio Source Pitch")] + [LitMotionAnimationComponentMenu("Audio/Audio Source/Pitch")] public sealed class AudioSourcePitchAnimation : FloatPropertyAnimationComponent { protected override float GetValue(AudioSource target) => target.pitch; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs index e5d33776..d42e3743 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RectTransformComponents.cs @@ -3,7 +3,7 @@ using UnityEngine; [Serializable] -[LitMotionAnimationComponentMenu("UI/Rect Transform Size Delta")] +[LitMotionAnimationComponentMenu("UI/Rect Transform/Size Delta")] public sealed class RectTransformSizeDeltaAnimation : Vector2PropertyAnimationComponent { protected override Vector2 GetValue(RectTransform target) => target.sizeDelta; @@ -11,7 +11,7 @@ public sealed class RectTransformSizeDeltaAnimation : Vector2PropertyAnimationCo } [Serializable] -[LitMotionAnimationComponentMenu("UI/Rect Transform Pivot")] +[LitMotionAnimationComponentMenu("UI/Rect Transform/Pivot")] public sealed class RectTransformPivotAnimation : Vector2PropertyAnimationComponent { protected override Vector2 GetValue(RectTransform target) => target.pivot; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs index 3a42ffc0..a5a112c7 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RendererComponents.cs @@ -7,7 +7,7 @@ namespace LitMotion.Animation.Components { [Serializable] - [LitMotionAnimationComponentMenu("Rendering/Material Property (Float)")] + [LitMotionAnimationComponentMenu("Rendering/Material/Property (Float)")] public sealed class MaterialFloatAnimation : FloatPropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -24,7 +24,7 @@ protected override void SetValue(Material target, in float value) } [Serializable] - [LitMotionAnimationComponentMenu("Rendering/Material Property (Int)")] + [LitMotionAnimationComponentMenu("Rendering/Material/Property (Int)")] public sealed class MaterialIntAnimation : IntPropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -41,7 +41,7 @@ protected override void SetValue(Material target, in int value) } [Serializable] - [LitMotionAnimationComponentMenu("Rendering/Material Property (Vector)")] + [LitMotionAnimationComponentMenu("Rendering/Material/Property (Vector)")] public sealed class MaterialVectorAnimation : Vector4PropertyAnimationComponent { [SerializeField] string propertyName = ""; @@ -58,7 +58,7 @@ protected override void SetValue(Material target, in Vector4 value) } [Serializable] - [LitMotionAnimationComponentMenu("Rendering/Material Property (Color)")] + [LitMotionAnimationComponentMenu("Rendering/Material/Property (Color)")] public sealed class MaterialColorAnimation : ColorPropertyAnimationComponent { [SerializeField] string propertyName = "_Color"; @@ -75,7 +75,7 @@ protected override void SetValue(Material target, in Color value) } [Serializable] - [LitMotionAnimationComponentMenu("Rendering/Sprite Renderer Color")] + [LitMotionAnimationComponentMenu("Rendering/Sprite Renderer/Color")] public sealed class SpriteRendererColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(SpriteRenderer target) @@ -92,7 +92,7 @@ protected override void SetValue(SpriteRenderer target, in Color value) #if LITMOTION_ANIMATION_RENDER_PIPELINES [Serializable] - [LitMotionAnimationComponentMenu("Rendering/Volume Weight")] + [LitMotionAnimationComponentMenu("Rendering/Volume/Weight")] public sealed class VolumeWeightAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Volume target) => target.weight; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs index 209c6a59..118dfcbb 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/UGUIComponents.cs @@ -8,7 +8,7 @@ namespace LitMotion.Animation.Components { [Serializable] - [LitMotionAnimationComponentMenu("UI/Text")] + [LitMotionAnimationComponentMenu("UI/Text/Text")] public sealed class TextAnimation : FixedString512BytesPropertyAnimationComponent { protected override FixedString512Bytes GetValue(Text target) => target.text; @@ -16,7 +16,7 @@ public sealed class TextAnimation : FixedString512BytesPropertyAnimationComponen } [Serializable] - [LitMotionAnimationComponentMenu("UI/Text Color")] + [LitMotionAnimationComponentMenu("UI/Text/Color")] public sealed class TextColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(Text target) => target.color; @@ -24,7 +24,7 @@ public sealed class TextColorAnimation : ColorPropertyAnimationComponent } [Serializable] - [LitMotionAnimationComponentMenu("UI/Text Font Size")] + [LitMotionAnimationComponentMenu("UI/Text/Font Size")] public sealed class TextFontSizeAnimation : IntPropertyAnimationComponent { protected override int GetValue(Text target) => target.fontSize; @@ -32,7 +32,7 @@ public sealed class TextFontSizeAnimation : IntPropertyAnimationComponent } [Serializable] - [LitMotionAnimationComponentMenu("UI/Graphic Color")] + [LitMotionAnimationComponentMenu("UI/Graphic/Color")] public sealed class GraphicColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(Graphic target) => target.color; @@ -40,7 +40,7 @@ public sealed class GraphicColorAnimation : ColorPropertyAnimationComponent { protected override Color GetValue(Image target) => target.color; @@ -48,7 +48,7 @@ public sealed class ImageColorAnimation : ColorPropertyAnimationComponent } [Serializable] - [LitMotionAnimationComponentMenu("UI/Image Color (Alpha)")] + [LitMotionAnimationComponentMenu("UI/Image/Color (Alpha)")] public sealed class ImageColorAlphaAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Image target) => target.color.a; @@ -61,7 +61,7 @@ protected override void SetValue(Image target, in float value) } [Serializable] - [LitMotionAnimationComponentMenu("UI/Image Fill Amount")] + [LitMotionAnimationComponentMenu("UI/Image/Fill Amount")] public sealed class ImageFillAmountAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Image target) => target.fillAmount; @@ -69,7 +69,7 @@ public sealed class ImageFillAmountAnimation : FloatPropertyAnimationComponent { protected override float GetValue(Slider target) => target.value; @@ -77,7 +77,7 @@ public sealed class SliderValueAnimation : FloatPropertyAnimationComponent { protected override float GetValue(CanvasGroup target) => target.alpha; From 92ca572ff5c79babf592edfed178eae8f55ed767 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 17:49:29 +0900 Subject: [PATCH 175/224] Add: camera components --- .../Runtime/Components/CameraComponents.cs | 69 +++++++++++++++++++ .../Components/CameraComponents.cs.meta | 2 + .../Runtime/PropertyAnimationComponent.cs | 9 +++ 3 files changed, 80 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/CameraComponents.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/CameraComponents.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/CameraComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/CameraComponents.cs new file mode 100644 index 00000000..d6beac57 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/CameraComponents.cs @@ -0,0 +1,69 @@ +using System; +using UnityEngine; + +namespace LitMotion.Animation.Components +{ + [Serializable] + [LitMotionAnimationComponentMenu("Camera/Aspect")] + public sealed class CameraAspectAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(Camera target) => target.aspect; + protected override void SetValue(Camera target, in float value) => target.aspect = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("Camera/Near Clip Plane")] + public sealed class CameraNearClipPlaneAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(Camera target) => target.nearClipPlane; + protected override void SetValue(Camera target, in float value) => target.nearClipPlane = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("Camera/Far Clip Plane")] + public sealed class CameraFarClipPlaneAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(Camera target) => target.farClipPlane; + protected override void SetValue(Camera target, in float value) => target.farClipPlane = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("Camera/Field Of View")] + public sealed class CameraFieldOfViewAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(Camera target) => target.fieldOfView; + protected override void SetValue(Camera target, in float value) => target.fieldOfView = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("Camera/Orthographic Size")] + public sealed class CameraOrthographicSizeAnimation : FloatPropertyAnimationComponent + { + protected override float GetValue(Camera target) => target.orthographicSize; + protected override void SetValue(Camera target, in float value) => target.orthographicSize = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("Camera/Rect")] + public sealed class CameraRectAnimation : RectPropertyAnimationComponent + { + protected override Rect GetValue(Camera target) => target.rect; + protected override void SetValue(Camera target, in Rect value) => target.rect = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("Camera/Pixel Rect")] + public sealed class CameraPixelRectAnimation : RectPropertyAnimationComponent + { + protected override Rect GetValue(Camera target) => target.pixelRect; + protected override void SetValue(Camera target, in Rect value) => target.pixelRect = value; + } + + [Serializable] + [LitMotionAnimationComponentMenu("Camera/Background Color")] + public sealed class CameraBackgroundColorAnimation : ColorPropertyAnimationComponent + { + protected override Color GetValue(Camera target) => target.backgroundColor; + protected override void SetValue(Camera target, in Color value) => target.backgroundColor = value; + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/CameraComponents.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/CameraComponents.cs.meta new file mode 100644 index 00000000..7ff0b05a --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/CameraComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0d487c8e5826c4354a2bbaa84871c2ff \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs index d673ca48..8f5fc400 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs @@ -137,6 +137,15 @@ protected sealed override Color GetRelativeValue(in Color startValue, in Color r } } + public abstract class RectPropertyAnimationComponent : PropertyAnimationComponent + where TObject : UnityEngine.Object + { + protected sealed override Rect GetRelativeValue(in Rect startValue, in Rect relativeValue) + { + return new Rect(startValue.position + relativeValue.position, startValue.size + relativeValue.size); + } + } + public abstract class FixedString512BytesPropertyAnimationComponent : PropertyAnimationComponent where TObject : UnityEngine.Object { From 2cab538987999e1d4531357cbbece9c61a940f7a Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 18:12:39 +0900 Subject: [PATCH 176/224] Improve: add icon to dropdown item --- .../Editor/AddAnimationComponentDropdown.cs | 20 +++++++++++++++-- .../LitMotion.Animation/Editor/GUIHelper.cs | 22 +++++++++++++++++++ .../Editor/GUIHelper.cs.meta | 2 ++ .../Editor/LitMotionAnimationEditor.cs | 12 +--------- 4 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/GUIHelper.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/GUIHelper.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs index 048b7eb3..7f814d18 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AddAnimationComponentDropdown.cs @@ -3,6 +3,7 @@ using System.Reflection; using UnityEditor; using UnityEditor.IMGUI.Controls; +using UnityEngine; namespace LitMotion.Animation.Editor { @@ -49,10 +50,11 @@ protected override AdvancedDropdownItem BuildRoot() var parent = root; Item lastItem = null; - foreach (var str in splitStrings) + for (int i = 0; i < splitStrings.Length; i++) { - var foundChildItem = parent.children.FirstOrDefault(item => item.name == str); + var str = splitStrings[i]; + var foundChildItem = parent.children.FirstOrDefault(item => item.name == str); if (foundChildItem != null) { parent = foundChildItem; @@ -61,6 +63,20 @@ protected override AdvancedDropdownItem BuildRoot() } var child = new Item(type, str); + + if (i == splitStrings.Length - 1) + { + var targetField = ReflectionHelper.GetField(type, "target", includingBaseNonPublic: true); + if (targetField != null) + { + child.icon = GUIHelper.GetComponentIcon(targetField.FieldType); + } + else + { + child.icon = (Texture2D)EditorGUIUtility.IconContent("ScriptableObject Icon").image; + } + } + parent.AddChild(child); parent = child; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/GUIHelper.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/GUIHelper.cs new file mode 100644 index 00000000..60f19188 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/GUIHelper.cs @@ -0,0 +1,22 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace LitMotion.Animation.Editor +{ + internal static class GUIHelper + { + public static Texture2D GetComponentIcon(Type type) + { + // HACK: AssetPreview.GetMiniTypeThumbnail doesn't work for TMP_Text, so set it separately. + if (type.FullName == "TMPro.TMP_Text") + { + return AssetDatabase.LoadAssetAtPath("Packages/com.unity.ugui/Editor Resources/Gizmos/TMP - Text Component Icon.psd"); + } + else + { + return AssetPreview.GetMiniTypeThumbnail(type); + } + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/GUIHelper.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor/GUIHelper.cs.meta new file mode 100644 index 00000000..e5fdc140 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/GUIHelper.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 186cf28837e5e4a389333b816370d1b9 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 24ce7775..6fdf3684 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -271,17 +271,7 @@ AnimationComponentView CreateComponentGUI(SerializedProperty property) var targetProperty = property.FindPropertyRelative("target"); if (targetProperty != null) { - var type = targetProperty.GetPropertyType(); - - // HACK: AssetPreview.GetMiniTypeThumbnail doesn't work for TMP_Text, so set it separately. - if (type.FullName == "TMPro.TMP_Text") - { - view.Icon = AssetDatabase.LoadAssetAtPath("Packages/com.unity.ugui/Editor Resources/Gizmos/TMP - Text Component Icon.psd"); - } - else - { - view.Icon = AssetPreview.GetMiniTypeThumbnail(type); - } + view.Icon = GUIHelper.GetComponentIcon(targetProperty.GetPropertyType()); } view.TrackPropertyValue(property.FindPropertyRelative("displayName"), x => From 73f872f9cb047419f5c77175e0e592033a22f26b Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 18:19:08 +0900 Subject: [PATCH 177/224] Add: Rigidbody / Rigidbody2D components --- .../Components/Rigidbody2DComponents.cs | 80 +++++++++++++++++++ .../Components/Rigidbody2DComponents.cs.meta | 2 + .../Runtime/Components/RigidbodyComponents.cs | 80 +++++++++++++++++++ .../Components/RigidbodyComponents.cs.meta | 2 + .../Runtime/LitMotion.Animation.asmdef | 10 +++ 5 files changed, 174 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rigidbody2DComponents.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rigidbody2DComponents.cs.meta create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RigidbodyComponents.cs create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RigidbodyComponents.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rigidbody2DComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rigidbody2DComponents.cs new file mode 100644 index 00000000..1e22eb65 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rigidbody2DComponents.cs @@ -0,0 +1,80 @@ +#if LITMOTION_ANIMATION_PHYSICS_2D + +using System; +using LitMotion.Adapters; +using UnityEngine; + +namespace LitMotion.Animation.Components +{ + public abstract class Rigidbody2DPositionAnimationBase : PropertyAnimationComponent + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + [SerializeField] bool useMovePosition = true; + + protected override Vector2 GetValue(Rigidbody2D target) + { + return target.position; + } + + protected override void SetValue(Rigidbody2D target, in Vector2 value) + { + if (useMovePosition) target.MovePosition(value); + else target.position = value; + } + + protected override Vector2 GetRelativeValue(in Vector2 startValue, in Vector2 relativeValue) + { + return startValue + relativeValue; + } + } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody2D/Position")] + public sealed class Rigidbody2DPositionAnimation : Rigidbody2DPositionAnimationBase { } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody2D/Position (Punch)")] + public sealed class Rigidbody2DPositionPunchAnimation : Rigidbody2DPositionAnimationBase { } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody2D/Position (Shake)")] + public sealed class Rigidbody2DPositionShakeAnimation : Rigidbody2DPositionAnimationBase { } + + public abstract class Rigidbody2DRotationAnimationBase : PropertyAnimationComponent + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + [SerializeField] bool useMoveRotation; + + protected override float GetValue(Rigidbody2D target) + { + return target.rotation; + } + + protected override void SetValue(Rigidbody2D target, in float value) + { + if (useMoveRotation) target.MoveRotation(value); + else target.rotation = value; + } + + protected override float GetRelativeValue(in float startValue, in float relativeValue) + { + return startValue + relativeValue; + } + } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody2D/Rotation")] + public sealed class Rigidbody2DRotationAnimation : Rigidbody2DRotationAnimationBase { } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody2D/Rotation (Punch)")] + public sealed class Rigidbody2DRotationPunchAnimation : Rigidbody2DRotationAnimationBase { } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody2D/Rotation (Shake)")] + public sealed class Rigidbody2DRotationShakeAnimation : Rigidbody2DRotationAnimationBase { } +} + +#endif \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rigidbody2DComponents.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rigidbody2DComponents.cs.meta new file mode 100644 index 00000000..21949fe4 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/Rigidbody2DComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5e15686d2c4d44dfea14238fb89dd547 \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RigidbodyComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RigidbodyComponents.cs new file mode 100644 index 00000000..fb6c12be --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RigidbodyComponents.cs @@ -0,0 +1,80 @@ +#if LITMOTION_ANIMATION_PHYSICS + +using System; +using LitMotion.Adapters; +using UnityEngine; + +namespace LitMotion.Animation.Components +{ + public abstract class RigidbodyPositionAnimationBase : PropertyAnimationComponent + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + [SerializeField] bool useMovePosition = true; + + protected override Vector3 GetValue(Rigidbody target) + { + return target.position; + } + + protected override void SetValue(Rigidbody target, in Vector3 value) + { + if (useMovePosition) target.MovePosition(value); + else target.position = value; + } + + protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 relativeValue) + { + return startValue + relativeValue; + } + } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody/Position")] + public sealed class RigidbodyPositionAnimation : RigidbodyPositionAnimationBase { } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody/Position (Punch)")] + public sealed class RigidbodyPositionPunchAnimation : RigidbodyPositionAnimationBase { } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody/Position (Shake)")] + public sealed class RigidbodyPositionShakeAnimation : RigidbodyPositionAnimationBase { } + + public abstract class RigidbodyRotationAnimationBase : PropertyAnimationComponent + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + [SerializeField] bool useMoveRotation; + + protected override Vector3 GetValue(Rigidbody target) + { + return target.rotation.eulerAngles; + } + + protected override void SetValue(Rigidbody target, in Vector3 value) + { + if (useMoveRotation) target.MoveRotation(Quaternion.Euler(value)); + else target.rotation = Quaternion.Euler(value); + } + + protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 relativeValue) + { + return startValue + relativeValue; + } + } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody/Rotation")] + public sealed class RigidbodyRotationAnimation : RigidbodyRotationAnimationBase { } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody/Rotation (Punch)")] + public sealed class RigidbodyRotationPunchAnimation : RigidbodyRotationAnimationBase { } + + [Serializable] + [LitMotionAnimationComponentMenu("Rigidbody/Rotation (Shake)")] + public sealed class RigidbodyRotationShakeAnimation : RigidbodyRotationAnimationBase { } +} + +#endif \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RigidbodyComponents.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RigidbodyComponents.cs.meta new file mode 100644 index 00000000..e90d8238 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/RigidbodyComponents.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 72e92ee03e8534d61a3c826889c5de4b \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef index 2cace5c5..9354bbef 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef @@ -41,6 +41,16 @@ "name": "com.unity.modules.audio", "expression": "", "define": "LITMOTION_ANIMATION_UNITY_AUDIO" + }, + { + "name": "com.unity.modules.physics", + "expression": "", + "define": "LITMOTION_ANIMATION_PHYSICS" + }, + { + "name": "com.unity.modules.physics2d", + "expression": "", + "define": "LITMOTION_ANIMATION_PHYSICS_2D" } ], "noEngineReferences": false From 3700007f826fed83f9afe6be2a226c61b4d7e977 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 18:20:15 +0900 Subject: [PATCH 178/224] Change: rename transform components --- .../Runtime/Components/TransformComponents.cs | 24 +++++++++---------- .../Runtime/LitMotionAnimation.cs | 6 +---- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs index 8858df85..4e4c64fa 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/TransformComponents.cs @@ -5,7 +5,7 @@ namespace LitMotion.Animation.Components { - public abstract class PositionAnimationBase : PropertyAnimationComponent + public abstract class TransformPositionAnimationBase : PropertyAnimationComponent where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { @@ -30,17 +30,17 @@ protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 re [Serializable] [LitMotionAnimationComponentMenu("Transform/Position")] - public sealed class PositionAnimation : PositionAnimationBase { } + public sealed class TransformPositionAnimation : TransformPositionAnimationBase { } [Serializable] [LitMotionAnimationComponentMenu("Transform/Position (Punch)")] - public sealed class PositionPunchAnimation : PositionAnimationBase { } + public sealed class TransformPositionPunchAnimation : TransformPositionAnimationBase { } [Serializable] [LitMotionAnimationComponentMenu("Transform/Position (Shake)")] - public sealed class PositionShakeAnimation : PositionAnimationBase { } + public sealed class TransformPositionShakeAnimation : TransformPositionAnimationBase { } - public abstract class RotationAnimationBase : PropertyAnimationComponent + public abstract class TransformRotationAnimationBase : PropertyAnimationComponent where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { @@ -65,17 +65,17 @@ protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 re [Serializable] [LitMotionAnimationComponentMenu("Transform/Rotation")] - public sealed class RotationAnimation : RotationAnimationBase { } + public sealed class TransformRotationAnimation : TransformRotationAnimationBase { } [Serializable] [LitMotionAnimationComponentMenu("Transform/Rotation (Punch)")] - public sealed class RotationPunchAnimation : RotationAnimationBase { } + public sealed class TransformRotationPunchAnimation : TransformRotationAnimationBase { } [Serializable] [LitMotionAnimationComponentMenu("Transform/Rotation (Shake)")] - public sealed class RotationShakeAnimation : RotationAnimationBase { } + public sealed class TransformRotationShakeAnimation : TransformRotationAnimationBase { } - public abstract class ScaleAnimationBase : PropertyAnimationComponent + public abstract class TransformScaleAnimationBase : PropertyAnimationComponent where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { @@ -97,13 +97,13 @@ protected override Vector3 GetRelativeValue(in Vector3 startValue, in Vector3 re [Serializable] [LitMotionAnimationComponentMenu("Transform/Scale")] - public sealed class ScaleAnimation : ScaleAnimationBase { } + public sealed class TransformScaleAnimation : TransformScaleAnimationBase { } [Serializable] [LitMotionAnimationComponentMenu("Transform/Scale (Punch)")] - public sealed class ScalePunchAnimation : ScaleAnimationBase { } + public sealed class TransformScalePunchAnimation : TransformScaleAnimationBase { } [Serializable] [LitMotionAnimationComponentMenu("Transform/Scale (Shake)")] - public sealed class ScaleShakeAnimation : ScaleAnimationBase { } + public sealed class TransformScaleShakeAnimation : TransformScaleAnimationBase { } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index f774e898..14972a7c 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -19,11 +19,7 @@ enum AnimationMode [SerializeField] AnimationMode animationMode; [SerializeReference] - LitMotionAnimationComponent[] components = new LitMotionAnimationComponent[] - { - new PositionAnimation(), - new PositionAnimation(), - }; + LitMotionAnimationComponent[] components; Queue queue = new(); FastListCore playingComponents; From 00037226662f2e431c166893c8ce207c2ae963d3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 18:20:42 +0900 Subject: [PATCH 179/224] Change: default playOnAwake value to true --- .../Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 14972a7c..4403356f 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -15,7 +15,7 @@ enum AnimationMode Sequential } - [SerializeField] bool playOnAwake; + [SerializeField] bool playOnAwake = true; [SerializeField] AnimationMode animationMode; [SerializeReference] From b955680ed39c58cb636f2996f7f90143828f637b Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 18:22:15 +0900 Subject: [PATCH 180/224] Fix: index out of range error --- .../LitMotion.Animation/Editor/LitMotionAnimationEditor.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 6fdf3684..38ff7de0 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -152,6 +152,12 @@ VisualElement CreateComponentsPanel() var components = ((LitMotionAnimation)target).Components; for (int i = 0; i < views.Count; i++) { + if (components.Count <= i) + { + views[i].Progress = 0f; + continue; + } + var component = components[i]; if (component == null) { From e2e0bd1e4ff0e45763328fa27122aa0358753801 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 18:31:06 +0900 Subject: [PATCH 181/224] Add: error handling --- .../Runtime/LitMotionAnimation.cs | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 4403356f..15ab0a04 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -35,10 +35,17 @@ void MoveNextMotion() { if (queue.TryDequeue(out var queuedComponent)) { - var handle = queuedComponent.Play().Preserve(); - MotionManager.GetManagedDataRef(handle, MotionStoragePermission.Admin).OnCompleteAction += MoveNextMotion; - queuedComponent.TrackedHandle = handle; - playingComponents.Add(queuedComponent); + try + { + var handle = queuedComponent.Play().Preserve(); + MotionManager.GetManagedDataRef(handle, MotionStoragePermission.Admin).OnCompleteAction += MoveNextMotion; + queuedComponent.TrackedHandle = handle; + playingComponents.Add(queuedComponent); + } + catch (Exception ex) + { + Debug.LogException(ex); + } } } @@ -78,9 +85,16 @@ public void Play() if (component == null) continue; if (!component.Enabled) continue; - var handle = component.Play().Preserve(); - component.TrackedHandle = handle; - playingComponents.Add(component); + try + { + var handle = component.Play().Preserve(); + component.TrackedHandle = handle; + playingComponents.Add(component); + } + catch (Exception ex) + { + Debug.LogException(ex); + } } break; } From b95b9b28706d8206bc1130d1b4feac9c505d4e8f Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 18:31:14 +0900 Subject: [PATCH 182/224] Add: icon --- .../Editor/LitMotionAnimationIcon.png | Bin 0 -> 4846 bytes .../Editor/LitMotionAnimationIcon.png.meta | 169 ++++++++++++++++++ .../Runtime/LitMotionAnimation.cs.meta | 11 +- 3 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationIcon.png create mode 100644 src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationIcon.png.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationIcon.png b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..46c1a6bd5d2ceac87a1e6298230a4b0dc6f4e299 GIT binary patch literal 4846 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 literal 0 HcmV?d00001 diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationIcon.png.meta b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationIcon.png.meta new file mode 100644 index 00000000..3b9295c4 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationIcon.png.meta @@ -0,0 +1,169 @@ +fileFormatVersion: 2 +guid: b2c1a8aea2b044a79ba0e6251fa50d6a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Win64 + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs.meta b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs.meta index 2f1eacfd..48cbde76 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs.meta +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs.meta @@ -1,2 +1,11 @@ fileFormatVersion: 2 -guid: 9cc6819e64e4c44beb63ea2ef45e1a6d \ No newline at end of file +guid: 9cc6819e64e4c44beb63ea2ef45e1a6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: b2c1a8aea2b044a79ba0e6251fa50d6a, type: 3} + userData: + assetBundleName: + assetBundleVariant: From 6ca4ae122e7954638896d880402615f2ca34dc5f Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 18:53:25 +0900 Subject: [PATCH 183/224] Remove: unnecessary reference --- .../LitMotion.Animation/Runtime/LitMotion.Animation.asmdef | 1 - 1 file changed, 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef index 9354bbef..4e874599 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotion.Animation.asmdef @@ -4,7 +4,6 @@ "references": [ "GUID:e0cd26848372d4e5c891c569017e11f1", "GUID:3b570a5146f9d4f0fa107ed4559471a3", - "GUID:3aa1866a824b5472da50fe142777d95f", "GUID:2bafac87e7f4b9b418d9448d219b01ab", "GUID:df380645f10b7bc4b97d4f5eb6303d95", "GUID:6055be8ebefd69e48b49212b09b47b2f" From 96e5c2c41b232ffb94bae07f1acb67abe1fdee86 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sun, 15 Dec 2024 18:54:17 +0900 Subject: [PATCH 184/224] Add: keyword --- src/LitMotion/Assets/LitMotion.Animation/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/package.json b/src/LitMotion/Assets/LitMotion.Animation/package.json index 5c19c1ac..bb1ed647 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/package.json +++ b/src/LitMotion/Assets/LitMotion.Animation/package.json @@ -5,7 +5,8 @@ "description": "Animation component (visual editor) for LitMotion", "keywords": [ "dots", - "tween" + "tween", + "animation" ], "dependencies": { "com.annulusgames.lit-motion": "2.0.0" From a6af89ff5d933e85e54ce3422ad564d6167c35ba Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 11:00:12 +0900 Subject: [PATCH 185/224] Refactoring --- .../Runtime/LitMotionAnimation.cs | 2 +- .../LitMotion/Editor/MotionDebuggerWindow.cs | 44 ++-- .../LitMotion/Runtime/Internal/MotionData.cs | 215 ++++++++++++++++-- .../Runtime/Internal/MotionHelper.cs | 173 -------------- .../Runtime/Internal/MotionHelper.cs.meta | 2 - .../Runtime/Internal/MotionManager.cs | 28 +-- .../Runtime/Internal/MotionStorage.cs | 212 ++++++++--------- .../Tasks/MotionConfiguredSourceBase.cs | 4 +- .../Runtime/Internal/UpdateRunner.cs | 13 +- .../Assets/LitMotion/Runtime/MotionAwaiter.cs | 2 +- .../LitMotion/Runtime/MotionDebugger.cs | 4 +- .../Assets/LitMotion/Runtime/MotionHandle.cs | 12 +- .../Runtime/MotionHandleExtensions.cs | 12 +- .../LitMotion/Runtime/MotionUpdateJob.cs | 22 +- .../Runtime/Sequences/MotionSequenceSource.cs | 8 +- 15 files changed, 364 insertions(+), 389 deletions(-) delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs.meta diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 15ab0a04..5f4e0599 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -38,7 +38,7 @@ void MoveNextMotion() try { var handle = queuedComponent.Play().Preserve(); - MotionManager.GetManagedDataRef(handle, MotionStoragePermission.Admin).OnCompleteAction += MoveNextMotion; + MotionManager.GetManagedDataRef(handle, false).OnCompleteAction += MoveNextMotion; queuedComponent.TrackedHandle = handle; playingComponents.Add(queuedComponent); } diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs index 4308256b..028f4269 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs @@ -123,7 +123,6 @@ void Update() } } - static GUIStyle detailsStyle; Vector2 detailsScroll; Vector2 stackTraceScroll; @@ -147,10 +146,13 @@ void RenderDetailsPanel() var selected = treeView.state.selectedIDs; if (selected.Count > 0 && treeView.CurrentBindingItems.FirstOrDefault(x => x.id == selected[0]) is MotionDebuggerViewItem item) { - ref var unmanagedData = ref MotionManager.GetDataRef(item.Handle, MotionStoragePermission.Admin); - ref var managedData = ref MotionManager.GetManagedDataRef(item.Handle, MotionStoragePermission.Admin); + ref var dataRef = ref MotionManager.GetDataRef(item.Handle, false); + ref var managedDataRef = ref MotionManager.GetManagedDataRef(item.Handle, false); var debugInfo = MotionManager.GetDebugInfo(item.Handle); + ref var state = ref dataRef.State; + ref var parameters = ref dataRef.Parameters; + using (new EditorGUILayout.VerticalScope(GUI.skin.box)) { EditorGUILayout.LabelField("Motion Handle", EditorStyles.boldLabel); @@ -174,27 +176,27 @@ void RenderDetailsPanel() GenericField("End Value", debugInfo.EndValue); EditorGUILayout.Space(4); - GenericField("Duration", unmanagedData.Duration); - GenericField("Delay", unmanagedData.Delay); - GenericField("Delay Type", unmanagedData.DelayType); - GenericField("Loops", unmanagedData.Loops); - GenericField("Loop Type", unmanagedData.LoopType); + GenericField("Duration", parameters.Duration); + GenericField("Delay", parameters.Delay); + GenericField("Delay Type", parameters.DelayType); + GenericField("Loops", parameters.Loops); + GenericField("Loop Type", parameters.LoopType); EditorGUILayout.Space(4); - GenericField("Ease", unmanagedData.Ease); - if (unmanagedData.Ease is Ease.CustomAnimationCurve) + GenericField("Ease", parameters.Ease); + if (parameters.Ease is Ease.CustomAnimationCurve) { - GenericField("Custom Ease Curve", unmanagedData.AnimationCurve); + GenericField("Custom Ease Curve", parameters.AnimationCurve); } EditorGUILayout.Space(4); - GenericField("Cancel On Error", managedData.CancelOnError); - GenericField("Skip Values During Delay", managedData.SkipValuesDuringDelay); + GenericField("Cancel On Error", managedDataRef.CancelOnError); + GenericField("Skip Values During Delay", managedDataRef.SkipValuesDuringDelay); EditorGUILayout.Space(4); - GenericField("State[0]", managedData.State0); - GenericField("State[1]", managedData.State1); - GenericField("State[2]", managedData.State2); + GenericField("State[0]", managedDataRef.State0); + GenericField("State[1]", managedDataRef.State1); + GenericField("State[2]", managedDataRef.State2); } using (new EditorGUILayout.VerticalScope(GUI.skin.box)) @@ -202,12 +204,12 @@ void RenderDetailsPanel() EditorGUILayout.LabelField("Status", EditorStyles.boldLabel); EditorGUILayout.Space(1); - EditorGUILayout.LabelField("Status", unmanagedData.Status.ToString()); - GenericField("Time", unmanagedData.Time); - GenericField("Completed Loops", unmanagedData.ComplpetedLoops); + EditorGUILayout.LabelField("Status", state.Status.ToString()); + GenericField("Time", state.Time); + GenericField("Completed Loops", state.ComplpetedLoops); EditorGUILayout.Space(4); - GenericField("Playback Speed", unmanagedData.PlaybackSpeed); - GenericField("Is Preserved", unmanagedData.IsPreserved); + GenericField("Playback Speed", state.PlaybackSpeed); + GenericField("Is Preserved", state.IsPreserved); } } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index 2595585e..d2f95b7b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -1,39 +1,194 @@ +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using LitMotion.Collections; +using Unity.Burst.CompilerServices; +using Unity.Mathematics; namespace LitMotion { [StructLayout(LayoutKind.Sequential)] - public struct MotionDataCore + public struct MotionData { - // state - public MotionStatus Status; - public MotionStatus PrevStatus; - public bool IsPreserved; - public bool IsInSequence; + public struct MotionState + { + public MotionStatus Status; + public MotionStatus PrevStatus; + public bool IsPreserved; + public bool IsInSequence; - public ushort ComplpetedLoops; - public ushort PrevCompletedLoops; + public ushort ComplpetedLoops; + public ushort PrevCompletedLoops; - public double Time; - public float PlaybackSpeed; + public double Time; + public float PlaybackSpeed; - // parameters - public float Duration; - public Ease Ease; + public readonly bool WasStatusChanged => Status != PrevStatus; + public readonly bool WasLoopCompleted => ComplpetedLoops > PrevCompletedLoops; + + } + + public struct MotionParameters + { + public float Duration; + public Ease Ease; #if LITMOTION_COLLECTIONS_2_0_OR_NEWER - public NativeAnimationCurve AnimationCurve; + public NativeAnimationCurve AnimationCurve; #else - public UnsafeAnimationCurve AnimationCurve; + public UnsafeAnimationCurve AnimationCurve; #endif - public MotionTimeKind TimeKind; - public float Delay; - public int Loops; - public DelayType DelayType; - public LoopType LoopType; - - public readonly bool WasStatusChanged => Status != PrevStatus; - public readonly bool WasLoopCompleted => ComplpetedLoops > PrevCompletedLoops; + public MotionTimeKind TimeKind; + public float Delay; + public int Loops; + public DelayType DelayType; + public LoopType LoopType; + + public readonly double TotalDuration + { + get + { + if (Loops < 0) return double.PositiveInfinity; + return Delay * (DelayType == DelayType.EveryLoop ? Loops : 1) + Duration * Loops; + } + } + } + + public MotionState State; + public MotionParameters Parameters; + + public readonly double TimeSinceStart => State.Time - Parameters.Delay; + + public void Update(double time, out float progress) + { + State.PrevCompletedLoops = State.ComplpetedLoops; + State.PrevStatus = State.Status; + + State.Time = time; + time = math.max(time, 0.0); + + double t; + bool isCompleted; + bool isDelayed; + int completedLoops; + int clampedCompletedLoops; + + if (Hint.Unlikely(Parameters.Duration <= 0f)) + { + if (Parameters.DelayType == DelayType.FirstLoop || Parameters.Delay == 0f) + { + isCompleted = Parameters.Loops >= 0 && TimeSinceStart > 0f; + if (isCompleted) + { + t = 1f; + completedLoops = Parameters.Loops; + } + else + { + t = 0f; + completedLoops = TimeSinceStart < 0f ? -1 : 0; + } + clampedCompletedLoops = GetClampedCompletedLoops(completedLoops); + isDelayed = TimeSinceStart < 0; + } + else + { + completedLoops = (int)math.floor(time / Parameters.Delay); + clampedCompletedLoops = GetClampedCompletedLoops(completedLoops); + isCompleted = Parameters.Loops >= 0 && clampedCompletedLoops > Parameters.Loops - 1; + isDelayed = !isCompleted; + t = isCompleted ? 1f : 0f; + } + } + else + { + if (Parameters.DelayType == DelayType.FirstLoop) + { + completedLoops = (int)math.floor(TimeSinceStart / Parameters.Duration); + clampedCompletedLoops = GetClampedCompletedLoops(completedLoops); + isCompleted = Parameters.Loops >= 0 && clampedCompletedLoops > Parameters.Loops - 1; + isDelayed = TimeSinceStart < 0f; + + if (isCompleted) + { + t = 1f; + } + else + { + var currentLoopTime = TimeSinceStart - Parameters.Duration * clampedCompletedLoops; + t = math.clamp(currentLoopTime / Parameters.Duration, 0f, 1f); + } + } + else + { + var currentLoopTime = math.fmod(time, Parameters.Duration + Parameters.Delay) - Parameters.Delay; + completedLoops = (int)math.floor(time / (Parameters.Duration + Parameters.Delay)); + clampedCompletedLoops = GetClampedCompletedLoops(completedLoops); + isCompleted = Parameters.Loops >= 0 && clampedCompletedLoops > Parameters.Loops - 1; + isDelayed = currentLoopTime < 0; + + if (isCompleted) + { + t = 1f; + } + else + { + t = math.clamp(currentLoopTime / Parameters.Duration, 0f, 1f); + } + } + } + + State.ComplpetedLoops = (ushort)clampedCompletedLoops; + + switch (Parameters.LoopType) + { + default: + case LoopType.Restart: + progress = GetEasedValue((float)t); + break; + case LoopType.Flip: + progress = GetEasedValue((float)t); + if ((clampedCompletedLoops + (int)t) % 2 == 1) progress = 1f - progress; + break; + case LoopType.Incremental: + progress = GetEasedValue(1f) * clampedCompletedLoops + GetEasedValue((float)math.fmod(t, 1f)); + break; + case LoopType.Yoyo: + progress = (clampedCompletedLoops + (int)t) % 2 == 1 + ? GetEasedValue((float)(1f - t)) + : GetEasedValue((float)t); + break; + } + + if (isCompleted) + { + State.Status = MotionStatus.Completed; + } + else if (isDelayed || State.Time < 0) + { + State.Status = MotionStatus.Delayed; + } + else + { + State.Status = MotionStatus.Playing; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + readonly int GetClampedCompletedLoops(int completedLoops) + { + return Parameters.Loops < 0 + ? math.max(0, completedLoops) + : math.clamp(completedLoops, 0, Parameters.Loops); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + readonly float GetEasedValue(float value) + { + return Parameters.Ease switch + { + Ease.CustomAnimationCurve => Parameters.AnimationCurve.Evaluate(value), + _ => EaseUtility.Evaluate(value, Parameters.Ease) + }; + } } /// @@ -47,10 +202,22 @@ public struct MotionData where TOptions : unmanaged, IMotionOptions { // Because of pointer casting, this field must always be placed at the beginning. - public MotionDataCore Core; + public MotionData Core; public TValue StartValue; public TValue EndValue; public TOptions Options; + + public void Update(double time, out TValue result) + where TAdapter : unmanaged, IMotionAdapter + { + Core.Update(time, out var progress); + + result = default(TAdapter).Evaluate(ref StartValue, ref EndValue, ref Options, new MotionEvaluationContext() + { + Progress = progress, + Time = time, + }); + } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs deleted file mode 100644 index 8510ca16..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs +++ /dev/null @@ -1,173 +0,0 @@ -using Unity.Burst; -using Unity.Burst.CompilerServices; -using Unity.Mathematics; - -namespace LitMotion -{ - [BurstCompile] - internal unsafe static class MotionHelper - { - [BurstCompile] - public static void Update(MotionData* ptr, double time, out TValue result) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - var corePtr = (MotionDataCore*)ptr; - - corePtr->PrevCompletedLoops = corePtr->ComplpetedLoops; - corePtr->PrevStatus = corePtr->Status; - - corePtr->Time = time; - time = math.max(time, 0.0); - - double t; - bool isCompleted; - bool isDelayed; - int completedLoops; - int clampedCompletedLoops; - - if (Hint.Unlikely(corePtr->Duration <= 0f)) - { - if (corePtr->DelayType == DelayType.FirstLoop || corePtr->Delay == 0f) - { - var timeSinceStart = time - corePtr->Delay; - isCompleted = corePtr->Loops >= 0 && timeSinceStart > 0f; - if (isCompleted) - { - t = 1f; - completedLoops = corePtr->Loops; - } - else - { - t = 0f; - completedLoops = timeSinceStart < 0f ? -1 : 0; - } - clampedCompletedLoops = GetClampedCompletedLoops(corePtr, completedLoops); - isDelayed = timeSinceStart < 0; - } - else - { - completedLoops = (int)math.floor(time / corePtr->Delay); - clampedCompletedLoops = GetClampedCompletedLoops(corePtr, completedLoops); - isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; - isDelayed = !isCompleted; - t = isCompleted ? 1f : 0f; - } - } - else - { - if (corePtr->DelayType == DelayType.FirstLoop) - { - var timeSinceStart = time - corePtr->Delay; - completedLoops = (int)math.floor(timeSinceStart / corePtr->Duration); - clampedCompletedLoops = GetClampedCompletedLoops(corePtr, completedLoops); - isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; - isDelayed = timeSinceStart < 0f; - - if (isCompleted) - { - t = 1f; - } - else - { - var currentLoopTime = timeSinceStart - corePtr->Duration * clampedCompletedLoops; - t = math.clamp(currentLoopTime / corePtr->Duration, 0f, 1f); - } - } - else - { - var currentLoopTime = math.fmod(time, corePtr->Duration + corePtr->Delay) - corePtr->Delay; - completedLoops = (int)math.floor(time / (corePtr->Duration + corePtr->Delay)); - clampedCompletedLoops = GetClampedCompletedLoops(corePtr, completedLoops); - isCompleted = corePtr->Loops >= 0 && clampedCompletedLoops > corePtr->Loops - 1; - isDelayed = currentLoopTime < 0; - - if (isCompleted) - { - t = 1f; - } - else - { - t = math.clamp(currentLoopTime / corePtr->Duration, 0f, 1f); - } - } - } - - corePtr->ComplpetedLoops = (ushort)clampedCompletedLoops; - - float progress; - switch (corePtr->LoopType) - { - default: - case LoopType.Restart: - progress = GetEasedValue(corePtr, (float)t); - break; - case LoopType.Flip: - progress = GetEasedValue(corePtr, (float)t); - if ((clampedCompletedLoops + (int)t) % 2 == 1) progress = 1f - progress; - break; - case LoopType.Incremental: - progress = GetEasedValue(corePtr, 1f) * clampedCompletedLoops + GetEasedValue(corePtr, (float)math.fmod(t, 1f)); - break; - case LoopType.Yoyo: - progress = (clampedCompletedLoops + (int)t) % 2 == 1 - ? GetEasedValue(corePtr, (float)(1f - t)) - : GetEasedValue(corePtr, (float)t); - break; - } - - if (isCompleted) - { - corePtr->Status = MotionStatus.Completed; - } - else if (isDelayed || corePtr->Time < 0) - { - corePtr->Status = MotionStatus.Delayed; - } - else - { - corePtr->Status = MotionStatus.Playing; - } - - var context = new MotionEvaluationContext() - { - Progress = progress, - Time = time, - }; - - result = default(TAdapter).Evaluate(ref ptr->StartValue, ref ptr->EndValue, ref ptr->Options, context); - } - - public static double GetTotalDuration(ref MotionDataCore dataRef) - { - if (dataRef.Loops < 0) return double.PositiveInfinity; - return dataRef.Delay * (dataRef.DelayType == DelayType.EveryLoop ? dataRef.Loops : 1) + - dataRef.Duration * dataRef.Loops; - } - - [BurstCompile] - public static double GetTotalDuration(MotionDataCore* dataPtr) - { - if (dataPtr->Loops < 0) return double.PositiveInfinity; - return dataPtr->Delay * (dataPtr->DelayType == DelayType.EveryLoop ? dataPtr->Loops : 1) + - dataPtr->Duration * dataPtr->Loops; - } - - static int GetClampedCompletedLoops(MotionDataCore* corePtr, int completedLoops) - { - return corePtr->Loops < 0 - ? math.max(0, completedLoops) - : math.clamp(completedLoops, 0, corePtr->Loops); - } - - static float GetEasedValue(MotionDataCore* data, float value) - { - return data->Ease switch - { - Ease.CustomAnimationCurve => data->AnimationCurve.Evaluate(value), - _ => EaseUtility.Evaluate(value, data->Ease) - }; - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs.meta deleted file mode 100644 index cb235ae0..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionHelper.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: b7b3337d974654c029ff5bfa7e15049c \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs index bad46d44..940b5441 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionManager.cs @@ -20,17 +20,17 @@ public static void Register(MotionStorage= MotionTypeCount) return false; - return list[handle.StorageId].TryComplete(handle, permission); + return list[handle.StorageId].TryComplete(handle, checkIsInSequence); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Cancel(MotionHandle handle, MotionStoragePermission permission) + public static void Cancel(MotionHandle handle, bool checkIsInSequence = true) { CheckTypeId(handle); - list[handle.StorageId].Cancel(handle, permission); + list[handle.StorageId].Cancel(handle, checkIsInSequence); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static bool TryCancel(MotionHandle handle, MotionStoragePermission permission) + public static bool TryCancel(MotionHandle handle, bool checkIsInSequence = true) { if (handle.StorageId < 0 || handle.StorageId >= MotionTypeCount) return false; - return list[handle.StorageId].TryCancel(handle, permission); + return list[handle.StorageId].TryCancel(handle, checkIsInSequence); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -83,10 +83,10 @@ public static bool IsPlaying(MotionHandle handle) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void SetTime(MotionHandle handle, double time, MotionStoragePermission permission) + public static void SetTime(MotionHandle handle, double time, bool checkIsInSequence = true) { CheckTypeId(handle); - list[handle.StorageId].SetTime(handle, time, permission); + list[handle.StorageId].SetTime(handle, time, checkIsInSequence); } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 5deae2ee..07fed045 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -17,32 +17,17 @@ internal record MotionDebugInfo public object Options; } - /// - /// Represents the permissions for a motion in MotionStorage. - /// - internal enum MotionStoragePermission : byte - { - /// - /// Only root motions can be accessed, motions inside a sequence cannot be accessed. - /// - User, - /// - /// Allows access to motions within a sequence. - /// - Admin, - } - internal interface IMotionStorage { bool IsActive(MotionHandle handle); bool IsPlaying(MotionHandle handle); - bool TryCancel(MotionHandle handle, MotionStoragePermission permission); - bool TryComplete(MotionHandle handle, MotionStoragePermission permission); - void Cancel(MotionHandle handle, MotionStoragePermission permission); - void Complete(MotionHandle handle, MotionStoragePermission permission); - void SetTime(MotionHandle handle, double time, MotionStoragePermission permission); - ref MotionDataCore GetDataRef(MotionHandle handle, MotionStoragePermission permission); - ref ManagedMotionData GetManagedDataRef(MotionHandle handle, MotionStoragePermission permission); + bool TryCancel(MotionHandle handle, bool checkIsInSequence = true); + bool TryComplete(MotionHandle handle, bool checkIsInSequence = true); + void Cancel(MotionHandle handle, bool checkIsInSequence = true); + void Complete(MotionHandle handle, bool checkIsInSequence = true); + void SetTime(MotionHandle handle, double time, bool checkIsInSequence = true); + ref MotionData GetDataRef(MotionHandle handle, bool checkIsInSequence = true); + ref ManagedMotionData GetManagedDataRef(MotionHandle handle, bool checkIsInSequence = true); void AddToSequence(MotionHandle handle, out double motionDuration); MotionDebugInfo GetDebugInfo(MotionHandle handle); void Reset(); @@ -100,34 +85,37 @@ public unsafe MotionHandle Create(ref MotionBuilder ref var dataRef = ref unmanagedDataArray[tail]; ref var managedDataRef = ref managedDataArray[tail]; - dataRef.Core.Status = MotionStatus.Scheduled; - dataRef.Core.Time = 0; - dataRef.Core.PlaybackSpeed = 1f; - dataRef.Core.IsPreserved = false; - dataRef.Core.TimeKind = buffer.TimeKind; - - dataRef.Core.Duration = buffer.Duration; - dataRef.Core.Delay = buffer.Delay; - dataRef.Core.DelayType = buffer.DelayType; - dataRef.Core.Ease = buffer.Ease; - dataRef.Core.Loops = buffer.Loops; - dataRef.Core.LoopType = buffer.LoopType; + ref var state = ref dataRef.Core.State; + ref var parameters = ref dataRef.Core.Parameters; + + state.Status = MotionStatus.Scheduled; + state.Time = 0; + state.PlaybackSpeed = 1f; + state.IsPreserved = false; + + parameters.TimeKind = buffer.TimeKind; + parameters.Duration = buffer.Duration; + parameters.Delay = buffer.Delay; + parameters.DelayType = buffer.DelayType; + parameters.Ease = buffer.Ease; + parameters.Loops = buffer.Loops; + parameters.LoopType = buffer.LoopType; dataRef.StartValue = buffer.StartValue; dataRef.EndValue = buffer.EndValue; dataRef.Options = buffer.Options; if (buffer.Ease == Ease.CustomAnimationCurve) { - if (dataRef.Core.AnimationCurve.IsCreated) + if (parameters.AnimationCurve.IsCreated) { - dataRef.Core.AnimationCurve.CopyFrom(buffer.AnimationCurve); + parameters.AnimationCurve.CopyFrom(buffer.AnimationCurve); } else { #if LITMOTION_COLLECTIONS_2_0_OR_NEWER - dataRef.Core.AnimationCurve = new NativeAnimationCurve(buffer.AnimationCurve, allocator.Allocator.Handle); + parameters.AnimationCurve = new NativeAnimationCurve(buffer.AnimationCurve, allocator.Allocator.Handle); #else - dataRef.Core.AnimationCurve = new UnsafeAnimationCurve(buffer.AnimationCurve, allocator.Allocator.Handle); + parameters.AnimationCurve = new UnsafeAnimationCurve(buffer.AnimationCurve, allocator.Allocator.Handle); #endif } } @@ -156,12 +144,12 @@ public unsafe MotionHandle Create(ref MotionBuilder ref dataRef.Options, new() { - Progress = dataRef.Core.Ease switch + Progress = parameters.Ease switch { Ease.CustomAnimationCurve => buffer.AnimationCurve.Evaluate(0f), - _ => EaseUtility.Evaluate(0f, dataRef.Core.Ease) + _ => EaseUtility.Evaluate(0f, parameters.Ease) }, - Time = dataRef.Core.Time, + Time = state.Time, } )); } @@ -231,9 +219,9 @@ public bool IsActive(MotionHandle handle) if (IsDenseIndexOutOfRange(slot.DenseIndex)) return false; if (IsInvalidVersion(slot.Version, handle)) return false; - ref var motion = ref unmanagedDataArray[slot.DenseIndex]; - return motion.Core.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing || - (motion.Core.Status is MotionStatus.Completed && motion.Core.IsPreserved); + ref var state = ref unmanagedDataArray[slot.DenseIndex].Core.State; + return state.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing || + (state.Status is MotionStatus.Completed && state.IsPreserved); } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -243,18 +231,18 @@ public bool IsPlaying(MotionHandle handle) if (IsDenseIndexOutOfRange(slot.DenseIndex)) return false; if (IsInvalidVersion(slot.Version, handle)) return false; - ref var motion = ref unmanagedDataArray[slot.DenseIndex]; - return motion.Core.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing; + ref var state = ref unmanagedDataArray[slot.DenseIndex].Core.State; + return state.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing; } - public bool TryCancel(MotionHandle handle, MotionStoragePermission permission) + public bool TryCancel(MotionHandle handle, bool checkIsInSequence = true) { - return TryCancelCore(handle, permission) == 0; + return TryCancelCore(handle, checkIsInSequence) == 0; } - public void Cancel(MotionHandle handle, MotionStoragePermission permission) + public void Cancel(MotionHandle handle, bool checkIsInSequence = true) { - switch (TryCancelCore(handle, permission)) + switch (TryCancelCore(handle, checkIsInSequence)) { case 1: Error.MotionNotExists(); @@ -268,33 +256,30 @@ public void Cancel(MotionHandle handle, MotionStoragePermission permission) } } - int TryCancelCore(MotionHandle handle, MotionStoragePermission permission) + int TryCancelCore(MotionHandle handle, bool checkIsInSequence) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); var denseIndex = slot.DenseIndex; - if (IsDenseIndexOutOfRange(denseIndex)) + if (IsDenseIndexOutOfRange(denseIndex) || IsInvalidVersion(slot.Version, handle)) { return 1; } - ref var unmanagedData = ref unmanagedDataArray[denseIndex]; - if (IsInvalidVersion(slot.Version, handle)) - { - return 1; - } + ref var dataRef = ref unmanagedDataArray[denseIndex]; + ref var state = ref dataRef.Core.State; - if (unmanagedData.Core.Status is MotionStatus.None or MotionStatus.Canceled || - (unmanagedData.Core.Status is MotionStatus.Completed && !unmanagedData.Core.IsPreserved)) + if (state.Status is MotionStatus.None or MotionStatus.Canceled || + (state.Status is MotionStatus.Completed && !state.IsPreserved)) { return 2; } - if (permission < MotionStoragePermission.Admin && unmanagedData.Core.IsInSequence) + if (checkIsInSequence && state.IsInSequence) { return 3; } - unmanagedData.Core.Status = MotionStatus.Canceled; + state.Status = MotionStatus.Canceled; ref var managedData = ref managedDataArray[denseIndex]; managedData.InvokeOnCancel(); @@ -302,14 +287,14 @@ int TryCancelCore(MotionHandle handle, MotionStoragePermission permission) return 0; } - public bool TryComplete(MotionHandle handle, MotionStoragePermission permission) + public bool TryComplete(MotionHandle handle, bool checkIsInSequence = true) { - return TryCompleteCore(handle, permission) == 0; + return TryCompleteCore(handle, checkIsInSequence) == 0; } - public void Complete(MotionHandle handle, MotionStoragePermission permission) + public void Complete(MotionHandle handle, bool checkIsInSequence = true) { - switch (TryCompleteCore(handle, permission)) + switch (TryCompleteCore(handle, checkIsInSequence)) { case 1: Error.MotionNotExists(); @@ -325,68 +310,64 @@ public void Complete(MotionHandle handle, MotionStoragePermission permission) } } - int TryCompleteCore(MotionHandle handle, MotionStoragePermission permission) + int TryCompleteCore(MotionHandle handle, bool checkIsInSequence) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); - if (IsDenseIndexOutOfRange(slot.DenseIndex)) + if (IsDenseIndexOutOfRange(slot.DenseIndex) || IsInvalidVersion(slot.Version, handle)) { return 1; } - ref var unmanagedData = ref unmanagedDataArray[slot.DenseIndex]; - - var version = slot.Version; - if (IsInvalidVersion(version, handle)) - { - return 1; - } + ref var dataRef = ref unmanagedDataArray[slot.DenseIndex]; + ref var state = ref dataRef.Core.State; + ref var parameters = ref dataRef.Core.Parameters; - if (unmanagedData.Core.Status is MotionStatus.None or MotionStatus.Canceled or MotionStatus.Completed) + if (state.Status is MotionStatus.None or MotionStatus.Canceled or MotionStatus.Completed) { return 2; } - if (permission < MotionStoragePermission.Admin && unmanagedData.Core.IsInSequence) + if (checkIsInSequence && state.IsInSequence) { return 3; } - if (unmanagedData.Core.Loops < 0) + if (parameters.Loops < 0) { return 4; } ref var managedData = ref managedDataArray[slot.DenseIndex]; - unmanagedData.Core.Status = MotionStatus.Completed; - unmanagedData.Core.Time = MotionHelper.GetTotalDuration(ref unmanagedData.Core); - unmanagedData.Core.ComplpetedLoops = (ushort)unmanagedData.Core.Loops; + state.Status = MotionStatus.Completed; + state.Time = parameters.TotalDuration; + state.ComplpetedLoops = (ushort)parameters.Loops; - var endProgress = unmanagedData.Core.LoopType switch + var endProgress = parameters.LoopType switch { LoopType.Restart => 1f, - LoopType.Flip or LoopType.Yoyo => unmanagedData.Core.Loops % 2 == 0 ? 0f : 1f, - LoopType.Incremental => unmanagedData.Core.Loops, + LoopType.Flip or LoopType.Yoyo => parameters.Loops % 2 == 0 ? 0f : 1f, + LoopType.Incremental => parameters.Loops, _ => 1f }; - var easedEndProgress = unmanagedData.Core.Ease switch + var easedEndProgress = parameters.Ease switch { - Ease.CustomAnimationCurve => unmanagedData.Core.AnimationCurve.Evaluate(endProgress), - _ => EaseUtility.Evaluate(endProgress, unmanagedData.Core.Ease), + Ease.CustomAnimationCurve => parameters.AnimationCurve.Evaluate(endProgress), + _ => EaseUtility.Evaluate(endProgress, parameters.Ease), }; try { var endValue = default(TAdapter).Evaluate( - ref unmanagedData.StartValue, - ref unmanagedData.EndValue, - ref unmanagedData.Options, + ref dataRef.StartValue, + ref dataRef.EndValue, + ref dataRef.Options, new() { Progress = easedEndProgress, - Time = unmanagedData.Core.Time, + Time = state.Time, } ); @@ -397,9 +378,9 @@ int TryCompleteCore(MotionHandle handle, MotionStoragePermission permission) MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); } - if (unmanagedData.Core.WasLoopCompleted) + if (state.WasLoopCompleted) { - managedData.InvokeOnLoopComplete(unmanagedData.Core.ComplpetedLoops); + managedData.InvokeOnLoopComplete(state.ComplpetedLoops); } managedData.InvokeOnComplete(); @@ -407,7 +388,7 @@ int TryCompleteCore(MotionHandle handle, MotionStoragePermission permission) return 0; } - public unsafe void SetTime(MotionHandle handle, double time, MotionStoragePermission permission) + public unsafe void SetTime(MotionHandle handle, double time, bool checkIsInSequence = true) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); @@ -417,15 +398,16 @@ public unsafe void SetTime(MotionHandle handle, double time, MotionStoragePermis var version = slot.Version; if (version <= 0 || version != handle.Version) Error.MotionNotExists(); - fixed (MotionData* ptr = unmanagedDataArray) + fixed (MotionData* arrayPtr = unmanagedDataArray) { - var dataPtr = ptr + denseIndex; + var dataPtr = arrayPtr + denseIndex; + ref var state = ref dataPtr->Core.State; - if (permission < MotionStoragePermission.Admin && dataPtr->Core.IsInSequence) Error.MotionIsInSequence(); + if (checkIsInSequence && state.IsInSequence) Error.MotionIsInSequence(); - MotionHelper.Update(dataPtr, time, out var result); + dataPtr->Update(time, out var result); - var status = dataPtr->Core.Status; + var status = state.Status; ref var managedData = ref managedDataArray[denseIndex]; if (status is MotionStatus.Playing or MotionStatus.Completed || (status == MotionStatus.Delayed && !managedData.SkipValuesDuringDelay)) @@ -439,18 +421,18 @@ public unsafe void SetTime(MotionHandle handle, double time, MotionStoragePermis MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); if (managedData.CancelOnError) { - dataPtr->Core.Status = MotionStatus.Canceled; + state.Status = MotionStatus.Canceled; managedData.OnCancelAction?.Invoke(); return; } } - if (dataPtr->Core.WasLoopCompleted) + if (state.WasLoopCompleted) { - managedData.InvokeOnLoopComplete(dataPtr->Core.ComplpetedLoops); + managedData.InvokeOnLoopComplete(state.ComplpetedLoops); } - if (status is MotionStatus.Completed && dataPtr->Core.WasStatusChanged) + if (status is MotionStatus.Completed && state.WasStatusChanged) { managedData.InvokeOnComplete(); } @@ -460,10 +442,10 @@ public unsafe void SetTime(MotionHandle handle, double time, MotionStoragePermis public void AddToSequence(MotionHandle handle, out double motionDuration) { - ref var slot = ref GetSlotWithVarify(handle, MotionStoragePermission.Admin); + ref var slot = ref GetSlotWithVarify(handle, true); ref var dataRef = ref unmanagedDataArray[slot.DenseIndex]; - if (dataRef.Core.Status is not MotionStatus.Scheduled) + if (dataRef.Core.State.Status is not MotionStatus.Scheduled) { throw new ArgumentException("Cannot add a running motion to a sequence."); } @@ -474,25 +456,25 @@ public void AddToSequence(MotionHandle handle, out double motionDuration) throw new ArgumentException("Cannot add an infinitely looping motion to a sequence."); } - dataRef.Core.IsPreserved = true; - dataRef.Core.IsInSequence = true; + dataRef.Core.State.IsPreserved = true; + dataRef.Core.State.IsInSequence = true; } - public ref ManagedMotionData GetManagedDataRef(MotionHandle handle, MotionStoragePermission permission) + public ref ManagedMotionData GetManagedDataRef(MotionHandle handle, bool checkIsInSequence = true) { - ref var slot = ref GetSlotWithVarify(handle, permission); + ref var slot = ref GetSlotWithVarify(handle, checkIsInSequence); return ref managedDataArray[slot.DenseIndex]; } - public ref MotionDataCore GetDataRef(MotionHandle handle, MotionStoragePermission permission) + public ref MotionData GetDataRef(MotionHandle handle, bool checkIsInSequence = true) { - ref var slot = ref GetSlotWithVarify(handle, permission); - return ref UnsafeUtility.As, MotionDataCore>(ref unmanagedDataArray[slot.DenseIndex]); + ref var slot = ref GetSlotWithVarify(handle, checkIsInSequence); + return ref UnsafeUtility.As, MotionData>(ref unmanagedDataArray[slot.DenseIndex]); } public MotionDebugInfo GetDebugInfo(MotionHandle handle) { - ref var slot = ref GetSlotWithVarify(handle, MotionStoragePermission.Admin); + ref var slot = ref GetSlotWithVarify(handle, false); ref var dataRef = ref unmanagedDataArray[slot.DenseIndex]; return new() @@ -504,19 +486,19 @@ public MotionDebugInfo GetDebugInfo(MotionHandle handle) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - ref SparseSetCore.Slot GetSlotWithVarify(MotionHandle handle, MotionStoragePermission permission) + ref SparseSetCore.Slot GetSlotWithVarify(MotionHandle handle, bool checkIsInSequence = true) { ref var slot = ref sparseSetCore.GetSlotRefUnchecked(handle.Index); if (IsDenseIndexOutOfRange(slot.DenseIndex)) Error.MotionNotExists(); ref var dataRef = ref unmanagedDataArray[slot.DenseIndex]; - if (IsInvalidVersion(slot.Version, handle) || dataRef.Core.Status == MotionStatus.None) + if (IsInvalidVersion(slot.Version, handle) || dataRef.Core.State.Status == MotionStatus.None) { Error.MotionNotExists(); } - if (permission < MotionStoragePermission.Admin && dataRef.Core.IsInSequence) + if (checkIsInSequence && dataRef.Core.State.IsInSequence) { Error.MotionIsInSequence(); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs index 9a133257..7ff0cf3d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs @@ -74,7 +74,7 @@ protected void Initialize(MotionHandle motionHandle, MotionCancelBehavior cancel this.cancelAwaitOnMotionCanceled = cancelAwaitOnMotionCanceled; this.cancellationToken = cancellationToken; - ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle, MotionStoragePermission.Admin); + ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle, false); originalCancelAction = managedData.OnCancelAction; originalCompleteAction = managedData.OnCompleteAction; managedData.OnCancelAction = onCancelCallbackDelegate; @@ -129,7 +129,7 @@ protected void RestoreOriginalCallback(bool checkIsActive = true) { if (checkIsActive && !motionHandle.IsActive()) return; - ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle, MotionStoragePermission.Admin); + ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle, false); managedData.OnCancelAction = originalCancelAction; managedData.OnCompleteAction = originalCompleteAction; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index bc2bc31c..a23c538e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -63,10 +63,11 @@ public unsafe void Update(double time, double unscaledTime, double realtime) for (int i = 0; i < managedDataSpan.Length; i++) { var currentDataPtr = dataPtr + i; + ref var state = ref currentDataPtr->Core.State; - if (currentDataPtr->Core.IsInSequence) continue; + if (state.IsInSequence) continue; - var status = currentDataPtr->Core.Status; + var status = state.Status; ref var managedData = ref managedDataSpan[i]; if (status is MotionStatus.Playing or MotionStatus.Completed || (status == MotionStatus.Delayed && !managedData.SkipValuesDuringDelay)) { @@ -79,17 +80,17 @@ public unsafe void Update(double time, double unscaledTime, double realtime) MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); if (managedData.CancelOnError) { - currentDataPtr->Core.Status = MotionStatus.Canceled; + state.Status = MotionStatus.Canceled; managedData.OnCancelAction?.Invoke(); } } - if (currentDataPtr->Core.WasLoopCompleted) + if (state.WasLoopCompleted) { - managedData.InvokeOnLoopComplete(currentDataPtr->Core.ComplpetedLoops); + managedData.InvokeOnLoopComplete(state.ComplpetedLoops); } - if (status is MotionStatus.Completed && currentDataPtr->Core.WasStatusChanged) + if (status is MotionStatus.Completed && state.WasStatusChanged) { managedData.InvokeOnComplete(); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs index 926dc862..808c3850 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionAwaiter.cs @@ -31,7 +31,7 @@ public void UnsafeOnCompleted(Action continuation) { if (continuation == null) return; - ref var managedData = ref MotionManager.GetManagedDataRef(handle, MotionStoragePermission.Admin); + ref var managedData = ref MotionManager.GetManagedDataRef(handle, false); managedData.OnCompleteAction += continuation; managedData.OnCancelAction += continuation; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs index 07f29e09..75717d4d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionDebugger.cs @@ -27,7 +27,7 @@ public static void AddTracking(MotionHandle motionHandle, IMotionScheduler sched if (EnableStackTrace) state.StackTrace = new StackTrace(skipFrames, true); - ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle, MotionStoragePermission.Admin); + ref var managedData = ref MotionManager.GetManagedDataRef(motionHandle, false); state.OriginalOnCompleteCallback = managedData.OnCompleteAction; managedData.OnCompleteAction = state.OnCompleteDelegate; state.OriginalOnCancelCallback = managedData.OnCancelAction; @@ -84,7 +84,7 @@ void OnComplete() MotionDispatcher.GetUnhandledExceptionHandler()?.Invoke(ex); } - if (Handle.IsActive() && !MotionManager.GetDataRef(Handle, MotionStoragePermission.Admin).IsPreserved) + if (Handle.IsActive() && !MotionManager.GetDataRef(Handle, false).State.IsPreserved) { Release(); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index b10d1652..b19d9927 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -29,11 +29,11 @@ public readonly double Time { get { - return MotionManager.GetDataRef(this, MotionStoragePermission.Admin).Time; + return MotionManager.GetDataRef(this, false).State.Time; } set { - MotionManager.SetTime(this, value, MotionStoragePermission.User); + MotionManager.SetTime(this, value); } } @@ -44,7 +44,7 @@ public readonly double Duration { get { - return MotionHelper.GetTotalDuration(ref MotionManager.GetDataRef(this, MotionStoragePermission.Admin)); + return MotionManager.GetDataRef(this, false).Parameters.TotalDuration; } } @@ -55,7 +55,7 @@ public readonly int ComplatedLoops { get { - return MotionManager.GetDataRef(this, MotionStoragePermission.User).ComplpetedLoops; + return MotionManager.GetDataRef(this).State.ComplpetedLoops; } } @@ -66,11 +66,11 @@ public readonly float PlaybackSpeed { get { - return MotionManager.GetDataRef(this, MotionStoragePermission.User).PlaybackSpeed; + return MotionManager.GetDataRef(this).State.PlaybackSpeed; } set { - MotionManager.GetDataRef(this, MotionStoragePermission.User).PlaybackSpeed = value; + MotionManager.GetDataRef(this).State.PlaybackSpeed = value; } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index e4f1bf8c..a94106f8 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -48,7 +48,7 @@ public static bool IsPlaying(this MotionHandle handle) public static string GetDebugName(this MotionHandle handle) { #if LITMOTION_DEBUG - return MotionManager.GetManagedDataRef(handle, MotionStoragePermission.Admin).DebugName ?? handle.ToString(); + return MotionManager.GetManagedDataRef(handle, false).DebugName ?? handle.ToString(); #else return handle.ToString(); #endif @@ -62,7 +62,7 @@ public static string GetDebugName(this MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static MotionHandle Preserve(this MotionHandle handle) { - MotionManager.GetDataRef(handle, MotionStoragePermission.User).IsPreserved = true; + MotionManager.GetDataRef(handle).State.IsPreserved = true; return handle; } @@ -73,7 +73,7 @@ public static MotionHandle Preserve(this MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Complete(this MotionHandle handle) { - MotionManager.Complete(handle, MotionStoragePermission.User); + MotionManager.Complete(handle); } /// @@ -84,7 +84,7 @@ public static void Complete(this MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryComplete(this MotionHandle handle) { - return MotionManager.TryComplete(handle, MotionStoragePermission.User); + return MotionManager.TryComplete(handle); } /// @@ -94,7 +94,7 @@ public static bool TryComplete(this MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Cancel(this MotionHandle handle) { - MotionManager.Cancel(handle, MotionStoragePermission.User); + MotionManager.Cancel(handle); } /// @@ -105,7 +105,7 @@ public static void Cancel(this MotionHandle handle) [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryCancel(this MotionHandle handle) { - return MotionManager.TryCancel(handle, MotionStoragePermission.User); + return MotionManager.TryCancel(handle); } /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs index caf21145..71ac604e 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs @@ -3,7 +3,6 @@ using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using Unity.Jobs; -using Unity.Mathematics; namespace LitMotion { @@ -30,14 +29,15 @@ public unsafe struct MotionUpdateJob : IJobParallelF public void Execute([AssumeRange(0, int.MaxValue)] int index) { var ptr = DataPtr + index; - var corePtr = (MotionDataCore*)ptr; + ref var state = ref ptr->Core.State; + ref var parameters = ref ptr->Core.Parameters; - if (Hint.Likely(corePtr->Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing) || - Hint.Unlikely(corePtr->IsPreserved && corePtr->Status is MotionStatus.Completed)) + if (Hint.Likely(state.Status is MotionStatus.Scheduled or MotionStatus.Delayed or MotionStatus.Playing) || + Hint.Unlikely(state.IsPreserved && state.Status is MotionStatus.Completed)) { - if (Hint.Unlikely(corePtr->IsInSequence)) return; + if (Hint.Unlikely(state.IsInSequence)) return; - var deltaTime = corePtr->TimeKind switch + var deltaTime = parameters.TimeKind switch { MotionTimeKind.Time => DeltaTime, MotionTimeKind.UnscaledTime => UnscaledDeltaTime, @@ -45,16 +45,14 @@ public void Execute([AssumeRange(0, int.MaxValue)] int index) _ => default }; - var time = corePtr->Time + deltaTime * corePtr->PlaybackSpeed; - - MotionHelper.Update(ptr, time, out var result); - + var time = state.Time + deltaTime * state.PlaybackSpeed; + ptr->Update(time, out var result); Output[index] = result; } - else if ((!corePtr->IsPreserved && corePtr->Status is MotionStatus.Completed) || corePtr->Status is MotionStatus.Canceled) + else if ((!state.IsPreserved && state.Status is MotionStatus.Completed) || state.Status is MotionStatus.Canceled) { CompletedIndexList.AddNoResize(index); - corePtr->Status = MotionStatus.Disposed; + state.Status = MotionStatus.Disposed; } } } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index 7f8ceaa2..ade1d39f 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -88,13 +88,13 @@ public double Time { var item = span[index]; if (item.Position < time) break; - MotionManager.SetTime(item.Handle, time - item.Position, MotionStoragePermission.Admin); + MotionManager.SetTime(item.Handle, time - item.Position, false); index--; } foreach (var item in span[..(index + 1)]) { - MotionManager.SetTime(item.Handle, time - item.Position, MotionStoragePermission.Admin); + MotionManager.SetTime(item.Handle, time - item.Position, false); } } } @@ -104,7 +104,7 @@ public double Time void OnComplete() { if (!handle.IsActive()) return; - if (MotionManager.GetDataRef(handle, MotionStoragePermission.Admin).IsPreserved) return; + if (MotionManager.GetDataRef(handle, false).State.IsPreserved) return; Return(this); } @@ -113,7 +113,7 @@ void OnCancel() { foreach (var item in Items) { - MotionManager.Cancel(item.Handle, MotionStoragePermission.Admin); + MotionManager.Cancel(item.Handle, false); } Return(this); From 2d0b574b0efefad73c8c0b9973493b85dc377d93 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 11:04:29 +0900 Subject: [PATCH 186/224] Change: rename MotionConfiguredSource -> MorionTaskSource --- .../UniTask/UniTaskMotionConfiguredSource.cs | 2 +- ...dSource.cs => AwaitableMotionTaskSource.cs} | 16 ++++++++-------- ....meta => AwaitableMotionTaskSource.cs.meta} | 0 ...edSourceBase.cs => MotionTaskSourceBase.cs} | 6 +++--- ...se.cs.meta => MotionTaskSourceBase.cs.meta} | 0 ...dSource.cs => ValueTaskMotionTaskSource.cs} | 16 ++++++++-------- ....meta => ValueTaskMotionTaskSource.cs.meta} | 0 .../Runtime/MotionHandleExtensions.cs | 18 +++++++++--------- 8 files changed, 29 insertions(+), 29 deletions(-) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/{AwaitableMotionConfiguredSource.cs => AwaitableMotionTaskSource.cs} (69%) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/{AwaitableMotionConfiguredSource.cs.meta => AwaitableMotionTaskSource.cs.meta} (100%) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/{MotionConfiguredSourceBase.cs => MotionTaskSourceBase.cs} (97%) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/{MotionConfiguredSourceBase.cs.meta => MotionTaskSourceBase.cs.meta} (100%) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/{ValueTaskMotionConfiguredSource.cs => ValueTaskMotionTaskSource.cs} (79%) rename src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/{ValueTaskMotionConfiguredSource.cs.meta => ValueTaskMotionTaskSource.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs index 0158da05..967aa051 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs @@ -5,7 +5,7 @@ namespace LitMotion { - internal sealed class UniTaskMotionConfiguredSource : MotionConfiguredSourceBase, IUniTaskSource, ITaskPoolNode + internal sealed class UniTaskMotionConfiguredSource : MotionTaskSourceBase, IUniTaskSource, ITaskPoolNode { static UniTaskMotionConfiguredSource() { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionTaskSource.cs similarity index 69% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionTaskSource.cs index 5f247e36..ee850434 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionTaskSource.cs @@ -6,9 +6,9 @@ namespace LitMotion { // TODO: use object pool - internal sealed class AwaitableMotionConfiguredSource : MotionConfiguredSourceBase + internal sealed class AwaitableMotionTaskSource : MotionTaskSourceBase { - public static AwaitableMotionConfiguredSource CompletedSource + public static AwaitableMotionTaskSource CompletedSource { get { @@ -21,9 +21,9 @@ public static AwaitableMotionConfiguredSource CompletedSource return completedSource; } } - static AwaitableMotionConfiguredSource completedSource; + static AwaitableMotionTaskSource completedSource; - public static AwaitableMotionConfiguredSource CanceledSource + public static AwaitableMotionTaskSource CanceledSource { get { @@ -36,15 +36,15 @@ public static AwaitableMotionConfiguredSource CanceledSource return canceledSource; } } - static AwaitableMotionConfiguredSource canceledSource; + static AwaitableMotionTaskSource canceledSource; readonly AwaitableCompletionSource core = new(); public Awaitable Awaitable => core.Awaitable; - AwaitableMotionConfiguredSource() : base() { } + AwaitableMotionTaskSource() : base() { } - public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) + public static AwaitableMotionTaskSource Create(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { @@ -52,7 +52,7 @@ public static AwaitableMotionConfiguredSource Create(MotionHandle motionHandle, return CanceledSource; } - var result = new AwaitableMotionConfiguredSource(); + var result = new AwaitableMotionTaskSource(); result.Initialize(motionHandle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken); return result; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionTaskSource.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionConfiguredSource.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionTaskSource.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionTaskSourceBase.cs similarity index 97% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionTaskSourceBase.cs index 7ff0cf3d..a021e548 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionTaskSourceBase.cs @@ -3,9 +3,9 @@ namespace LitMotion { - internal abstract class MotionConfiguredSourceBase + internal abstract class MotionTaskSourceBase { - public MotionConfiguredSourceBase() + public MotionTaskSourceBase() { onCancelCallbackDelegate = OnCancelCallbackDelegate; onCompleteCallbackDelegate = OnCompleteCallbackDelegate; @@ -93,7 +93,7 @@ protected void Initialize(MotionHandle motionHandle, MotionCancelBehavior cancel { cancellationRegistration = RegisterWithoutCaptureExecutionContext(cancellationToken, static x => { - var source = (MotionConfiguredSourceBase)x; + var source = (MotionTaskSourceBase)x; if (!source.motionHandle.IsActive()) return; source.RestoreOriginalCallback(false); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionTaskSourceBase.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionConfiguredSourceBase.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionTaskSourceBase.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionTaskSource.cs similarity index 79% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionTaskSource.cs index 4baba7ca..79609b61 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionTaskSource.cs @@ -5,16 +5,16 @@ namespace LitMotion { - internal sealed class ValueTaskMotionConfiguredSource : MotionConfiguredSourceBase, IValueTaskSource, ILinkedPoolNode + internal sealed class ValueTaskMotionTaskSource : MotionTaskSourceBase, IValueTaskSource, ILinkedPoolNode { - static LinkedPool pool; + static LinkedPool pool; - ValueTaskMotionConfiguredSource nextNode; - public ref ValueTaskMotionConfiguredSource NextNode => ref nextNode; + ValueTaskMotionTaskSource nextNode; + public ref ValueTaskMotionTaskSource NextNode => ref nextNode; ManualResetValueTaskSourceCore core; - static ValueTaskMotionConfiguredSource FromCanceled(out short token) + static ValueTaskMotionTaskSource FromCanceled(out short token) { if (canceledSource == null) { @@ -27,9 +27,9 @@ static ValueTaskMotionConfiguredSource FromCanceled(out short token) token = canceledSource.Version; return canceledSource; } - static ValueTaskMotionConfiguredSource canceledSource; + static ValueTaskMotionTaskSource canceledSource; - ValueTaskMotionConfiguredSource() : base() { } + ValueTaskMotionTaskSource() : base() { } public static IValueTaskSource Create(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) { @@ -41,7 +41,7 @@ public static IValueTaskSource Create(MotionHandle motionHandle, MotionCancelBeh if (!pool.TryPop(out var result)) { - result = new ValueTaskMotionConfiguredSource(); + result = new ValueTaskMotionTaskSource(); } result.Initialize(motionHandle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionTaskSource.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionConfiguredSource.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionTaskSource.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index a94106f8..5eb931fa 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -228,7 +228,7 @@ public static MotionAwaiter GetAwaiter(this MotionHandle handle) public static ValueTask ToValueTask(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionConfiguredSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken, out var token); + var source = ValueTaskMotionTaskSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken, out var token); return new ValueTask(source, token); } @@ -242,7 +242,7 @@ public static ValueTask ToValueTask(this MotionHandle handle, CancellationToken public static ValueTask ToValueTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehavior, true, cancellationToken, out var token); + var source = ValueTaskMotionTaskSource.Create(handle, cancelBehavior, true, cancellationToken, out var token); return new ValueTask(source, token); } @@ -257,7 +257,7 @@ public static ValueTask ToValueTask(this MotionHandle handle, MotionCancelBehavi public static ValueTask ToValueTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionConfiguredSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken, out var token); + var source = ValueTaskMotionTaskSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken, out var token); return new ValueTask(source, token); } @@ -270,8 +270,8 @@ public static ValueTask ToValueTask(this MotionHandle handle, MotionCancelBehavi /// public static Awaitable ToAwaitable(this MotionHandle handle, CancellationToken cancellationToken = default) { - if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; - return AwaitableMotionConfiguredSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken).Awaitable; + if (!handle.IsActive()) return AwaitableMotionTaskSource.CompletedSource.Awaitable; + return AwaitableMotionTaskSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken).Awaitable; } /// @@ -283,8 +283,8 @@ public static Awaitable ToAwaitable(this MotionHandle handle, CancellationToken /// public static Awaitable ToAwaitable(this MotionHandle handle, MotionCancelBehavior cancelBehavior, CancellationToken cancellationToken = default) { - if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; - return AwaitableMotionConfiguredSource.Create(handle, cancelBehavior, true, cancellationToken).Awaitable; + if (!handle.IsActive()) return AwaitableMotionTaskSource.CompletedSource.Awaitable; + return AwaitableMotionTaskSource.Create(handle, cancelBehavior, true, cancellationToken).Awaitable; } /// @@ -297,8 +297,8 @@ public static Awaitable ToAwaitable(this MotionHandle handle, MotionCancelBehavi /// public static Awaitable ToAwaitable(this MotionHandle handle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { - if (!handle.IsActive()) return AwaitableMotionConfiguredSource.CompletedSource.Awaitable; - return AwaitableMotionConfiguredSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken).Awaitable; + if (!handle.IsActive()) return AwaitableMotionTaskSource.CompletedSource.Awaitable; + return AwaitableMotionTaskSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken).Awaitable; } #endif From 5db8ecf6ab0ddfdca31a749252f283ec2f4b8306 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 11:10:19 +0900 Subject: [PATCH 187/224] Change: MotionData to internal --- src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs | 4 ++-- .../Assets/LitMotion/Runtime/Internal/MotionStatus.cs | 2 +- src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index d2f95b7b..cbc2e3c5 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -7,7 +7,7 @@ namespace LitMotion { [StructLayout(LayoutKind.Sequential)] - public struct MotionData + internal struct MotionData { public struct MotionState { @@ -197,7 +197,7 @@ readonly float GetEasedValue(float value) /// The type of value to animate /// The type of special parameters given to the motion data [StructLayout(LayoutKind.Sequential)] - public struct MotionData + internal struct MotionData where TValue : unmanaged where TOptions : unmanaged, IMotionOptions { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStatus.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStatus.cs index 77e5d8ae..b6a47986 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStatus.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStatus.cs @@ -3,7 +3,7 @@ namespace LitMotion /// /// Motion status. /// - public enum MotionStatus : byte + internal enum MotionStatus : byte { None = 0, Scheduled = 1, diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs index 71ac604e..f61a4b2b 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionUpdateJob.cs @@ -18,7 +18,7 @@ public unsafe struct MotionUpdateJob : IJobParallelF where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { - [NativeDisableUnsafePtrRestriction] public MotionData* DataPtr; + [NativeDisableUnsafePtrRestriction] internal MotionData* DataPtr; [ReadOnly] public double DeltaTime; [ReadOnly] public double UnscaledDeltaTime; [ReadOnly] public double RealDeltaTime; From 4fedd41917de9fbe5f8a0d956e1bbe99fa417bc0 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 11:24:51 +0900 Subject: [PATCH 188/224] Fix: typo --- .../Assets/LitMotion/Editor/MotionDebuggerWindow.cs | 2 +- .../Assets/LitMotion/Runtime/Internal/MotionData.cs | 8 ++++---- .../Assets/LitMotion/Runtime/Internal/MotionStorage.cs | 6 +++--- .../Assets/LitMotion/Runtime/Internal/UpdateRunner.cs | 2 +- src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs index 028f4269..743a18f1 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerWindow.cs @@ -206,7 +206,7 @@ void RenderDetailsPanel() EditorGUILayout.LabelField("Status", state.Status.ToString()); GenericField("Time", state.Time); - GenericField("Completed Loops", state.ComplpetedLoops); + GenericField("Completed Loops", state.CompletedLoops); EditorGUILayout.Space(4); GenericField("Playback Speed", state.PlaybackSpeed); GenericField("Is Preserved", state.IsPreserved); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index cbc2e3c5..a0209604 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -16,14 +16,14 @@ public struct MotionState public bool IsPreserved; public bool IsInSequence; - public ushort ComplpetedLoops; + public ushort CompletedLoops; public ushort PrevCompletedLoops; public double Time; public float PlaybackSpeed; public readonly bool WasStatusChanged => Status != PrevStatus; - public readonly bool WasLoopCompleted => ComplpetedLoops > PrevCompletedLoops; + public readonly bool WasLoopCompleted => CompletedLoops > PrevCompletedLoops; } @@ -59,7 +59,7 @@ public readonly double TotalDuration public void Update(double time, out float progress) { - State.PrevCompletedLoops = State.ComplpetedLoops; + State.PrevCompletedLoops = State.CompletedLoops; State.PrevStatus = State.Status; State.Time = time; @@ -136,7 +136,7 @@ public void Update(double time, out float progress) } } - State.ComplpetedLoops = (ushort)clampedCompletedLoops; + State.CompletedLoops = (ushort)clampedCompletedLoops; switch (Parameters.LoopType) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 07fed045..7d43f106 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -342,7 +342,7 @@ int TryCompleteCore(MotionHandle handle, bool checkIsInSequence) state.Status = MotionStatus.Completed; state.Time = parameters.TotalDuration; - state.ComplpetedLoops = (ushort)parameters.Loops; + state.CompletedLoops = (ushort)parameters.Loops; var endProgress = parameters.LoopType switch { @@ -380,7 +380,7 @@ int TryCompleteCore(MotionHandle handle, bool checkIsInSequence) if (state.WasLoopCompleted) { - managedData.InvokeOnLoopComplete(state.ComplpetedLoops); + managedData.InvokeOnLoopComplete(state.CompletedLoops); } managedData.InvokeOnComplete(); @@ -429,7 +429,7 @@ public unsafe void SetTime(MotionHandle handle, double time, bool checkIsInSeque if (state.WasLoopCompleted) { - managedData.InvokeOnLoopComplete(state.ComplpetedLoops); + managedData.InvokeOnLoopComplete(state.CompletedLoops); } if (status is MotionStatus.Completed && state.WasStatusChanged) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index a23c538e..26fa8c06 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -87,7 +87,7 @@ public unsafe void Update(double time, double unscaledTime, double realtime) if (state.WasLoopCompleted) { - managedData.InvokeOnLoopComplete(state.ComplpetedLoops); + managedData.InvokeOnLoopComplete(state.CompletedLoops); } if (status is MotionStatus.Completed && state.WasStatusChanged) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index b19d9927..b580a1a2 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -55,7 +55,7 @@ public readonly int ComplatedLoops { get { - return MotionManager.GetDataRef(this).State.ComplpetedLoops; + return MotionManager.GetDataRef(this).State.CompletedLoops; } } From 834ab14dec60a1880ee747757099c1b529676631 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 11:33:34 +0900 Subject: [PATCH 189/224] Refactoring: complete --- .../LitMotion/Runtime/Internal/MotionData.cs | 34 +++++++++++++++++++ .../Runtime/Internal/MotionStorage.cs | 34 ++----------------- 2 files changed, 37 insertions(+), 31 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs index a0209604..54405a7a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionData.cs @@ -172,6 +172,22 @@ public void Update(double time, out float progress) } } + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Complete(out float progress) + { + State.Status = MotionStatus.Completed; + State.Time = Parameters.TotalDuration; + State.CompletedLoops = (ushort)Parameters.Loops; + + progress = GetEasedValue(Parameters.LoopType switch + { + LoopType.Restart => 1f, + LoopType.Flip or LoopType.Yoyo => Parameters.Loops % 2 == 0 ? 0f : 1f, + LoopType.Incremental => Parameters.Loops, + _ => 1f + }); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] readonly int GetClampedCompletedLoops(int completedLoops) { @@ -219,5 +235,23 @@ public void Update(double time, out TValue result) Time = time, }); } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public void Complete(out TValue result) + where TAdapter : unmanaged, IMotionAdapter + { + Core.Complete(out var progress); + + result = default(TAdapter).Evaluate( + ref StartValue, + ref EndValue, + ref Options, + new() + { + Progress = progress, + Time = Core.State.Time, + } + ); + } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 7d43f106..c8852470 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -338,40 +338,12 @@ int TryCompleteCore(MotionHandle handle, bool checkIsInSequence) return 4; } - ref var managedData = ref managedDataArray[slot.DenseIndex]; - - state.Status = MotionStatus.Completed; - state.Time = parameters.TotalDuration; - state.CompletedLoops = (ushort)parameters.Loops; - - var endProgress = parameters.LoopType switch - { - LoopType.Restart => 1f, - LoopType.Flip or LoopType.Yoyo => parameters.Loops % 2 == 0 ? 0f : 1f, - LoopType.Incremental => parameters.Loops, - _ => 1f - }; - - var easedEndProgress = parameters.Ease switch - { - Ease.CustomAnimationCurve => parameters.AnimationCurve.Evaluate(endProgress), - _ => EaseUtility.Evaluate(endProgress, parameters.Ease), - }; + dataRef.Complete(out var result); + ref var managedData = ref managedDataArray[slot.DenseIndex]; try { - var endValue = default(TAdapter).Evaluate( - ref dataRef.StartValue, - ref dataRef.EndValue, - ref dataRef.Options, - new() - { - Progress = easedEndProgress, - Time = state.Time, - } - ); - - managedData.UpdateUnsafe(endValue); + managedData.UpdateUnsafe(result); } catch (Exception ex) { From 7551cea3d07e9e95248a863bb435b5793aab2970 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 11:41:35 +0900 Subject: [PATCH 190/224] Rename --- .../UniTask/LitMotionUniTaskExtensions.cs | 6 +++--- ...guredSource.cs => UniTaskMotionTaskSource.cs} | 16 ++++++++-------- ...e.cs.meta => UniTaskMotionTaskSource.cs.meta} | 0 3 files changed, 11 insertions(+), 11 deletions(-) rename src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/{UniTaskMotionConfiguredSource.cs => UniTaskMotionTaskSource.cs} (78%) rename src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/{UniTaskMotionConfiguredSource.cs.meta => UniTaskMotionTaskSource.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs index f7e71e5e..8035d882 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs @@ -18,7 +18,7 @@ public static class LitMotionUniTaskExtensions public static UniTask ToUniTask(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionConfiguredSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionTaskSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken, out var token), token); } /// @@ -31,7 +31,7 @@ public static UniTask ToUniTask(this MotionHandle handle, CancellationToken canc public static UniTask ToUniTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehavior, true, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionTaskSource.Create(handle, cancelBehavior, true, cancellationToken, out var token), token); } /// @@ -45,7 +45,7 @@ public static UniTask ToUniTask(this MotionHandle handle, MotionCancelBehavior c public static UniTask ToUniTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionConfiguredSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionTaskSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken, out var token), token); } /// diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionTaskSource.cs similarity index 78% rename from src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs rename to src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionTaskSource.cs index 967aa051..851ebcd1 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionTaskSource.cs @@ -5,18 +5,18 @@ namespace LitMotion { - internal sealed class UniTaskMotionConfiguredSource : MotionTaskSourceBase, IUniTaskSource, ITaskPoolNode + internal sealed class UniTaskMotionTaskSource : MotionTaskSourceBase, IUniTaskSource, ITaskPoolNode { - static UniTaskMotionConfiguredSource() + static UniTaskMotionTaskSource() { - TaskPool.RegisterSizeGetter(typeof(UniTaskMotionConfiguredSource), () => pool.Size); + TaskPool.RegisterSizeGetter(typeof(UniTaskMotionTaskSource), () => pool.Size); } - UniTaskMotionConfiguredSource() : base() { } + UniTaskMotionTaskSource() : base() { } - static TaskPool pool; - UniTaskMotionConfiguredSource nextNode; - public ref UniTaskMotionConfiguredSource NextNode => ref nextNode; + static TaskPool pool; + UniTaskMotionTaskSource nextNode; + public ref UniTaskMotionTaskSource NextNode => ref nextNode; UniTaskCompletionSourceCore core; @@ -30,7 +30,7 @@ public static IUniTaskSource Create(MotionHandle motionHandle, MotionCancelBehav if (!pool.TryPop(out var result)) { - result = new UniTaskMotionConfiguredSource(); + result = new UniTaskMotionTaskSource(); } result.Initialize(motionHandle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionTaskSource.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionConfiguredSource.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionTaskSource.cs.meta From 9e924d834156911f337abc816f6f6df0ad7e2ed3 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 12:14:03 +0900 Subject: [PATCH 191/224] Remove: toggleOnLabelClick --- .../Editor/AnimationComponentView.cs | 16 +++++++++++----- .../Editor/LitMotionAnimationEditor.cs | 1 - .../Editor/SerializableMotionSettingsDrawer.cs | 2 -- .../LitMotion/Editor/StringOptionsDrawer.cs | 1 - 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs index be3ae199..f392fde7 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs @@ -60,7 +60,7 @@ public AnimationComponentView() }; root.Add(foldout); foldout.Add(new VisualElement() { style = { height = 5f } }); - var foldoutCheck = foldout.Q("unity-checkmark"); + var foldoutCheck = foldout.Q(className: Foldout.checkmarkUssClassName); icon = new VisualElement { style = { @@ -74,12 +74,18 @@ public AnimationComponentView() foldoutCheck.parent.Add(icon); enabledToggle = new Toggle { - toggleOnLabelClick = false, style = { unityFontStyleAndWeight = FontStyle.Bold, } }; - enabledToggle.Q("unity-checkmark").style.marginRight = 6f; + enabledToggle.Q(className: Toggle.checkmarkUssClassName).style.marginRight = 6f; + enabledToggle.schedule.Execute(() => + { + enabledToggle.pickingMode = PickingMode.Ignore; + enabledToggle.Q(className: Toggle.inputUssClassName).pickingMode = PickingMode.Ignore; + enabledToggle.Q(className: Toggle.textUssClassName).pickingMode = PickingMode.Ignore; + enabledToggle.Q(className: Toggle.checkmarkUssClassName).pickingMode = PickingMode.Position; + }); foldoutCheck.parent.Add(enabledToggle); progressBar = new ProgressBar @@ -96,12 +102,12 @@ public AnimationComponentView() alignSelf = Align.Stretch, } }; - var background = progressBar.Q(null, "unity-progress-bar__background"); + var background = progressBar.Q(className: AbstractProgressBar.backgroundUssClassName); background.style.borderTopWidth = 0f; background.style.borderBottomWidth = 0f; background.style.borderLeftWidth = 0f; background.style.borderRightWidth = 0f; - var progress = progressBar.Q(null, "unity-progress-bar__progress"); + var progress = progressBar.Q(className: AbstractProgressBar.progressUssClassName); progress.style.backgroundColor = Color.white; progress.style.minWidth = 0f; progressBar.schedule.Execute(() => progress.style.display = progressBar.value > progressBar.lowValue ? DisplayStyle.Flex : DisplayStyle.None).Every(10); diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 38ff7de0..34221c95 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -266,7 +266,6 @@ AnimationComponentView CreateComponentGUI(SerializedProperty property) view.Icon = (Texture2D)EditorGUIUtility.IconContent("Error").image; view.EnabledToggle.value = true; view.SetEnabled(true); - view.EnabledToggle.toggleOnLabelClick = false; view.EnabledToggle.Q("unity-checkmark").style.visibility = Visibility.Hidden; view.Add(new HelpBox("The type referenced in SerializeReference is missing. You may have renamed the type or moved it to a different namespace or assembly.", HelpBoxMessageType.Error)); } diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs index 994edb51..63b5dd21 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs @@ -15,7 +15,6 @@ public override VisualElement CreatePropertyGUI(SerializedProperty property) var foldout = new Foldout() { text = property.displayName, - toggleOnLabelClick = true }; foldout.BindProperty(property); @@ -131,7 +130,6 @@ void FoldoutGroup(VisualElement root, string label, SerializedProperty property, { text = label, style = { marginBottom = 3f }, - toggleOnLabelClick = true }; group.BindProperty(property); configure(group); diff --git a/src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs b/src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs index ed34c1fe..d24a5537 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/StringOptionsDrawer.cs @@ -13,7 +13,6 @@ public override VisualElement CreatePropertyGUI(SerializedProperty property) var foldout = new Foldout { text = property.displayName, - toggleOnLabelClick = true, }; foldout.BindProperty(property); From 04d043fc923bf44501bcdb590b088a693d8d8810 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 18:33:45 +0900 Subject: [PATCH 192/224] Add: ManualMotionDispatcher --- .../Runtime/Internal/UpdateRunner.cs | 14 +++ .../Runtime/ManualMotionDispatcher.cs | 119 ++++++++++++++++++ .../Runtime/ManualMotionDispatcher.cs.meta | 2 + 3 files changed, 135 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs create mode 100644 src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index 26fa8c06..72ad05bd 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -7,6 +7,7 @@ namespace LitMotion { internal interface IUpdateRunner { + IMotionStorage Storage { get; } public void Update(double time, double unscaledTime, double realtime); public void Reset(); } @@ -30,6 +31,9 @@ public UpdateRunner(MotionStorage storage, double ti double prevUnscaledTime; double prevRealtime; + public MotionStorage Storage => storage; + IMotionStorage IUpdateRunner.Storage => storage; + public unsafe void Update(double time, double unscaledTime, double realtime) { var count = storage.Count; @@ -108,5 +112,15 @@ public void Reset() prevRealtime = 0; storage.Reset(); } + + void IUpdateRunner.Update(double time, double unscaledTime, double realtime) + { + throw new NotImplementedException(); + } + + void IUpdateRunner.Reset() + { + throw new NotImplementedException(); + } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs new file mode 100644 index 00000000..69dbdbf4 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; + +namespace LitMotion +{ + /// + /// Manually updatable MotionDispatcher + /// + public sealed class ManualMotionDispatcher + { + sealed class DispatcherScheduler : IMotionScheduler + { + readonly ManualMotionDispatcher dispatcher; + + public DispatcherScheduler(ManualMotionDispatcher dispatcher) + { + this.dispatcher = dispatcher; + } + + public MotionHandle Schedule(ref MotionBuilder builder) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + return dispatcher.GetOrCreateRunner().Storage.Create(ref builder); + } + } + + /// + /// Default ManualMotionDispatcher + /// + public static readonly ManualMotionDispatcher Default = new(); + + /// + /// MotionScheduler for scheduling to the dispatcher. + /// + public IMotionScheduler Scheduler => scheduler; + + readonly DispatcherScheduler scheduler; + readonly Dictionary runners = new(); + + public ManualMotionDispatcher() + { + scheduler = new(this); + } + + /// + /// ManualMotionDispatcher time. It increases every time Update is called. + /// + public double Time + { + get => time; + set + { + Update(value - time); + } + } + + double time; + + /// + /// Ensures the storage capacity until it reaches at least capacity. + /// + /// The minimum capacity to ensure + public void EnsureStorageCapacity(int capacity) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + + GetOrCreateRunner().Storage.EnsureCapacity(capacity); + } + + /// + /// Update all scheduled motions. + /// + /// Delta time + public void Update(double deltaTime) + { + foreach (var kv in runners) + { + kv.Value.Update(deltaTime, deltaTime, deltaTime); + } + + time += deltaTime; + } + + /// + /// Cancel all motions and reset data. + /// + public void Reset() + { + foreach (var kv in runners) + { + kv.Value.Reset(); + } + + time = 0; + } + + UpdateRunner GetOrCreateRunner() + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + var key = typeof((TValue, TOptions, TAdapter)); + if (runners.TryGetValue(key, out var runner)) + { + var storage = new MotionStorage(MotionManager.MotionTypeCount); + MotionManager.Register(storage); + + runner = new UpdateRunner(storage, 0, 0, 0); + runners.Add(key, runner); + } + + return (UpdateRunner)runner; + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs.meta new file mode 100644 index 00000000..9ff30147 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 043d59918c40e4bba88431b81c2d5138 \ No newline at end of file From c51c81ad92ef5554604bf2bb89a104b331b3040b Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 20:28:41 +0900 Subject: [PATCH 193/224] Update: MotionScheduler.Manual --- .../PlayerLoopMotionScheduler.cs | 0 .../PlayerLoopMotionScheduler.cs.meta | 0 .../{Schedulers => }/MotionScheduler.cs | 6 ++-- .../{Schedulers => }/MotionScheduler.cs.meta | 0 .../Assets/LitMotion/Runtime/Schedulers.meta | 8 ----- .../Schedulers/ManualMotionScheduler.cs | 33 ------------------- .../Schedulers/ManualMotionScheduler.cs.meta | 11 ------- 7 files changed, 4 insertions(+), 54 deletions(-) rename src/LitMotion/Assets/LitMotion/Runtime/{Schedulers => Internal}/PlayerLoopMotionScheduler.cs (100%) rename src/LitMotion/Assets/LitMotion/Runtime/{Schedulers => Internal}/PlayerLoopMotionScheduler.cs.meta (100%) rename src/LitMotion/Assets/LitMotion/Runtime/{Schedulers => }/MotionScheduler.cs (98%) rename src/LitMotion/Assets/LitMotion/Runtime/{Schedulers => }/MotionScheduler.cs.meta (100%) delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Schedulers.meta delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/PlayerLoopMotionScheduler.cs similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/PlayerLoopMotionScheduler.cs diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Internal/PlayerLoopMotionScheduler.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Schedulers/PlayerLoopMotionScheduler.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/Internal/PlayerLoopMotionScheduler.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/MotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionScheduler.cs similarity index 98% rename from src/LitMotion/Assets/LitMotion/Runtime/Schedulers/MotionScheduler.cs rename to src/LitMotion/Assets/LitMotion/Runtime/MotionScheduler.cs index 96545c7f..c5575814 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/MotionScheduler.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionScheduler.cs @@ -1,3 +1,5 @@ +using System; + namespace LitMotion { /// @@ -112,8 +114,8 @@ static MotionScheduler() public static readonly IMotionScheduler TimeUpdateRealtime = new PlayerLoopMotionScheduler(PlayerLoopTiming.TimeUpdate, MotionTimeKind.Realtime); /// - /// Scheduler that updates motion with `ManualMotionDispatcher.Update()` + /// Scheduler that updates motion with `ManualMotionDispatcher.Default.Update()` /// - public static readonly IMotionScheduler Manual = new ManualMotionScheduler(); + public static IMotionScheduler Manual => ManualMotionDispatcher.Default.Scheduler; } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/MotionScheduler.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/MotionScheduler.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Schedulers/MotionScheduler.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/MotionScheduler.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers.meta b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers.meta deleted file mode 100644 index 2d953a9c..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 52f55e1fc59194977a0f4759de5267a2 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs deleted file mode 100644 index e6fa13c8..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace LitMotion -{ - internal sealed class ManualMotionScheduler : IMotionScheduler - { - static class Cache - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - public static MotionStorage updateStorage; - - public static MotionStorage GetOrCreate() - { - if (updateStorage == null) - { - var storage = new MotionStorage(MotionManager.MotionTypeCount); - MotionManager.Register(storage); - updateStorage = storage; - } - return updateStorage; - } - } - - public MotionHandle Schedule(ref MotionBuilder builder) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - var storage = Cache.GetOrCreate(); - return storage.Create(ref builder); - } - } -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs.meta deleted file mode 100644 index b34fe249..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Schedulers/ManualMotionScheduler.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 74ac3bcfb23954824bd2e0efc0b390de -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From 5d3274095e6c0e01cfa08e0ae4446cc938351b47 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 20:30:07 +0900 Subject: [PATCH 194/224] Change: DispatcherScheduler -> ManualMotionDispatcherScheduler --- .../Editor/MotionDebuggerTreeView.cs | 2 +- .../Runtime/ManualMotionDispatcher.cs | 40 +++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs index 80272032..febf9759 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/MotionDebuggerTreeView.cs @@ -135,7 +135,7 @@ static string GetTimeKindName(MotionTimeKind motionTimeKind) return scheduler switch { PlayerLoopMotionScheduler loopMotionScheduler => loopMotionScheduler.playerLoopTiming.ToString() + GetTimeKindName(loopMotionScheduler.timeKind), - ManualMotionScheduler => "Manual", + ManualMotionDispatcherScheduler => "Manual", EditorUpdateMotionScheduler => "EditorUpdate", _ => scheduler.GetType()?.Name, }; diff --git a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs index 69dbdbf4..e1d7461c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs @@ -3,29 +3,29 @@ namespace LitMotion { - /// - /// Manually updatable MotionDispatcher - /// - public sealed class ManualMotionDispatcher + internal sealed class ManualMotionDispatcherScheduler : IMotionScheduler { - sealed class DispatcherScheduler : IMotionScheduler - { - readonly ManualMotionDispatcher dispatcher; + readonly ManualMotionDispatcher dispatcher; - public DispatcherScheduler(ManualMotionDispatcher dispatcher) - { - this.dispatcher = dispatcher; - } + public ManualMotionDispatcherScheduler(ManualMotionDispatcher dispatcher) + { + this.dispatcher = dispatcher; + } - public MotionHandle Schedule(ref MotionBuilder builder) - where TValue : unmanaged - where TOptions : unmanaged, IMotionOptions - where TAdapter : unmanaged, IMotionAdapter - { - return dispatcher.GetOrCreateRunner().Storage.Create(ref builder); - } + public MotionHandle Schedule(ref MotionBuilder builder) + where TValue : unmanaged + where TOptions : unmanaged, IMotionOptions + where TAdapter : unmanaged, IMotionAdapter + { + return dispatcher.GetOrCreateRunner().Storage.Create(ref builder); } + } + /// + /// Manually updatable MotionDispatcher + /// + public sealed class ManualMotionDispatcher + { /// /// Default ManualMotionDispatcher /// @@ -36,7 +36,7 @@ public MotionHandle Schedule(ref MotionBuilder public IMotionScheduler Scheduler => scheduler; - readonly DispatcherScheduler scheduler; + readonly ManualMotionDispatcherScheduler scheduler; readonly Dictionary runners = new(); public ManualMotionDispatcher() @@ -98,7 +98,7 @@ public void Reset() time = 0; } - UpdateRunner GetOrCreateRunner() + internal UpdateRunner GetOrCreateRunner() where TValue : unmanaged where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter From af625973130a73b2b92a00c2ad846736ae207715 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 20:49:33 +0900 Subject: [PATCH 195/224] Fix: GetOrCreateRunner --- .../Assets/LitMotion/Runtime/ManualMotionDispatcher.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs index e1d7461c..07e6f6cb 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs @@ -104,7 +104,7 @@ internal UpdateRunner GetOrCreateRunner { var key = typeof((TValue, TOptions, TAdapter)); - if (runners.TryGetValue(key, out var runner)) + if (!runners.TryGetValue(key, out var runner)) { var storage = new MotionStorage(MotionManager.MotionTypeCount); MotionManager.Register(storage); From 3109283723d3b220becd60f690186eb0ff70da51 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 20:50:27 +0900 Subject: [PATCH 196/224] Fix: UpdateRunner --- .../Assets/LitMotion/Runtime/Internal/UpdateRunner.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs index 72ad05bd..43542343 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/UpdateRunner.cs @@ -112,15 +112,5 @@ public void Reset() prevRealtime = 0; storage.Reset(); } - - void IUpdateRunner.Update(double time, double unscaledTime, double realtime) - { - throw new NotImplementedException(); - } - - void IUpdateRunner.Reset() - { - throw new NotImplementedException(); - } } } \ No newline at end of file From e3c28de9d286f3bea38b7f18cc36feeb0e2ea0e5 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 20:51:39 +0900 Subject: [PATCH 197/224] Fix: manual Update not working --- .../Assets/LitMotion/Runtime/ManualMotionDispatcher.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs index 07e6f6cb..e7708667 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/ManualMotionDispatcher.cs @@ -77,12 +77,12 @@ public void EnsureStorageCapacity(int capacity) /// Delta time public void Update(double deltaTime) { + time += deltaTime; + foreach (var kv in runners) { - kv.Value.Update(deltaTime, deltaTime, deltaTime); + kv.Value.Update(time, time, time); } - - time += deltaTime; } /// From 45b64a33954b0451a06260a6146574ee07ed2b85 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 21:07:41 +0900 Subject: [PATCH 198/224] Add: tests --- .../Runtime/ManualMotionDispatcherTests.cs | 46 +++++++++++++++++++ .../ManualMotionDispatcherTests.cs.meta | 2 + 2 files changed, 48 insertions(+) create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualMotionDispatcherTests.cs create mode 100644 src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualMotionDispatcherTests.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualMotionDispatcherTests.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualMotionDispatcherTests.cs new file mode 100644 index 00000000..c9743b08 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualMotionDispatcherTests.cs @@ -0,0 +1,46 @@ +using NUnit.Framework; +using UnityEngine.TestTools.Utils; + +namespace LitMotion.Tests.Runtime +{ + public class ManualMotionDispatcherTests + { + [Test] + public void Test_Update() + { + var dispatcher = new ManualMotionDispatcher(); + + var x = 0f; + var isCompleted = false; + LMotion.Create(0f, 10f, 1f) + .WithScheduler(dispatcher.Scheduler) + .WithOnComplete(() => isCompleted = true) + .Bind(v => x = v); + + dispatcher.Update(0.5); + Assert.That(x, Is.EqualTo(5f).Using(FloatEqualityComparer.Instance)); + dispatcher.Update(0.5); + Assert.That(x, Is.EqualTo(10f).Using(FloatEqualityComparer.Instance)); + Assert.That(isCompleted, Is.True); + } + + [Test] + public void Test_Time() + { + var dispatcher = new ManualMotionDispatcher(); + + var x = 0f; + var handle = LMotion.Create(0f, 10f, 1f) + .WithScheduler(dispatcher.Scheduler) + .Bind(v => x = v) + .Preserve(); + + dispatcher.Update(1.0); + Assert.That(x, Is.EqualTo(10f).Using(FloatEqualityComparer.Instance)); + dispatcher.Time = 0; + Assert.That(x, Is.EqualTo(0f).Using(FloatEqualityComparer.Instance)); + + handle.Cancel(); + } + } +} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualMotionDispatcherTests.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualMotionDispatcherTests.cs.meta new file mode 100644 index 00000000..5d47e6d5 --- /dev/null +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ManualMotionDispatcherTests.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 7af4f5bb5311b4963bba067dd602d569 \ No newline at end of file From 9914f4af57a26d6c30bdfb58223660488f8da41a Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 21:39:30 +0900 Subject: [PATCH 199/224] Add: `MotionHandle.None` --- src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index b580a1a2..e84198a1 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -7,6 +7,11 @@ namespace LitMotion /// public struct MotionHandle : IEquatable { + /// + /// Represents an empty MotionHandle. This is the same as default(MotionHandle). + /// + public static readonly MotionHandle None = default; + /// /// The ID of motion storage. /// From b8bdd9eb4876ea5cd483d678903c0ca4ff2e7227 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 22:04:37 +0900 Subject: [PATCH 200/224] Change: BindOnSchedule -> ImmidiateBind --- .../Editor/SerializableMotionSettingsDrawer.cs | 2 +- .../LitMotion/Runtime/Internal/MotionStorage.cs | 2 +- .../Runtime/LMotion.Create.FromSettings.cs | 2 +- .../Assets/LitMotion/Runtime/MotionBuilder.cs | 14 +++++++------- .../Assets/LitMotion/Runtime/MotionSettings.cs | 8 ++++---- ...{BindOnScheduleTest.cs => ImmediateBindTest.cs} | 11 ++++++----- ...eduleTest.cs.meta => ImmediateBindTest.cs.meta} | 0 .../LitMotion/Tests/Runtime/MotionSettingsTest.cs | 2 +- 8 files changed, 21 insertions(+), 20 deletions(-) rename src/LitMotion/Assets/LitMotion/Tests/Runtime/{BindOnScheduleTest.cs => ImmediateBindTest.cs} (77%) rename src/LitMotion/Assets/LitMotion/Tests/Runtime/{BindOnScheduleTest.cs.meta => ImmediateBindTest.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs index 63b5dd21..ca440589 100644 --- a/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs +++ b/src/LitMotion/Assets/LitMotion/Editor/SerializableMotionSettingsDrawer.cs @@ -109,7 +109,7 @@ public override VisualElement CreatePropertyGUI(SerializedProperty property) group.style.marginLeft = 15f; AddPropertyField(group, property, "cancelOnError"); AddPropertyField(group, property, "skipValuesDuringDelay"); - AddPropertyField(group, property, "bindOnSchedule"); + AddPropertyField(group, property, "immediateBind"); group.Add(new PropertyField(property.FindPropertyRelative("schedulerType"), "Scheduler")); }); }); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index c8852470..1698f88d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -135,7 +135,7 @@ public unsafe MotionHandle Create(ref MotionBuilder managedDataRef.DebugName = buffer.DebugName; #endif - if (buffer.BindOnSchedule && buffer.UpdateAction != null) + if (buffer.ImmediateBind && buffer.UpdateAction != null) { managedDataRef.UpdateUnsafe( default(TAdapter).Evaluate( diff --git a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs index 9b02b973..cc604b91 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/LMotion.Create.FromSettings.cs @@ -101,7 +101,7 @@ public static MotionBuilder Create(buffer); } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs index effebd42..2cc31b7c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionBuilder.cs @@ -33,7 +33,7 @@ public static MotionBuilderBuffer Rent() public static void Return(MotionBuilderBuffer buffer) { buffer.Version++; - buffer.BindOnSchedule = false; + buffer.ImmediateBind = true; buffer.StartValue = default; buffer.EndValue = default; @@ -87,7 +87,7 @@ public static void Return(MotionBuilderBuffer buffer) public LoopType LoopType; public bool CancelOnError; public bool SkipValuesDuringDelay; - public bool BindOnSchedule; + public bool ImmediateBind = true; public object State0; public object State1; @@ -251,15 +251,15 @@ public readonly MotionBuilder WithCancelOnError(bool } /// - /// Bind values when scheduling the motion. + /// Bind values ​​immediately when scheduling the motion. /// - /// Whether to bind on sheduling + /// Whether to bind on sheduling /// This builder to allow chaining multiple method calls. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public readonly MotionBuilder WithBindOnSchedule(bool bindOnSchedule = true) + public readonly MotionBuilder WithImmediateBind(bool immediateBind = true) { CheckBuffer(); - buffer.BindOnSchedule = bindOnSchedule; + buffer.ImmediateBind = immediateBind; return this; } @@ -394,7 +394,7 @@ public readonly MotionSettings ToMotionSettings() LoopType = buffer.LoopType, CancelOnError = buffer.CancelOnError, SkipValuesDuringDelay = buffer.SkipValuesDuringDelay, - BindOnSchedule = buffer.BindOnSchedule, + ImmediateBind = buffer.ImmediateBind, Scheduler = buffer.Scheduler, }; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs index 52023789..9bebbe18 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSettings.cs @@ -83,10 +83,10 @@ public bool SkipValuesDuringDelay init => skipValuesDuringDelay = value; } - public bool BindOnSchedule + public bool ImmediateBind { - get => bindOnSchedule; - init => bindOnSchedule = value; + get => immediateBind; + init => immediateBind = value; } public IMotionScheduler Scheduler @@ -107,7 +107,7 @@ public IMotionScheduler Scheduler [SerializeField] LoopType loopType; [SerializeField] bool cancelOnError; [SerializeField] bool skipValuesDuringDelay; - [SerializeField] bool bindOnSchedule; + [SerializeField] bool immediateBind; internal IMotionScheduler scheduler; } diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindOnScheduleTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ImmediateBindTest.cs similarity index 77% rename from src/LitMotion/Assets/LitMotion/Tests/Runtime/BindOnScheduleTest.cs rename to src/LitMotion/Assets/LitMotion/Tests/Runtime/ImmediateBindTest.cs index 10458197..2915ff6e 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindOnScheduleTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ImmediateBindTest.cs @@ -3,14 +3,15 @@ namespace LitMotion.Tests.Runtime { - public class BindOnScheduleTest + public class ImmediateBindTest { [Test] - public void Test_BindOnSchedule() + public void Test_ImmediateBind() { var value = 0f; var motion = LMotion.Create(1f, 0f, 1f) + .WithImmediateBind(false) .Bind(x => value = x); motion.Cancel(); @@ -20,7 +21,7 @@ public void Test_BindOnSchedule() value = 0f; motion = LMotion.Create(1f, 0f, 1f) - .WithBindOnSchedule() + .WithImmediateBind() .Bind(x => value = x); motion.Cancel(); @@ -29,14 +30,14 @@ public void Test_BindOnSchedule() } [Test] - public void Test_BindOnSchedule_AnimationCurve() + public void Test_ImmediateBind_AnimationCurve() { var curve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f); var value = 0f; var motion = LMotion.Create(0f, 1f, 1f) .WithEase(curve) - .WithBindOnSchedule() + .WithImmediateBind() .Bind(x => value = x); motion.Cancel(); diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/BindOnScheduleTest.cs.meta b/src/LitMotion/Assets/LitMotion/Tests/Runtime/ImmediateBindTest.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Tests/Runtime/BindOnScheduleTest.cs.meta rename to src/LitMotion/Assets/LitMotion/Tests/Runtime/ImmediateBindTest.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs index b7b02b84..94c3789e 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/MotionSettingsTest.cs @@ -16,7 +16,7 @@ public IEnumerator Test_Create() StartValue = 0f, EndValue = 1f, Duration = 1f, - BindOnSchedule = true, + ImmediateBind = true, }; var x = -1f; From 5000b694ce6f7ef943b30fe6ab0e469fb57a5bdb Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 22:15:04 +0900 Subject: [PATCH 201/224] Revert: MotionCancelBehavior -> CancelBehavior --- .../{MotionCancelBehavior.cs => CancelBehavior.cs} | 2 +- ...ncelBehavior.cs.meta => CancelBehavior.cs.meta} | 0 .../External/UniTask/LitMotionUniTaskExtensions.cs | 6 +++--- .../External/UniTask/UniTaskMotionTaskSource.cs | 2 +- .../Internal/Tasks/AwaitableMotionTaskSource.cs | 2 +- .../Runtime/Internal/Tasks/MotionTaskSourceBase.cs | 14 +++++++------- .../Internal/Tasks/ValueTaskMotionTaskSource.cs | 2 +- .../LitMotion/Runtime/MotionHandleExtensions.cs | 12 ++++++------ .../LitMotion/Tests/Runtime/AwaitableTest.cs | 2 +- 9 files changed, 21 insertions(+), 21 deletions(-) rename src/LitMotion/Assets/LitMotion/Runtime/{MotionCancelBehavior.cs => CancelBehavior.cs} (79%) rename src/LitMotion/Assets/LitMotion/Runtime/{MotionCancelBehavior.cs.meta => CancelBehavior.cs.meta} (100%) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionCancelBehavior.cs b/src/LitMotion/Assets/LitMotion/Runtime/CancelBehavior.cs similarity index 79% rename from src/LitMotion/Assets/LitMotion/Runtime/MotionCancelBehavior.cs rename to src/LitMotion/Assets/LitMotion/Runtime/CancelBehavior.cs index 9826f50b..31d6754d 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionCancelBehavior.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/CancelBehavior.cs @@ -3,7 +3,7 @@ namespace LitMotion /// /// Specifies the behavior when await is canceled. /// - public enum MotionCancelBehavior : byte + public enum CancelBehavior : byte { None, Cancel, diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionCancelBehavior.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/CancelBehavior.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/MotionCancelBehavior.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/CancelBehavior.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs index 8035d882..1ea104f1 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/LitMotionUniTaskExtensions.cs @@ -18,7 +18,7 @@ public static class LitMotionUniTaskExtensions public static UniTask ToUniTask(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; - return new UniTask(UniTaskMotionTaskSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken, out var token), token); + return new UniTask(UniTaskMotionTaskSource.Create(handle, CancelBehavior.Cancel, true, cancellationToken, out var token), token); } /// @@ -28,7 +28,7 @@ public static UniTask ToUniTask(this MotionHandle handle, CancellationToken canc /// Behavior when canceling /// CancellationToken /// - public static UniTask ToUniTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, CancellationToken cancellationToken = default) + public static UniTask ToUniTask(this MotionHandle handle, CancelBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; return new UniTask(UniTaskMotionTaskSource.Create(handle, cancelBehavior, true, cancellationToken, out var token), token); @@ -42,7 +42,7 @@ public static UniTask ToUniTask(this MotionHandle handle, MotionCancelBehavior c /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static UniTask ToUniTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) + public static UniTask ToUniTask(this MotionHandle handle, CancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return UniTask.CompletedTask; return new UniTask(UniTaskMotionTaskSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken, out var token), token); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionTaskSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionTaskSource.cs index 851ebcd1..2263eaa3 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionTaskSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/External/UniTask/UniTaskMotionTaskSource.cs @@ -20,7 +20,7 @@ static UniTaskMotionTaskSource() UniTaskCompletionSourceCore core; - public static IUniTaskSource Create(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) + public static IUniTaskSource Create(MotionHandle motionHandle, CancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionTaskSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionTaskSource.cs index ee850434..49771152 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionTaskSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/AwaitableMotionTaskSource.cs @@ -44,7 +44,7 @@ public static AwaitableMotionTaskSource CanceledSource AwaitableMotionTaskSource() : base() { } - public static AwaitableMotionTaskSource Create(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) + public static AwaitableMotionTaskSource Create(MotionHandle motionHandle, CancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionTaskSourceBase.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionTaskSourceBase.cs index a021e548..c0f84b83 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionTaskSourceBase.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/MotionTaskSourceBase.cs @@ -15,7 +15,7 @@ public MotionTaskSourceBase() readonly Action onCompleteCallbackDelegate; MotionHandle motionHandle; - MotionCancelBehavior cancelBehavior; + CancelBehavior cancelBehavior; bool cancelAwaitOnMotionCanceled; CancellationToken cancellationToken; CancellationTokenRegistration cancellationRegistration; @@ -54,20 +54,20 @@ protected void OnCompleteCallbackDelegate() } } - protected static void OnCanceledTokenReceived(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior) + protected static void OnCanceledTokenReceived(MotionHandle motionHandle, CancelBehavior cancelBehavior) { switch (cancelBehavior) { - case MotionCancelBehavior.Cancel: + case CancelBehavior.Cancel: motionHandle.Cancel(); break; - case MotionCancelBehavior.Complete: + case CancelBehavior.Complete: motionHandle.Complete(); break; } } - protected void Initialize(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) + protected void Initialize(MotionHandle motionHandle, CancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken) { this.motionHandle = motionHandle; this.cancelBehavior = cancelBehavior; @@ -102,10 +102,10 @@ protected void Initialize(MotionHandle motionHandle, MotionCancelBehavior cancel { default: break; - case MotionCancelBehavior.Cancel: + case CancelBehavior.Cancel: source.motionHandle.Cancel(); break; - case MotionCancelBehavior.Complete: + case CancelBehavior.Complete: source.motionHandle.Complete(); break; } diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionTaskSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionTaskSource.cs index 79609b61..31ef414a 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionTaskSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/Tasks/ValueTaskMotionTaskSource.cs @@ -31,7 +31,7 @@ static ValueTaskMotionTaskSource FromCanceled(out short token) ValueTaskMotionTaskSource() : base() { } - public static IValueTaskSource Create(MotionHandle motionHandle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) + public static IValueTaskSource Create(MotionHandle motionHandle, CancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index 5eb931fa..b823f87c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -228,7 +228,7 @@ public static MotionAwaiter GetAwaiter(this MotionHandle handle) public static ValueTask ToValueTask(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; - var source = ValueTaskMotionTaskSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken, out var token); + var source = ValueTaskMotionTaskSource.Create(handle, CancelBehavior.Cancel, true, cancellationToken, out var token); return new ValueTask(source, token); } @@ -239,7 +239,7 @@ public static ValueTask ToValueTask(this MotionHandle handle, CancellationToken /// Behavior when canceling /// CancellationToken /// - public static ValueTask ToValueTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, CancellationToken cancellationToken = default) + public static ValueTask ToValueTask(this MotionHandle handle, CancelBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; var source = ValueTaskMotionTaskSource.Create(handle, cancelBehavior, true, cancellationToken, out var token); @@ -254,7 +254,7 @@ public static ValueTask ToValueTask(this MotionHandle handle, MotionCancelBehavi /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static ValueTask ToValueTask(this MotionHandle handle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) + public static ValueTask ToValueTask(this MotionHandle handle, CancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return default; var source = ValueTaskMotionTaskSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken, out var token); @@ -271,7 +271,7 @@ public static ValueTask ToValueTask(this MotionHandle handle, MotionCancelBehavi public static Awaitable ToAwaitable(this MotionHandle handle, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionTaskSource.CompletedSource.Awaitable; - return AwaitableMotionTaskSource.Create(handle, MotionCancelBehavior.Cancel, true, cancellationToken).Awaitable; + return AwaitableMotionTaskSource.Create(handle, CancelBehavior.Cancel, true, cancellationToken).Awaitable; } /// @@ -281,7 +281,7 @@ public static Awaitable ToAwaitable(this MotionHandle handle, CancellationToken /// Behavior when canceling /// CancellationToken /// - public static Awaitable ToAwaitable(this MotionHandle handle, MotionCancelBehavior cancelBehavior, CancellationToken cancellationToken = default) + public static Awaitable ToAwaitable(this MotionHandle handle, CancelBehavior cancelBehavior, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionTaskSource.CompletedSource.Awaitable; return AwaitableMotionTaskSource.Create(handle, cancelBehavior, true, cancellationToken).Awaitable; @@ -295,7 +295,7 @@ public static Awaitable ToAwaitable(this MotionHandle handle, MotionCancelBehavi /// Whether to link MotionHandle.Cancel() to task cancellation /// CancellationToken /// - public static Awaitable ToAwaitable(this MotionHandle handle, MotionCancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) + public static Awaitable ToAwaitable(this MotionHandle handle, CancelBehavior cancelBehavior, bool cancelAwaitOnMotionCanceled, CancellationToken cancellationToken = default) { if (!handle.IsActive()) return AwaitableMotionTaskSource.CompletedSource.Awaitable; return AwaitableMotionTaskSource.Create(handle, cancelBehavior, cancelAwaitOnMotionCanceled, cancellationToken).Awaitable; diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs index 10372cce..71a0c640 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/AwaitableTest.cs @@ -108,7 +108,7 @@ public async Task Test_Awaitable_CancelWhileAwait_WithoutCancelAwaitOnMotionCanc try { - await handle.ToAwaitable(MotionCancelBehavior.Cancel, false); + await handle.ToAwaitable(CancelBehavior.Cancel, false); } catch (OperationCanceledException) { From 5e52e056d16c238b4a616336dcf93ef8a17dff63 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 23:08:14 +0900 Subject: [PATCH 202/224] Update: package.json package version --- src/LitMotion/Assets/LitMotion/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LitMotion/Assets/LitMotion/package.json b/src/LitMotion/Assets/LitMotion/package.json index 27cdbd84..a549aa47 100644 --- a/src/LitMotion/Assets/LitMotion/package.json +++ b/src/LitMotion/Assets/LitMotion/package.json @@ -1,6 +1,6 @@ { "name": "com.annulusgames.lit-motion", - "version": "1.9.0", + "version": "2.0.0", "displayName": "LitMotion", "description": "Lightning-fast and Zero Allocation Tween Library for Unity.", "keywords": [ From 60cc3eef3ce60def51ef7e908637e366533bc261 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Fri, 20 Dec 2024 23:43:32 +0900 Subject: [PATCH 203/224] Fix: LitMotion Animation inspectot --- .../Assets/LitMotion.Animation/Editor/AnimationComponentView.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs index f392fde7..be38e526 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/AnimationComponentView.cs @@ -48,6 +48,7 @@ public AnimationComponentView() flexGrow = 1f, } }; + root.Clear(); Add(root); foldout = new Foldout From 5fea753eec21148d64eb1dcaa9418f9c38197146 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 00:05:12 +0900 Subject: [PATCH 204/224] Update: tests --- src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs index 478d725b..80b681f8 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/UniTaskTest.cs @@ -42,7 +42,7 @@ public IEnumerator Test_ToUniTask_CompleteAndCancelAwait() => UniTask.ToCoroutin try { - await handle.ToUniTask(MotionCancelBehavior.Complete, source.Token); + await handle.ToUniTask(CancelBehavior.Complete, source.Token); } catch (OperationCanceledException) { @@ -69,7 +69,7 @@ public IEnumerator Test_ToUniTask_CancelAwait() => UniTask.ToCoroutine(async () try { - await handle.ToUniTask(MotionCancelBehavior.Cancel, source.Token); + await handle.ToUniTask(CancelBehavior.Cancel, source.Token); } catch (OperationCanceledException) { @@ -136,7 +136,7 @@ public IEnumerator Test_CancelWhileAwait_WithoutCancelAwaitOnMotionCanceled() => DelayedCall(0.2f, () => handle.Cancel()).Forget(); try { - await handle.ToUniTask(MotionCancelBehavior.Cancel, false); + await handle.ToUniTask(CancelBehavior.Cancel, false); } catch (OperationCanceledException) { From 4ff7568a65e00f8c03b65f29625cf14c0f0fd1ab Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 00:07:47 +0900 Subject: [PATCH 205/224] Update: LitMotionAnimation API --- .../Editor/LitMotionAnimationEditor.cs | 15 +++++---------- .../Runtime/LitMotionAnimation.cs | 13 +++++++++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 34221c95..e4939c1b 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -50,7 +50,7 @@ void OnDisable() { if (!EditorApplication.isPlayingOrWillChangePlaymode && target != null) { - ((LitMotionAnimation)target).Reset(); + ((LitMotionAnimation)target).Stop(); } EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; @@ -60,7 +60,7 @@ void OnPlayModeStateChanged(PlayModeStateChange state) { if (state == PlayModeStateChange.ExitingEditMode) { - ((LitMotionAnimation)target).Reset(); + ((LitMotionAnimation)target).Stop(); } } @@ -199,26 +199,21 @@ VisualElement CreateDebugPanel() flexGrow = 1f, } }; - var restartButton = new Button(() => - { - var animation = (LitMotionAnimation)target; - animation.Reset(); - animation.Play(); - }) + var restartButton = new Button(() => ((LitMotionAnimation)target).Restart()) { text = "Restart", style = { flexGrow = 1f, } }; - var stopButton = new Button(() => ((LitMotionAnimation)target).Stop()) + var stopButton = new Button(() => ((LitMotionAnimation)target).Pause()) { text = "Stop", style = { flexGrow = 1f, } }; - var resetButton = new Button(() => ((LitMotionAnimation)target).Reset()) + var resetButton = new Button(() => ((LitMotionAnimation)target).Stop()) { text = "Reset", style = { diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 5f4e0599..29e65bbe 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using LitMotion.Animation.Components; using LitMotion.Collections; using UnityEngine; @@ -100,7 +99,7 @@ public void Play() } } - public void Stop() + public void Pause() { foreach (var component in playingComponents.AsSpan()) { @@ -109,7 +108,7 @@ public void Stop() } } - public void Reset() + public void Stop() { var span = playingComponents.AsSpan(); span.Reverse(); @@ -124,6 +123,12 @@ public void Reset() queue.Clear(); } + public void Restart() + { + Stop(); + Play(); + } + public bool IsPlaying { get @@ -142,7 +147,7 @@ public bool IsPlaying void OnDestroy() { - Reset(); + Stop(); } } } \ No newline at end of file From 9a3382548d487c26d17f4f480a497b1a841a0da4 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 00:09:45 +0900 Subject: [PATCH 206/224] Change: rename Revert -> Stop --- .../Runtime/Components/ControlComponents.cs | 11 +++++------ .../Runtime/Components/ValueComponents.cs | 4 ++-- .../LitMotion.Animation/Runtime/LitMotionAnimation.cs | 2 +- .../Runtime/LitMotionAnimationComponent.cs | 2 +- .../Runtime/PropertyAnimationComponent.cs | 2 +- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs index 5aeb604d..51e6dda3 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs @@ -16,7 +16,7 @@ public override MotionHandle Play() .RunWithoutBinding(); } - public override void Revert() { } + public override void Stop() { } } [Serializable] @@ -25,18 +25,17 @@ public sealed class EventComponent : LitMotionAnimationComponent { [Space(5f)] [SerializeField] UnityEvent onPlay; - [SerializeField] UnityEvent onRevert; + [SerializeField] UnityEvent onStop; public override MotionHandle Play() { onPlay.Invoke(); - return LMotion.Create(0f, 1f, 0f) - .RunWithoutBinding(); + return MotionHandle.None; } - public override void Revert() + public override void Stop() { - onRevert.Invoke(); + onStop.Invoke(); } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs index fdbaeb71..b6dd690b 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs @@ -23,7 +23,7 @@ public override MotionHandle Play() }); } - public override void Revert() { } + public override void Stop() { } } [Serializable] @@ -75,6 +75,6 @@ public override MotionHandle Play() }); } - public override void Revert() { } + public override void Stop() { } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 29e65bbe..352ea9c4 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -116,7 +116,7 @@ public void Stop() { var handle = component.TrackedHandle; handle.TryCancel(); - component.Revert(); + component.Stop(); } playingComponents.Clear(); diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs index 22408e87..6bfb8cb2 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs @@ -26,7 +26,7 @@ public LitMotionAnimationComponent() public string DisplayName => displayName; public abstract MotionHandle Play(); - public abstract void Revert(); + public abstract void Stop(); public MotionHandle TrackedHandle { get; set; } } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs index 8f5fc400..2220463e 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs @@ -17,7 +17,7 @@ public abstract class PropertyAnimationComponent Date: Sat, 21 Dec 2024 00:19:53 +0900 Subject: [PATCH 207/224] Fix: error when animation contains MotionHandle.None --- .../Runtime/LitMotionAnimation.cs | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 352ea9c4..3e42656e 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -36,10 +36,18 @@ void MoveNextMotion() { try { - var handle = queuedComponent.Play().Preserve(); - MotionManager.GetManagedDataRef(handle, false).OnCompleteAction += MoveNextMotion; - queuedComponent.TrackedHandle = handle; - playingComponents.Add(queuedComponent); + var handle = queuedComponent.Play(); + if (handle.IsActive()) + { + handle.Preserve(); + MotionManager.GetManagedDataRef(handle, false).OnCompleteAction += MoveNextMotion; + queuedComponent.TrackedHandle = handle; + playingComponents.Add(queuedComponent); + } + else + { + MoveNextMotion(); + } } catch (Exception ex) { @@ -86,9 +94,14 @@ public void Play() try { - var handle = component.Play().Preserve(); + var handle = component.Play(); component.TrackedHandle = handle; - playingComponents.Add(component); + + if (handle.IsActive()) + { + handle.Preserve(); + playingComponents.Add(component); + } } catch (Exception ex) { @@ -117,6 +130,7 @@ public void Stop() var handle = component.TrackedHandle; handle.TryCancel(); component.Stop(); + component.TrackedHandle = handle; } playingComponents.Clear(); From d97a09c57a9d79789db9bdd382698c6990a36f8d Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 01:00:58 +0900 Subject: [PATCH 208/224] Add: PlayLitMotionAnimationComponent --- .../Runtime/Components/ControlComponents.cs | 20 ++++++++++++++++++- .../Runtime/LitMotionAnimation.cs | 15 +++++++++----- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs index 51e6dda3..42348cd2 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs @@ -30,7 +30,7 @@ public sealed class EventComponent : LitMotionAnimationComponent public override MotionHandle Play() { onPlay.Invoke(); - return MotionHandle.None; + return LMotion.Create(0f, 1f, 0f).RunWithoutBinding(); } public override void Stop() @@ -38,4 +38,22 @@ public override void Stop() onStop.Invoke(); } } + + [Serializable] + [LitMotionAnimationComponentMenu("Control/Play LitMotion Animation")] + public sealed class PlayLitMotionAnimationComponent : LitMotionAnimationComponent + { + [SerializeField] LitMotionAnimation target; + + public override MotionHandle Play() + { + target.Play(); + return LMotion.Create(0f, 1f, 0f).RunWithoutBinding(); + } + + public override void Stop() + { + target.Stop(); + } + } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 3e42656e..de2eac80 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -37,14 +37,18 @@ void MoveNextMotion() try { var handle = queuedComponent.Play(); - if (handle.IsActive()) + var isActive = handle.IsActive(); + + if (isActive) { handle.Preserve(); MotionManager.GetManagedDataRef(handle, false).OnCompleteAction += MoveNextMotion; - queuedComponent.TrackedHandle = handle; - playingComponents.Add(queuedComponent); } - else + + queuedComponent.TrackedHandle = handle; + playingComponents.Add(queuedComponent); + + if (!isActive) { MoveNextMotion(); } @@ -100,8 +104,9 @@ public void Play() if (handle.IsActive()) { handle.Preserve(); - playingComponents.Add(component); } + + playingComponents.Add(component); } catch (Exception ex) { From 9272eb36a6f13a961954d08478f49ab7aa1c665a Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 02:03:02 +0900 Subject: [PATCH 209/224] Fix: LitMotionEditor inspector buttons --- .../LitMotion.Animation/Editor/LitMotionAnimationEditor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 34221c95..3adb35bd 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -213,14 +213,14 @@ VisualElement CreateDebugPanel() }; var stopButton = new Button(() => ((LitMotionAnimation)target).Stop()) { - text = "Stop", + text = "Pause", style = { flexGrow = 1f, } }; var resetButton = new Button(() => ((LitMotionAnimation)target).Reset()) { - text = "Reset", + text = "Stop", style = { flexGrow = 1f, } From e904d557983cd42ecd9e0e5b955ef2ff61bb7e6e Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 12:29:03 +0900 Subject: [PATCH 210/224] Fix: no copy is done when allocating the buffer in sequence builder --- .../Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs index f3398390..9555a93c 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs @@ -94,6 +94,7 @@ void AddItem(in MotionSequenceItem item) else if (buffer.Length == count) { var newBuffer = ArrayPool.Shared.Rent(count * 2); + buffer.CopyTo(newBuffer.AsSpan(0, count)); ArrayPool.Shared.Return(buffer); buffer = newBuffer; } From 8d52099a88b1e5912a0c2775fce3a43ac68a54e4 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 13:41:25 +0900 Subject: [PATCH 211/224] Fix: LitMotionAnimation --- .../Editor/LitMotionAnimationEditor.cs | 8 ++++---- .../Runtime/Components/ControlComponents.cs | 7 ++++++- .../Runtime/LitMotionAnimation.cs | 18 +++++++++++++++++- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 10f3fd9d..4e5d1cec 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -133,7 +133,7 @@ VisualElement CreateComponentsPanel() box.schedule.Execute(() => { - var enabled = IsPlaying(); + var enabled = IsActive(); foreach (var view in views) { view.SetEnabled(enabled); @@ -228,7 +228,7 @@ VisualElement CreateDebugPanel() buttonGroup.schedule.Execute(() => { - var enabled = !IsPlaying(); + var enabled = !IsActive(); restartButton.SetEnabled(enabled); stopButton.SetEnabled(enabled); resetButton.SetEnabled(enabled); @@ -341,9 +341,9 @@ ContextualMenuManipulator CreateContextMenuManipulator(SerializedProperty proper return manipulator; } - bool IsPlaying() + bool IsActive() { - return !((LitMotionAnimation)target).IsPlaying; + return !((LitMotionAnimation)target).IsActive; } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs index 42348cd2..97d8203a 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs @@ -48,7 +48,12 @@ public sealed class PlayLitMotionAnimationComponent : LitMotionAnimationComponen public override MotionHandle Play() { target.Play(); - return LMotion.Create(0f, 1f, 0f).RunWithoutBinding(); + return LMotion.Create(0f, 1f, float.MaxValue) + .Bind(this, (x, state) => + { + if (target == null) TrackedHandle.TryComplete(); + if (!target.IsPlaying) TrackedHandle.TryComplete(); + }); } public override void Stop() diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index de2eac80..85aac4d3 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -148,7 +148,7 @@ public void Restart() Play(); } - public bool IsPlaying + public bool IsActive { get { @@ -164,6 +164,22 @@ public bool IsPlaying } } + public bool IsPlaying + { + get + { + if (queue.Count > 0) return true; + + foreach (var component in playingComponents.AsSpan()) + { + var handle = component.TrackedHandle; + if (handle.IsPlaying() && handle.PlaybackSpeed != 0f) return true; + } + + return false; + } + } + void OnDestroy() { Stop(); From 2f0a8a6a76539287192366fce312ce169fc83587 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 14:38:20 +0900 Subject: [PATCH 212/224] Change: rename animation component events --- .../Runtime/Components/ControlComponents.cs | 16 +++++++++++++--- .../Runtime/Components/ValueComponents.cs | 4 ++-- .../Runtime/LitMotionAnimation.cs | 12 +++++++++--- .../Runtime/LitMotionAnimationComponent.cs | 5 ++++- .../Runtime/PropertyAnimationComponent.cs | 11 +---------- 5 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs index 97d8203a..8a799e2e 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ControlComponents.cs @@ -16,7 +16,7 @@ public override MotionHandle Play() .RunWithoutBinding(); } - public override void Stop() { } + public override void OnStop() { } } [Serializable] @@ -33,7 +33,7 @@ public override MotionHandle Play() return LMotion.Create(0f, 1f, 0f).RunWithoutBinding(); } - public override void Stop() + public override void OnStop() { onStop.Invoke(); } @@ -56,7 +56,17 @@ public override MotionHandle Play() }); } - public override void Stop() + public override void OnResume() + { + target.Play(); + } + + public override void OnPause() + { + target.Pause(); + } + + public override void OnStop() { target.Stop(); } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs index b6dd690b..b90789dd 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/Components/ValueComponents.cs @@ -23,7 +23,7 @@ public override MotionHandle Play() }); } - public override void Stop() { } + public override void OnStop() { } } [Serializable] @@ -75,6 +75,6 @@ public override MotionHandle Play() }); } - public override void Stop() { } + public override void OnStop() { } } } \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs index 85aac4d3..4351b75a 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimation.cs @@ -71,6 +71,8 @@ public void Play() { handle.PlaybackSpeed = 1f; isPlaying = true; + + component.OnResume(); } } @@ -122,7 +124,11 @@ public void Pause() foreach (var component in playingComponents.AsSpan()) { var handle = component.TrackedHandle; - if (handle.IsActive()) handle.PlaybackSpeed = 0f; + if (handle.IsActive()) + { + handle.PlaybackSpeed = 0f; + component.OnPause(); + } } } @@ -134,7 +140,7 @@ public void Stop() { var handle = component.TrackedHandle; handle.TryCancel(); - component.Stop(); + component.OnStop(); component.TrackedHandle = handle; } @@ -173,7 +179,7 @@ public bool IsPlaying foreach (var component in playingComponents.AsSpan()) { var handle = component.TrackedHandle; - if (handle.IsPlaying() && handle.PlaybackSpeed != 0f) return true; + if (handle.IsPlaying()) return true; } return false; diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs index 6bfb8cb2..482e7e68 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/LitMotionAnimationComponent.cs @@ -26,7 +26,10 @@ public LitMotionAnimationComponent() public string DisplayName => displayName; public abstract MotionHandle Play(); - public abstract void Stop(); + + public virtual void OnResume() { } + public virtual void OnPause() { } + public virtual void OnStop() { } public MotionHandle TrackedHandle { get; set; } } diff --git a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs index 2220463e..8ef4cb83 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Runtime/PropertyAnimationComponent.cs @@ -17,23 +17,16 @@ public abstract class PropertyAnimationComponent Date: Sat, 21 Dec 2024 14:51:52 +0900 Subject: [PATCH 213/224] Fix: MotionSequenceSource --- .../LitMotion/Runtime/Sequences/MotionSequenceSource.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs index ade1d39f..475ef071 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs @@ -38,6 +38,11 @@ public static void Return(MotionSequenceSource source) ArrayPool.Shared.Return(source.itemBuffer); source.itemBuffer = null; } + + source.itemCount = default; + source.duration = default; + source.time = default; + pool.TryPush(source); } From b7653c80dcca111cd7fdabc3186d7bc629f27ef0 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 14:56:39 +0900 Subject: [PATCH 214/224] Change: move LitMotion.Sequneces -> LitMotion --- .../Runtime/{Sequences => }/LSequence.cs | 2 +- .../Runtime/{Sequences => }/LSequence.cs.meta | 0 .../{Sequences => }/MotionSequenceBuilder.cs | 2 +- .../MotionSequenceBuilder.cs.meta | 0 .../{Sequences => }/MotionSequenceSource.cs | 2 +- .../{Sequences => }/MotionSequenceSource.cs.meta | 0 .../Assets/LitMotion/Runtime/Sequences.meta | 8 -------- .../Runtime/Sequences/LitMotion.Sequences.asmdef | 16 ---------------- .../Sequences/LitMotion.Sequences.asmdef.meta | 7 ------- .../Tests/Runtime/LitMotion.Tests.Runtime.asmdef | 1 - .../LitMotion/Tests/Runtime/SequenceTest.cs | 1 - 11 files changed, 3 insertions(+), 36 deletions(-) rename src/LitMotion/Assets/LitMotion/Runtime/{Sequences => }/LSequence.cs (88%) rename src/LitMotion/Assets/LitMotion/Runtime/{Sequences => }/LSequence.cs.meta (100%) rename src/LitMotion/Assets/LitMotion/Runtime/{Sequences => }/MotionSequenceBuilder.cs (99%) rename src/LitMotion/Assets/LitMotion/Runtime/{Sequences => }/MotionSequenceBuilder.cs.meta (100%) rename src/LitMotion/Assets/LitMotion/Runtime/{Sequences => }/MotionSequenceSource.cs (99%) rename src/LitMotion/Assets/LitMotion/Runtime/{Sequences => }/MotionSequenceSource.cs.meta (100%) delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences.meta delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef delete mode 100644 src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs b/src/LitMotion/Assets/LitMotion/Runtime/LSequence.cs similarity index 88% rename from src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs rename to src/LitMotion/Assets/LitMotion/Runtime/LSequence.cs index 436110df..69b56c20 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/LSequence.cs @@ -1,4 +1,4 @@ -namespace LitMotion.Sequences +namespace LitMotion { public static class LSequence { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/LSequence.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Sequences/LSequence.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/LSequence.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs similarity index 99% rename from src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs rename to src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs index 9555a93c..f59ee8de 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs @@ -3,7 +3,7 @@ using System.Runtime.CompilerServices; using LitMotion.Collections; -namespace LitMotion.Sequences +namespace LitMotion { internal sealed class MotionSequenceBuilderSource : ILinkedPoolNode { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceBuilder.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceSource.cs similarity index 99% rename from src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs rename to src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceSource.cs index 475ef071..022d0bfd 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceSource.cs @@ -2,7 +2,7 @@ using System.Buffers; using LitMotion.Collections; -namespace LitMotion.Sequences +namespace LitMotion { internal struct MotionSequenceItem : IComparable { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs.meta b/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceSource.cs.meta similarity index 100% rename from src/LitMotion/Assets/LitMotion/Runtime/Sequences/MotionSequenceSource.cs.meta rename to src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceSource.cs.meta diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences.meta b/src/LitMotion/Assets/LitMotion/Runtime/Sequences.meta deleted file mode 100644 index f804d001..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0ba8bf58526f94c4ab397f98ed61fdce -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef deleted file mode 100644 index 776fe6a9..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "LitMotion.Sequences", - "rootNamespace": "", - "references": [ - "GUID:3b570a5146f9d4f0fa107ed4559471a3" - ], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [], - "versionDefines": [], - "noEngineReferences": false -} \ No newline at end of file diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef.meta b/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef.meta deleted file mode 100644 index 2466e912..00000000 --- a/src/LitMotion/Assets/LitMotion/Runtime/Sequences/LitMotion.Sequences.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: aa9cad64d4fae43d2a90e595aea6cc7f -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef b/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef index 234c2141..bbe5783a 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/LitMotion.Tests.Runtime.asmdef @@ -7,7 +7,6 @@ "Unity.Burst", "Unity.Collections", "LitMotion", - "LitMotion.Sequences", "LitMotion.Extensions", "UniTask", "UniRx" diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs index 1aae2a52..8fc6baeb 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs @@ -1,6 +1,5 @@ using System; using System.Collections; -using LitMotion.Sequences; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; From 67e0b9ffdc4f91be9af86603d094efa898c58986 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 14:56:53 +0900 Subject: [PATCH 215/224] Update: sandbox --- src/LitMotion/Assets/Sandbox/Sandbox.cs | 10 +- src/LitMotion/Assets/Sandbox/Sandbox.unity | 535 +++++++++++++++++- .../SceneTemplateSettings.json | 5 + .../ProjectSettings/VFXManager.asset | 2 +- 4 files changed, 548 insertions(+), 4 deletions(-) diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.cs b/src/LitMotion/Assets/Sandbox/Sandbox.cs index 9c61f2db..3f484978 100644 --- a/src/LitMotion/Assets/Sandbox/Sandbox.cs +++ b/src/LitMotion/Assets/Sandbox/Sandbox.cs @@ -1,6 +1,5 @@ using LitMotion; using LitMotion.Extensions; -using LitMotion.Sequences; using UnityEngine; using UnityEngine.UI; @@ -17,7 +16,14 @@ void Start() .Append(LMotion.Create(-5f, 5f, 0.5f).BindToPositionX(target)) .Append(LMotion.Create(0f, 5f, 0.5f).BindToPositionY(target)) .Append(LMotion.Create(-2f, 2f, 1f).BindToPositionZ(target)) - .Schedule(); + .Append(LMotion.Create(5f, 0f, 0.5f).BindToPositionX(target)) + .Append(LMotion.Create(5f, 0f, 0.5f).BindToPositionY(target)) + .Append(LMotion.Create(2f, 0f, 1f).BindToPositionZ(target)) + .Schedule() + .Preserve() + .AddTo(this); + + slider.maxValue = (float)handle.Duration; } void Update() diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.unity b/src/LitMotion/Assets/Sandbox/Sandbox.unity index 85f1763b..75afd166 100644 --- a/src/LitMotion/Assets/Sandbox/Sandbox.unity +++ b/src/LitMotion/Assets/Sandbox/Sandbox.unity @@ -119,6 +119,70 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &102881324 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 102881325} + - component: {fileID: 102881326} + m_Layer: 0 + m_Name: Animation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &102881325 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 102881324} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &102881326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 102881324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cc6819e64e4c44beb63ea2ef45e1a6d, type: 3} + m_Name: + m_EditorClassIdentifier: + playOnAwake: 1 + animationMode: 1 + components: + - rid: 1071525113668567124 + - rid: 1071525113668567125 + references: + version: 2 + RefIds: + - rid: 1071525113668567124 + type: {class: PlayLitMotionAnimationComponent, ns: LitMotion.Animation.Components, asm: LitMotion.Animation} + data: + displayName: Play LitMotion Animation + enabled: 1 + target: {fileID: 2140566559} + - rid: 1071525113668567125 + type: {class: PlayLitMotionAnimationComponent, ns: LitMotion.Animation.Components, asm: LitMotion.Animation} + data: + displayName: Play LitMotion Animation + enabled: 1 + target: {fileID: 1894144015} --- !u!1 &183474487 GameObject: m_ObjectHideFlags: 0 @@ -478,7 +542,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -741,6 +805,239 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1894144014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1894144019} + - component: {fileID: 1894144018} + - component: {fileID: 1894144017} + - component: {fileID: 1894144016} + - component: {fileID: 1894144015} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1894144015 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894144014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cc6819e64e4c44beb63ea2ef45e1a6d, type: 3} + m_Name: + m_EditorClassIdentifier: + playOnAwake: 0 + animationMode: 1 + components: + - rid: 1071525113668567121 + - rid: 1071525113668567122 + - rid: 1071525113668567123 + references: + version: 2 + RefIds: + - rid: 1071525113668567121 + type: {class: TransformPositionAnimation, ns: LitMotion.Animation.Components, asm: LitMotion.Animation} + data: + displayName: Position + enabled: 1 + target: {fileID: 1894144019} + settings: + startValue: {x: 0, y: 0, z: 0} + endValue: {x: 0, y: 1, z: 0} + duration: 0.25 + ease: 8 + customEaseCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + delay: 0 + delayType: 0 + loops: 1 + loopType: 0 + cancelOnError: 0 + skipValuesDuringDelay: 0 + immediateBind: 0 + schedulerType: 0 + additionalSettings: 0 + relative: 1 + useWorldSpace: 0 + - rid: 1071525113668567122 + type: {class: EventComponent, ns: LitMotion.Animation.Components, asm: LitMotion.Animation} + data: + displayName: Event + enabled: 1 + onPlay: + m_PersistentCalls: + m_Calls: [] + onStop: + m_PersistentCalls: + m_Calls: [] + - rid: 1071525113668567123 + type: {class: TransformPositionAnimation, ns: LitMotion.Animation.Components, asm: LitMotion.Animation} + data: + displayName: Position + enabled: 1 + target: {fileID: 1894144019} + settings: + startValue: {x: 0, y: 0, z: 0} + endValue: {x: 1, y: 0, z: 0} + duration: 0.25 + ease: 0 + customEaseCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + delay: 0 + delayType: 0 + loops: 1 + loopType: 0 + cancelOnError: 0 + skipValuesDuringDelay: 0 + immediateBind: 0 + schedulerType: 0 + additionalSettings: 0 + relative: 1 + useWorldSpace: 0 +--- !u!65 &1894144016 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894144014} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1894144017 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894144014} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1894144018 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894144014} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1894144019 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1894144014} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2009741237 GameObject: m_ObjectHideFlags: 0 @@ -1019,6 +1316,239 @@ RectTransform: m_AnchoredPosition: {x: -5, y: 0} m_SizeDelta: {x: -20, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2140566554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2140566558} + - component: {fileID: 2140566557} + - component: {fileID: 2140566556} + - component: {fileID: 2140566555} + - component: {fileID: 2140566559} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &2140566555 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140566554} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2140566556 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140566554} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2140566557 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140566554} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &2140566558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140566554} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2140566559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140566554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9cc6819e64e4c44beb63ea2ef45e1a6d, type: 3} + m_Name: + m_EditorClassIdentifier: + playOnAwake: 0 + animationMode: 1 + components: + - rid: 1071525113668567121 + - rid: 1071525113668567122 + - rid: 1071525113668567123 + references: + version: 2 + RefIds: + - rid: 1071525113668567121 + type: {class: TransformPositionAnimation, ns: LitMotion.Animation.Components, asm: LitMotion.Animation} + data: + displayName: Position + enabled: 1 + target: {fileID: 2140566558} + settings: + startValue: {x: 0, y: 0, z: 0} + endValue: {x: 0, y: 1, z: 0} + duration: 0.25 + ease: 8 + customEaseCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + delay: 0 + delayType: 0 + loops: 1 + loopType: 0 + cancelOnError: 0 + skipValuesDuringDelay: 0 + immediateBind: 0 + schedulerType: 0 + additionalSettings: 0 + relative: 1 + useWorldSpace: 0 + - rid: 1071525113668567122 + type: {class: EventComponent, ns: LitMotion.Animation.Components, asm: LitMotion.Animation} + data: + displayName: Event + enabled: 1 + onPlay: + m_PersistentCalls: + m_Calls: [] + onStop: + m_PersistentCalls: + m_Calls: [] + - rid: 1071525113668567123 + type: {class: TransformPositionAnimation, ns: LitMotion.Animation.Components, asm: LitMotion.Animation} + data: + displayName: Position + enabled: 1 + target: {fileID: 2140566558} + settings: + startValue: {x: 0, y: 0, z: 0} + endValue: {x: 1, y: 0, z: 0} + duration: 0.25 + ease: 0 + customEaseCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + delay: 0 + delayType: 0 + loops: 1 + loopType: 0 + cancelOnError: 0 + skipValuesDuringDelay: 0 + immediateBind: 0 + schedulerType: 0 + additionalSettings: 0 + relative: 1 + useWorldSpace: 0 --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -1029,3 +1559,6 @@ SceneRoots: - {fileID: 433031339} - {fileID: 284284924} - {fileID: 240099436} + - {fileID: 2140566558} + - {fileID: 1894144019} + - {fileID: 102881325} diff --git a/src/LitMotion/ProjectSettings/SceneTemplateSettings.json b/src/LitMotion/ProjectSettings/SceneTemplateSettings.json index 5e97f839..1edced2a 100644 --- a/src/LitMotion/ProjectSettings/SceneTemplateSettings.json +++ b/src/LitMotion/ProjectSettings/SceneTemplateSettings.json @@ -61,6 +61,11 @@ "type": "UnityEngine.PhysicMaterial", "defaultInstantiationMode": 0 }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial", + "defaultInstantiationMode": 0 + }, { "userAdded": false, "type": "UnityEngine.PhysicsMaterial2D", diff --git a/src/LitMotion/ProjectSettings/VFXManager.asset b/src/LitMotion/ProjectSettings/VFXManager.asset index 386912e3..f99437bb 100644 --- a/src/LitMotion/ProjectSettings/VFXManager.asset +++ b/src/LitMotion/ProjectSettings/VFXManager.asset @@ -14,6 +14,6 @@ VFXManager: m_MaxScrubTime: 30 m_MaxCapacity: 100000000 m_CompiledVersion: 7 - m_RuntimeVersion: 36 + m_RuntimeVersion: 38 m_RuntimeResources: {fileID: 11400000, guid: bc10b42afe3813544bffd38ae2cd893d, type: 2} m_BatchEmptyLifetime: 300 From aae37fc773ad4b3da66a63f60a5bc3042d18b5b8 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 15:08:00 +0900 Subject: [PATCH 216/224] Add: handle.Duration and handle.Loops --- .../Editor/LitMotionAnimationEditor.cs | 4 ++-- .../Runtime/Internal/MotionStorage.cs | 2 +- .../Assets/LitMotion/Runtime/MotionHandle.cs | 24 ++++++++++++++++++- src/LitMotion/Assets/Sandbox/Sandbox.cs | 2 +- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs index 4e5d1cec..e9bcd1cd 100644 --- a/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs +++ b/src/LitMotion/Assets/LitMotion.Animation/Editor/LitMotionAnimationEditor.cs @@ -167,9 +167,9 @@ VisualElement CreateComponentsPanel() var handle = component.TrackedHandle; - if (handle.IsActive() && !double.IsInfinity(handle.Duration)) + if (handle.IsActive() && !double.IsInfinity(handle.TotalDuration)) { - views[i].Progress = Mathf.InverseLerp(0f, (float)handle.Duration, (float)handle.Time); + views[i].Progress = Mathf.InverseLerp(0f, (float)handle.TotalDuration, (float)handle.Time); } else { diff --git a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs index 1698f88d..55d55177 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/Internal/MotionStorage.cs @@ -422,7 +422,7 @@ public void AddToSequence(MotionHandle handle, out double motionDuration) throw new ArgumentException("Cannot add a running motion to a sequence."); } - motionDuration = handle.Duration; + motionDuration = handle.TotalDuration; if (double.IsInfinity(motionDuration)) { throw new ArgumentException("Cannot add an infinitely looping motion to a sequence."); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index e84198a1..3cccc9ac 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -42,10 +42,21 @@ public readonly double Time } } + /// + /// The duration of the motion + /// + public readonly float Duration + { + get + { + return MotionManager.GetDataRef(this, false).Parameters.Duration; + } + } + /// /// The total duration of the motion /// - public readonly double Duration + public readonly double TotalDuration { get { @@ -53,6 +64,17 @@ public readonly double Duration } } + /// + /// The number of loops + /// + public readonly int Loops + { + get + { + return MotionManager.GetDataRef(this, false).Parameters.Loops; + } + } + /// /// The number of loops completed /// diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.cs b/src/LitMotion/Assets/Sandbox/Sandbox.cs index 3f484978..2d796a6b 100644 --- a/src/LitMotion/Assets/Sandbox/Sandbox.cs +++ b/src/LitMotion/Assets/Sandbox/Sandbox.cs @@ -23,7 +23,7 @@ void Start() .Preserve() .AddTo(this); - slider.maxValue = (float)handle.Duration; + slider.maxValue = (float)handle.TotalDuration; } void Update() From 1748b41780930ab9a62269eedea29f829bd9a895 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Sat, 21 Dec 2024 15:10:12 +0900 Subject: [PATCH 217/224] Add: handle.Delay --- .../Assets/LitMotion/Runtime/MotionHandle.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs index 3cccc9ac..c6e9c960 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandle.cs @@ -42,6 +42,17 @@ public readonly double Time } } + /// + /// The delay of the motion + /// + public readonly float Delay + { + get + { + return MotionManager.GetDataRef(this, false).Parameters.Delay; + } + } + /// /// The duration of the motion /// From 498ef08ee91a0051e256d8384d8fb71a006388cc Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Tue, 24 Dec 2024 11:28:57 +0900 Subject: [PATCH 218/224] Update: ja docs --- docs/articles/ja/about.md | 28 ++-- docs/articles/ja/basic-concepts.md | 20 +-- docs/articles/ja/binding.md | 6 +- docs/articles/ja/controlling-motion.md | 76 ++++++++- docs/articles/ja/convert-to-disposable.md | 16 ++ .../articles/ja/custom-animation-component.md | 53 ++++++ .../ja/custom-binding-extension-method.md | 6 +- docs/articles/ja/design-philosophy.md | 4 +- docs/articles/ja/faq.md | 22 +++ docs/articles/ja/integration-r3.md | 2 +- docs/articles/ja/integration-unitask.md | 10 +- docs/articles/ja/integration-zstring.md | 6 +- docs/articles/ja/litmotion-animation-about.md | 11 ++ .../ja/litmotion-animation-component.md | 31 ++++ .../ja/litmotion-animation-installation.md | 41 +++++ .../articles/ja/litmotion-animation-script.md | 19 +++ docs/articles/ja/litmotion-debugger.md | 34 ++++ docs/articles/ja/manual-motion-dispatcher.md | 43 +++++ docs/articles/ja/migrate-from-dotween.md | 155 ++++++++++++++++++ docs/articles/ja/migrate-from-leantween.md | 76 +++++++++ docs/articles/ja/migrate-from-primetween.md | 135 +++++++++++++++ docs/articles/ja/migrate-from-v1.md | 84 ++++++++++ docs/articles/ja/motion-configuration.md | 16 +- docs/articles/ja/motion-settings.md | 56 +++++++ docs/articles/ja/motion-tracker.md | 10 -- docs/articles/ja/package-structure.md | 3 +- docs/articles/ja/reusing-builder.md | 19 --- docs/articles/ja/sequence.md | 69 ++++++++ docs/articles/ja/toc.yml | 60 +++++-- docs/articles/ja/updating-motion-manually.md | 30 ---- .../ja/waiting-for-motion-in-async-await.md | 10 ++ .../ja/waiting-for-motion-in-coroutine.md | 4 +- docs/articles/ja/whats-new-in-v2.md | 69 ++++++++ docs/docfx.json | 3 +- .../img-litmotion-animation-component.png | Bin 0 -> 181206 bytes .../img-litmotion-animation-inspector.png | Bin 0 -> 634776 bytes docs/images/img-litmotion-animation.gif | Bin 0 -> 1004859 bytes docs/images/img-litmotion-debugger.png | Bin 0 -> 77985 bytes ...serializable-motion-settings-inspector.png | Bin 0 -> 71030 bytes docs/images/motion-tracker-window.png | Bin 295620 -> 0 bytes docs/templates/custom/public/main.css | 56 +++++++ 41 files changed, 1139 insertions(+), 144 deletions(-) create mode 100644 docs/articles/ja/convert-to-disposable.md create mode 100644 docs/articles/ja/custom-animation-component.md create mode 100644 docs/articles/ja/faq.md create mode 100644 docs/articles/ja/litmotion-animation-about.md create mode 100644 docs/articles/ja/litmotion-animation-component.md create mode 100644 docs/articles/ja/litmotion-animation-installation.md create mode 100644 docs/articles/ja/litmotion-animation-script.md create mode 100644 docs/articles/ja/litmotion-debugger.md create mode 100644 docs/articles/ja/manual-motion-dispatcher.md create mode 100644 docs/articles/ja/migrate-from-dotween.md create mode 100644 docs/articles/ja/migrate-from-leantween.md create mode 100644 docs/articles/ja/migrate-from-primetween.md create mode 100644 docs/articles/ja/migrate-from-v1.md create mode 100644 docs/articles/ja/motion-settings.md delete mode 100644 docs/articles/ja/motion-tracker.md delete mode 100644 docs/articles/ja/reusing-builder.md create mode 100644 docs/articles/ja/sequence.md delete mode 100644 docs/articles/ja/updating-motion-manually.md create mode 100644 docs/articles/ja/whats-new-in-v2.md create mode 100644 docs/images/img-litmotion-animation-component.png create mode 100644 docs/images/img-litmotion-animation-inspector.png create mode 100644 docs/images/img-litmotion-animation.gif create mode 100644 docs/images/img-litmotion-debugger.png create mode 100644 docs/images/img-serializable-motion-settings-inspector.png delete mode 100644 docs/images/motion-tracker-window.png create mode 100644 docs/templates/custom/public/main.css diff --git a/docs/articles/ja/about.md b/docs/articles/ja/about.md index ad521758..b8b5eae2 100644 --- a/docs/articles/ja/about.md +++ b/docs/articles/ja/about.md @@ -4,9 +4,11 @@ LitMotionはUnity向けのハイパフォーマンスなトゥイーンライブラリです。LitMotionにはTransformなどのコンポーネントや独自のフィールド・プロパティをアニメーションさせるための豊富な機能が含まれており、簡単にアニメーションを作成できます。 -LitMotionは[Magic Tween](https://github.com/AnnulusGames/MagicTween)に続いて私が作成した2つ目のトゥイーンライブラリです。LitMotionはMagic Tweenの実装で得た経験をもとに、必要十分な機能を厳選しつつ、最速で動作させることを念頭に置いて設計されました。トゥイーンの作成や駆動などあらゆるシチュエーションにおいて、他のトゥイーンライブラリと比較して2倍から20倍以上の圧倒的なパフォーマンスを発揮します。当然、トゥイーン作成時のアロケーションも一切ありません。 +LitMotionの最大の特徴は非常に優れたパフォーマンスです。Unityの最新のテクノロジー、DOTSの一部であるC# Job SystemおよびBurst Compilerを全面的に活用した設計となっており、トゥイーンの作成や駆動などあらゆるシチュエーションにおいて、他のトゥイーンライブラリと比較して2倍から20倍以上の圧倒的なパフォーマンスを発揮します。当然、トゥイーン作成時のアロケーションも一切ありません。 -LitMotionは高いパフォーマンスだけでなく、トゥイーンライブラリとして実用に足るだけの豊富な機能を有しています。 +また、v2より複数のモーションを合成するためのSequenceと、Inspectorからトゥイーンアニメーションを作成可能なLitMotion.Animationパッケージが追加されました。これにより機能面においてもDOTween ProやPrimeTweenと同等または以上に強力なライブラリとなっています。 + +## 特徴 * あらゆる値をコード一行でアニメーション可能 * 構造体ベースの設計でゼロアロケーションを達成 @@ -15,14 +17,19 @@ LitMotionは高いパフォーマンスだけでなく、トゥイーンライ * イージングや繰り返しなど複雑な設定を適用可能 * コールバック/コルーチンによる完了の待機 * ゼロアロケーションなテキストアニメーション +* TextMesh Pro / UI Toolkitに対応 * Punch、Shakeなどの特殊なモーション -* UniRxを利用したObservableへの変換 +* UniRx/R3を利用したObservableへの変換 * UniTaskを利用したasync/await対応 * `IMotionOptions`と`IMotionAdapter`を用いた型の拡張 +* `SerializableMotionSettings`によるInspectorとの統合 +* デバッグ用のAPIおよびLitMotion Debuggerウィンドウ +* Sequenceによるアニメーションの合成 +* Inspectorから複雑なアニメーションを作成可能なLitMotion.Animationパッケージ ### パフォーマンス -LitMotionはモーションの作成/実行の両方においてMagic Tweenを含むあらゆるUnity向けのトゥイーンライブラリよりも高速に動作します。ベンチマークの結果を以下に示します。 +LitMotionはモーションの作成/実行の両方においてあらゆるUnity向けのトゥイーンライブラリよりも高速に動作します。ベンチマークの結果を以下に示します。 ![benchmark_1](../../images/benchmark_startup_64000_float.png) @@ -44,16 +51,3 @@ LitMotionはモーションの作成/実行の両方においてMagic Tweenを ベンチマークに使用したプロジェクト及びソースコードは[こちらのリポジトリ](https://github.com/AnnulusGames/TweenPerformance)にて確認できます。 -### DOTween/Magic Tweenとの比較 - -他のUnity向けのトゥイーンライブラリとして、有名なDOTweenや先ほど挙げたMagic Tweenなどがあります。これらのライブラリと比較すると、LitMotionは以下のような特徴を持ちます。 - -* 良好なパフォーマンス - - LitMotionはDOTweenと比較して5倍ほど高速に動作します。 - - より高速なMagic Tweenと比較しても1.5倍ほど高速です。 - - また、モーション作成時のアロケーションは一切ありません。 -* 厳選された機能 - - LitMotionは必要十分な機能を持ちますが、MagicTweenやDOTweenと比較するとその機能は少なめです。これはこのライブラリが「Simpleであること」というコンセプトの元に作成されているためです。(もちろん拡張の余地は用意されています) -* シンプルで柔軟なAPI - - メソッドチェーンを用いた自然な手触りで、モーションの作成からバインドまでをスムーズに書くことができます。 - - Magic TweenやDOTweenとは異なり、LitMotionはコンポーネントに対する拡張メソッドを含みません。拡張メソッドの利点は私も把握していますが、可読性の面で混乱を招くこともあります。LitMotionはAPIの簡潔さを優先しエントリーポイントを`LMotion`クラスに統一しています。 diff --git a/docs/articles/ja/basic-concepts.md b/docs/articles/ja/basic-concepts.md index 9d770d4b..dc53d898 100644 --- a/docs/articles/ja/basic-concepts.md +++ b/docs/articles/ja/basic-concepts.md @@ -50,24 +50,6 @@ if (handle.IsActive()) } ``` -また、`AddTo()`でキャンセルのタイミングをGameObjectに紐付けることも可能です。 - -```cs -LMotion.Create(0f, 10f, 3f) - .Bind(x => value = x) - .AddTo(this.gameObject); -``` - -`CompositeMotionHandle`を用いることで複数のMotionHandleを一括管理できます。 - -```cs -var handles = new CompositeMotionHandle(); - -LMotion.Create(0f, 10f, 2f) - .Bind(() => Debug.Log(x)) - .AddTo(handles); -``` - 詳細は[モーションを制御する](controlling-motion.md)を参照してください。 ### MotionScheduler @@ -82,7 +64,7 @@ LMotion.Create(0f, 10f, 2f) 詳細は[モーションの設定](motion-configuration.md)を参照してください。 -### IMotionAdapter +### MotionAdapter 2つの値を補間する処理は`IMotionAdapter`を実装した構造体に記述されています。組み込みのAdapterは`LitMotion.Adapters`名前空間内に定義されています。 diff --git a/docs/articles/ja/binding.md b/docs/articles/ja/binding.md index d4222898..c484df28 100644 --- a/docs/articles/ja/binding.md +++ b/docs/articles/ja/binding.md @@ -1,6 +1,6 @@ # 値のバインディング -LitMotionでは、モーションの作成時に値を対象のフィールドやプロパティに紐付ける必要があります。モーションの値はMotionDispatcherのUpdate(LateUpdate, FixedUpdate)関数内で更新され、バインドしたフィールド/プロパティに最新の値が反映されます。 +LitMotionでは、モーションの作成時に値を対象のフィールドやプロパティに紐付ける必要があります。モーションの値はSchedulerで指定されたPlayerLoop内で更新され、バインドしたフィールド/プロパティに最新の値が反映されます。 ```cs var value = 0f; @@ -12,7 +12,7 @@ LMotion.Create(0f, 10f, 2f) `Bind()`に渡すラムダ式は外部変数をキャプチャするためアロケーションが発生します。(これはクロージャと呼ばれます) -対象がclassの場合には`Bind()`の代わりに`BindWithState()`を利用することでクロージャによるアロケーションを回避できます。 +また、`Bind()`の引数にstateを渡すことでクロージャによるアロケーションを回避できます。 ```cs class FooClass @@ -23,7 +23,7 @@ class FooClass var target = new FooClass(); LMotion.Create(0f, 10f, 2f) - .BindWithState(target, (x, target) => target.Value = x); // 第一引数に対象のオブジェクトを渡す + .Bind(target, (x, target) => target.Value = x); // 第一引数に対象のオブジェクトを渡す ``` ### 拡張メソッド diff --git a/docs/articles/ja/controlling-motion.md b/docs/articles/ja/controlling-motion.md index ab304403..433ac4eb 100644 --- a/docs/articles/ja/controlling-motion.md +++ b/docs/articles/ja/controlling-motion.md @@ -24,26 +24,88 @@ var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); handle.Cancel(); ``` +### モーションの存在チェック + +上記のメソッド/プロパティはモーションが既に終了している、または`MotionHandle`が初期化されていない場合に例外をスローします。`MotionHandle`の指すモーションが存在しているかをチェックするには`IsActive()`を使用します。 + +```cs +var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); + +if (handle.IsActive()) handle.Complete(); +``` + +また、モーションが存在していたら`Complate()` / `Cancel()`を呼び出したい場合、`TryComplate()` / `TryCancel()`を用いて簡潔に記述できます。 + +```cs +handle.TryComplete(); +handle.TryCancel(); +``` + +### モーションの再利用 + +デフォルトでは完了したモーションは自動的に破棄されるため、`MotionHandle`を再利用することはできません。 + +同じモーションを再利用したい場合は`Preserve()`を使用します。これを呼び出すことで、完了後にモーションが破棄されなくなります。 + +```cs +// Preserve()を呼び出す +handle.Preserve(); + +// 完了後も再利用できる +handle.Complete(); +handle.Time = 0; +``` + +ただし、`Preserve()`を呼び出したモーションは明示的に`Cancel()`が呼ばれるまで動作し続けます。使用後は`Cancel()`を呼び出すか、`AddTo()`でGameObjectなどにライフタイムを紐づけてください。 + ### モーションの再生速度 -`MotionHandle.PlaybackSpeed`プロパティを操作することで、モーションの再生速度を変更することができます。これを使用してモーションのスロー再生や一時停止などを行うことができます。 +`MotionHandle.PlaybackSpeed`プロパティを操作することで、モーションの再生速度を変更することができます。これを使用してモーションのスロー再生や逆再生、一時停止などを行うことができます。 ```cs var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); handle.PlaybackSpeed = 2f; ``` -> [!WARNING] -> PlaybackSpeedは0未満の値をサポートしていません。`MotionHandle.PlaybackSpeed`に負の値を設定しようとすると例外をスローします。 +### モーションを手動で制御する -### モーションの存在チェック +`Time`プロパティを用いることで手動でモーションを制御することができます。 -上記のメソッド/プロパティはモーションが既に終了している、または`MotionHandle`が初期化されていない場合に例外をスローします。`MotionHandle`の指すモーションが存在しているかをチェックするには`IsActive()`を使用します。 +```cs +// モーションの経過時間を手動で設定する +handle.Time = 0.5; +``` + +ただし、`Time`を操作して完了させたモーションもデフォルトでは自動的に破棄されます。手動でモーションを制御する場合は`Preserve()`を用いると良いでしょう。 + +### モーションの情報を取得する + +`MotionHandle`のプロパティからモーションのデータを取得できます。 ```cs -var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); +// ループあたり長さ +var duration = handle.Duration; -if (handle.IsActive()) handle.Complete(); +// モーション全体の長さ +var totalDuration = handle.TotalDuration; + +// 遅延時間 +var delay = handle.Delay; + +// ループ回数 +var loops = handle.Loops; + +// 完了したループの回数 +var complatedLoops = handle.ComplatedLoops; +``` + +また、モーションが再生中かどうかを取得するには`IsPlaying()`を利用します。これは`IsActive()`と似ていますが、`IsActive()`がモーションが破棄されるまで常に`true`を返すのに対し、こちらは`Preserve()`を呼び出した後にモーションが完了すると`false`になります。 + +```cs +if (handle.IsPlaying()) +{ + DoSomething(); +} ``` ### GameObjectにキャンセル処理を紐づける diff --git a/docs/articles/ja/convert-to-disposable.md b/docs/articles/ja/convert-to-disposable.md new file mode 100644 index 00000000..87142b1f --- /dev/null +++ b/docs/articles/ja/convert-to-disposable.md @@ -0,0 +1,16 @@ +# IDisposableに変換する + +`MotionHandle`は`IDisposable`に変換することが可能です。 + +```cs +var disposable = handle.ToDisposable(); +``` + +デフォルトでは、この`IDisposable`に対して`Dispose()`を呼び出すとモーションがキャンセルされます。この挙動は`ToDisposable()`の引数に`MotionDisposeBehavior`を指定することで変更できます。 + +```cs +var disposable = handle.ToDisposable(MotionDisposeBehavior.Complete); + +// handle.Complate()が呼ばれる +disposable.Dispose(); +``` \ No newline at end of file diff --git a/docs/articles/ja/custom-animation-component.md b/docs/articles/ja/custom-animation-component.md new file mode 100644 index 00000000..67e87919 --- /dev/null +++ b/docs/articles/ja/custom-animation-component.md @@ -0,0 +1,53 @@ +# Animation Componentを作成する + +`LitMotionAnimationComponent`を継承したクラスを実装することで、LitMotion Animationで利用可能なAnimation Componentを自作することができます。 + +```cs +[Serializable] +// LitMotionAnimationComponentMenu属性で[Add...]を押した際に表示されるドロップダウンのメニュー名を指定できる +[LitMotionAnimationComponentMenu("Custom/Custom Animation")] +public class CustomAnimation : LitMotionAnimationComponent +{ + public override MotionHandle Play() + { + // ここにPlay()で再生が開始した処理 + // 作成したMotionHandleを返す + } + + public override void OnPause() + { + // Pause()で一時停止した際のの処理 + } + + public override void OnResume() + { + // Pause()後にPlay()で再開した際の処理 + } + + public override void OnStop() + { + // Stop()で再生が終了した際の処理 + } +} +``` + +> [!WARNING] +> LitMotionAnimationComponentを実装する場合、再生終了時の値の復元処理はOnStop()で自前で実装する必要があります。 + +## PropertyAnimationComponent + +`LitMotionAnimationComponent`の実装を簡略化するためのクラスとして、`PropertyAnimationComponent`が用意されています。これを継承することで、モーションの作成と値の復元の処理を書くことなく、簡単にAnimation Componentを実装できます。 + +また、ジェネリクスの型引数を簡略化するために`FloatPropertyAnimationComponent`, `Vector3PropertyAnimationComponent`などの型も用意されています。 + +以下は`Slider.value`をアニメーションさせるAniamtion Componentの実装です。 + +```cs +[Serializable] +[LitMotionAnimationComponentMenu("UI/Slider/Value")] +public sealed class SliderValueAnimation : FloatPropertyAnimationComponent +{ + protected override float GetValue(Slider target) => target.value; + protected override void SetValue(Slider target, in float value) => target.value = value; +} +``` \ No newline at end of file diff --git a/docs/articles/ja/custom-binding-extension-method.md b/docs/articles/ja/custom-binding-extension-method.md index 30dc1254..133bb107 100644 --- a/docs/articles/ja/custom-binding-extension-method.md +++ b/docs/articles/ja/custom-binding-extension-method.md @@ -1,6 +1,6 @@ # Bind拡張メソッドを作成する -`LitMotion.Extensions`で用意されていないプロパティは`Bind()`や`BindWithState()`を用いてアニメーションさせることが可能ですが、多用するものに関しては拡張メソッドを定義した方が便利な場合もあります。ここでは、`MotionBuilder`に独自のBind拡張メソッドを追加する方法を示します。 +`LitMotion.Extensions`で用意されていないプロパティは`Bind()`を用いてアニメーションさせることが可能ですが、多用するものに関しては拡張メソッドを定義した方が便利な場合もあります。ここでは、`MotionBuilder`に独自のBind拡張メソッドを追加する方法を示します。 例として、以下のような`Foo`クラスの`Value`プロパティにモーションをバインドする拡張メソッドを定義してみましょう。 @@ -20,7 +20,7 @@ public static class FooMotionExtensions where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { - return builder.BindWithState(target, (x, target) => + return builder.Bind(target, (x, target) => { target.Value = x; }); @@ -28,7 +28,7 @@ public static class FooMotionExtensions } ``` -ジェネリックメソッドとして定義することにより、float型の値であれば`TOptions`や`TAdapter`の型が何であってもバインドを行うことが可能になります。また、対象がクラスの場合は`BindWithState()`を用いることでクロージャを避け、ゼロアロケーションでモーションを作成できます。 +ジェネリックメソッドとして定義することにより、float型の値であれば`TOptions`や`TAdapter`の型が何であってもバインドを行うことが可能になります。また、対象がクラスの場合は`Bind(TStete, Action)`のオーバーロードを利用することでクロージャを避け、ゼロアロケーションでモーションを作成できます。 実際にこれを使用して値をアニメーションさせるコードは以下のようになります。 diff --git a/docs/articles/ja/design-philosophy.md b/docs/articles/ja/design-philosophy.md index 5416ef8d..30cea8f6 100644 --- a/docs/articles/ja/design-philosophy.md +++ b/docs/articles/ja/design-philosophy.md @@ -34,7 +34,7 @@ LMotion.Create(0f, 10f, 2f) ### コルーチン、Rx、async/awaitとの統合 -DOTweenやMagic Tweenとは異なり、LitMotionはSequenceの機能をサポートしません。それに代わる機能としてコルーチンやObservable、UniTaskへの変換メソッドを提供します。 +v2ではLitMotionでもSequenceの機能がサポートされましたが、DOTweenなどのSequenceに比べるとその機能は制限されています。LitMotionではそれに代わる機能としてコルーチンやObservable、UniTaskへの変換メソッドを提供します。 Sequenceは簡単に使用できて便利な反面、複雑なアニメーションを構築しようとするとコードが複雑化し可読性を損ねることがあります。また、DOTweenのSequenceには「無限ループするTweenを追加できない」「一部の設定が無視される」など、コードだけでは把握しきれない複雑な仕様があります。 @@ -89,4 +89,4 @@ Observable.CombineLatest(x, y, z, (x, y, z) => new Vector3(x, y, z)) パフォーマンスの面ではやや劣りますが、Rxの高い表現力を利用して柔軟にアニメーションを構築できます。UniRxの提供する豊富なオペレータを併用することが可能であるため、Sequenceの代替として使用する場合にはRxは非常に強力な手段となり得ます。 -このように現在のUnity/C#の環境においては非同期処理を扱うための優れた手段がいくつも存在するため、Sequenceの機能は必須ではないと考えています。複雑なアニメーションを構築したい場合は、上のようにUniRx/UniTaskを併用して同様の機能を実現できます。 +このように現在のUnity/C#の環境においては非同期処理を扱うための優れた手段がいくつも存在するため、Sequenceを多用する必要はないと考えています。複雑なアニメーションを構築したい場合は、上のようにUniRx/UniTaskを併用して同様の機能を実現できます。 diff --git a/docs/articles/ja/faq.md b/docs/articles/ja/faq.md new file mode 100644 index 00000000..1afbab08 --- /dev/null +++ b/docs/articles/ja/faq.md @@ -0,0 +1,22 @@ +# よくある質問 + +## DelayedCallに相当する機能はありませんか? + +`DelayedCall(action)`に相当するメソッドはLitMotionには存在しません。これは意図的なものです。 + +async/awaitが存在する現代において、コールバックによる遅延呼び出しは極力利用すべきではありません。例外が外部に伝播されないため、エラーハンドリングが難しくなります。代わりにasyncメソッドを利用してください。 + +ただし、別のトゥイーンライブラリからの移行などで置き換えが難しい場合は、代わりに以下のコードを利用できます。 + +```cs +// 値は必要ないため適当で構いません +LMotion.Create(0f, 1f, delay) + .WithOnComplete(action) + .RunWithoutBinding(); +``` + +## Sequenceにコールバックを追加できませんか? + +DOTweenのSequenceには`AppendCallback()`がありますが、LitMotionはこのメソッドを実装していません。これは`DelayedCall()`が実装されていないのと同じ理由です。 + +LitMotionのSequenceは「複数のモーションを合成する」ための機能であり、それ以外の機能を意図的に削っています。これはコードの複雑化を避けるためです。(詳細は[設計思想]の項目を参照してください) diff --git a/docs/articles/ja/integration-r3.md b/docs/articles/ja/integration-r3.md index aab05541..20650a1b 100644 --- a/docs/articles/ja/integration-r3.md +++ b/docs/articles/ja/integration-r3.md @@ -6,7 +6,7 @@ R3をPackage Managerから導入した場合は自動で以下の機能が追加 ### モーションをObservableとして作成 -`ToObservable()`を使用することで、モーションを`IObservable`として作成できます。 +`ToObservable()`を使用することで、モーションを`Observable`として作成できます。 ```cs var observable = LMotion.Create(0f, 5f, 2f).ToObservable(); diff --git a/docs/articles/ja/integration-unitask.md b/docs/articles/ja/integration-unitask.md index 7dda47cc..0ecc6253 100644 --- a/docs/articles/ja/integration-unitask.md +++ b/docs/articles/ja/integration-unitask.md @@ -6,13 +6,7 @@ UniTaskをPackage Managerから導入した場合は自動で以下の機能が ### モーションの待機 -UniTaskを導入することで、`MotionHandle`をawaitで待機することが可能になります。 - -```cs -await LMotion.Create(0f, 10f, 2f).Bind(x => Debug.Log(x)); -``` - -`ToUniTask()`メソッドを使用することで`CancellationToken`を渡すことも可能です。 +`ToUniTask()`メソッドを使用することで`MotionHandle`を`UniTask`に変換できます。 ```cs var cts = new CancellationTokenSource(); @@ -20,4 +14,4 @@ await LMotion.Create(0f, 10f, 2f).Bind(x => Debug.Log(x)) .ToUniTask(cts.Token); ``` -CancellationTokenを渡すと、非同期処理がキャンセルされた際に自動でモーションの再生もキャンセルされます。 +引数で指定できるオプションについては`ToValueTask()` / `ToAwaitable()`と同じです。 diff --git a/docs/articles/ja/integration-zstring.md b/docs/articles/ja/integration-zstring.md index 37f6e785..aac64e71 100644 --- a/docs/articles/ja/integration-zstring.md +++ b/docs/articles/ja/integration-zstring.md @@ -18,7 +18,7 @@ LMotion.Create(0, 100, 2f) ```cs // BindToText()のコードの一部 -builder.BindWithState(text, format, (x, target, format) => +builder.Bind(text, format, (x, target, format) => { ... target.text = string.Format(format, x); // ここでボックス化によるアロケーションが発生 @@ -28,7 +28,7 @@ builder.BindWithState(text, format, (x, target, format) => ZStringを導入することで、LitMotionはこれを`ZString.Format()`を使用した処理に置き換えます。これによって余計なボックス化のアロケーションを削減できます。 ```cs -builder.BindWithState(text, format, (x, target, format) => +builder.Bind(text, format, (x, target, format) => { ... target.text = ZString.Format(format, x); // ゼロアロケーションでFormatが可能 @@ -38,7 +38,7 @@ builder.BindWithState(text, format, (x, target, format) => さらに対象が`TMP_Text`の場合、`ZString.Format()`の代わりにZStringの拡張メソッドである`SetTextFormat()`を使用します。これは内部で`TMP_Text.SetText()`を使用するため、完全にゼロアロケーションでフォーマットの処理を行うことが可能になります。 ```cs -builder.BindWithState(text, format, (x, target, format) => +builder.Bind(text, format, (x, target, format) => { ... target.SetTextFormat(format, x); diff --git a/docs/articles/ja/litmotion-animation-about.md b/docs/articles/ja/litmotion-animation-about.md new file mode 100644 index 00000000..d55792f4 --- /dev/null +++ b/docs/articles/ja/litmotion-animation-about.md @@ -0,0 +1,11 @@ +# LitMotion.Animationとは + +LitMotion.AnimationはLitMotionで構築されたアニメーションの機能を提供するパッケージです。これを導入することで、Inspector上でアニメーションを構築できるLitMotion Animationコンポーネントが利用可能になります。 + +![img](../../images/img-litmotion-animation.gif) + +## 特徴 + +* LitMotionで実装されたハイパフォーマンスなアニメーション +* Edit Mode / Play Modeの両方でプレビューが可能 +* 容易に拡張を作成可能 diff --git a/docs/articles/ja/litmotion-animation-component.md b/docs/articles/ja/litmotion-animation-component.md new file mode 100644 index 00000000..e14b9564 --- /dev/null +++ b/docs/articles/ja/litmotion-animation-component.md @@ -0,0 +1,31 @@ +# LitMotion Animationコンポーネント + +![img](../../images/img-litmotion-animation-inspector.png) + +LitMotion AnimationはLitMotionを用いたアニメーションを作成するためのコンポーネントです。 + +## Settings + +#### Play On Awake + +trueの場合、起動時に自動でアニメーションが再生されます。 + +#### Animation Mode + +Componentsで設定されたアニメーションの再生方法を指定します。`Parallel`は全てのアニメーションを同時に再生します。`Sequential`はアニメーションを上から順番に再生します。 + +## Components + +LitMotion Animationでは`Animation Component`を組み合わせることでアニメーションを作成します。 + +![img](../../images/img-litmotion-animation-component.png) + +\[Add...\]ボタンを押すことで新たなAnimation Componentを追加できます。 + +主要なUnityのコンポーネントをアニメーションさせるためのAnimation Componentが組み込みで用意されているほか、独自のAnimation Componentを作成することも可能です。 + +## Debug + +アニメーションをプレビュー再生するためのパネルです。\[Play\]ボタンを押すことでアニメーションを再生できます。 + +これはEdit Mode / Play Modeの両方で動作します。 \ No newline at end of file diff --git a/docs/articles/ja/litmotion-animation-installation.md b/docs/articles/ja/litmotion-animation-installation.md new file mode 100644 index 00000000..fa947c69 --- /dev/null +++ b/docs/articles/ja/litmotion-animation-installation.md @@ -0,0 +1,41 @@ +# インストール + +LitMotion.Animationはコアパッケージとは独立して配布されています。 + + +### 要件 + +* Unity 2021.3 以上 +* LitMotion 2.0.0 以上 + +### Package Manager経由でインストール (推奨) + +Package Managerを利用してLitMotion.Animationをインストールできます。 + +1. Window > Package ManagerからPackage Managerを開く +2. 「+」ボタン > Add package from git URL +3. 以下のURLを入力 + +```text +https://github.com/AnnulusGames/LitMotion.git?path=src/LitMotion/Assets/LitMotion.Animation +``` + +![img1](../../images/img-setup-1.png) + +あるいはPackages/manifest.jsonを開き、dependenciesブロックに以下を追記します。 + +```json +{ + "dependencies": { + "com.annulusgames.lit-motion.animation": "https://github.com/AnnulusGames/LitMotion.git?path=src/LitMotion/Assets/LitMotion.Animation" + } +} +``` + +### unitypackageからインストール + +配布されているunitypackageファイルからLitMotion.Animationをインストールすることも可能です。 + +1. Releasesから最新のリリースに移動 +2. unitypackageファイルをダウンロード +3. ファイルを開き、プロジェクトにインポートする diff --git a/docs/articles/ja/litmotion-animation-script.md b/docs/articles/ja/litmotion-animation-script.md new file mode 100644 index 00000000..1c56bb75 --- /dev/null +++ b/docs/articles/ja/litmotion-animation-script.md @@ -0,0 +1,19 @@ +# LitMotion AnimationをC#から操作する + +作成したLitMotion AnimationはC#から操作することが可能です。 + +```cs +LitMotionAnimation animation; + +// アニメーションを再生(再開)する +animation.Play(); + +// アニメーションを一時停止する +animation.Pause(); + +// アニメーションを停止する +animation.Stop(); + +// アニメーションを最初から再生する +animation.Restart(); +``` diff --git a/docs/articles/ja/litmotion-debugger.md b/docs/articles/ja/litmotion-debugger.md new file mode 100644 index 00000000..d0bd9d2c --- /dev/null +++ b/docs/articles/ja/litmotion-debugger.md @@ -0,0 +1,34 @@ +# LitMotion Debugger + +LitMotion Debuggerウィンドウを使用することで、作成したモーションの情報を確認することができます。 + +![img1](../../images/img-litmotion-debugger.png) + +`Window > LitMotion Debugger`からウィンドウを開き、\[Enable\]を押してデバッガを有効化します。また、\[Stack Trace\]を押して有効化することで、モーション作成時のスタックトレースを取得できます。 + +> [!WARNING] +> デバッガを有効化している間はパフォーマンスが大きく低下します。そのため基本的には無効にしておき、デバッグ時にのみ有効化することを推奨します。 + +## Debug Name + +デバッガでは、対象のモーションを名前から検索することができます。デフォルトのデバッグ名は以下のようになります。 + +```cs +$"MotionHandle`{StorageId}({Index}:{Version})" +``` + +このデバッグ名はモーションの作成時に`WithDebugName()`を渡すことで変更できます。 + +```cs +var handle = LMotion.Create(0f, 1f, 1f) + .WithDebugName("name") + .Bind(x => { }); +``` + +また、`GetDebugName()`からデバッグ名を取得できます。 + +```cs +var name = handle.GetDebugName(); +``` + +このデバッグ名はDebugビルドのみ保持され、Releaseビルドでは削除されます。Releaseビルドでこの機能を利用する場合はScripting Define Symbolsに`LITMOTION_DEBUG`を追加してください。 \ No newline at end of file diff --git a/docs/articles/ja/manual-motion-dispatcher.md b/docs/articles/ja/manual-motion-dispatcher.md new file mode 100644 index 00000000..a220ab65 --- /dev/null +++ b/docs/articles/ja/manual-motion-dispatcher.md @@ -0,0 +1,43 @@ +# ManualMotionDispatcher + +`ManualMotionDispatcher`を用いることで、複数のモーションを手動で更新することが可能になります。 + +```cs +var dispatcher = new ManualMotionDispatcher(); +``` + +Schedulerに`dispatcher.Scheduler`を指定することで、モーションの更新処理を作成したdispatcherで行うように設定することができます。 + +```cs +// Schedulerに作成したManualMotionDispatcherのSchedulerを指定 +var handle = LMotion.Create(value, endValue, 2f) + .WithScheduler(dispatcher.Scheduler) + .BindToUnityLogger(); +``` + +`dispatcher.Update(double deltaTime)`を用いて更新処理を行うことができます。 + +```cs +dispatcher.Update(0.1); +``` + +## ManualMotionDispatcher.Default + +グローバルに利用可能な`ManualMotionDispatcher`が必要な場合は`ManualMotionDispatcher.Default`が利用できます。 + +```cs +ManualMotionDispatcher.Default.Update(0.1); +``` + +`MotionScheduler.Manual`は`ManualMotionDispatcher.Default.Scheduler`と同じです。 + +> [!WARNING] +> `ManualMotionDispatcher.Default`を利用する場合、Domain Reloadをオフに設定するとモーションの状態が初期化されないため予期しない動作を起こすことがあります。これを避けるためには、起動時に`Reset()`で明示的に初期化を行います。 +> +> ```cs +> void Awake() +> { +> ManualMotionDispatcher.Default.Reset(); +> } +> ``` + diff --git a/docs/articles/ja/migrate-from-dotween.md b/docs/articles/ja/migrate-from-dotween.md new file mode 100644 index 00000000..c1d2c669 --- /dev/null +++ b/docs/articles/ja/migrate-from-dotween.md @@ -0,0 +1,155 @@ +# DOTweenから移行する + +このページでは、DOTweenからLitMotionへ移行するための簡易的な対応を示します。 + +## 位置のトゥイーン + +```cs +var endValue = new Vector3(1f, 2f, 3f); +var duration = 1f; + +// DOTween +transform.DOMove(endValue, duration); + +// LitMotion +LMotion.Create(tranform.position, endValue, duration) + .BindToPosition(transform); +``` + +## 値のトゥイーン + +```cs +// DOTween +var value = 0f; +DOTween.To(() => value, x => value = x, endValue, duration); + +// LitMotion +LMotion.Create(value, endValue, duration) + .Bind(x => value = x); +``` + +## From + +```cs +// DOTween +transform.DOMoveX(endValue, duration).From(startValue) + +// LitMotion +LMotion.Create(startValue, endValue, duration) + .BindToPositionX(transform); +``` + +## Punch / Shake + +```cs +// DOTween +transform.DOPunchPosition(...) +transform.DOShakePosition(...) + +// LitMotion +LMotion.Punch.Create(...) + .BindToPosition(transform); +LMotion.Shake.Create(...) + .BindToPosition(transform); +``` + +## トゥイーンの設定 + +```cs +// DOTween +tween.SetLoops(2, LoopType.Yoyo) + .SetEase(Ease.OutQuad); + +// LitMotion +builder.WithLoops(2, LoopType.Yoyo) + .WithEase(Ease.OutQuad); +``` + +## トゥイーンの制御 + +```cs +// DOTween +tween.Pause(); +tween.Complete(); +tween.Kill(); + +// LitMotion +handle.PlaybackSpeed = 0f; +handle.Complate(); +handle.Cancel(); +``` + +## Sequence + +```cs +// DOTween +DOTween.Sequence() + .Append(...) + .Join(...) + .Insert(...); + +// LitMotion +LSequence.Create() + .Append(...) + .Join(...) + .Insert(...) + .Schedule(); +``` + +Sequenceに対するコールバックの追加はLitMotionではサポートされていません。これは意図的なもので、LitMotionではコールバックを多用する複雑なアニメーションはasyncメソッドを利用すべきだと考えているためです。詳細は[設計思想](./design-philosophy.md)を参照してください。 + +## 更新タイミングの変更 + +```cs +// DOTween +tween.SetUpdate(UpdateType.Fixed); + +// LitMotion +builder.WithScheduler(MotionScheduler.FixedUpdate); +``` + +## GameObjectとの紐付け + +```cs +// DOTween +tween.SetLink(gameObject); + +// LitMotion +handle.AddTo(gameObject); +``` + + +## コルーチン、async/await + +```cs +// DOTween +yield return tween.WaitForCompletion(); +await tween.AsyncWaitForCompletion(); + +// LitMotion +yield return handle.ToYieldInstruction(); +await handle; +``` + +## Safe Mode + +DOTweenのSafe Modeのようにトゥイーン内での例外を警告として表示したい場合、LitMotionでは以下のように設定することができます。 + +```cs +// catchした例外を警告としてConsoleに表示する +MotionDispatcher.RegisterUnhandledExceptionHandler(ex => Debug.LogWarning(ex)); +``` + +## サポートされない機能 + +### DelayedCall + +`DOTween.DelayedCall()`に相当するメソッドはLitMotionには存在しません。詳細は[よくある質問](faq.md)を参照してください。 + +### SetSpeedBased + +`SetSpeedBased()`に相当する機能はLitMotionには存在しません。始点・終点の距離から必要なdurationの値を計算してください。 + +### DoPath + +`transform.DoPath()`に相当する機能はサポートされません。ただし、同等の処理をLitMotionをUnityの[Splinesパッケージ](https://docs.unity3d.com/Packages/com.unity.splines@2.1/manual/index.html)と組み合わせて利用することで実現できます。 diff --git a/docs/articles/ja/migrate-from-leantween.md b/docs/articles/ja/migrate-from-leantween.md new file mode 100644 index 00000000..b1b6ea46 --- /dev/null +++ b/docs/articles/ja/migrate-from-leantween.md @@ -0,0 +1,76 @@ +# LeanTweenから移行する + +このページでは、LeanTweenからLitMotionへ移行するための簡易的な対応を示します。 + +## 位置のトゥイーン + +```cs +var endValue = new Vector3(1f, 2f, 3f); +var duration = 1f; + +// LeanTween +LeanTween.move(gameObject, endValue, duration); + +// LitMotion +LMotion.Create(tranform.position, endValue, duration) + .BindToPosition(transform); +``` + +## 値のトゥイーン + +```cs +// LeanTween +var value = 0f; +LeanTween.value(gameObject, x => value = x, value, endValue, duration); + +// LitMotion +LMotion.Create(value, endValue, duration) + .Bind(x => value = x); +``` + +## From + +```cs +// LeanTween +LeanTween.moveX(gameObject, endValue, duration) + .from(startValue); + +// LitMotion +LMotion.Create(startValue, endValue, duration) + .BindToPositionX(transform); +``` + +## トゥイーンの設定 + +```cs +// LeanTween +descr.setRepeat(2) + .setLoopPingPong(); + .setEase(LeanTweenType.easeOutQuad); + +// LitMotion +builder.WithLoops(2, LoopType.Flip) + .WithEase(Ease.OutQuad); +``` + +## トゥイーンの制御 + +```cs +// LeanTween +descr.pause(); +descr.cancel(); + +// LitMotion +handle.PlaybackSpeed = 0f; +handle.Cancel(); +``` + +## サポートされない機能 + +### DelayedCall + +`LeanDelayedCall()`に相当するメソッドはLitMotionには存在しません。詳細は[よくある質問](faq.md)を参照してください。 + +### LTSpline + +`LTSpline`に相当する機能はサポートされません。ただし、同等の処理をLitMotionをUnityの[Splinesパッケージ](https://docs.unity3d.com/Packages/com.unity.splines@2.1/manual/index.html)と組み合わせて利用することで実現できます。 diff --git a/docs/articles/ja/migrate-from-primetween.md b/docs/articles/ja/migrate-from-primetween.md new file mode 100644 index 00000000..841fe09e --- /dev/null +++ b/docs/articles/ja/migrate-from-primetween.md @@ -0,0 +1,135 @@ +# PrimeTweenから移行する + +このページでは、PrimeTweenからLitMotionへ移行するための簡易的な対応を示します。 + +## 位置のトゥイーン + +```cs +var endValue = new Vector3(1f, 2f, 3f); +var duration = 1f; + +// PrimeTween +Tween.Position(transform, endValue, duration); + +// LitMotion +LMotion.Create(tranform.position, endValue, duration) + .BindToPosition(transform); +``` + +## 値のトゥイーン + +```cs +// PrimeTween +var value = 0f; +Tween.Custom(value, endValue, duration, x => value = x); + +// LitMotion +LMotion.Create(value, endValue, duration) + .Bind(x => value = x); +``` + +## Punch / Shake + +```cs +// PrimeTween +Tween.ShakePosition(transform, ...); +Tween.PunchPosition(transform, ...); + +// LitMotion +LMotion.Punch.Create(...) + .BindToPosition(transform); +LMotion.Shake.Create(...) + .BindToPosition(transform); +``` + +## トゥイーンの設定 + +```cs +// PrimeTween +Tween.Position(transform, endValue: endValue, duration: duration, ease: Ease.InOutSine, cycle: 2, cycleMode: CycleMode.Yoyo); + +// LitMotion +LMotion.Create(transform.position, endValue, duration) + .WithLoops(2, LoopType.Yoyo) + .WithEase(Ease.OutQuad); + .BindToPosition(transform); +``` + +## トゥイーンの制御 + +```cs +// PrimeTween +tween.isPaused = true; +tween.Complete(); +tween.Kill(); + +// LitMotion +handle.PlaybackSpeed = 0f; +handle.Complate(); +handle.Cancel(); +``` + +## Sequence + +```cs +// PrimeTween +Sequence.Create() + .Chain(...) + .Group(...) + .Insert(...); + +// LitMotion +LSequence.Create() + .Append(...) + .Join(...) + .Insert(...) + .Schedule(); +``` + +Sequenceに対するコールバックの追加はLitMotionではサポートされていません。これは意図的なもので、LitMotionではコールバックを多用する複雑なアニメーションはasyncメソッドを利用すべきだと考えているためです。詳細は[設計思想](./design-philosophy.md)を参照してください。 + +## 更新タイミングの変更 + +```cs +// PrimeTween +Tween.PositionX(transform, endValue: 10f, new TweenSettings(duration: 1f, useFixedUpdate: true)); + +// LitMotion +LMotion.Create(transform.position.x, 10f, 1f) + .WithScheduler(MotionScheduler.FixedUpdate) + .BindToPositionX(transform); +``` + +## Inspector + +```cs +// PrimeTween +[SerializeField] TweenSettings settings; +Tween.PositionY(transform, settings); + +// LitMotion +[SerializeField] SerializableMotionSettings settings; +LMotion.Create(settings).BindToPositionY(transform); +``` + +## コルーチン、async/await + +```cs +// PrimeTween +yield return tween.ToYieldInstruction(); +await tween; + +// LitMotion +yield return handle.ToYieldInstruction(); +await handle; +``` + +## サポートされない機能 + +### Delay + +`Tween.Delay()`に相当するメソッドはLitMotionには存在しません。詳細は[よくある質問](faq.md)を参照してください。 + +### AtSpeed + +`Tween.**AtSpeed()`に相当する機能はLitMotionには存在しません。始点・終点の距離から必要なdurationの値を計算してください。 diff --git a/docs/articles/ja/migrate-from-v1.md b/docs/articles/ja/migrate-from-v1.md new file mode 100644 index 00000000..ba9c96be --- /dev/null +++ b/docs/articles/ja/migrate-from-v1.md @@ -0,0 +1,84 @@ +# LitMotion v1から移行する + +v2では、新機能の追加に加え一部のAPIの刷新が行われました。そのため、v1から移行するために変更が必要な部分がいくつかあります。 + +## モーションの再利用 + +v1では`MotionBuilder`に対して`Preserve()`メソッドが利用できましたが、これはv2では廃止されました。 + +代わりに`MotionHandle.Preserve()`が追加されました。`Preserve()`を呼び出した`MotionHandle`は完了後も無効にならないため、同じモーションを再利用することが可能になります。(ただし、明示的に`Cancel()`で破棄させる必要が生じます) + +また、同じモーションの設定を使い回したい場合は`MotionSettings`が利用できます。 + +## Bind拡張メソッドの移動 + +`BindToUnityLogger()`と`BindToProgress()`は`LitMotion.Extensions`に移動されました。 + +これらの拡張メソッドを利用するにはLitMotion.Extensions.asmdefの参照と`using LitMotion.Extensions;`が必要になることに注意してください。 + +## `BindWithState()` -> `Bind()` + +v1でクロージャを避けるために存在していた`BindWithState()`は`Bind()`のオーバーロードに変更されました。また、v2からは構造体のStateを受け入れるようになっています。(これは若干のアロケーションが発生しますが、アロケーションの少なさや呼び出し速度の点でクロージャよりも効率的です) + +```cs +// v1 +LMotion.Create(0f, 1f, 1f) + .BindWithState(state, (x, state) => { }); + +// v2 +LMotion.Create(0f, 1f, 1f) + .Bind(state, (x, state) => { }); +``` + +## `ToYieldInteraction()` -> `ToYieldInstruction()` + +コルーチンで`MotionHandle`を待機するためのメソッド名が`ToYieldInteraction()`から`ToYieldInstruction()`に変更されます。(これはv1の命名が誤りであったため、v2で改めて修正されました) + +## `LoopType.Yoyo`の挙動 + +v1の`LoopType.Yoyo`は命名から想定される動作になっていませんでしたが、v2ではこれが修正されました。従来の動作を維持したい場合は、v2で追加された`LoopType.Flip`を利用してください。 + +// TODO: 画像の追加 + +## enumの命名の変更 + +v2では一部のenumの命名がアメリカ英語の綴りに変更されます。 + +* `LinkBehaviour` -> `LinkBehavior` +* `CancelBehaviour` -> `CancelBehavior` + +## `WithBindOnSchedule()` -> `WithImmediateBind()` + +v1における`WithBindOnSchedule()`は`WithImmediateBind()`に名称が変更されました。また、デフォルトの値が`true`に変更されています。 + +```cs +// v1 +LMotion.Create(0f, 1f, 1f) + .WithBindOnSchedule() + .BindToPositionX(transform); + +// v2 +LMotion.Create(0f, 1f, 1f) + .WithImmediateBind() // デフォルトがtrueであるため、明示的にこれを呼び出す必要はありません。 + .BindToPositionX(transform); +``` + +## ManualMotionDispatcher + +v2では`ManualMotionDispatcher`クラスが通常のクラスに変更されました。これにより複数のManualMotionDispatcherを作成可能になります。 + +v1から移行する際には、代替として`ManualMotionDispatcher.Default`が利用可能です。これはグローバルに利用可能な`ManualMotionDispatcher`のインスタンスです。 + +```cs +// v1 +ManualMotionDispatcher.Update(0.1); + +// v2 +ManualMotionDispatcher.Default.Update(0.1); +``` + +また、v2では`dispatcher.Scheduler`からそのDispatcherにスケジュールする`IMotionScheduler`を取得できます。`MotionScheduler.Manual`は引き続き利用可能で、これは`ManualMotionDispatcher.Default.Scheduler`のエイリアスになります。 + +## MotionTrackerウィンドウの廃止 + +v1で存在していたMotionTrackerウィンドウは廃止されました。v2ではより強力な機能を備えた[LitMotion Debugger](litmotion-debugger.md)が追加されているため、そちらを利用してください。 \ No newline at end of file diff --git a/docs/articles/ja/motion-configuration.md b/docs/articles/ja/motion-configuration.md index 3d254fb4..a8d7ef29 100644 --- a/docs/articles/ja/motion-configuration.md +++ b/docs/articles/ja/motion-configuration.md @@ -54,12 +54,16 @@ LMotion.Create(0f, 10f, 2f) #### WithOnComplete -再生終了時のコールバックを指定します。 +再生終了時のコールバックを指定します。`Preserve()`で`MotionHandle`を再利用する場合、このコールバックはモーションの完了時に毎回呼び出されます。 #### WithOnCancel キャンセル時のコールバックを指定します。 +#### WithOnLoopComplete + +各ループ終了時のコールバックを指定します。これはモーションの完了時にも呼び出され、順番は`OnLoopComplate` → `OnComplete`になります。 + #### WithScheduler モーションの再生に使用するSchedulerを指定します。作成したモーションは指定したSchedulerに対応したPlayerLoopで更新が行われます。 @@ -88,16 +92,20 @@ LMotion.Create(0f, 10f, 2f) | MotionScheduler.TimeUpdate | TimeUpdateのタイミングで更新を行います。 | | MotionScheduler.TimeUpdateIgnoreTimeScale | TimeUpdateのタイミングで更新を行います。また、`Time.timeScale`の影響を無視します。 | | MotionScheduler.TimeUpdateRealtime | TimeUpdateのタイミングで更新を行います。また、`Time.timeScale`の影響を無視し、`Time.realtimeSinceStartup`を用いて時間の計算を行います。 | -| MotionScheduler.Manual | 更新を手動で行います。詳細は[モーションを手動で更新する](updating-motion-manually.md)を参照してください。 | +| MotionScheduler.Manual | ManualMotionDispatcherを用いて更新を行います。詳細は[ManualMotionDispatcher](manual-motion-dispatcher.md)を参照してください。 | | EditorMotionScheduler.Update (LitMotion.Editor) | EditorApplication.updateのタイミングで更新を行います。このSchedulerはエディタ限定で使用できます。 | #### WithCancelOnError モーションの`Bind`関数内でcatchされていない例外が発生した際にモーションをキャンセルします。デフォルトではfalseに設定されています。 -#### WithBindOnSchedule +#### WithImmediateBind + +モーションをスケジュールするタイミングでBindの処理を実行します。デフォルトではtrueに設定されています。 + +#### WithDebugName -モーションをスケジュールするタイミングでBindの処理を実行します。デフォルトではfalseに設定されています。 +デバッグに利用する名前を設定します。詳細は[LitMotion Debugger](litmotion-debugger.md)の項目を参照してください。 #### WithRoundingMode (int, long) diff --git a/docs/articles/ja/motion-settings.md b/docs/articles/ja/motion-settings.md new file mode 100644 index 00000000..cb3e8050 --- /dev/null +++ b/docs/articles/ja/motion-settings.md @@ -0,0 +1,56 @@ +# MotionSettings + +`MotionSettings`を用いることで、モーションの設定を保持しておくことが可能になります。 + +`MotionSettings`はオブジェクト初期化子を用いて作成できるほか、`MotionBuilder`から作成することも可能です。型引数にはアニメーションさせる値の型とオプションの型(`NoOptions`, `IntegerOptions`, `StringOptions`, `PunchOptions`, `ShakeOptions`, etc...)を渡します。 + +```cs +// オブジェクト初期化子を用いて作成 +var settings = new MotionSettings +{ + StartValue = 0f, + EndValue = 10f, + Duration = 2f, + Ease = Ease.OutQuad +}; + +// MotionBuilderを用いて作成 +var settings = LMotion.Create(0f, 10f, 2f) + .WithEase(Ease.OutQuad) + .ToMotionSettings(); +``` + +作成した`MotionSettings`は`LMotion.Create()`の引数として渡すことが可能です。 + +```cs +LMotion.Create(settings) + .Bind(x => { }); +``` + +また`MotionSettings`はrecord型であるため、設定の一部のみをwith式で上書きすることも可能です。 + +```cs +var newSettings = settings with +{ + StartValue = 5f +}; +``` + +## SerializableMotionSettings + +`MotionSettings`の代わりに`SerializableMotionSettings`を利用することで、Inspectorから値を編集することが可能になります。 + +```cs +public class Example : MonoBehaviour +{ + [SerializeField] SerializableMotionSettings settings; + + void Start() + { + LMotion.Create(settings) + .BindToPositionX(transform); + } +} +``` + +![img](../../images/img-serializable-motion-settings-inspector.png) diff --git a/docs/articles/ja/motion-tracker.md b/docs/articles/ja/motion-tracker.md deleted file mode 100644 index eca4f8c1..00000000 --- a/docs/articles/ja/motion-tracker.md +++ /dev/null @@ -1,10 +0,0 @@ -# Motion Tracker - -Motion Tracker Windowを使用して作成したモーションを追跡することができます。 - -![img1](../../images/motion-tracker-window.png) - -`Window > LitMotion > Motion Tracker`からウィンドウを開き、[Enable Tracking]を押してトラッキングを有効化します。 - -> [!WARNING] -> トラッキングを有効化している間はパフォーマンスが大きく低下します。そのため基本的には無効にしておき、デバッグ時にのみ有効化することを推奨します。 \ No newline at end of file diff --git a/docs/articles/ja/package-structure.md b/docs/articles/ja/package-structure.md index 70e20178..534e6c61 100644 --- a/docs/articles/ja/package-structure.md +++ b/docs/articles/ja/package-structure.md @@ -5,4 +5,5 @@ | LitMotion | モーションの作成や駆動を行うための主要な機能が含まれています。 | | LitMotion.Adapters | プリミティブ型やVector3などUnity用の型に対応したAdapterが含まれています。 | | LitMotion.Editor | エディタ上でモーションを動作させるための機能が含まれています。 | -| LitMotion.Extensions | Unityのコンポーネントにモーションをバインドするための拡張メソッドが含まれています。これらの機能は別のasmdefファイルで分割されています。 | \ No newline at end of file +| LitMotion.Extensions | Unityのコンポーネントにモーションをバインドするための拡張メソッドが含まれています。これらの機能は別のasmdefファイルで分割されています。 | +| LitMotion.Animation | LitMotionで動作するアニメーション機能を提供するパッケージです。Inspectorから複雑なアニメーションを作成可能なLitMotion Animationコンポーネントが利用可能になります。これは別のパッケージとして提供されています。 | \ No newline at end of file diff --git a/docs/articles/ja/reusing-builder.md b/docs/articles/ja/reusing-builder.md deleted file mode 100644 index f765728c..00000000 --- a/docs/articles/ja/reusing-builder.md +++ /dev/null @@ -1,19 +0,0 @@ -# MotionBuilderを再利用する - -MotionBuilderはモーションを作成した際に自動でバッファをプールに返却するため、同じBuilderから複数回モーション作成することができません。例えば、以下のコードは例外をスローします。 - -```cs -var builder = LMotion.Create(0f, 10f, 2f); -builder.BindToUnityLogger(); -builder.BindToUnityLogger(); // InvalidOperationExceptionをスロー -``` - -同じBuilderを使用して複数回モーションを作成したい場合には`Preserve()`を呼び出して内部の値を保持する必要があります。 - -また、Preserveを呼び出したBuilderは自動でバッファをプールに返却しないため、明示的に`Dispose()`を呼び出してBuilderを適切に破棄する必要があります。(Dispose忘れを防ぐためにusing変数を使用することを推奨します。) - -```cs -using var builder = LMotion.Create(0f, 10f, 2f).Preserve(); -builder.BindToUnityLogger(); -builder.BindToUnityLogger(); -``` diff --git a/docs/articles/ja/sequence.md b/docs/articles/ja/sequence.md new file mode 100644 index 00000000..bf48fe98 --- /dev/null +++ b/docs/articles/ja/sequence.md @@ -0,0 +1,69 @@ +# Sequence + +Sequenceを用いることで、複数のモーションを合成できます。これは複雑なモーションを制御する際に便利です。 + +Sequenceを作成するには`LSequence.Create()`でBuilderを作成し、モーションの追加後に`Schedule()`を呼び出します。 + +```cs +LSequence.Create() + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .Join(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .Insert(0f, LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Schedule(); +``` + +`Schedule()`の戻り値は`MotionHandle`であるため、通常のモーションと同じように扱うことが可能です。 + +> [!WARNING] +> Sequenceに再生中のモーションや無限ループするモーションを追加することはできません。(例外が発生します) + +## Append + +`Append()`はSequenceの後続にモーションを連結します。 + +```cs +// x, y, zのモーションが順番に再生される +LSequence.Create() + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Schedule(); +``` + +`AppendInterval()`で待機時間を追加することも可能です。 + +```cs +LSequence.Create() + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .AppendInterval(0.5f) + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .AppendInterval(0.5f) + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Schedule(); +``` + +## Join + +`Join()`は直前にAppendで追加されたモーションの始点にモーションを追加します。 + +```cs +// x, y, zのモーションが同時に再生される +LSequence.Create() + .Join(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .Join(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .Join(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Schedule(); +``` + +## Insert + +`Insert()`は引数で指定された位置にモーションを挿入します。 + +```cs +// 指定の位置にx, y, zのモーションを挿入する +LSequence.Create() + .Insert(0.1f, LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .Insert(0.2f, LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .Insert(0.3f, LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Schedule(); +``` diff --git a/docs/articles/ja/toc.yml b/docs/articles/ja/toc.yml index 44c4082b..30d1d648 100644 --- a/docs/articles/ja/toc.yml +++ b/docs/articles/ja/toc.yml @@ -1,6 +1,8 @@ - name: Get Started - name: LitMotionとは href: about.md +- name: v2の新機能 + href: whats-new-in-v2.md - name: インストール href: installation.md - name: クイックスタート @@ -9,6 +11,8 @@ href: package-structure.md - name: サポートする型 href: supported-types.md +- name: よくある質問 + href: faq.md - name: Essentials - name: 基本的な概念 @@ -19,32 +23,50 @@ href: controlling-motion.md - name: モーションの設定 href: motion-configuration.md -- name: コルーチンでモーションを待機する - href: waiting-for-motion-in-coroutine.md -- name: async/awaitでモーションを待機する - href: waiting-for-motion-in-async-await.md +- name: MotionSettings + href: motion-settings.md +- name: Sequence + href: sequence.md - name: Punch/Shakeによる振動のモーション href: punch-and-shake.md - name: テキストアニメーション href: text-animation.md - name: TextMesh Proの文字をアニメーションさせる href: textmesh-pro-character-animation.md -- name: モーションを手動で更新する - href: updating-motion-manually.md -- name: MotionBuilderを再利用する - href: reusing-builder.md -- name: 動的なメモリ確保を回避する - href: avoiding-dynamic-memory-allocation.md -- name: 例外処理 - href: exception-handling.md +- name: コルーチンでモーションを待機する + href: waiting-for-motion-in-coroutine.md +- name: async/awaitでモーションを待機する + href: waiting-for-motion-in-async-await.md +- name: IDisposableに変換する + href: convert-to-disposable.md +- name: LitMotion Debugger + href: litmotion-debugger.md + +- name: Advanved - name: Unity Editor上で再生する href: playing-in-editor.md +- name: 例外処理 + href: exception-handling.md +- name: ManualMotionDispatcher + href: manual-motion-dispatcher.md +- name: 動的なメモリ確保を回避する + href: avoiding-dynamic-memory-allocation.md - name: Bind拡張メソッドを作成する href: custom-binding-extension-method.md - name: カスタムAdapterを作成する href: custom-adapter.md -- name: Motion Tracker - href: motion-tracker.md + +- name: LitMotion.Animation +- name: LitMotion.Animationとは + href: litmotion-animation-about.md +- name: インストール + href: litmotion-animation-installation.md +- name: LitMotion Animationコンポーネント + href: litmotion-animation-component.md +- name: LitMotion AnimationをC#から操作する + href: litmotion-animation-script.md +- name: Animation Componentを作成する + href: custom-animation-component.md - name: Integrations - name: R3 @@ -56,6 +78,16 @@ - name: ZString href: integration-zstring.md +- name: Migrating +- name: DOTweenから移行する + href: migrate-from-dotween.md +- name: LeanTweenから移行する + href: migrate-from-leantween.md +- name: PrimeTweenから移行する + href: migrate-from-primetween.md +- name: LitMotion v1から移行する + href: migrate-from-v1.md + - name: Concepts - name: 設計思想 href: design-philosophy.md diff --git a/docs/articles/ja/updating-motion-manually.md b/docs/articles/ja/updating-motion-manually.md deleted file mode 100644 index 45608a89..00000000 --- a/docs/articles/ja/updating-motion-manually.md +++ /dev/null @@ -1,30 +0,0 @@ -# モーションを手動で更新する - -Schedulerに`MotionScheduler.Manual`を指定することで、モーションの更新処理を手動で行うように設定することができます。 - -```cs -// SchedulerにMotionScheduler.Manualを指定 -var handle = LMotion.Create(value, endValue, 2f) - .WithScheduler(MotionScheduler.Manual) - .BindToUnityLogger(); -``` - -`MotionScheduler.Manual`を指定したモーションは`ManualMotionDispatcher.Update()`を用いて手動で更新処理を行う必要があります。 - -```cs -while (handle.IsActive()) -{ - var deltaTime = 0.1f; - // ManualMotionDispatcher.Update()で更新を行う - ManualMotionDispatcher.Update(deltaTime); -} -``` - -またDomain Reloadをオフにしている場合、モーションの状態が初期化されないため予期しない動作を起こすことがあります。これを避けるためには、起動時に`ManualMotionDispatcher.Reset()`で明示的に初期化を行う必要があります。 - -```cs -void Awake() -{ - ManualMotionDispatcher.Reset(); -} -``` \ No newline at end of file diff --git a/docs/articles/ja/waiting-for-motion-in-async-await.md b/docs/articles/ja/waiting-for-motion-in-async-await.md index 9b47fd30..aac7578d 100644 --- a/docs/articles/ja/waiting-for-motion-in-async-await.md +++ b/docs/articles/ja/waiting-for-motion-in-async-await.md @@ -1,5 +1,15 @@ # async/awaitでモーションを待機する +`MotionHandle`は`GetAwaiter()`メソッドを実装しているため、そのままawaitで完了を待機することができます。 + +```cs +await handle; +``` + +`CancellationToken`を渡したい場合は以下の`ToValueTask()` / `ToAwaitable()`やUniTaskを利用してください。 + +## ValueTask + `MotionHandle.ToValueTask()`を使用してモーションを`ValueTask`に変換することができます。これを使用することで、async/awaitでモーションの完了を待機することが可能になります。 ```cs diff --git a/docs/articles/ja/waiting-for-motion-in-coroutine.md b/docs/articles/ja/waiting-for-motion-in-coroutine.md index cab6d0b3..cea2dcc5 100644 --- a/docs/articles/ja/waiting-for-motion-in-coroutine.md +++ b/docs/articles/ja/waiting-for-motion-in-coroutine.md @@ -1,12 +1,12 @@ # コルーチンでモーションを待機する -モーションの完了をコルーチン内で待機することが可能です。コルーチンで待機するには`MotionHandle`の`ToYieldInteraction()`を呼び出します。 +モーションの完了をコルーチン内で待機することが可能です。コルーチンで待機するには`MotionHandle`の`ToYieldInstruction()`を呼び出します。 ```cs IEnumerator CoruntineExample() { yield return LMotion.Create(0f, 10f, 2f).Bind(x => Debug.Log(x)) - .ToYieldInteraction(); + .ToYieldInstruction(); } ``` diff --git a/docs/articles/ja/whats-new-in-v2.md b/docs/articles/ja/whats-new-in-v2.md new file mode 100644 index 00000000..98b9a88f --- /dev/null +++ b/docs/articles/ja/whats-new-in-v2.md @@ -0,0 +1,69 @@ +# v2の新機能 + +LitMotion v2では機能面で大幅な強化が行われました。ここではv2で追加された機能について紹介します。 + +v1からの移行については[LitMotion v1から移行する](./migrate-from-v1.md)を参照してください。 + +## LitMotion.Animationパッケージ + +Inspectorからアニメーションを作成するための機能を提供するLitMotion.Animationパッケージが追加されました。これはLitMotion本体とは別のパッケージとして提供され、プロジェクトに導入することで、ビジュアルエディタからアニメーションを作成するLitMotion Animationコンポーネントが利用可能になります。 + +![img](../../images/img-litmotion-animation.gif) + +詳細は[LitMotion.Animation](./litmotion-animation-about.md)の項目を参照してください。 + +## Sequence + +複数のモーションを合成するSequenceの機能が追加されました。`LSequence.Create()`からBuilderを作成してモーションを追加できます。 + +```cs +LSequence.Create() + .Append(LMotion.Create(-5f, 5f, 0.5f).BindToPositionX(target)) + .Append(LMotion.Create(0f, 5f, 0.5f).BindToPositionY(target)) + .Append(LMotion.Create(-2f, 2f, 1f).BindToPositionZ(target)) + .Schedule(); +``` + +詳細は[Sequence](./sequence.md)の項目を参照してください。 + +## MotionHandle + +`MotionHandle`に以下のプロパティ・メソッドが追加されました。 + +```cs +MotionHandle handle; + +// methods +handle.Preserve(); +handle.IsPlaying(); +handle.TryComplete(); +handle.TryCancel(); + +// readonly property +handle.Duration; +handle.TotalDuration; +handle.Loops; +handle.ComplatedLoops; +handle.Delay; + +// property +handle.Time; +``` + +## WithOnLoopComplete + +各ループの完了時に呼び出される新たなコールバックが追加されました。これは`WothOnLoopComplete()`を用いて追加できます。 + +```cs +LMotion.Create(...) + .WithOnLoopComplete(complatedLoops => { }) + .Bind(x => { }) +``` + +## LitMotion Debugger + +v1のMotionTrackerウィンドウの代わりに、より強力な機能を備えたLitMotion Debuggerを追加しました。また、デバッグ用のAPIが追加されています。 + +![img](../../images/img-litmotion-debugger.png) + +詳細は[LitMotion Debugger](./litmotion-debugger.md)を参照してください。 \ No newline at end of file diff --git a/docs/docfx.json b/docs/docfx.json index 3bf1607c..e6a02ce6 100644 --- a/docs/docfx.json +++ b/docs/docfx.json @@ -47,7 +47,8 @@ "output": "_site", "template": [ "default", - "modern" + "modern", + "templates/custom" ], "globalMetadata": { "_appName": "LitMotion", diff --git a/docs/images/img-litmotion-animation-component.png b/docs/images/img-litmotion-animation-component.png new file mode 100644 index 0000000000000000000000000000000000000000..157348a6dd75eb079d1c464e894386ffa4bb929a GIT binary patch literal 181206 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

dNveT<$hcKJ` zLuYo`kBX-jHG!9SCR3dTD@#oi)Equ;mGd0 zT|H`cjN{uk9pU7{N6Ds}j^-nT2|Lv-WYD$jHNn@WWdMqmy6Xw~LYz>zC=LSDU}@QE z6wC2VPf3%F?k!oH8MB6%tL<+wfUte44;=2Ens0;9q$xkPvPmNuA)Ka2xtB~T@ z35~IKQ>y=bg_vC7cMe#o&4)od9x4JkOEKNY{Dd<{CYzc5U4I-W;CH_z$jy^u-6V5T9g11!h(pX;>~LgKNx-R%rK|NX^35&?^Qtq7M;yTXZ}_^gzAV>Y_uxN2?Gc>$pD@7sS|f9 zhR`G;2oB3dc-7;zFvg>8@aDe0*a(xxyTZ)ULfd^c8}GZ!*DbYB5a0YIS~~?wVy~`m z`L>fF7g;p_8^}Q$N-7Jyl81iw7fiv7WUU;4?s>?x@<8biQ6`R$ZJca9bx4xJe`rynYPzDT#OwQ{u^9$puJr^&G{kO>1K%b={PbPnP>{y)~< z102i#4IhsZ5h{tyN=5dbSy>gz3YkT+Nh13pp)$)TD|>}R_DnJ&dy`T2UXRW5{I9$5 zzUBS?j^FYBAOGV$j*j%a?&rSm&$_PjI?wa^Xg^JWzhDk52zv;N&v&+#(}_AE;F$@M z0KQnu-U9(EIeC0Vg|Y8u=Y6JY7M{ttHwgTEowm&wfHQAzKO$nk40W9q;56kxmtwD7 zc+*Cj{HwJrsTSEoZY zuM@MI_}~jdPwj1Kq2Ko3Klf@lj;;d$lzD3ijJeE*#KPUcQ4xACrhaO@xLn8Zbak>G zc8!F{r>hkZqu)MI1;?os^b~SABi;^MiK;?OA(#WHwU1B=H-%jT-j&v+26Zj*rAz+TqXb)FCk@JN-+wqlbr_QMt9>cdZs!``--BT0 z{9MDsDo-M(u@Rv7(f6&z`p8}xy>B@5wVYfU=^_#zL06@u^5L9n@#qVAFmo~rxA)mm z2=u>``Du?)kw-is=VwD@p%v>{NGl0KSJfYPj8+ne62?YOC5xr4suo;__KHEPLs(3A z6ZAoG24t{ZRxPpXLQTH-!EY-p8!Q5l+J5tEG=J@N3ECl#%>Ma6uq!b|z$P58e4?ub z_R|+8!yq$K$dJ>BaI%mjqZ@yru4~t+Gz&YLADfsHda`Hd5|8VdT7VQ|KPO`#b@kz< z^Lvv14n#w>M!|dPEG>k{u;7TQzI4J%YLlh53{f8i3xY$A2*}zeX2gUAdxG4u^+6GP z6t8Na36o{nYFF#*yFu`vqvkbH(sDDCMJxMsxc27n-Uty>89{P=wt4H1N}LApoYz?p zQmP10H9tD0%$@!BT=`iD97R&}`^#TwrCZ?1O(?^gMOx%MHN}-p%FOSpe=vf9=4e{U%7=vm z5YW+WC32_-z-h%5=AG3nRAa{tEet}jMH*z9zCDx#ktSoNpRtZz=M8(roDgj0$#Q^H zXBZJ^0D{i@Bau#k()P>f#V_fjGIn(v5iKXznfVb_4%3rTIw7S4(O`7 zfAAzC%VE^_!@AOak?7s^tw@{)4FdP2y{suU6PP{>o>P`OE zL^o0=ob*}RKYyYOC|MuTZ@%Jmo}4lTi#7&X}h z-U#6}lM=10%uK%CsYVJ2r%g(5fx1h~I0TG_6EceeGm{n1|B13=*$7-<@BhZjry{0Z z&ntc^@bVp1mgVwfT%tkUw`2E+JHPKIoq z`8V+yJr8I1*C?hRjewQT<3=pn0XeX%$ky2WsT^fTa-TZ=wC}&sYfvQAbMM>6|F|)U zlZPg2#OLkGjUGIq0rSkC!_zW;fU>e>oLz|VKf(7BJjC&#kP~~3>LVt$unhaYo||~Q z_Yo^?^x+B0J%VjGbF-}Yq`*?%H@ z#3J*V^;O?rPw@LY2y%sx#Ap76?Z>^J9M_L^U5ZSU`MLXQsUw*dKgjyh)6?I>`4exi zuBvJXx||%SL}@{$<_mn3e_nbgE4*{F^5Q6@!-P;`D-)}&b1za#Y>&q4akV3N#zAgJD%0h8ig*lY5Z zMrw`c3={nMa}Y7xU9ijT*0ELW%1Ih@Y?Yz#Vh6$Hte>v)N%FcRoqX<-BBtXcwC$ic zXLGVB;JYq?&Zu9i21irQC5sK{F;Ml`hE~KrmssE{Ck+Pas0BS{ zlaa!5=sjVY-$K`)(>Vx{fveNm*BnAPg@`z^AAn*D6u{o?&(L%I0vDjh2|5JP3)iVd zX5UHG!O1<*wsym*1~#!s0`|m!ro!#{l1wm6vq$`50B2)!hKO$#yusd}RmV5}eUXse z`x9~EOHpHSM{T!|Snd*^XwA`=#~qZM;54ba4>;Q4h7NK5fd}nDt5Bs$o`17pDR7yX zed8(8AnV6z*XT(iT=)LwA5bt1Iyno>IKr|A10@d&$gT-is%x1heL4xeFOg*Z+V@F_ zh_6e>wo&>y#Jqiglf3F-uc?PNq!bZF(ECL}@-fIWj4jo(9?L5tno1;Dd1}!Zy$EMj z6FOB=r>&GQ!f#HaVk;D32;{?A>thgZwK&oz2(g_d1T;@|5rJ*qoy8I0NC~*A1UG3< zWXUn2391p|ID@R;<>RXEatW7n&fy92K06cf8YGF^5NT33UezA5EEuqWBH-20nHz|q z$PI@Z`e%5Il8|-^Kx@(lqVF;12YPf8SMKEeZa(&7>fd04ARL#&db%;es)cW)==EGT z<9xDH=neI3M5{Pw0sS9n&Wo0U5*bNXO}BZBOy=<#E8jtBjou)UJ)p;k zlKQ-H#^wao(fI3M?bKOp>_W2SRM4i^M9WscgB@T2v|VXLJb(CtLlCEq6?c^fwE#kz zZrzz?(F*%(W~Y+CvLtt)-F-RL5m`XLJ1LhBrqg|(`?WxA_Yb{j`r`RRg@|N>+17PI zr|mnG<-*;{u3K^_Gu@S0IcSpTZuJ1_BTdqW29#J_;RL(A31x*yx+F?|3r&>@Ha@35^&|^tE zdUO-Wlq2+Op7c8(5US%%b_V?KTRmWiCuKivXTwkyDxE+S|9Kq*B+XzumoxcRdiXXN z-K{~yQZwJK&4#uox(+^W1u!X_WdmqTsf6O}MJ;napMN@hX_{*ufZ8=k`@R<#bvC?c@ov{z!9cuKs+>0=zcbH0h@$DNbrz(Rdz!-yttuU6`Eny2t4n66KY<4_f zqlP~sFkfFw!WpQ1a|4Ib0>;o%i@xYiDNK6)yI)=@sU;kIFp_21p890`toVcpZS#uq zsaDtN5y%)WLyKNNe0r6vYUn5&ZE}W6M`=9AsA2XxYD={z>(&)sFjsQB-5$tTya0rM z(!dNT7gV^l>i%*)`*|+Gc@Ch?JEHVR>m(Q~@wGanw^^=BMI|+~7=oa6BdeEcSIJ~~ zUmf&wI~uX9U%Gn!X>uEgUZ|hxfQD3&ys;4V`Ng@D>(z5DoNh@9D@vcrcF(+xE-ZyP zd+~tGPAi%JL4>?mntk!Ezrc_q`uQ|Z9zf<$asYPyj$*s zVblXB-SoR3zjm^aiJ82N2WT-Jp7OIuQijWr=B{XSS2`$0B2u~s1DJ57MlIHfiWAFA$_V5$jh73WG_ zoL=j~c79E9?Tx@0CL^k4R3#q8<6S4BPyGEBWLEPqDR`O$t9UD8W%-#pJ3G&XMeMwL zWePONI3cXj*Zuer9h?!oA1`gA*NE^aT?V~f=)@Ph?{5*?=f;F-t&92gmg`|tC7#R1 zO>+5z5`uk*tfJh_Lag~wKKbPH0)56YnRRoKq0wEWQPB8`&1nCL)qi6eIO~LwqUxfs z*%?VuI!>s}oVTub(cFYVidZG+97njt^?tzF0*9Rz&e_5JhXG2w9b=`gy_M_&bl3)` z45v(^xX(W0+uF>8mK-m)6r(kCsKp))L-*mQ{n4tgak&VaKAqDwPnx755cBbVL_tN{ z`r-=4slzZcuZvqW|I(ksigN%cnvaKYQ0jWkjRK*i3SSKmIK35PFN37qrdMce%$6+E z+cihB;#(sx#pCN+lfj}j10m(GS$)$~9lC!+6o*u0BjH%9>t=@YKDl6y6D)QMg9GSS zkHmUafVuR3j=$g;OQOUJ6|_wVKyfK!UVhl!xLXoBP7p3!%Ga}wxDajIB(&C`kKxYN zwtk~j&)b{2mI-dITK}|0M-aMLe?X&|zInYCN4dopSV(myY^%^eM~>M!q*w`Q5KC)V z7VN848o^-*_}3GVPtCRnq@}L`;+Ty@>bgmc#Y}{cSrVw2_nRo%8Q4qGcvNY)oB8MPyGRwZ66Ln+{2E zN^h4(Xl_Lcha9Cn&1Kq_s08K;`9u(?kbq-lN5;FkZrMs)(qU<$dI?)chf^QdH$S}w z3VW{cIX0w1xOmxH{8(^q@Ly0ysxWL7OiSlhC+0gdhf1d{4@cNm()%t-sq}Uv3LHxv zgp!_>la9m+?IhO|0HeORd@lny@j_Z3^!WbhpXxoA{+2G?0iceLjfvBa%%iJ8gEe4~ z?80XnzIEBNS?;--$)@*sU`r(VgD9$`*okd&!IOMuYVni6xCqtcsCi};RnTXaE*%q5 z5DPudpMK`y%ZV?_3Q^;fw)R1eOcM={ePuS10@I*|<86Eym$5HsnJklQkZKhl{uf}jB zejXt%si44}!gW%vHUTr}vI1t1E6s{HM??=MCN3nGoA23FJ^IF~-ZeL_^X^hO4){I4 zPto$uo;ZPC@ZPP|#19f3N`a)4<7}!byR`N_m1gGVRq6QTuNI#YAR%ld>2_cj3W7^Z zXx{g&=DNUa@lxl^xlo|Tn~Ry=$-VY=hS2`OY!BD*K$70;nOTPFZHlX}xC~Vu`dALc zP9H?UOiPv{cpx=uF$n#mL)_izXI6VW@hQ-6K0~p-lawL5!>*OMSZ^fll&8yT zou3~5RDv2f-sC54Qk3SP1adP!3y^D0f?HjAIHR8rKGkdEq9+^fh zL=5aB|Gi6j5Rxql^iH|)X}6V`=$IAkba&Jg(iV*(Y@WDR6*8w@3Wr>wSd6^6uE6nJ zNRC3i;@Av%XlD3MCWTnqon%AhqU3t%nduu*)e%wL-R0!0S6q3|IVo&ruN+Cl&;~5Eq`55=AqS2rgwtOELii<%E}?u zjc1vL?jP@t3H@{Y&V)gZM*f=`8`C&Tp zeYIC_{&}>RxOzl%i64OC9`dgqU-4W%smTX?U51qKYhb`{lO1=7eguWI&k{98G~;TC z?#-L=asd~QD19MQjx^K$yv=-fJNF0TfP^$^>A<4+P3-nyCT~fMcRFx6aA|af>AJ0E zJlP_D3Z2pKEXgAuLDt#y?3#))@X+~$u232}!V!DuGT+mw+1~e6k28vzvW^XDIlZOx zZK=bKS;s(l`Edqb9^S#B?pYuBX$6_eoh=W`a6fKw18f{~hH>0o@aHzUV#*{O~{m});J zLhNx|LQYoAcc%_hrKYFz3=9E*o^jzV(X#`S636EN-cQH`ChE7c@B-u+Mv57N=VDbio_GXRN<#b{Ojd!;wf zWk_mOSG9@Y_v`&tI`DV_ng=E!A=->}o;tGkQqyE6 z`mQNz(Z;zBO9qj^C5Kq~rj(SF^7R~$5+comnSZsWV&G zHpgyhqxuKq#tXUL&tcM2v`WUX=4pw;A0c4LC@(LUDOUPmfb8gj0Jf0bF*#~P^*7<* zjW*mNPu7A{f5sh#^~sm1NvouKkwy#R@0p%!%!ckk1u<@I2CE6{QS89;Jiz$_5Qt1HH{@FIu4 zUs7|C((H4hR>PIO@ZgVe)zY{HkwQL{ExbJ`dG7j^f!aUQS%RyK?A8;>&tZAD=5ulf zY#dF!>QbpZ#CN`te$&a_0YkVq=HAs7X0=pV4(T|$SSYv|O zo1N&hE~~0Gbn^G*Hu+Gw0IQ8vWnn~=1B6l;p?8xj;?OiWC$j>x_0%33W0(}%U?Ej_ zQJ3BkdORJ!#Th#FR`xEy8ZV4#jP9y&IdDHjgZsQBCTf| zUvX81vB}3w#Of@Dv6;TKXF}e8{V4`2;5B^PnX^X8o8O1}FSkFxQXf!{)6aYuW=wOZ z{P(#0vDpk$d%%S^z9BURa9|>TbQm~@IW;x1LpS&vwvwiBybDWnK&DH3+3cRAEyHnh z^rd85gdT}>4mAov>|*;NAq`eLYc=ovTGY7@RH8vYB0V10kniJCEeh#Sfx6eT01fBY z`t6~+!RB4f0LTjiAkj}Ol_C-P1Y(hVd{Fj4>gZGlsPGG2+eW_IqN{;1JEM&J_eblb z^JOQH-WkclX-GzF4>r1wXA$rX1NphnAst|7zLai-CiWk}vBKjM|8HA`AM*oLrozy5 zj@mL;S2aCTok^M_N>5fN0{mU*2DmEKUO{)&+Mb1rG;zv~L?7c3q0N!6fJw_z10iB;x1+ z{$(T+VlEMsvSaeBOBI8Zlw}V}2Ug0RF{!}4X~rP@W(3NP&n&gac#=AXKZ5GfiYj#Y ziih72K&R#5`5meFr0j^W$aEX(hXc76{}2X1%3F+wW=Mlh4ar*Tt%t`Rj2j6&I!!KD zi3ipMh82S=MGs8Bu==KjYB_ATFUik7qc3m&SjIcBb3)tVs1EqpQfL?EL8)8el&bKE zAJ4H8Ub1OOUPF5z+byXg*xyVk=2CbeD7Hul0M)mPJ=KWR+kQr53FxowzBTL#6^9IoD}JlWcA} zTsE*NX$yJ_CYbiXO7^i0qz+Y@9=`Oz>VT+lEcK*G+vH;tD#-KUE&ic7lY5o@Ed+<~yh6|iNl67a-1KDu9t9k< z{g|!j$@+^eO#x-@Tk}`Nrv~K8dhn%536K^&51b{`U|XI5iA4tcbWRWexg-d zMA}qKt1Jr3IaA!k6e(^SA?jS^s7@U|vqVuP+`m>P;_Wn2@wPx)Tp$uX_9)l>SvXJ` zUP#*#o@d%jAWb4+PqkM3@alr8fs|-`OB5P-#n2NaFE3)`3^ozEK?Sv5euWS?U3`|U z*~*j0iA|YJ6TR>$(On^hxgbZ&orQFA@5GrSFu5exSTr0c0~Cd$S)kjUQ><_|Pc8D! zpXuERyF4dsm#s)D*muynIJh%cf63P+5M$ocRU2i_@zud}~4 zJt@*(c;f&ydd@OKw*>9TS+Y76BN$RMmcWeOzCUd}YyKcD&zFDFlqamh=({)RM6dSB zOZ<~zFWK%s3(!<5Y5njhU;d=d6R{Wfpd4`SjJcB^L-F<6Jd@TlY+AfYVs5cwLk=Uv z&R{oc0hY13&@MAKb(cePvGGZ00Ii1K-3w;;ynj1shZIT39Hiv!)tA3`rnTIVv45vd z|0Z@-&Zx}7`s+h^18mz^oR|Diw4t$8OGBH~(Yw206-~?C4f~1pS*_j$4@DXK8seUK zTC=Qqg_zrcEa@=2Lri%oG!uL=PORHz~KyG=@E}1EC!&t8wA^3)jc);y0D`*$QA|ce13?c z7iB#rXAat0oszGt8QZoOo~g;G^h)xj=nL+Sy2~>pPZzel^+-!(sWEHLcPxRNJL!f< zcaJGU@!dXMB{wt9({?4XH7glAP{Cm|Lns?hR}0DUPN}qm;xMF+3P5-RQ9GHyhQ#Da ze-}9PjBIJkj&$3b>6hzjXiTKvKB*xf{9*)35m%X;5B`-J23@%Ym79Fe6}K{Yg3PZSW@`CF6F& zQM`Lh5t^gPTUY_OdRv!F$Vuf$eLG@O2*MS+Nd}4!zsio#<%ueuiRI>1EeVL#eX7^eZH| zysX-0&4Vt_8yzORl1sGRf}IBvW!5Hh@$8!pie|`dTU#;R*qn20h_Fg38vzTszwC${=IkHFF*PZq`yX;zy zM}K+|q_oRjtw2*>P&Vt)|$OObqr>`f^l`s zPSqC!faldlgTKP6BXvxR5O;>lO3KkcSJEp=vUXczd(Y5ryM^S!Q{+BubUK=D^Mq#= z9Oui=dKI;&^tc++ywbjRTE+IhuKzB2Oo-pUNyU6e-|zPFN2ik8-v!8UWS?owO+!^J z_<1N!T0^((}44IyaP&02BH(UNV5CrKG@8$4uhwlFby z2WA_m+UL)&kdMBCFrwyu1X=}$WDY@J?JxQ(gEL*%OhFUvMEy%#vpal{rkIV6TOtYFO(s zA?nL?XfzU=KuqD4GL!U+CaoV*UUay3&F7@+gH!!8z84dNjL;QKfN=&!_T($NnmYW0)NjSF?uY z^b*nP(P)miSFSDpbn*U~%t+V~g;W!GPoHOR>Yb|54?g+gKY6tr!X_TM@$J>#Pf|IN z8nb<+pw3<#q+S_PPa!?>fWLwR_8Ruw3P+|C;RCbC=G7b?FBXVd5j}8{(uwzAc_Cv`KQ!@EoE?1{Z5z} z<&`k0TNHoo$?#gqPXl}6S)l^W*}b2PAq<1kEK<2Wyh3*g83Mq_z_mkH@N-Q~%`?H9 zB!4J*e|>cu-cI@8!b-b5Z?vkCdz|YwxvC(*HnCH$nf9<(;UxU0MJ@N_7|lHwui>x#?aqjXqP_!!zIKaqMT17F&CU@MO`jkJdf+ zN@}pTkDQYFFU*wBsMJDp*fP+UXD^3qpNAk!UK{4oe^^$(--*O~s5A2V`hNWV55GVR zz>OJ|a$!ZA5uJDRV>tg$gVx^|(lQxS$rZYpnVBkc=GC=7ntuMifSR|2p3^7Z#O_0!WIo1v6c-D( z@47-!cX_@z_Od&PbZbBWtwJrx4I?c?E?Qn;3Q%X zANVmtSA-H_3OVUXJ#8i0Z21qQ=dpZbaoee)xp^X$kdSk<{q+C1(iS3N8sZ!C`}gL5 z{*4LoS$PrMetPfP>STnqwe|MGUhRy##Ajq@iHaimBXs^TW~pKxYn>0Tb~?&}>uo;7 zikiB*(R{qT$5+pS9YzLZ{`?Onm1cmnuH2veTM+VlwDS@Bl<@ANRw~OFeUkjuf;n2V z0BWB8`3k2udD@tYu&Y05debvA+KEJXtjLIOLFy3u>uS^2O1=!ZCrcV+8sLE}~a z`+;sxwY0Fqc{kTEJif;qtMxzt_!><58lV=J3E1KI0wbHcxKlF-R^+AjNx5=8i_^@> z{aece60GrCCgXW@dD|aysSu!sunv)~qz-^8k}t#Et51Eo{Nq8?-qjqGfbcaRFB_~j zv`vUVX;@jV*4+9@He-i!+hJh`x z`Y7-qd1&?BW=DR$gL)=IP!S|w=XzoFl?RM2Fo?+}0@QI8$NyDLMl^jc=vKKk#PA*} ztF&TT8W6PQP*!rnjEIB|0RZZTMqck*;$>BA$SEvEtBgHgL3lste^59_dd&xF?o>#e zGKbhqSjY7MF)ag#`*Cx~LPacOz&zmApsVulK0rTTsYwHFgl!zngzgi);Qtc_cgm?H zv#8wSN=feg$Z{KDsH7}!q0;2H$&pOvb1DzFa@f@3L~ z`Y~c0UiRgH#39Bm(nSg^2+0reYPnJZuD$%uyQ|&7%kk8ZKj#4m^%)^lO6NaPMF^dg z+#z)qHT7VYaRCuD1k`VJ(3bN~jB-r2YBOzNAagFT*tq zd^6>=fHMm`zlaMxi-0mkS}oUKVAIw#ZY)4*+lP`tr zc%^a&Ks6;=9G?Gr>y;M;!cH*TN(}I8!2q38z(u??gJXMj#u%tj*;5?-kl>E?DzdMR z`=-AwX3o?B+mbnOBRCYepaTvurrV!?Z3n+j=&Pq=hd+Y++8CS{uTEOcWESLuaw&iI z(P1Nz&k0sr>iVvBKhz?ioM*1)Ye)<9-jXdD3$fw19)Gb|G#2tu(Qzz73yfuLX`vlp z+XWUS#2X^9G?`z;lZc~YCugelnTasa^5P@&A=W>SM}aUOOMsC$2gXB+A*yOw01Q2y zOIDAs#8Zs85AFf|z!nHi<-Y}{fk3V!>)(@eB^_@O4Zx@9$m(+CmAVj^kXBxAbwFww z2ioMGszUTiK%{%0ByV{4rb1@N$NrcAeFKf1#po0BNmJtmK${wV;q-oiPn)@LcupLo zS^2=g-%6H|W4XBWiEIs#AFP3m2*{zY+)QI2zqoN^S3Z#tBCl&5zFn=OFCgehGJT7G zF1n=PdFqk($3(|rDhXV87i(#42$Jh;AjdK$Qq@l|vgK(w3aN!*8A09Q1O4kzN~6d zy4D45R{T>9c-3NliE9s5=B`v8I2WT4cf1mB!5K{AzIp2h<|698d>H-hx1Urby1D26uO!5y`6aNZacB-lG7h+CzfJgJUPBQuEmyC)QLXOLKhM>vJpND9Ow1n-j zX%ilb_0bhN-@3ta*X>0jI|wj79&mwbEQi6&5O3#ORf>MJdxGU+vdB%vZE}GK(XFi8 z+Vr+>%kGU7#oekMOE__{FxJnmq`PlypixY(qZ7kBWlmio@%+hU-ZLG{JAqHh7`@#e z;ZwMzg(b`o3OfwPE$Z(&8akA+F>KNV>BV5VK% zhRMG{?#ARff2Tlc-ptmdF803IltxWV*i&k;C}ZnJeY!iEdik$D@5iT8T1;A3elz@N zokDloH|u(`+}U`e$oF*JugCRUMuQ>}MnLBCrKo6<>Bx;|*N%g|1W*Y^a{jacL24bE z>`KpZyrD%_ULC`+IT8Du#=xD>Reh9N7e_7i`oN2xiU*D+-`XBd^n_ERpGCLC4=s1! z#5g&|e)Fv+wqK51v9MA2aHdt0jwMa~cf5C7*b9LVIn=@$) z1S;G9O`SpVRYWJwiq`<$a_8Jjvyi__@>kho4=sR^WPi&7&~av=9T4j#7jNh7t>zWQ zPLt~0pHP=VBQ9uI_Whlg-#P@}raoYxmy ziR-`X;|oJjEfo}75f^Aj+G|n0-R9DEJg+Y# zi8aL*aG5kc#_Vc*F@9b=)Zcpf;B{z9lbz*lWF{dI{FCXe?Blx&P>4CzeWh7z5~HlyicVowb7bCqk7t!}D?D7cM_t0bM#uv^JGN~V~kQ0a+;hDg&Q zzfOcp=5tCmS0exU0mKJ4*Q9AixE#@dux3p}a^ul)s~h~QF+sK|CF#GQC{@efP*fX7 z%T+`kthZYB!n?=0ZG;q>$rA+Qm^FE+qzqOGWb?^cTC3{0_T4SVYE^Q)n$6we3!BSq zJ&~)u6w%<)WDI+0oEGp|meXF_MuXVWD+jWprlJ6fj%-(;4D&0FrVa-MI07J5Uh+9f z_EH9TnW=+P98gld4U#+Qxj_5#diY^_JN{HP#EQ|Gg`Hh)Jlry_cdiP1L&2m z?86TyuyTi<`^S~|X9{v2XJG$@&C4qa6DQU$m((M1O%{&YJxS}Qr(790E&Fmg7an_K z3s{!Z*~=*KY|&378<%S@f-m7{?_LFS-xG;A9PgZ0p0|-?+;t1Rm~KN|WYs9#2;ru8 zB+CD=QetWk`1n$QZvB7bM+BTEIT9*&Js=M6hw3O59eo{tskkjs(Sox6e^SE;7Nz{) zi~Q@-Z;DFCNhzVIzWKQ`-8k#>(Lgc&tzkSUd%Lu3T1QP_U{lc{ENSi&l)W3ho z9D{;`+;gq^!NUxcIot2{f*W9i3}&H0`;W=&iFlxKVhOO`?krvC^`aOHJ0Rin(uB&wu>s`?ztY$fqIo+OdU^FxG;zzTPEOOY)qitq&e_Ea{Sc; z(88{vr3gV5&H}PfY(Hm)crqYZ|i#D$drtSsWKx%(BwsL=Q1;<%(np>%vnRyWAc&FAP78D>` zzR0dzM;^!i$B_LPymLod9tT9&N(Rat=e}P_nm4@9Q=lVLTcF+NU#a8ofwsIJ8!JTF zM@M1&zqnopD8H-K{e8;8PmH1it46u{9#3rcn0bN@Ki}W@eN} zbf&t4N95p_;X9dLpJRhY450)L_u>HW_{LYtl9_u9>z?t#yulQiyIzEoScVhqIwm~E zO}Pl<#4qW6=|&o~$LTx+>rm_M*$KcNWsWZDCkX@11o|KzlDg&F#_9iK;;VVNKRV>Z zS29Q;4hNPt01%W*$*qTxtt2*+h%-4o6SZFu1>L}o0b48$kp2S{FYfgG*cqP?g5fAO zOKBOq@MIqG)jne43#+*A`;CdHqY|eQ+_4PG6$-ypk9FsVvHIVzL(el=w~_afe+ur6 zO~! zpi6Ar-&H<|(djBvE*4@(Q(!YFOYW?%w zS841RmIFDxMb_t~hGH`P73`KcqARq2N|Bg=66^h4unknOxso1}{!-|>A1}mjyHaK@ z=gyCnWrXPst~>Xd4461(ku|Q^C)nk_E}k1xnQ@BI+H%UZ%DuR2OhO{lxHz%>a?5pi zVMw5o3u}E9T_M!Eni~Cb)#y!vwcHHv>U#5xLkwn!uX(-vrxExlSmXS3Ly@4SSVURK zzQhD-wr&)2h+gk+MHOzjH3#M}a}?`ubFZejaLl;MyeyyJbr8|3UAfT&DgAcn!m7%) z{J^!$l;XkH^-dzK_g|;vT-6)w&O>u+Iq5bBT5T6|lo4B|zbzQq7S$iScmXc9sh9P2 zy8_q}vrvW2gY>NLI^(zS=1qN|*u<5&H0jsI1v-znSLpk=Y(3n!rN87_Qz3}Ls$!jw z46H5C{B#B70Uj<9GPaaB71^!qncKwIzuMsiq#uQrTxP*1i?5}O-V5NmxP z9#v8P*$8Q7Yod)i*WWdDKOdIA#0p-#fJXT|HmJiMeelbA`b(4Yb*g~{BknohhV?CU zg~1a(%p78UK{&+cst+g~S*3f|7G^3UQSW8pLeBDzbA}z(%3L%eezSZY-rv&hn<1@< zh1zS_&mI?wq_YC^cZF-_R9~y)24p#lTFOPcR!qyR$>OXZdAUJsH1E>+HZIO?H zIyJTzcgx4%t2ibe>yGBO87q|Pl>{S|?i@xr{}f(43;j;+hfj93*H(Gy_kh&tq?B=ytk6`%@q8Hz^MgSuG$N zQX*7WzI6-C?hMhlVq8(Y9Co^$YS%Vjm%g?(509X*WYl7hSg?zC{6F8Ac9-}xO&PoL z`lMY)@xqExuD{96yl%B{6Gueu>~WO>@W&*5$pDD?BG``X*6QWn=hdIVkScPJHTur4 zpd@5x;H~5}ugmo-_qXPM->MIz7?_x2Y2NNEUZ2~Z65s4o&%xF`XQ;|^1KH29?wbju zz%7eHyRIy_qv-7i9gRzXE|dXHcTT^Gb?Fot3sJRzWajV;A-8le${O@E_qIE;+(LWC zhVr29-Ql!08%`iBU16QJE7zDXGnl$Q)~{7Fwuv#>u3s^1D_&@CD@bsa?UwSuc3x>r z!H!l4SdAsmr_WtoX?~EIu-Q68-x&B-j#z~@H#0=*t_(X0Ia@jzpx!lI6c%*|m*5k@ zBt5DX)skdYt9Ip%W0?u<*k*p%>x<2xr!x^6b1o@Y7@*Ib*>yZQw3aksJ~byZV?NN} zQ2uhoXxfb<#mG#&d`><~9-Fkj0ODf;5~d@=81PDcZ>m;xh%xFGv|Vy63~}?{fmorB z?@NEIxdU)fypIxQU+azEn)CnVZaU`{h7MKCYcX%yttY)~$o-P1le{&G92}vi;MuPh zUPV;kqvwvS2MS?*ZtHk5XN@)#+FA2xo$pJ|GM_RM<=~~;l-e%yTOV`Ol3j_P8MJ45 zw?k?@G~-b2{nk8YVSNYNJowOE`$m*`Aeuck)%`M=(mRbKB}WtVWE4xyj$uuXHCT6? zP2PBAX7Iu}Q(!vl>G*lBr+l)rd~3(3pFJVCOnyNnNq%Bzfo8C}VB$;P+^lPpSk%MU z#xYqao|yroaz5kCn~Af&_VtO2zDtWfuN!Mr@!w!re6iUN>^EpR|BH0Dl5>3iU~Y$ z!m?~*oMU-VPsE29r@c@%8~X(eC{=v99D1fa1^X)BSJF*Og_p-)k{}@P$UKC@#%ZCr zkQ^WbKd~NYdnTk!sr4EY+v0=Z;QE|p^+oZctM03%9*Gl>fc(QG^-`^1SZ3r#ngo}5C0aQRWn>z;XLTp(HkGmcxllv!#|F0siSuJarSIg4MTuioli2x zJemKyw4Yf^S|trXZ(EJG_`2RJfOs<3v0x0a5`&}n?N%T?waE9CY|te{)spHIDl>3R zcW1=}9?EiZkKVYwgljXo->L7F=PT9oMi<3L(C-aXh`IPlE{+^cX~uS8H?soQ>0{2h zjBjjyH}-R_YHDU=a-6g@q_N{4Tz=+UX(#<>#0R&gT|AQx@fDE+$eGf)AKc7f5zI? zA|}j7{LV%W>8d{MhGBwCE>t@{MBn>(2qXG&;>ZH&Acv0R2Rz)3C0lnz$|XHu#0#|c zu18%QvaK71&coA&M;g3K7qf|dDZW&>u^C;fX`$#?e%DTMoY)aAy-pG?PRS8DMTH&NU1XJy#HjQK|kf<#QH%)(m=0;iq&sil|%eBZ6x8Ps|=*nhN(nG z(=uM}M~>k7BXf{9`JucaJo_nf9PNxGa?>vSr;~D`sg~;bVoye{yllK}nC3%L+9*T2 zTlKX?n|9aYT3=>>TWm-08|>_QSm8bvgDX_irxL0SGTzptk8`Xhj@8h|h)1D^O^;0O zCn8)sOCXGPglbX=^aVJ*xs$0^*0QukGqrjbMJOy!Te*5cr-<*WuR9h)Y z$cD#P;>0zT(bQTxal$R`OF($HN{@wJ4Yzkk%_o;sDfVUlu!|-RZFdci_-a@vpovy^ z7-!MhyIz=S@$JN31NET|dfP8tm^B|LXf)k!-p^Z(rRfH}`>Z%mq2eR^W($nr^)O1Q z?Zt0ZyW~gJNm0B?Yt_w9L^04-fMsUo6Ajvk{tKRnYX%#-dm_t84CN3r>wI?zRqo>g zrOa@9CAWi9hL&-tbAzaUd`CY#w)6cqZOzkyZhb)vcLT?aE&RCkznqVTIeICU>S${3 zp;RilWUe2hx_s)xnIl&D1fGL^b-~K)b}Ua{2!q_ zBC(#XzsvmeeM|)rd*KHt(KWl7EY5uNXF`n3tS4PHoAFe4L6*{-~`(fdFXijJ#+#@A=UkRTsYmGNc<+m5WJxLEn8udWR zwPv@I%`P3cSMBo7;YA)Cv$+nb z+S0CTw7Zw5q^_2w{+Kj<$YGRMAw?AfKb|}NA)bx3>D2pE2fP&MYkEjBty2r`zw%_H znGGxt38%>EtPJFD;GwT2cqW+3i9eD_YM0N^m)W#t>bRqkYKizjk>7okqSYRcu+>-s9^NsOk6;{0x4L#ybC4w`&*t}N#;-C#J6PT^ppIPGw(y7^sW zbWMRpZ(HQOl7qJ6PT2lD^9l7#t{eT9X$wjZ-;j1-=fs;6Y} zoFKCIdp`2%>6zMQ$}N>-4uiD)Mp2!fatZW~bseVzggQ}Ui?x?<^gfjz*=gU|jf~jb zU!tpX>zc~e&65}PpmModaQpZc#x~A9hTJXea-6YvqF%iB1{C!al0%mrLWWfaQ0Em*3Q&+_q_`7o#>n) zxy7Bvcv{}Bww)kPA+~0k-0C}htknw#^q=4~m!drfmxDSVBcV#?6ZaF8Z7puK#RPVQ;OZ3Zu5jEiJ4ykr2C~Z(#Xi$iC@2$0^2$yJF4UxXdu$1sHY|zbz1;G%`?= z^4eS#;@La=S&cHUxw<&I1nd?K4?oBj+Ml+Jb$}Fl}|jA@;pZkm-A;agPE1txFUu#yXP}_1RI`E?uN9T6Fy!%a7gS zELPf*A)JwvzQ}g%qkfFIo5teJC$9P%MTd4T^}4+^@f~~bHf&hlvEppK@@ zA#+y%t(|S)g^2C~YtKB+Gt`-_oi;bl96n5G0Dq#5+R!y|)=^DfKJ| zU}B^m$GyE&{oTKsW-IA!5Em!COC?yp_1Qriai6}ZTxY3q((QL0KbE z)u3~0nO1srI&Pw-4cxvJPMMFiJ8ab~_r20_n?^ODvOP{_=WHY`p~*4YC!RlfTJ2X% zd2MUQ(lthWTWrKuB0Oe)x^Ee_#fvL$2)bI)&{_Lcp`+iWN;ksuVuTuIR{kHd-a0I*?)@Hy0i?Sf+5lu|L>iHMA=ozocB_)8b=t7H$z>-(}5U6h+gijz$ny zYJ2TaUuH-`ura^1v?^(31T(zD>Deej3$uK+Pw zVFB&7?$roF;l)`x?gydW8D$>xTScYzTOb%Nv@`h_K)AM$Zh89ocjqwg_UGOAnJ@Gz zES^bQ9@+19N;DEDwh zuEQ6x^NHy!#q;Qk?hh9`x@W4Tq6ouIO#-kqaPZMz$?|It=T(4G!EEL0zf6(_UAK3z z9=vi^E0hv$*%}G-&`xrJ{#3?;Efpu=NM6?iI(x#{COCA2Iq~6)MdhFFcW5JcRsrYP zE&PS){xj8oF&5b_?-=Be0noW-10G`B@anMIbRWC$?4L)Ip6?)s1j z7!(VRbO;AHU+$9!3-lIcbUdIyf)9oW(dN)pgmo^dDjU+6h6Vl_Lo%&=Q~Lp}=yKEZ z9q?T>Y8vzsvzAq>Vz_$`-+J;t3sOg@U51PLP`Ip5{uufXb2$v0$J$gV`vyBeizfxLlTeMDdhCfvt7Lk)f9HbQ_sMO zRwfIgz8}orh?ebI0nVMHv~AFOPG<*j?Oj&EpwGK^x2{LpnJN8O&mG`Rk3J`#j#qSy zwKXy=8s%Qb@>0;ld8B`A1C~9F{EER zBHl2qaxv*mInCsrBe&STUAOM*cB03x%26il($Lan{8;iWKaJ-v3YK}c6P0<^i3$TU zE4cgnos!RCa}R&4(m*);&P@kKtHklu2_-nLEc0^zGW7pv9VF_v=8kYVs zkf%??^KT{%y@ovs3s#637UVy*z$!WGQqf0e?PifWqDo8UdK|gM_qW$oGi#Qgc6;`I z)0evQNX42%NI}yR;8(-<&-)`iA3sh^ys%cXEHbG&4nMz|0=2;|(p8C#XAUtAL(fEUFHxW}6F1Dw%le;Mt^ zqp)_GC-<#G*^dUUTy5z~dGm)*Y88Me1oHIiW*aJ>5Kj8`zpgA%eSzY+w3o7}&&b;l z*mJMpya=rdOj7WpyS@Tf>;NrFRN1E{ts&IJSGJqcEpD}UjrZ~^ zc%iQ_RL)@rUt!Ny2MdjEeovfEET;Py)l9QyOw#gxz}lhz`SF9f(@z|NinVE`AKvf$ zGhf+c(>7vWbD{L^W9|(VsG%O|imkyEs+#G|*@;%Ykyx%QAEq zd@|J+L<+A{7p+*AxwF(KX3nh!>jig@cAkrij|<}-`KGHCApsd(UNbhPQwpivl^mZ}iQ{<&hdWTmG zhIBp{Xz|G#zXc}6=SUW$NyaIN)a>38JhHL)JDEx~8Y!8kQwynpY{C}c(QN@JY4bNA zy_`vQU8IL9DE6PVNFcKUUMCy2NU#4kxj9jclruW88rqM`aHk&uPtLTQ{wF<)wUnuchm<1&A*snV{v&=Ha0iu}E zfK+lP3Zl_1L{fk+gNkZ)Y#Pfajh_flMR`$gj{F92-ItZktR(x@LL4mFMB+R{vKcQYbt63dhu4>U?QXD=*DjI50M+ia>rD4Lh) z$3vUoNrYq;H?-f3JZy3_Ch|xv^U$re-)LoW%T@PlMgbwy4ggths;!d?4A5mCx?G#l zADOxyUQ3AxD&a2a0@1b>RCb@@%egP6XM9f!FBbm}&%!6|-SVw6@DmPe)Kj7iYJKIG zrYwy=SLom?)1k3X!-lmxkIQ-&C23t2e7n^cJ#ruXbEZPT#heeB&!gt2C9XVc)6jhX;_uN53cl2&7z2higGr!p#Wb!&6NKgJfs0`k`thWOx zr~4WMWoUS}_)tc3=5Ko1z4w`kwYQ~b>0`0(x9O`E;Rt1g*^7<`)GDwmciKlIvXqTP`PhYss``wrB zSPeWfIePKWwLZo!Za4kX#;FGWT#S{BMg`#?6)mhQq9g9kK|4$6HLi^uWtcuJtXY`e zMht@Vi_-!c33Qk}Tq4*#>eFdiT@~R1YpKYcwEG<=pZj#D z@|nlz{}~h^utVAZjP5O1fh=B6sclGmAGL1$D6DHsSb9g87r9{JB8DyO&;)C=%t~4` zH2wwA{ef&^l3TYFA*AweX^OrWOSBJ(#1pj|MDsM52{E?=E3!$CiwpjpBYBxJ<^NnR zJ1CNp?WWF~25V@~n0uI1Y9sH{(!AtPdFTYRNXsFrk4YfnFbM{VP6kehA0)1R_^8%Bmn=*5}AGtK&kJ+hc|j>X`u@X}IGJ zIlOn5u_oX=b07=s5G5{Luw-9I#J-nY8a3t`A~Bcyy+o(_GP1ov-bYOoBd=8fMOq5p zC{jiZhO~lwg0-EZp%(4xaAFUmIYR#VQQlLlntR*j+^|rB%6Dl4%3QS88Hcmht)lYp31zz)&L4-7)rX{tm@xkbSw2hjzUgUZ$VXE#22T`>l52+xKo>gNx8B z1-gAw{Z9?S=YD33%Hb=-p|Up5C$=+2n88h5;ja$)0!xNzBNYOGaLKO+2?EU?V2WsW z_#0FxgU+=8Yu#bsHVKETqw%5aBI6&!zHXC5kS= z89hJup|=B5dtmTPTQ{r>^9*!PqC zT4Bw(C{5l9mQf)jI=lkm5BC8J!B`a}{&F~BP78J({~8&M6e1+G3`KePFtxBCwyXke z_+j$s-Bdm@LU;SOxaZrnaZE!8Ld7W^-cTaxqy9({?2Cj7m{&@ewjKz-u6mAd!VQ1Y z^l(P;PucchK6tf*n%uHHdz!-aeV6hwg}VcDs!=cj;L8Z!Rd1$JcP(-MGbkXnsKm?n zhTTXZ4A;g)i4@0k4-L}3*|N0T2rjw(D8>0t?0pCBajU;?7|!&6x^8%hP<`>7Yt{C? zc)P%0NaC3ZJML(4n|W4k!Xu{aPcr8~DBDue)M9VIisJ6(%`B@JaB12!_qf;n!XXH( z7+g$0nWXPV(=i04g8&6o36Z*LPTF^JuY*}1XSUFb8`DIV-%RU5qxf0)3J9m*b9APs z*`I7GmO+^A1V3huo8a-$z4^~4rEao%bJ5<@*8`I}2D5rYxudb?3!{fYZB35FJ_9{J zMiiyGTeSbn{jq$+c=?*H1h?kSjNlnmLulG~-Sn#E^w0^wg%RHd7z3Ojw8UfxH5Y|G z&mw&4AOO(*H&VobnYzhpAjTPde=+-0gneTG@%AjB3YY{mVC~0S2>I<8xBJZG$0V! z8Zx6a9r-#*3xoD(chnY#vR$opsI^-qP114s;ps9l^EnGEvmHW(J}DG)=b1d69_ zn?M%I7R;BxA0+RsjsH9aEwtW&yUV|-tDxbuNwC;8pusTm%sFS8EnpbZA}9H7dmady zJXM%jS6sA^^7N%(ME3e#$*Z3M&-cM7rAWaby6A;^ZInsmC&1Mq1f?w+*f7L9BpxA0 z&NX#iZEa0(#h#^+6b|#h(B~j{RLd);|L(uU@hUgWxra5ynJ?ZiR~=-fqC4hlO@q8$ z=H^HLB|tI?=hZ+5{FIyi94O6ECWlFKrrdrNTbn)&X6Z6U4To(Z6;=DTM1WZce%Tez zkFTDYSOyA^8}%hLv|y-_I*^OCFaIDF!~imzc=>#?*F#w!<`BBl=x&sVA|mP9p3)vQ z;&$)peCjv6jB?3f&8$XCAGOUa$^;hEiYquW14%YNPbcs$GQ%S;ZJhlzjeagVsQV>m z;I>d-^3&jtZ3)(R%GplV{9cF+(CF#m5$nS(25O#X!T~@=R9e%N6-!Gs6_Qd2uF2~H z-OTvUE`YRS0&rr#Z8KWkG^4)`Y+w|nPd=VWfj3F^Rlw91R z>va)-LKi9mW06|uVHc+}a{wRZX=>p2m^8mGSI**o>F(rM$~U*6rO0HEWiL|`p-9Gf zc=#4UQ}p_uXQjx54OUZHS|hi)@H>Ti9TjbLO*6Bw9WXqWr33Oi9~iljrrD$wKaS)= zem;R|E^_->vQ$@0r=sCM6GR3>vDLZaQ1SNM2_rRMxod1HvD@{QE21EEHE#28cA5Pm zE#shtQCIu2T1A0VxW~loM212vkXimYL-Wnv8@V#;I zEtop&DWv5B#B<^{ZP}Wi6018{ZM+%4=~pJ;rO}{ySIovWG#*daJKI5{-&JoCVUIAl zs0~5aBZI|giMh$4Crv6^_4hTJ#*>i%SDwr=sej&2CN-Uq$VJaQ7tCpMX}(??8-^s7 zgBeVxDPK*TvlMqHiVEr&ErT4)g6G*fkcy)KcY~U4|yNItGjmb}u{XZ8|d1&MqJ;;=P?X|k6U;0zCBkX|I9fW{lSq z!c3!D>TM!CmV00NAzHRJUfPNEK`8ORL;<`;Jn}jQ-?*eH5$U%9{L!N4Xl=Bt=%Ny% zCF15#!Q~N?5hc$?!{iPgqri~C^|{4JW-7}vzEwbco~IheV+|adHDH2L$u$S$vZl@c zWrR48NKJYf{6bJ7IJv9Wb5F2P^fyqxnghf_6^ImwL0vT#x)Hze{1wQ|POPKGx=tin zGs0`0s_XMGkICp3XQS0WuPOdZpO823jFRgK!?$T%R@xk-(n-z#C>d&uFT;CmHVQU@ zxR({rWpM}?f~A#1Lc;@Dftv_C2D>KmJTOrmOwtAB;XdAws~cq6P*xE_C~Bu9IghpL zgL&j%0n#I}9Crkbk>&Y5T-VVJy8IAhVO0u1GT+@Mq08W;;JqCz z+5e(PgSKOYRKme$>4aubSGu!N>%m2Q%ZxYV>N5lIATN9DGPy}6oX4%&VOSLYgjn~l zR^j*xBgow6;8V)s;gZ9~%^}ozfYd+=$I}H!1mDVZ06dG|j%P@{;@e_f!D!tiP+D9l zw=)L}IFmq=F{vDqq*w=M$m7;_&aEB2P#kBegU`Mcto4m^Z_{~Gi8LEte&8{`!04vcN(N1GZ^)xfNK z(;}-e6o9@39LONHI@zFTHN=NphNC_jnx{L2ppYh#-}_F`#{a zOajY;4p+Zx>PUxq`L~US$z0S$6t01fT{;R3TN%QG1}z6jw>~Aqg^@ukgqrK%q4R8} zYR=}pP7XGE*5fpkPoh}m7?@rJ6JMw0(bHBAYMc|;qzVONZPfEAozRFygqw)bqc(_1 zv0}m;*d7*Nj8Il8C4MQ2cL)6~A|0{T6XpFO$yw6B0q6d_7u={ga_Ad12MWA*=Kq)6p&MseR=@xuXKmRW{E!2j!1ebKF!*r2B9Ks-f+x)l74G zF#FjEFKw^LpGJl*(gd+TxXDs!1{XC9=vf|Kv{FzGqzfin&09@dD9?5I zyy)UOBT6CaU+d)c)yyudFB0tn8m|eC0@6;*LdcMPW-%g6E;b30DlUqWy|=Z&+M9=D zaQeJcA~jUsy7dna2^G~jUFIM*WuS(A#O|rr?*(kqf)ntA8sw zX%xky+9q70Q%!)2jnkTS^L4~`cW}ZNh@FHln;EHkc#o0qTkVPSKWrJjH3n0O z{j4)hIB;bk*fywH6%CeUcCC)>magt2&@%PqM&!zRbqE`3%h$I^?0o8yif0eYFt|AR zkj;|9HgO0_vLWkr<(L=UA7vOqoeJQt&d->he!(pfZPdFgGB3!3KTY__V zr@7OuCW6+7$4+eVvtDr+gC>CK{)ES5uBSki%$xRRWaLtdr z*>Jc2^JF$q9e64zM;e4a=>Vq!Q!wqPa>yjLda9ThjtX~v*wSplDperz8>}ch9HS-_ z(0n-paiZ^5(TaFT6rTS!DM^11*GNxeR+7+AR(sz#-F)exagp=lCFT}1NY?5#R2*Y; z!J&SPt+9ia4U({^@#WYl;Wy4L8LiirjzA3^1=GST@q}KDbU{%@cj6-mS6K#FF%zZ2 zN70o|uOPbO3J^}01Lh_Xq<@$x7)CCe1aK<&cADj?EDJl#*}A}i+Rq}ZyGK0nyM-x{ z<^5i|1OE!sv#uMLKAQ^KxPRqGHSC54_NR1rTW34R+5@Q=$4o-8^2N43Tk?l-<2DB` z13dT|h*Ot9vFK4mbcZGm9;73ZFYB=X_klF==5M7V z>;2yg{!#sPDQp~I!6~ZgSo3eQ87li7g}p{Vo%X*WvSKZeGhbX(kAyv>3N_t0NI#jmrKo<~yJ!zBa$Q zZUvGq)@1-+j*v#&2MD`{QqR*jy|dVigw#M`d+V6CPc39zV55Or5>V-f z9@Wv7EunjN0*K-61j}{}r1YC8A>>F9m#{6ul7E>{3W&(4 zUyT-KOilNkwK@aIwskNd(m{L6?V6ks&@XXS`T;?&LuI-)0nd*UnEF<`uP(9a54L}D z0=Ur=SR)t?m^A=nYE2}kK*(#|dBRS~i!F@O9`Up*QFJhzQG5iF@eSsU2jZePwfd%; zjsZ{SRz*KMEnWT{JQDzDjG`vQBs7Bv1R$xyr2;Z<2}mIu;t-0QGr`)Uhdg`H-sie> z?0plNEpWk-Pboq1#EpVHmO4%DK zw-oW@$?_e@To8*oNyG))NyC8v8sF<0Dqw;pb&6^a6ouR{3-&D(s3Op9Tx-$FxN^~@ zG`r^A;PV}+YDp3Lejr^nlz@;W!iP$S+s4fpX_19o8ya;#bS(WY>$;vCNy$|TK#dhp z`Iw3t}2|pgyINq0i=|&l(M@G1#l@Zbrhj)HbxCfvWii zbio}08YgfMg}e};U2jBwWy%!U_T?s&cR2_w(QIgA7k7_|D%JPI3xPR^R_#S417Wm9 z*;#R%-`Ls8yU4j5Rgz|?L?MOUu{p`p3B&T7*um1Qx$`u^UnUK2+AWaQlgO4$Gp^+? zACGj4%3b~K7%>_q(pk})i-o0n&Mj}B8Ritd*>XBGZk~myO>byRm6A%I^a0v+zw~TS z-Nu-b)JyX2Wl>9BdqK|r8)!S~*&kyjEBfk^ZX`5PlLoB~W<^4!r4thx8_N8onH8+W zp*d$vy$447SL(g?13}gD`#tTFmocP`rZ?ASVKmIPomYfQ=2fJG`I_-h0L%8esqGUC z>nHgYrfwS3_x!5x$mlKjjH_%^`B8c?h)3Y6f2yOVD3`s46nTD-F8%8n#gR;l zooNAPnUoQ$8Sppi6SnTfR zj%}1~lTG>l+wbs^0z4mgyy>byN=&MKjvm&yqe;^=?{qxg`7iQz6yi7chyeTOtZ2JoqlAHo?CS@yE}sToIa}@g66!9lnpYb;90>l-LUDMRDQU9>bW*f=AdL zWFt{mR;hgpfNVRD3c4Xfc=;{NDTOf1GX16+r8->KWUn*VT8z5C z0>`Y)-&pF_fwJh1V_)jsvks!fp;Sgtj%IQ|q#7a1t#DlX`4p!=;anjNJfrf)kcx}P zU0osw@;_uYL6Qah>w+-43 zuJkPP(MkdqV9uMCz*j1vq3JC3cFY~QR!(dHk)@hCP=^cOXsqtz*bz0R6};J$YWz+q z@8~51m**Ws@7b3uqN{^C;vO;y@1w7FVL7~h6P;w-nPu?{^b_HE=LvQHMaZ}~bI1}kP)dy750Ghfr1uEe> zjN3Ric6I6aEvV*@{8K=ayLWug|474gyZg@M@!#6N!{{uS>GTu2gHw5?MO@G2kA!4( zj~{?Kvv<;KzSe2f^W84m!DeJ)4kCj&dsvX2b8V!SipgV|Kxu>^1-zi0_^pMO^1hX- z^|m`aqbQk2iWm+|OVtl+$D6)`gRJb|YB!^#1TtlxBPDRD-Ej*v6S!}N(Bpe*d`%0A z2v1RzB;_=THNvnEF-oLBeg&}eEQ^y5`&$;p>myy zv|22oWqCDb85TMq2NyZ_o;Ed*_q$2mm5B0LO!g&EfZHd$a?o8*P1r1~w-&_3i*8`h zHj}aD;WNU-ZtcdwXz^*uL*_egluw!gTEXC}0wL_ehzMIBY%w(76}KF04+WGAC!W!- znZ!nyHfN?!j5P^i%lOm9xcN4sZXIH^NXbK;NTt-gsd_yHjW^$&%JT7KZ!%$V z66VH}S}|aT@@S0ZMjTp(a!c^h9%t!sG~<)26|dfmEXRhUd-`rhq8d1A@n8q{O(Ic1 zs^WUVZ0%Y3ZI~P3^qwC?TUQVhT3>^8e$Xm?VnUzX;Ef_)eNp$`1GyJ;N??2305tfL zN_u7U_|fS&Q<3Puk;BIQH>_rEXi0-B79a~?W;2Ph@Yd%GeY8?TJ`J?ID_^ed26Qnm zUNl;BUHX8$i=8asDj(1s z9g{%n8AeP?l}idh?=6BiPU=rL%74N?4sG(sxC}8q^(|4+!}q?`bgd5vsGHSdaO8hs z&Eu(qVM)!Qu?rp&m&s3~{^DC(O=ku!zb{ia8k7&?cTY4Mi+`G{{WgAMGGE;(6*H6; zxe=+qAOq}l_D$>!{h1%IkiXdg&%!vD8JQu$)MFe~|EWGQTK?H_=;Y0WotwFBtTPKBwETD88yO#k9e_38)*vVhLX^-5Ol3u&lPTMJ9 z($X2VE>-mfWEmNqpvA8cPmv<)f+X4cj-Ds`8sG8pmo|7Qo667PU4hyru@tfH(M;U7 z0MHsqbA$%p%`O$@mOkF0BGSvJ&w!pjgZwEpND2~8I^VZAl$=h+ET-Bb^=kUhh#c~l z)0yW|U(|jMgR^h;a`CJJJ$ z!|8(P_w4F>;@S>!DlLt)blLbmE#4S4?1_dV20hYG)un#^kkh?t?m3XpJdW$mF=+T- zH5%m1_>Z~bDVygvTbT`Wa3=;sV1Hw@3{=htslopRO8-zYb^4A~6uRxxLZYfe{5L;eJ-x(?rI4g5~BolX=9T+YaHfh4MshoeO z`qC-{l}=XBE4i=ttb9i{^%t2km%BDzzcnW^y8Zo_&m&yJ&O!E}yAhKDch4Vk($GVm z3Ywa9qOSHYC~^b&dE0VLln^$m0~uiY*v-vl+&pDP2N`!DGQ3G{Y1K+1E7vO~mfII|s@ z_+XVi_^~sfT9Ri_XT?_j?ivHHsY>uGec_<_zr+q91U|ClbuR+lcsGuXOux*zV~5a! zZoZQA)=1=!68>LfO?RxYH>g;UU2x$OO8+HNXo60zD2~51b>^PnZPqAKfd8DA%f7d! zZFK^~-ji-u0*0w7@R)rwiDaM4D-ho8K_VAljGKi83T^}^M_ts!O@AcWmzKU?Mhc?DJeVfDM$DVP2! zB`ZZe-=oa?o5B+>{j!9o9l~1WXJg?fi*uHwNS8wFaUi92LQNJOhtQE7d2|5i+meEN zT4u4C2nR&^TRjPv;|R$&8n0<@Vu$8K0GvtCng||SydO>f900CKnh`b3l5TsBpxCiX z=z$)x8_Ct_=UTJP_yuW#e#VasydohiNSh~e)B0ZU6hReU0jSr!29%tFF|~|0$eTbz zj4Y^IIxWI7^+o8RhLW^+pq=r+N-p!(n9ISJ+YhkwMY@`CBn;?yg-`ZoU*0a}^*Zc4 zdz~QsaEQ<1nGp+HdIf}t<8k~t5zsx4Y`kJ0r|+Cl1zzLn6&>m0(cTF_dtt8MMCkKX z&bv91+Z~}^#r;8+(Mm$3X%45l1fZt?wrlPEp1tM{KS1T#XFN*2rG!C9gc42+qaCvq z2&o9ZrA1C;sK#v*hCq(E4rv+xyi@eP>;qXg02aN` z<``uQ@n}>Ocic&16xfz|0fu}e%#ZkEofkp2d08pcAb_4`%D=E1pBcTGUR&b#Lc-<9 zPl?bpp6mHG=F#A1ay(jE1YP+DqEKSM9ilu`&Pd8Dj68s^SX^u7MwX9}ls%c|RIa$X zM?$bqx&ksRuMqOQo=2||@sftU*TR=Onp&7HXABg;*?HR(%k~f2EO|_U+33R z$OWzesypMs;=Ry(S^ff6sm^)64BLU~%e0;Chg>@f24Ji4U6r;XcV{M93HWZb z$_(YUU+vn|5#Q5d%WK|QWYmLDVzUoOHLtVwN*(9MeTz`!;W4V^JTct@H3QW>WZkTf zWSkKZXL2Emi#^|U13=;y^4t0L=I%CLdp~@Y7E~=Q^!{ooD7vkD$vXN0A+?Xe=<#fR zJ@w5S?iD~T`=w14ARBvMvw5&4A!witn>X{bay`pE`6a3FEp*rLl!6d3C)o&Gys(_M5dXhj_!nbhRWO zJUkUPEZN;W#S>NSEz3w@cYfu>bQAbIJ2cz^RBcI)C-eV8QZ*&&5>|v-igV0K+S+wB zvf37PiY>xkFJbgw2_UTe@VI7j{RBXpg;w3HkJi z$r4?UWLLXuP+`W%&qZ%i^M^f7!pWW+Dn)^3@5&6YZPOzqY5MY&U^F-zVrK_)MSD6N zG(Mox%g*ZJtDb8&*arGG&0S{&jRi`i+m_P(ESxzsPyxHd=E1s;F;)x^BxF}}ain9q z7BJ3;KHK*?k3+Uo#UYxVr~J2GSnjT-miY8)3v4Z(rP1 z=!*}1(~0;YcL z#R1iD+hhM^>$d?KyT427G(7&Q+`ZPYjjTNy{;udz06R$f>(2hNGlPNO#J`biqWiYi zeT%t8UcmVD%;Fsa`ysgzW|K)UiUQVF6qHVCY7&`XMkHQb6INDX$!?zbe+Pd~8V^J4 z5??pu+_fx=-i}L(U-P$$=5G% zcnp4sEX9d;j^d%~cXNw+1g83g0)H1f%SZ zpt`IH2Bn|7>SBz}2EX|O-&)115vKXEi()qagDZKA`Tc(l9y)AW7rmGOsDU0qWq|QbdNcXr9xKm0Q$#9Z+3;aaxXH>@*MfAOGsO zab2-W9}b4bTem&h#c#Qf=3{6?v^1jtseHFh%R>t_59LffDO?We%$7h0eGtPzD}x0yINM938S-j=u+* z&m9C83E@{$Zjo=l&8s8>>DutF=g_gm(f;4R$4!}tiuI&>aJoE4nMNkEtVH{erE?$( znyE5QqoR=;iO@^yI_X;~tnXcX&cJEXXc8uT5%6C?OxWrUaW+|PoDx5Y#JvqT zwa-hJcJTL%9tE>04~i{W_<+1>t*tGncRro>W>-&M-L_W`)MiI-V}^fh4V1F{DBTcQ zihjOh%+x;Y18wGc^b zTS?D6Drb`!1wbub3r{-(l3iRZ~`8wY5wSf5m51p7gLSr1Al4U}#@q8kP7NCQGsQvnC>F`CX7YqK9oV1QO9 z6)tN3xi;f4)sMv9rTK$oec2wQPRWY_scg=mo_lPPs;#~}ZnYaVI$2tJGm2egv z0J7hBfUBu}% zKgyK|DnVJlGS1*ld+h)PNY2)R@ugW_%BGS5*uT%>E#C&;;EFHo8Og4ke$NU}v7Jz@&cWzA_OBlAW*;Rc*Cv3RbSOEI!`Ye(ra_9l zs0Z4c0HgO+9*z&I^i6yFLz7`Kn)A^FuzmLnI6_ooH}1WH_>_knr#$u*b{}u8;H*{4 z$jhtVWqE2g+JG-A$GkFdBqw2N0x;*@G|&GHHbHNM3bRKaU}aS(mZ(=md38D_HVQ&1 z5>t%Wd)+_x%{40~AEssTddPpg34;oPJzV%(X};_a=3fB_nzKvHz=ryRl9os?=xTBD z*VvD_9)Q*Uwx(t&2_5M6XJ4s<;rT^u0;;ICm0T$a+gC;W)0^o@LoKa&TLsSl8?PK7 z%ij)3vRPIa=iCM3{tABTUA=HYuW2R271?ulQM&&@<-pSQl!Xf<0vVm-y$ra8edTp4 z?9D0VWCC@yK&LrB-Xu?hmPWle5QlnB#WGO(Lw6&?kXvB4myv1M@c*nS2sWM1+Ha@S z^^VmG#-9319qt&{xS##olMcvucLYDD>~I3)dghF4q+SP&2pwNC4s0;_Wr?D8XbM5J zjCHEdq&!UpLrsN-8u}F&@A{BQllxHL_Q;~9XAri{&R2t+EbRhFW??7UD3Zy z%|F7OU-=Pl?Ha}*Ep~)yxegaA{ttE_)%h@YOr@4bL zEU!9SSNA{?#t+N7eL|%0$k6_4reBw;m$+{sq(T_!osSm;--U*M%aLyFnxdR9LQ#aW z=iu6$vbJ7z5X9whJaxD`xL3*X953zjypZKsns<-9 zHqS+YNcQm8*xtfktty<**owHR53@7~o--AJ5{i+#{SH|?>%8Y4dA)qIiSUpP$0g#W z3dTxjN6sUc7pk{i$8fxt{?g*zkM`EU7QWQmTX z>tb40MR&`nXwM4$qgx8y8gb`hcg!X=SNOrGgAfij$lV`h{T1f>x(%8OxuE_ya}%)9 zKr=9a*LJ!1>L`_zr&vpXB1TTAi}NNRIyfP{3t}|YXGTUozBw!#dZq}PQj7ld&w9;9 z4e5cWezVP>wAUBkGxi$`i~$Yx2ZoZO=H>6N$Le(Pg;w7_i8XC!{AgXhwHP>gg3`@< zY%%#2%&P4htS1fzR81bee*Ic+`@!p;$g}9=RNvU8bIE$EGAr@@(XB4odyD+Y(zPFt zwD!LVlDzivn%`Z9HR4Dge>`s3s9%rVuR%68U3iaD0_@cvexg@+g>sgBS{(V|OSe>i zP%ZpNyLJ*}I0EL8aUWqp&zs0*Vyz=UlI7<2U4X+ps|s^J`0glon?@lvGaNMY7v6p24kuNQ zwOSYQ{PgPg$hT${=WgwhZ`}wHGe;*Y_#JEeM^Xk+G0#utMc3DremV9|*d_caXe?b% ztv;?SYfhVa+qm7kwGs%|7eMznUkE)zjWg!aOW zdo*2}a!_!AzV#%loBvg4t{Rv_yE697eEqO>KdxC0G-xS$O*j;{7v%1vb9=TnRNu>a z#0%cCX@E6;Xezem7Rx?{$-U!inAnK(s_5*I97%F%GWbGBv^HL1*GP&Uwo0iOFj8B* z7es5ALf8ISw?y|mX=1u-jj;Qp)m&zm-f~OWd3ot0#iCb#KSIo;Q7XH}JJVkO<;d!AK}4pxF5c{)W>MJ$gT zs`@koSJx{Yk$;}|=&UM6el!*cy{LmcCINwPxd%o#`w{Eka39G-ZnbP1Y9#5%^?AKwITxU^M;FhceMVah~sjzF;>JgCM}3inuvU zLW^7;Zh^J{6lC1YfO1eOb~cb&fKd2|M)r>R$jhJK_j3q-d7K{I&#U}CwYYlJ*j`j! zt^WN$@m-nT;gdV5y%9R1p6>Pd>-|ful^@Ud^kS16qA({X&rhx&lNT53?~S`n;xc!q zE&u*jD>42}x3)g%;2XU9hyK#uy4IBFjZM+*CO?WZRoe4k+=iPKaka@6&2!V$#}zhb z2PFF{&oNn$wY~FewXU1K!eJhdpUbsLn+XRHji+{bl1_;)5w4fI88}YYZtt4P((YGJ zP0Y2ZC+n*6UVt1^C-A1562ct_ICo;p?6XN7G;X4#m$-Xgj40N8u#_8O91aU?xe0OW zb(8{fJ?}JA$cLSg=i^WlUSA>LOr~pmD;WD`F*WH;Tk%`j7i&?3FF!sr%QHe3F8MAA zR^BUpo{&S>XYvs_vxi@t;6PJRD|u3>TW(P?CA9TJFv6CdvAXQfNXDn*!*Ehp<}=H| z$|r^88+C(!%Ucaxq#bT|D!x8>>sDDLK!|hag}y_Px(&^;NoFKew!n!KYf-Ie6L>Y3odELJ`>ailHu z!|6}#x^GcLSC~hx+xF@2Jk#USb=`B<_&;M`lB7%B=OS;$Tv7*M!xH_J`LpIL7ot3u zVKq+!NCcKL`V>K_{+ZhHC0kL9Y-%C3ZHD5vACNt!#>*F(tIu!zV2=pLtPbaL_=+Y9`q&H9^@sFaM@o#|-q6k`(K- zX)>1kfuyC)ZH)ZRywDt4V;}vbN^NcIjq7?k_s94BGihGocI-)Bk9wMMjz&;SqK;9d zWub(^Q@l2wO`+%eIZDr*8hVd*igKHAu3A?ds ziGIeOAB!kX(I=OHW%*Pb;h;wsFw4h;FoZACM?Q(s^g|B~(o(8T4*q3$)RSOATDNcb z^ejvF#~rJ$u8woUWlOQ{^Awae9B@)o(~n5az5l>&=h%a!1Na>fVrE~5#rtXKnp)3DTfxw}* zm$6!hwmguLdy@G#JfWL^+-$w5+1F~ZU-y+(#aTB^`Q4;ayI!-r`Kcje+$DiM6ZqbJ z37b>quZ^fRA^(4vaQl4j+Kg#{W0=Eec@%q=Xzas)#}p{M>K}&bb6$ z8g=FtZRW9Dp7}dgW7E${tY)q-dw%{i=J4X@t!>-CBoNfSf8<5k4tRG!1=zw0g|-`e#a)Ro?JfK?mK3@lq=Y*_ZQ z4QghN(tXD}Gum#k^}*!P(i88nx#HS_k9+8Gwet1&$cze^OLfes&}P;h2|BY|DQNp` z^v`d)DT17_1jYBGDB0-2A+<2V9#~}V5=G88iUt;Z-oYhy>bmEoy@4-jF7o=kfh_e6QJ8WiT87E$<#c`8ckEmQ=6kdQe3Dt7LzXi+*7CS=qhw-^|jkYFqyJtL|sbjr+D!-4d{^)as*3 z2X*Noa1qcW>!#q#Grq5s(fM zP*763TRH^kMnYOjq)Teiun37or<8O_N=tX`v2O3@`R{!k@4NR`k;PnN&Ntu+{E-D;z zI5?tP!Xo%*Q<#4v>6bw5<^!1hM(uum*W^fkL;0-n@~1_;1&7X6Wphnox=6h`TAka@ z!xVF5_Q$r))K9T+q`z`FOMlQ?6W97aqF?teOLq?9Q>y2x5}C?37rOtf-p%@J`mCLNOP7f-g@XDL;_ zb-nz@L|W*8EGY5uSe3<8FD=MKU|Q%|{!D4c?PncI=fCvYZKQzRRL7lMxzm4+XuW{a z7M_q5%zH{7^-wYLBaSGmi51py-c~8?nHANC*~8JUj}rr$^-f$(Yl}YHDTCtJskCoq zpb_6cEYm%+zKpi->z>`I{|?n#ZY+feWkYWhg6`iP-(k5wGKJh8=<>%@-pmD+Tc%X{ z`}at8Q`rBI)UD%e>5(D}5~CRrHnXQ@{r2OFdbRO-*q}O5vGCtenxl%833rB-D$p-Ivc4jnWly530F<(|y?zG3mzZ&AJy)%Q|oeJ9^Y_7;%X z(CXPNP8?S!KR8nkauC#en5a=_a0VRa)ebzpX35g`J{$eBs}}m$o_e+p6m<_X?a%KP z7Cx!l%&&4qzOgk*D%ILs_wscM*cs<}zti(uzzlTa2NDgB$E5H3qqCJ>7W_!tS1+*0 z@E1ZglmDSl~XCeCR_J%!_jf}*?KHvRp;_yE!A?R^! zWY!3Efr`#$46#7VSoF_XyZga766R(w63?>;(Z}zmbRK)EC<1{)uw($(A5?veTTcl= zNvYMQ@zn@vP2_O!kruP1d}iyc))VREMSG1BX1}n_Z{O{;I)4qQ!a^SQsjPRZlh#kK z^7pPAcYbrZ7Px9JwT%2xoAOP?vG2c%wpaPC?_K76uiao>`+c|WTu3j@@vPVQ&iooy zN?@sXg;sKOllV+*_fPZT^E&v}GV__C*1(t|uS6@tK2T}g4&P3?#XUsKx zw-+4#p5{4PifcMBk;JaM#o2m>;C71Fx;At61m zV%9NyVk3Nw4M2F61W$E?&#R>{Lx<=6>ITku2UOu zweP+fviGSz*~8QAU~K*EkEr3uTn8n{p2K1pinWh<{le37&;rSDq#e zHP8?ItIUV@ZZQ!*{HZ*SSbx86?){QHNYs5)QH;gK%5#VL@58|gzxAwUiJIUe)6l08 zdym-Dw8FG0iN<8f6MVC3;&nt!HRcBvU`q_pGbjY8A7e7&nv6y%8HN9h1DKb5nZsq7A64G{6E|Qc7Ck1fd(WLWZ z)eXS&4)&QOV(gy^(abAfh`;V78{x)niDblCW$kEjT9y5TQChxHz)bz=U+PCGB7z9> zp?_g6cK>DHEW3k`spy7OD%)@7zm)J6{C7O>e-B=5E8K#?2Z*HS{#fYH*e8!vzWV8i zZ$7h~R(@%H`OlBwo8phKtJ9qYP{?XpX@JUpluqU-hB=3y9zlxv4{}&nff)2QeHs%Sd=Y%*cEOE!4dvE>=>2g5U*=^h@ zJ6$Na`sc{tj;!ohS@G%NYxZ6f#~H0zX}^E+C^P^>nfKfOygbB+05R0Mt zh;Fo6{8-V=`N;F7gv`{AEGu!VCm@vfGzZ*k^Z64&Nb>wNuGgBTJ61zoTHPKc!N?uOpWCoy1U1&$<>UJ{8V zZMui?v0bFB$8>0}OW8e)tX82>qPzJ}U#~hhq)@k`W!h%w;2X;CRpW0zl{`m|7T#u& zC+mCqn$9HX?ZL7@aL{5i~Sw%IgB<;c^B0P^{yz zzpqmvGWA;!zEBKV_*&i8isU-vgToTY|%ceJuiLYvg62W+_ev6{{KY3&lmuX| zmfX2}9RK9l?uq`^6R+WkPN*DINco`pZ+gUOfTRi*wg|2`jQXN>K=1p|!V_Mox&ldk z-F{Qsk84Ml(M!#8gFQI#43w8w@87Gs1X3YPFOYWmf>>R>Q~^6@cQ~05NUMXp;(s7e zeggU*P^k{!a*Z^_Ro&+JVP5S^{|nM3JJq5#@B)WMctc*-Xmg?@dFNNF-)Al}MTuJ% za8lz7B{~hUz7R9(aCk)GJdKJ=wRv^6w?o3NwY2DSuK!PgoR7-XRLclJ1VQqVO**^V z{^G*&BhgZy%K^i)<1q)n>p8yU;>l+Yi}P@0W)zM7eA-PXk$)$F5HMRmvRoxN3hVlE@FABmR(v8 z4!nkGsFm7pXvC>5i4;s)bLzuRX`O|B(MYj6o8R*YqD9}^s|L80`46+iazZVCWnpcBbVLu&mj7l}IVy$jWgmlFD z7VRDgE{AozVb{S8i1%GR&jKQdS=k7P-OY`G+Vee9>Wa>13W-hd>>p#1Z7N`4KW;0eqgTcP)Q%ja(^zR5 zVG_fdV*&K-SH^ghN29dR5z@1qxo$gNO(nZaycSSdY!ryJ17=KZt8cGURzS$EQ)v7w zF!MEl#^_Ig$>ba;XbA>NfX2Ksu<4m#At7~i)Ebnc1hLmZSaKoSwa9$KOuPRR*!4Hg z7TgSL8}; z1r|KE`LU23|=d7P%onb-Ch8)Y6kQxp8ECRu*eyxK38*4BsOh-&P4$ z(3!NoAWvxGfEFT|=TcWiReNtn#J{-ud3HY|g6H`CQ}MnM;;WbW$;w2Y@ydC1$|#)= za_E}T!`j&n#>A}?~B$M4M#Cz+s6LIM0?UehAF1QIL6_ zZa-v(0;#Iw7m$tY4uBQ?jgOlcFN|u;R|XBP*maz`9y032+hEfSaDKNn!V|Aq3d9P5 z3#6LTvkLZdB##QfyLPw;LglAcnyd4J?QEMeUAX|J$ZB)0&fx-hggOSeTGQTfl^2#$ z*~Szml>wxL zGFToe2>~uZ9$(Z-N%`e|5}J1)1&rO5&0quFMG$$@ZyYV|XzsNb`N_y7k%E{|qr3y;>&hm=xH?>g5z{dOAP8~3mK1y# zF>eJ*ld1NK;+rn=Sh+ZMW}$ByE`?C$IwOmY*)i9a`9A~YGW7&k-Mn*3vhhx*JX`5_ z-k&hWXmrrccdQ2-t<(c`Iwp7wM6pTyNlpYOrbEl61rd!D9-yI+Put*Cny-8@jb`nK zTd2BjK;joZlTwCPRX1>Bwgb5~DIhCSm{Jmdyh{}V?nfk9B!zjALke{4lrjHyf#4uq zVHUV(j_0fc0gWp5Q?TL93aJy~A|wad6l8&g*VekztobM{wfO`YYtVH9f19{Cmew=} zD$qf^n-6pb(wY!}b?6zbH=;$59s~G23+*>Y-mO;Nc!4gzjZ3;qN})P}muvCr?B6sE zJj{tYURCDAE*m6inS@{X@i?u#&|UYC%j#f&3C7*Y+{V4}c&D3`cEQTBoje}mIoI8< zpy89+FJB7Tpbj{Td=Nnk&n>>;Mm3>F{K{vg%2(A2LZ<_ia-l<0fz(c^2fIOcKtL1< zQqd=J%6>zUofpBYnMhpnE z5cy1E7|+B6c4tCx{n>`6v0|mj&vvVZmF;sAw`0-dr}R>X5|1-G8nn8~;s@}(DzL#bEHPK!&*`rnb~ zkRl;)H@HEgmQbYF(NSrE#!CL()}31Z4y0Pq3=Y$>QlByRQ97mBtZ)sw3vlE1LF~qK zf4!+Byp`v8*hTv6yPUDY!5dV8G{*or*wfCC$6&E-#TUe9TT6p?)f2MHlkbk}CRNzg3M(k2&m2 zOdg5uqt`q`-b^Ns@9h{_l(@yA6=goGq7?UbhsV@GdcB9ACdEkw-`wC%HUlXxDG&Xy z;GgvNY>e8^lw{U26@zEk^Qfe#XGu#uMr<-Sv11>!+1&G8#;ePeGQ|(4d0m|MZK;>n zqOCDVw?VQr8!94Oe$cCKFgxLE8j@4hxtdgc+s9c&FX>jiM1RMf*GBSrC2lG!Tr{sr z)g8)V9%q)PWIi#+rxcpl*FVfkM)b`$9KqDyZt&SOtO5*QPek+W+1wlZ@Q3zcb~vp! z>s+Q85|F%K0HMmm^gwn1#40|W4u6V(LC=)o($CO;bJqgcW@y-!oqoNHk?1bJJ39lo zecz5X(0Z)JRZ`EfmI3I@mkqpbnLpteN3xW5#B~n6D6K4SdyO7E&dTXp>toKu1|lM> zrG;9MP5%+DM-pI7nUeRLtd$qwOT5ak9yK0+SS_+wqec{jA!w?#tj!~u7aWS#=@uP{ z4xs@kE`Mgk3o~*u*v(g)G7KfL(}b@df%b`kg14UJp7PneqjaSr`Q3&Vbz9gnDr)wM zm8G=5xLim##8UHD9-k7bSiad?hik#Z5$$5TN&fT=^qR-W7dXog8zwY#6J2%5=ngFM z_KhoZle$K#IJLgTMq-7{d8ho?d6MM$DTm5H3>$kQJzHa{$HuFl4BINxhH)SFS;~5{ zq4+uB0DJZ8H17>emmJKq*wrl=J&nLPU z5!9G|DPM`nSm1!&?uNuOn_FBCehJXwwuClo=!3uQAjnawKak>{rJ+D&i2r8%q9U<-3F z>?77rZfx1%h)eyvkOUMO7wLr~p%yGgB({0&7t{z%!bHYak60)>Y1negi5?rW2uhzYPQa|tjD(w1z0MHaumIexQ9dwYEzQYH76+Gl(HutdfwwfO^$HNFPeKKV7E16cmGIx zw&0Oa{Pz6RD(>TL8w#@`<KKz9)H2 zwHyT(l196h%pm3F+>XV%Ri-`jQsym43}bI3Bdq5ffWhdJUSSI2Gs6*)heBg87ro>} znKxrBK@T;Qm^h8l@0MV-{6bQkkD2`Sh+H;a& ztHulL+A3?lDUK$Q%R)c*BVRqb;)hv&jDLlCPs$n)n(oiT+FlWqjV1cdR0;9roTlz% zRu687t-<)?RVq`wx=G5?VOsIXK;`%8F&C|ABCdKdlXL_}3zif!87xlniIu2xDm5hC zaoJL)4u4Mqv+vGztlR6P$YZL2=rI2)qASYv#G|IQ%W2OD=~<R8v^^FkpZAz)*SkL-@P2t6*(r$> z=Ngv&h&r$J3R)@YXC6i`g^4gF9pR6hqQ5K@Yu1ie>Ej`179=x3WnlUZ_p)KzzKl)O z0ky$++zgx*0}mkS#l%y1TvEQoT4! zC&|i8ik>;jL}zNCAQloPDk?!Ydh61`9L-A0sWzEDtk*}wQ$N86-``Y_RWTiG2;>Y>yXD93v?%&Ke-~Q z54GI48x^o*vp9`^v|t5i?{JY{u}?qVt$kj8a8zTz{O6oGRAsdl{pnY(=j#T9q%JMG z1oy|@TpqI0COMMOsM%S*0hr`%x$kMorcR6qy%WWS&wHIbe!Ow5<0hBALeG^YHra~AUl>ld$2i*x*Qr7%NEHeoyx+A zRl4Eo?8)n|zxGOaxd-=C%g#@$Be9C+-ZYnoPa(!@Yvfg9W4jAfSYz|dm?4(-Nqcg= zK1gw|!ptCymqm12<{Y5W#W{(6oDncos5G~X5-=L*WporJ!yPeV7lqYZq4RM$Q0lD0 zxTET;`XJkcRaMn+^#O#zwMFz9M zeheg!V5jHZA4OAiF0P^ztm*Qci*-*|3e0EogCkFh#JS#_<~P1IaQ~>@u|0=_!G=A{ zd$L=nW&B`@U*pu!GM@XpBVK}rLA~Z?GfdC4Yh~ekNa^<-!sq}&K@I5OBrcR@zBHO#qV_TfBC{C28seyTs7 zKUHzGea=3794+Z3r@o5;b`{Th{rd+Cg8%803`K0iXMbPy}2>ywz5pSd1v$KMYhs>dB}<_rtYWLesr z+7_1Jwb7%i5+-^l%pDlSN{1POBl;l2=S+J+k%wAYt6@X?K*PuxW?jH9kVX6KuIZJJ ziV7C_oBGGyW`-pnU(34t;+SdAZ1|ELRIkKnqFv{DNClkl)&1h+f1|2#-JmoZgs{ly zZYe2B>fQ(QcY6@;Wus?A*n8fIm$>mwJf_g}2zOZufOX3TAiO5wDDRKviM)4G=+fQa zb0Zk*b^`d&eCI{yQyYngM`YEptLp=91NX=;KHag~aJmyZ#@v%P3GNy(36yovZoT~^ zj{{9;R}&Leup$>4P@CDV+EXu25T0A?|7=*epJQCYIE+335j+20efl0#m$AF~==G*f zeP}y%==EYIv4CNdu9n{@4T?cnrtd;yuqzfW>PC6%3o;=mor^7n%+R9uzbWV;WjaT@ zzk-g0&9?da5-JG{XbvTU;vy0eqggu@3RO^1_l`B?l3kUq-h5ls(ylsP;^FC@?ssUW zS=2hqIKeg5C2U3_R zeeG1}tYy=U-8^xEc1HY3Vmxl&bV8%^9~og$SL9g+M60Gkh?g0p{S3VuH8M*3W-!Ou z#k{tJIi@n%(u2HT^+t^rg~E?1&C_?um}xk!&1nh~Cq~A6VNwpyhbwJR>U^ z%Q=L$5n=wE4habrZBNdkUD=xZM{vSJC-htt8YE}RcASg=hLRclc(eIG@ zkJRFcPVj56G|ijvFP1F`WN|cL;nC69*Eiv|<$e4_?;&A{*qk0bOF{_7-o}nGqt7{8 z4pN9C!1K}>e(R6Wh8o^6k`s2^OZbA8#pD7aPebx^6Tknq|{H)*mC@>$}g# zL_K{LM6ee#97U2jm+wD5NRL1-YfJ}tod*H2kgBNQ7cKYFBYP^^wNX*c!gJfsb)TT3IM=EQKTy^F!t$m(*Ya)in5fX& z&wKO3m&dcYP|?-3;J2rx!wh);c-pPcx*an54|^PguV$KybL6sWqN2yljvDY8I8 zy->^H{(#26f1!mg&HSRKQGT7r;&5n*I@X>bX91jQNm4h+F%`DTzD1uSbW0u#dOEz# zRkOR$Kg=+uGyA1I{*(6Lu7r8(9?_u=;vWr%%QsQoqn#cJj__piI*uQE=p{3bBoSmu zsL*!#6vxm%G!)&QxGx-nD(%FEjvKIw&METdDZ=L!*pTK?MgVBl5l05VL%ao(`aW~W zX=;4;Jo>`5goDX%-S%z%+FVNRm})jQRPJ?|PLVne_Pyv%7We7#?D<;q@yP46Ay7nQ z>HiSwGSG3u$GLfzGGbE|&Wyl?dq7i=wF&JhwkLZ-*=40*w) z<2uThoMU$Addc^OVO~QF*r-hpAWjHE8rY@28Lvvh#yVagAt43(&ad+aBw(`|uto84 zzN5=SNGvO@qUI}#e!G`YS7etfrLCi+eP6w1N7=7Ep1%{Aty|vp_3e+8ry|}bS6Iu< zXbzaUvZ87Sy6?7)d8#X1SBCdrW1KfVeoivdqpQ*Vgs(%!t|o){q*S?Ft3k&>>5|j zh-^;5E5NBj1?a`G?;?Lzei22}_~6_6+Sfx9in^TA=|G;V-&`lTM2;x#u5lQB)gy67 zKx+l4P?43&7jKeg`&GA&-`ldvCGcLX_(>r=?}N8RRH*;tpYn2MDQCDf)umGf42Ajc z8TLv;9SHGSe&`AvPH=K;9I6Q=j_$3YyAUHESSKa(qq>-+)}ojov{4Z9WisAg4*M;V z*jHwsj})VZ^bv`(UvgJlzQNNE?=?WHB4Ucfh>gUyYpaLd9w>D`O2=SBMHP3aI#9yk z8IeX!zF{{RDgB91*i$P*B*#|%N<0HsN5xDAW1*2G1XrAlk!<(Kn4urWZSy?ZSL60l zOFoM5bbF+pOJg;K*s5G$7zLFfLm!p$@TGZWXI0Tg-RauT4S&n~P@N^_4d zW``qv&C^;Gn8h#CdnezwYNI}2vehnA_wFHy2PK9#))B0NVX<8$46dW7cp0T}k3<_# zkscXCn#yntkyzZVHF1@AH9{xKJ@whR(#1@5$WEvAjpKb{!Wn)RcoQtTztbY)*_|CR zAA$rr(Wh3>M`kXFr9C_PS+NgmF;2b{!wR7N9`dZ^3qkjfG|E_>@8+j^k!WNX(_@mc zisDHZ2K?DIH^1)A>YSX1@9~Ll6TTP`k=0PO!~C7_kdidIK_15iQ^*f?u^XkQ1merV zL^;ohX;hN9*U~+=i;^ZrL=PR{?s7Rs*y)s^;grpCX+Sc05Pj3&npL+9H|BB!f5j4q zI@ijxsKeiR@rs{xmuhenuRO~8S-1?u#+?03PwSI*9Fb=+5uur?2IomhcA1aJRoM!f ze3h(`3_T`ZX*7;iU1SI&?jay_qqq}n5FE4Ios-X1$&5iJRU|SBejYo)6<+||58&uoPx)80GY3>N?QMB*pa&-&=r;y&T$UA z$L-vHQu(mv7Kvuqq)yQ&_}$iJsi<%!*;@}uWz`HM0<&xh7 z(1pAiOww5fi*2^drV2#ehAT(@GV<6DAcs#&(U4FY<#!IgBI!0gI^bNo4{Uj0dwj>` zF5VUK@>FH$nwBmE%LSO@y2kGX;T?b)CDm3_wdJ^}eJ$$#xwC!+yrT7d&-{*luSJ4) zJLn@lYo~4V*Zv4dIm>DH=SkhwwI@@FE00zY_iS5K#i9}{Z)68ix?0-nW1oF1IT0`B zBgT8H6`x@-xKVtivZ)>)zPPHV%`Pr2- zGP_aA@OYL?9}KAH;F)XG(u-1k zajZ!S2ngpY5R=qPCPj;P{u3dY_<@US*dZv6N0O5tLCP}262W!-^XV9@;{oYvLX~^( zbb#>rP;ucz@^&`+)G4Gfp(mmZm%-LH?5&3RwFJF^P2QQf-6HO%rQ-m0Ll518rbKnG zwLUhP?tV4<@GtdIjrY)`PUoG5vyG2L%o3SAPc>y9!c(&oOIaU_V`j>uGty={hm{iN z!wsU?-m2}oIgc4y(80e+7I`0`I|Nv3ZeUP#onbcxjP*H-MehxMKL=e%hGVCyCIv{= zmDqp+c(eTcL}dln3(OJcpeNKD69bIWx)Q1j1|N`xc@ejBPa?Pdj`~;PXMN?px2ipD zX}>j<7L@kO|5Hn7rjwND)Z>Zy!uak`SV`6!#YS`HCq53Q&P@?B4JZxWUFD|p?i+t6 z@_R^gy|-mN8M$>h{o;FOhWZxp^^*>xSkiL$AXWtiBCG(r=_jO4XS9TrXR&SLMkO2+ zr1kpPh~5XP6=mnI^Y+YyS4UUO$ZgU@>B64E9%xbH*iHKlhd+S0^E6D{>1gy+ob+MA zP~V!Cbi1`2r@wQNM2q**psUu{E^;6y_!SUyrWQxoDKq-pgGuA2=10&qGM)&1k9BWc zjHpN^q!d4Kv6Wx-z@!7+1nF_0(1itot`c{Sk$)CP+}zJ_f_p6Q(5s=UleI%`67CdL zTTJfdM|cYE9}k)pB(`qoaK6-kSoD|o&Tmw@mf*}Vd%1W2#5@jFTOgm)j?qJj8iDT1<(MfEM3=dBh{7g8)iV;kFs5?Y-UDj*Idc0IJzK8uh4yK$eD|a-b&abt z@+>7H8Op)@z*7e9Kdqn^yK1`EdVlw3C3ePAMvf618+piL@saRe&Cdk8&jyZdC~x|; zQApC^OfL)dT9L)3AJeY&r#-&M@!Xb^gN_%=p>lOfMV)xCQ1MosBsjb2fUXaCcg!K1hSn$aR$%;I5=QmE48Pq^9fqtXFzLP8Yfro-mB zH|o&WyxfRa_4?|TCicv>jRv`DWdriX^R8bKRwrOG{{s>1Z^a<5pwp3GT*E1 z=63g*A<@ap<+EN7l%_r`gDqi0kubYa5$mi1Gq<}=eA`cfppIe15R+g_^<<-^mvg$(I2&{qNY;KjD)k#;QS9Y z;DwfMP$PKYY=&vdFCOo4DJ0rjiAjnSF&bnn#?Dq&WDCS<%d zr~)gM9W_Gt1-tSF0ajk5&t(Fyb*}XBM^XLbR0qHPQdh1)Fk{DOcH&)ns_0t+O~+-! z&3{+`&sSf<0#Hc36ugVRKGG2v-L}mV5v64L<$e6aHGSOVt+M0`5B_PdluVBm?ux1? zG{nvrWHt?<;Ovlx4knK)tb;cYbUC>7Dum03Fa=Nj6K(f$yKMqF&}x=D&b!x0r4i#D z)1Sp;XU}`FZuqh#w&@1E{DV2)UcJmADT*5AnbQLbJVX}k;mFQyBC;AX8MHH=qF4q* z^Ffghwba9>@t}I4yuTvO_+~7BuLq1G=OWIrU6fL}F9mcl%D3rj=wP!?Xz9*8X=f#N zhZ>#0D%#&yV`9Z5%AiZ*T7WWNWMp*Q{wPB3-t^MLV@vr{+H5f%TV1J(`!;%w zIkI4Bl$MmXtZ(;vQcr0iiQCpj zbWiw+77})!cnP^~N@_O#;{^Y+4Em~O0tyZla<#xeZq81eE@ z-gh#3&SW@(lToIlFJAXMWmRPd_bnrB1 z-8657=Fn3`nWyQ2s>xWCUNd?GD-Ge59IpHsm(T?fqa|z63-MI_Os=WjR|>A|L{bZyXJ01wZ{l--le`&3)SOu^ ztC=2-vV8kiKGUsbIEzApf6?KmB!s!V&y))HyyBH5S zG+0i$XhRa3?^zNfI)_uUPB-8auKocM-zYJQA0y?&=#I*?yX4=48bX0h&`DyHGZdV9 zwspvdTxRxNnr6oG%{~?vk>c`Fi%0e{b;s$2iiy$EN6mijptewVjMq1nEh|4@4;~B? zK|;xtVZR82LY*tuuYZ5v@C!^vIq$hA4M8c3xI6j2uCu;fcdiar%8-%lwpi7zA5Ti6 z-v+TAeXecn%3b_C%lad}+79$f!SKOHG2uC#jY83$;h1=+uz0L$UsyracJ6`SJuKJ2 zO2={_!wq?s4e_Q-%iR}@qA9k7$Mun@b_mLEnZft+KQbvmK?&DxMsb5Ss>%LwWA$%I z?Iw8_d8mRhiq~Q#%F6FN;S64`UdED*`q=^lY&g&1Df3gk5Oss^GKe(y*on4r_++2N z{G(-KnKoy|N5X8zrI|~XUsq@^aGhsT?0#8$F3L%lhE-Rg#+x4r_5oP;h zJ(K6=tzDvHM!39L|xl?rGV9L zqIKrOK{^-%7{NPYL@Z*x?O{&M%Z=4V9EDPG78l(@w`wM_D|RXp!*!eG^n!gn#tc8s z#?75VagBHhT@w0@(ZmQs`Erp{)0+*meNBPJzkj&uIY^HX#(HT+r}k*n}yH<+38 zXTE4```OChcety+pcZ}UERd;5OL=o1GaDyw;4z`?F)RXqbVpc_pBxz#o-jG$(T}A0 zj9P3NDP4eCiCXP7Iw$w8t^9XZYjN;jX z4VUXs`j>9P=FQ8l(6^xsyuf`|vV;aAX_ zsH?9v`vit|6N=`leaZ!A0&jNgw68!x6fRX7MIW4dFuBRr;QP;j@#0q?WkCWyyYtn0 z%ncPk{MBD9zE00}`L=ZyEL;E1F>eDO_`I2I9ieHtqSr0=?VVIGm{J!>JXYO`Ra~i001HN_fb2@51E4qXuT~$tx{4r^f!`=?flmxKIcK7`q6!2J) zAe^#pn~ubv@muNZC{b?FXUbTK3DXUba+Ne6|9!xb!DqfhE-w2Ceo5zrWDpJNbAj@Z z5B>>9v6__Iy^IcXVFlxp@tW6sL2UxvENKUR7| zt~wFF-Ka5n{Lk#kM;M?H-Zs*U=C}ZVB<~1D9rLcJi*t&|yNQqEfYAk1|vbCzv>NTV}&HivC#zqn^WXu%n(&o(h8n@f9-J zZeCC+1oZ>#(WN}9yhl}|_*Bg$#Oq!7RP)qsMNfE1h&k$6bdHUkfRLWkNf@_}ysM%K zK)U#Cj^@f$4>%7A7p#kd?Kh7d)5xbtfOQwXIVq5c(iGh;%ze^$H0*bG?EYjJs6DAb zoJ+u`*&)1TxZKDX$UMwV8D~WY>%7w zeYj3`XP(Xjb<6VY`LE%GBIe_Y4%~=sxB}0!*zVg7;Pjw_uHpx8C{WjxXg5CvB{P5j zs|3hTTK7AM@2gwN)9rIrA+{i@Je!#&ck6OKfdh%ZcZ4heh560b@g;?N&wrlKBZ6KE z?pHdl0_y2+is}-QimIDbJ#;NylltBC9Y1U?lH;4Zs&=!9oy0A6t4UD&nrHU(6R#epbww$XTm2prOIL{_Xv57mRAlp{LHV zp_**B05WK|QZxco{uSL6Hk}hEfRiVb2BHC%Pkt(upYp2L`hjqTRckRMD;qt@8C3<2 zhi9OC?Ffjw78C$scRnw8c?VJ+H9)DpnqU!Y1P<)lt)jH6Q5mg20NEB|6bj#zGHKQ) zb!qEn7-lYhUy!`Hn$+`0 zi?|3S5*2prW`0i?h^n$opegaL{kvM>Ad~35%l@ddDh%dy_=@qBPWg|2Z$GO8+UphV z^(4(Fnd-@nH9E}=moxg9_J{85gZW>$4y+&l0SKr?o1EVg_m@f+K!8l{dw=~a^l`Et zFFcG3i>vuWl_+KM30%squ5Z0NU70OLM(QruM4Clv=*{!(Y#1Jv5Rt6s{ECdcog$)&j6D@>GZ5#F_-kYWd+;(YRWBg~rj{~?$C^3WY`(?DRs<>yG9!>513ynV(NYwfr{YlXbm~AOpANK?!Ltv4XEXgVp7+ze6?A%i$$$##y^u@EyEIOhz`NY8F&wrpCVFV$64bu(e!sI zaG70Nm+&PfiqFY5suwuVLi3N(0*~AOE0iS`b!=Eq8fe1SW!BKK%4c!~DEAlc;IQ8T z=A7x^azq{iMX}Sj4^#6<^<7ll0h>Pc0Nqm%_ z@u!bMIs`jBej-~sw0jy=Ci~uE2n2-qkHQGg6`N2IrN8lI;p4$8Hkd%2s}Ok$!XnY~ z7?w#}FJxfXxrDQ3@o#c2!U!0jSWUh-16p_o)uAW&9RXUnN$A8LAcVt0@oXm08PJ_j zA_JwoA%G3~#qJlNL9-$GK79_I zdO44Rvpej6?F2OR{iXk$}c!YPi5X4)zDKOB62=8@Ap;N^s8FB~EVYgb#q z)z-prtI{%f0B||dN!p4}!2pvm=j!bMz#C`T>_GjBuE&wKf)2je_It^?%C zP7f*@xlZ4}`$JBkFHpcchi;?TwRHXHcSsA~irP|FTvLRFy13CUG(eV2eKDny!rgcj9vvn z*ioR09{JW>KH7Vaa|JYHU6ZC%eHGijaGxs7>ukt(dk5iQ1Dv356B&_&0>nhx*2c(O zC%6Ymj)6CzXTs+P{}lFzmBBm`2Ce0T<&FvVq?9$_H~EG8nnk;I2T#Hq_3FfpfnWDPUkA7-MDMH$fx-|={WY^M&eC7{4TfM+YY zgP7Jaiw5)bwK!J}3Vl#gJM6F`@cy!EIuFZI<1`Ly3-j*@L>CiflSLIp+x>vCmOV}+ zqigi82bwZYB-Low&y!1LI4vA+PA3F#r@4Y5G&|wOtug6ti$b0}AosPSn3HC>&utwv z#RQO#u4u2Q;*P8`bD>}(_Vp-F+Et*|b)`V`;%_}*oHC&7RAck%pM75;G6GK7F0AMG zPlSh!97=l}c;s8kVoj>SO|uD~2Z~KaIu9fwaf!OUA4<599!1SFwB;$cq3r`d6H{GH z7m03X6+fpIf+%(t5J*o|tv(Tmgxnqh<+KqzI!A$m^egC$RKWF~NkH$Z4tMEPep&o( zCP*_%LE1S5#nd=wqhFzy)aJohdRk<;6AG&T(}wQLA4dfp=bd_F7;&BR(Q{+?IbUjo z#GYgbSr96HZnEP%A_f%wPtzgoDqn5Q>wzZysZ4`_EQ5_+Mc|R%$SX>y;&7heL+B7t zt;oqq`n;OG&of`9^GJNv#aQdX79{Qii99;s|(Es$}B))3&EGB#6dTqmLwb2Wg=Z_^XIqq|wiRFnIJD>GkJ=%qLXQCxV~f0~&~j z$&eeeFg4<~*Vr992U6r!7DRY^;@SFyZcACo_+<9LKc|I&NlCCtE)A$M?11kY=)r+V z6(i65@F$a_Jt#kCI*=YX%^J5f{4+@x3$E79q9Q?D&&f z5KXeXAxmS~I+|=F+`hLepIF^4*vZd2et{kQo8lyGixe$iuu1xQ@Dnj!UoosAI8}5J z52AAq%sY|lt35Gza4xB-_XDQ>s7H~kBj9P%JvBcP#knx_ue!4=ZqXXU_nwxAp)p84 zYGXPSXgg-$@|DRTkgViC`jawEMuxy`!a^hGtdJrDHH9>87gur)4}6qY^!J}eY%3t< zsO%)nFK!+p*nEq=c58vqcIMDu;G=Bd)mLCNd*)&HQvmcS;M02?dVN54+-9Ra*oXAW zNFveaqgy}7C(hX3qm!@7OM*a-pzwos`oXU2GV} zm>WXA0$CbA=20be8*=9aiWK{SX5=DG9JUt!lQ!(9BuolX^oai53Yep#wWMFp5$H6Y zhv+pS$n#7ewCO&0jUnF0N?J?UBTi`fJopef7u$f%UAn?2*!0!$rj6mXPC{1@0uqw0 zXw^&Rw~o7y<&2VY0D!vqZS52&uwn+((5m>w2O3=pl%L7l=@(0zv*msmpJ_4!H4|Yh zL|fC&3nhtehqfYL^n)R7u+3ayke_4#+w$$uS{r9jdl3fb=(s&>TZ7~g|NhAtQDjTZ1(jc`{kg_dlJUS-*f=op zuoOD`Btst7nGjEfjyQw9qMe=er2=P6xMBA?$nVLqE;uUWM!w z>VM^O#e+MT9wCGD%7Z`M``tbzP48jJc(Q5W*0l7E&VVyD)mhmLc$ehqjL?)dUI#Ja zWbDHF`tv=u6xORx@_08t>lJIRf4t(PfC?W)Rt(M>l9qfKVzrGTJMVv*ZPON}GD7^v z%TIOM`_SI_R>q6io!S8CTb?pxwS-%0-di|ToOW^9EW8853V`Hs3e! zv%pbR9TMGoKp3u6dZ4OQC>8DDD?8m&6Yblx@kp7-46+~>Jp{Gd4O*|TS@_5bAx;CrpuM>f7Z zS|P*~+xV)y+LaQy+WoTePD}*aUAb}wnftagS79ceLE=Kn_sm}i`ui@h%=NS_bQSFj zzv$G+)O3>G%>$-(g91zT1AsI#O)3jMTj7p=G@ti#A0x^~TzyDU9)<;uro&%tKvJpx z+Ge&x!fY`r(*ngPpp`8g?%`lSb<_68cZOcIEpZDe{(LYY-X^u{Kodp&MLZ)58aHd< z7{(Yu{{yE%eb5o?tiuxs`Y?O<$qb6*F@Z#Xh^5%BI?BN_;`&hlr@aIcxM{-mGa41ikjjo%$i-PvyL+Ep}Pg>QfjK&sK?rJhx9 zu9jf$A48IJNQq6d1Vz8{dWFqCn4MMWEo|7( zPL|c33CASWoCxQ?2bzwDfZ6vjRta27l#BATsuGiePY7G%MQUIFgkK=Slb+dkw|XqB zRb`9x-H`f#&S;K3&q}q{4YU;ZmBL$vW)#?%S#H*tpGR_fdlMFv?fYCgtULNesqR-@ z9TL$(m_p3M#_8Fy$eujz6I2&Lc@S8~JGr*5a0DQeN`;r0l%P7skibOgfyL8-{NZ{y zRAQyXxsOb!7KeNm@U|i#kKJlkggkp}os>p;{N(j9{C=LpaWP>U0178gfmqS8U85pCG%(JS@E`l!v68l!2Ho~pK9 zpk+U2a}wN06obwu)n2FvIS{>8zu1aRYz_;p+n=ZszgRU&?yjoV>Z%bX#=O7u&|Q8K zDN@_>6S{lQejiZ!aqk#(Vv{n5!rfbDjFdPCA6T9r^$;LRNl;a5s&Grj>G$kor3*9| zivVcqhgm|yD%EW8|L9)g+In;n70Q|3HEnK+QXe5?jCwqwJC751a1M^>@!@#%vQ{rx zkNe^%$*Zgw4Yn>`fq zb0=m@-7o3sZU{2muc!t93oN90b?*jXsN(X)aI0gvpZ8*fHTZaI$t?}QyVKnXkw!wy zyTdx;dUy)`LHuw(2{m&3gBJNi<)uu6o>RY*Esc}Ifh6}FaJ%sacBPj7%m<~gs%1Od z?j~x?r&ONl%K9dxwrH+p0lP;`(A~Z8F<--^ZSBl!7L@%=TO{YQ*L&ydV9KS$N5sn9 z>z*Y}S>If*XgNtVY@3Tp|5(c0>zrlRr2d&pl=oJxNHQod89ZuES+5p>TRD4YwhXEt z$G_f#r%F%y%)_eQp(UGs^b_uA8VhE?!@9CaXy#7m@x?@$s?Qb2a5DD0(l!c%`M;-k zi6wvpM#W3|BNR8F$$T_E!a+X02({~0OfiN@@pK%r;iZ!YAKnY z`%MunZHI$uMIlT`ct+Et#M$xBL{aC7Q!D&q`%7HH6mj!RVJROk^)DBF=fl?r6~t5~ zaZ0l}ifZ78dl)Vx>}!9CJ7mJjjArP<@+#Ac44iy&|Y3z1`19JlZT^1qvZN}t~C z%*z-1OcH}bJMkRJRHz#B(3j?zIr;T>$4&Or38^=h6Qi!CqiX^S-m8!~Kn)OI=BWr;z3y}`!3BD&Oz=$=AG zMOZ?NY{ZQED2}_Eq+9flF-2vM1-0F%GCzlYv zZ@)2}7immS^Bi6&Q+AjyTR3(y+3x|S`+tukTyn5ZCvIw?V13H5ob_pm0W(J zplUr>R<6BYAmtCg7cm`h7q&3v^P`$wEXfn(c%&>Rlpz(Wh3gqhjlx(5i$ zjp1b^4mL+XpBcF{Tk{mJ12~=l*tyfi4_Qs7NXVP0EjTerc^TMi2I#7{0pLBtgc^qU zpt}oh0jpg6^4hf|o&^=vf;|r{Sms$s;u{)E5jC;{SnUrU7dKshhXfY6#$iFEKgft! zA5!KzlTqb;kRR6%mJ+L7J&sO4&6)u09y{sgvw!jdK_m{^yf)d}$RRHcOv;_tH7AA6 zN`rG}4rn7A!_Kar|IQf302&JD(qQwieo@wnIz=5pY@?g?z?%e#Mm44bgC;uT$w9-s z3s2gc7z`40Y40a{b>pgtWm?ZtP<^a;zYk)1Qx7!dwN80I!c|Z7Z9zJYu&2xTnvy zH{dPs+5hv&e7$fHtOK=lhroH+)y{;8WWF^pjWI%Iz+y`krP4mQL?0Om6Ks@k!E_Tt%6 z#Oeo#7V}617uIP8OlkdKzlD>^Vz(#b9q71qjPi_q512N8+7h`_lb{Kvy*yqU{GtA1 zOzGV<9E{2rYVch$2%1KcC2pZdebhouvvz1j@;tzwee)J^1Spu>^>0DQOvto}9|vkZ zh5pP{bvL$f&jFIuLx0ksC@hgxNSy}C1qY8{4Kl-ev-R=W`A4DQ+IX9F#(Zs0Mf)P5 zvhIHjD4f0EfQ&X4x6|o}O&XNqXqqy<&<&qsQK@|Ybo;br4^9G$=i>oWWQPjRkBv3d z27Yb>Tcq+Pv^Bt|40<0Z-@F~&#G6O{4JaDHqYZ0sKpzsy7}Tf3U^8gOXvoO(WHghB z{cOu{SfHBlu@pSK;fZ8|ZPJM61QAtO1TwZDjW6}mc84xj3@*#j7}ZlJ{U@sG;f-%h zwo1x}mby<5lR5-plgc4--9h(cB!{vct9gvb!KaD{d^yO$XeU!fuDwl!#^IkQqNS$c z-o9wa3}SNY^NXABdq9V@rsFzqwO*0+ilzQo_xrKvf3-8(0NUj^72fGC7aL9%IgN2H z(Ym)%uSemV9(bXOe%Nr#-IX$yWP!@^vP4D2Xm{8Q6Gt*XN*8imTrY8hLn%Vm)lLHfgi}IxC@ppX~u{!QfoEe zh(|TKVq%dHcyqpyh&r6e`^2bugT6K@CjvR7ZCYi{^~Vpxp*Hbi4^R8Fej3+tBPou| zCM>R*<2OXcV80~Onp%h%X}i8uWbLg!#lJCiVft@}0r-$Lis6o_wpyuJcpK}tvaHuK zJCpq^GE)t;zJE>x7s0uN0_IDno(wooL;~ZL$Bzf-$~M>DM-nj0a-pe)K9)g#Sa#_x zTJ-|vjOERiB7DSIsK-N@&^eBT6Pi-4yZ~LfRmWO3?|f;#)!~SUgV`Ye_^Aw|(2*uh z1bq$>t}KOER#@jz1_|jQjSm=|EZXpYaqdFC;-J)^ih8MAp{W|2r%#JfTFus+SZ#k# zN^U9o%lyKhvu4Q5ox*LV=BpXsQ_%(!sP+(>CzOrtR#B<`kI>)uw-YO_0#-l9rQRSI zq6Kd(S}+n-&GAUVwC|Gw9C2e9NYkh$VU{@UF<7!f!$h9M?Nb$n+zyMAOiEf$B&e0K-pD6|&N4lN@lZrvpxAlV{X0w=`R>wU?^YnkBc zpWq`3ldyVHu026W&H}cV@5cwsV^3Y4V*y>uc+CWDYr%Ci!SVE zk1NEE{+kmsA(G$M(P2dv9}Hf;aZoz1a33$rU%W%=fjL7PQvVD5c!UEq-J3Fg?!zQ& zPtzXg+&;<5e4U}%gR)=|BN}f`Qep@d%Lo!CvxsXUD(XoMbQP3PIqI8-5`JhzySl_R zBPge7VS=>1C9dLqcu6gn7fYAGA2CG6ZJ%eg+e1%idZoQl&BzSVF7je6TY!su{>rKH z@KGjm6Fx%YPKqlN%P$N{tZH7B#CbJP-LkTM8`~H8pL_oe71j9svZ~a@61_@sF$o5v zf9#wU5>6e^q);CG1XZdee8ktM##y{>fG)acGO*!Q#G!u2?wgJX5_nvAP>rqd^;Z$_8k;BUA ze;zDKT*P^>!Y%Vm;v|+<4wlMI9Z#lBBu&~@M#fb9kD3m?$jx?i5FultZ$E{Ipt@~x z$v72`Vh}z15(-PbOw+yGw?`kS1Z0$ZG-~z34CC6Ucs(R{qKJd4S(|q1hy-fPF!QTsxUNfsbI^Dd; ze*IVVPv22|67-eM5G!>2=&$q@$TTV=J9Uq5KKTTSf;5Js8Ka|lKVMJ=)PF8&Vgt|g z@C&494+J0PRu5zpt%O?9T)o|DcQCp##VbjpbzPxyO`&#YQup%&I48rO46;aZ@QJ&` zt>Oy+B6(#Sf*E9VY?4Pwg^Kcc!r>k+e9>EuTmzneF^z;P;{gqf=<8-X54f*4)4#2b%6tg(l8Oe) zGM;41!v~Q+!6wlKil7Lvu)JY;#4BVZuff*e5GOtrBp*zJmH9+a(_o~aW@ovK!)IG} zVX9M0m<^3u(R$NE>3;w7(%$G7)5Z_DKHi~H&e1K3yf+^SNBPTsfigQhtXQzLdJwEy zq&YEy;H()sGAmQSMXpqLr`C-mTVoI#Z3DuaY!6*HX}WerV`J^_1_)T!02ycs6#G>8 zaN^wRRKVUSb+T`#&SyI*>t8U@Ur_)9k|z&0?jAVbVInEJy}fCWR_=;y7Eh2jzBl-_ ziCoQk4^A8*@O&x|Svh&$g~8R6fjl*iD22R$DdYm!x!jntJ8v#CWwQ?>{rKnKhu&gc z*zK}?BT#zdM?XM6-J}1(8P8k0%Gv^q>TxEI)_17D-1rp>uRzQB zxbs~M3Ew{!ukJO<1aV?%uEI6(uwKri=DI*+oWYb}l{BZc?;fw3WB#)LsdVazFhomn zDs$~oqVRIUSIvKl_TM@Mg0d?2`nXi6Nt8DU%{`DT5Vewzd8IrvFb7OgZ!-H#RFJu( z3Hrbi<9jW_2%R83#A>=3O>sXF;*6FeBYMaadr^kbR2k6si0-es(hQDq4Ra1M$mr)? zLo_!cB5p9E@7qt&FgZzH>aTY{4kkwJ;d|M>q{^-ES7)5piCcndzH-FAQaED$e^dy) z$9tTif}H;=NJ&lhW?%l+b8QXk+Kz6UK!Ii5b>y=HX#vg|*ID?{3gAaeqN>!%(*m=b z+V@u13`VA`mAm?+!)3BXlOXL1{`DG?$x|}74qT`)YOWw-2nQQ7LNc_~Y8T3~!c+Av z$eF}x-R{YeQxvp9~=Fjl$XAo_(aYJ&X6CZ8n`H_{ZzjSOIKruWC;=HDaSj-dyObkebeTdCtpdjQ;Gf|)FiJf|k)SqDL8ya735dd5z#xF}BNL#F#(a5ST zd@28FE8zoT99Qf`y+7iHkkD;lo0yXLMw&1G`>KiJnY~Br3MLvcydu7$m$%n7fu>oF zd1xm9S-46e{kq>Q-WEH=A4FsvX++lRVS}+_tT)SJ?(l#FP}xk&Xyv~Cgp*una~ zkla*Wu?m@2++@SvZx1daS{*a?oYYZqiOqi*X-+Q$0Jv1=h6l*` zT?)+E+U0s1Aha#QsE%7T;;=?&Bg0ZV#@#A{5%~om>3d((ACZC;vk|a~H?%LK^%zIq zxCk}Dea|<$ruR`{1an0_X9NwS&;HJ4>aPF4jJde2thi;#_ZSKKoK_W(OLG+TS0Xw0 z6p4&`78d`lEJxeQXT^xhW9+?e{Wm4XTs_mM=YG2B+?I3YA0XhJ6=94ngNI9ehRBvv#BxJT*7QB3kzEC|=C_h{Q z0-Hoq#p`-p4Tp&`@SHZ^fY3RL(-mh=Fv-ihLgMJdoSY&D1}?R>YxVhi$~&6GjWYv* za_fhZ1!!E3lyJup-mCIvuOWBfuz*wEFkhOy^V%!MZROz=B@=7SqZGrOHK%)~XN3bZ zy9RA@|JCifA^(4A@ehyb^I^$5$8!p4UIqoe+k;8=kpe|#${AOTMw}b}#1`cjQax5x zCqT!-M@H;6EeZ}C(K@c}w_YNhh*C)NZ9gk&(7Y0bH8$V3obKns-%=f5c+4N)#pjp(wK_3ArkG_U#^B z0xpUiUS>Go^KasshzYtXsxws_HkOB~>r$TXygT0EFrC(M*d2unC0?OiVXe|VNE9>QV`!2m@xHQI~g_N}r1SpEQyshec zuswQbX~8lPy>rAq)s%M)LUP_&cvaL-;Sc{i2<*HO*Ii`jZD`jpDX}`9EAmJRuT(QJ z8U!#CxZ)?MZ}}Z_^z7vVH!g4ey9{SuK0hT#|9(*PXBTL_#lL{jg|_ggNHD{Y;&KU9 zPGMcvP-(Vve#=gI+{x!84uR}{(Ngpqk-GsHBU&7Id@wbtUm$?|tsK%zD`($_v9AVj zJI-Lf_%J$hiF%P}B$1Ej{4PJ62Ixo%lK*Zgr_vo~rdv9J$tK+ZY~4?t`>Y*4q$|4* za;g7bq!kK8|C<5~<Bc9IRKyk6>Z|%d$m^-x(M6$5`N3kae#r?HrSp#&?ezA)IkYNRvcd#M(_5(7v zPz{=#TG%?|^Vvyw(2cTQ=}+PB&Ru|hzd`6M+`i`FO{gjT4TV~^z37W4Ar`ETmSL+R zZiY$7|CMW3Lb6?7(33K}#&;ewXY=+hwx^L(D)`J3u|@fxOip?B#Tu%+nKtkT*!hq6#m=-pf#g`IVQ z1>cTA12*RKyQBDM&w3lOTlV^e+{S-WH42mo0or$`3l0C5ij9u}gYO$v zET+#w7Uk*eX8%ibV}zGVE@oABfA#f-Sg`WW1XPVut!OEaZ)L4O%_k>|5FZNkO6)mS zp~T3R%mI9=r&2-Z52H<-qN{Q+KEEL+2?>GE$J~p!@@V1>^y=B`_HMmcMq<`$y;=_! zljh1yrmJ}E1KzhqhgHOh(6iT`O^=sKiuW6s|705p`4s9%{F~+456Z9XM#Y`!I}?4r0){iEgxUgM)jd*2eOoJ zzcnz0Ohma{oY%+bqS^6fm{qf8+*Xl@9oA}7uD|{j8pet91ApiHiiJk|wiJ_kJ?g@m zxxD1~onB_b5fi)`i&5MW0$DRFIZ|#jUc-{TIe@`uj7r9>O{G^h2XYk?+ zAtr>No5PYRT&+kTx2JNUQBMDp5v`3>>R&H*8axV*4{Jo^kMi0+5bb>1F{1#r?uogc z_#q9dK+0ZgFrU`&!l_}_=G$BZt(0t<$)HtXy@*np*gu?f)DC4#Od5*izdr7VOHB%7 zTCWu2K9`G#%$xA87-j!Qt)&5%<@}GFJ2D7W8Iov=P!Lb1C|h!oL{F$7`?+UCiLvsE zJ-c*w%(HW}V%mbW@0IE@#So6EpIFPyW^|Y1`A_3Rqm0*Fkgx1c*%yC=wYn5WVlcQ= zv#4xHg}e9O?CpJAQF+y1JU_AP*1TH{qL{}cr52L3+~3eJ4& zIYyF-#xMU)&j9(D=bGK^&}+|6@m*Isl^A0&C?n3fC>XQ!EL&*!)AD!u1tx|@`6mwz zrgy=(!~r0OrJ7)RmeD0eYhiuGU54ai{==G6-9Dfg7@Ot$7^)Hfi}2~}dB#Ad*n0F~ zpHz2Og!yzB=S!RQ92^*y`OV(%<(9rl>rl=3)$qZYj+BE!Rm;9dvzL}UgLMp)OPKgA>?Cm;cvBX!`TzJdpXn4BC)qrcVb=+875u9=5QukA~GY$@znHlipQgMpdTi&B&<4J z0*pa?X;%u1Ru?>2HvjSJddC^6s$bA+5Tu$WVr_A8xcnZ3qVmvjyW^SwxyOfdB#pOl zQBkH}M z2Au*>barp+n?p|Mk}5JP=3m7yeC8iBio7Q#cdC-0$$`fOFO)Bk{=FC4Q3waDcA!As zyreLV_3XL*bE{z=pOcw@p^cJS2Fik+{+?Qo|9qe7akn(x(m8m(I#o zh$>G;VUW`+7hIfD!#^LNL`c6n^jSO0_@27PY`%c!wF_< z+PuybRE0va)TD0?u0Bt>q@+q5eX{>P{NSA>gd$K`daFf_MFtwmelj-6Q9TWum~UD8 z5Ac@*Bx!UF#5rZ&LmyKd&CC*Fg?D2}C*_3HxHhc+j)JTbLBtuTO1wxB>4nUxsmgP* zpO1HXfrs%gJO`*gVx$upmXg4s(&6NKsQw%$N0HEf!1)TuA$FH+2bx?+8}yn;RrB3z zFX>M(iM|IPB5J8gF+$tx9BzeLTEV3PDv%7~y*MM0GG{<~B(G&)#N;|(=rex@KB5MP z{{_ZVViC%G;X$6qUO&q_1#aVyAqJ%DsdN~$l`T6CNerCFX*j z7nj#fVC4nl)cBXHu1}g=Y5q^9HherbloW?Xg7bg=-M|^2fsc2R%BccZ$=bl?;P%yk z;J+ye2mZ^cJ5+;O5xyXvA!~euAs#%i1F-XVsJQ~{AF`|+jKIY#TqPNfD(@wpGPGsr z<3FjC`zg5P#EA5GeM@oP8?J==t2>s*QxE)b7glpceKhtorDV8F&#!)*UzL6v{xl&j% znLOq5-``S<3ah(+?-bc4cdMpLS;In|GsjZ-$bilD&wt+5C>dm}&&)11`kMdmWto9j zRoVv77Z+_|&6+k-Xi5^ZJ_x2*7XB}f7b`6eC7)Km&)1%=ztuNnCLPu@*-y||Fj4a# zR075UxLLRk73p{9DB0t`uS!FVD2y;f_Bb*eY2Ds(KC#g=DK%ziY+@nBiUZ{8{f|YP z12PjJ=TjEnCI{6wbRB+bTG}pI`75~pf3g7L;!~@A{G9)zgonUgF?hwFRl!63m>gCP zO91?%V(|$5q-F$E_Wm)d*LQW#U#5_`XXYEAP}I!tt5YvfVAz@*L2p z1hC-$>%IW`TV>rO|EE}~akEF|t_OH$qdvGxx1HNKxdB)9V1ma%LLKu>@Z+99mYH4# z-*tZQT_@%eS}#LFaQpt1b>W!xsny`K5%4o}*hr@*WW^^XATXaWKK%xGKR%cvN_7LD8AaL)uUSPM z{^ZvTw| zhA1SMJl;cO;*qv!%0p$U(}m?i-YLCWCN-sv$A{Xw4(tD~wE&Q0)N9UdSsuQzb!w8i zg@E%|`1g3ENFqo{RhqPRy}|hYYlhqBcujM~da@bzo;|~O0K6TtP=sJ+F|sEtlX*kf zIZoL-&0O;)){|_`+joUV_J5-t!Kw~_& z&hww&fB$ry#w(^kyqmsUJ7olsFgyE%z`bMRyi^B&(;fj1OpurGHDC6_E1J^ z0dDO#X~S>}=P$riP+|3@cqEn+XU!#)nuyHHwrJl#zy`V}Gv>rjAucSv|Fq~S#g?@rFi}IX1ab_ zCpI`flq~+*yqHG1$v5Et5@KN$ z<@h=f1o*MwB1CPLO~}8Iz`XhqAMgmCD|mL?6p$My{sOn^7VqJtKz)I+hrM6DmT72~ zRmpI&p738B07@T3y95`b>)U2~c0FV(#|?gREDbyk58-1h91`*dn+sBr^jB~zf+gUo z3OJ&^C)`)%M=o!1qykK_P+BokU@)yOzr0DJ$5-6Jnx_nGVV7+y`0LY@D z|5QV!LE!D_YQ-%GwjOBh1s>qsA4U>LD5`L4Y)3~>_4@1f>lem9^q{u#ozeG3hcCIp zz8}V3^QB1!0pnBb)#KDjRbG}{-=hSDYtBi9c=&!Y>WCP}!|)CCV|_u%(7;JQ&^g?lZkR-)L#Ks6El1U;U%cGUgS@mZsMmnAj@+-dMytSR z6be0?EqbB+RmmLISp~O>h5;20pV$!iGx=KHU~wL99d2&~dJr!5`U%bDcZ)YR9k@RX zAT8Y7W>)UVQnr^jR4QfLw2j6g~Mt3|vy>8^bFA9D!1nd-Q!|^)3(Mh%1)j$w_!Sx(JrR zk?ec%+hGrSNzNy|56^af1JG`HQqL4?l7yrIyoC?$%V|a~a9}0ov-`45VRGwt0w!e$ zycgssGsiv`ER2?DVjxgn*iO->lmN*AXK|{NOGo!waeVdxdGA+yzUXfQ-Hr^)zuW-c zj}pMc3RUwQo<&tCU zhc%w>s}sD_vFPQHCKOyM#eux=3TgxG-?gI+V8(!bPsL7+6b+FH1kXE8uK%$@j5*$0 zof}}Kc+0m5T}&-*2BlP8Z*6l(8$iS$6DsPVEdngum}q^n61ZbDC=Nc6^4Uo1DYT$; zV8rmq*Gn6xbFkm!;&LIbIyVR7q4JR^yM6n5ZMuBb6}|r)WOf2q)xlWHrt46VE3R2B=dBfgz`cJ==xxn__9z^27MG)6|lac z&b1^w2giaKGTVA0Bp?V>YIziVRBhQ$#5If)g%0^Wg+}2fE(nmmXwQE)Iv<8>y?!d4 z!Z9+WFXoeYoD|AsFj;7A_3HWBaN)BDo1vsyn=jtMdp|_TUzMx-RuHHP(w2iF3Y8f^ zoqNLvCZu*YCFMRarrgu*f)fen#<=Jo5<*qbzhTkJ``6t)!mQh&?*5gh|Ix6r ze|_%~P^q($k!1X|cya@l#02|<@->4d5~DIu%at;N$j4IzRV1-vJ$+*cgwgqAq#|0` z>nXF;=o~;@rqTlzuf@L_&wUnqCo~kDk+X-rPlDP(m51!=AQ%bB|6sDRSJ&@>j7)cz za_kklEn$r>a3Q=&u;V)3`F*tM%?E>1cq*eCFlawr?e0K;!O)4-&cZ=_yZXa$AORd*UpN7sPyZoJwP z`E6PRA;YK6DB7?`6^GXK!=H&8lB$OK%y=AAqbJqBSd<{R7)R@TN{isY#eI(IXsj;$ z)6reaCNwS*=~qkvt0Qq*%T z-uIv-`8NP0F0L&J$@5VNtSn@4nIB||_;^exwM5Xzi}1Gbz0!Uk%aLf(pT-6ynor9h zBq2Wha0M*+l#5CvTtCAkJgOBfAq7ICzo^9m?fB1p47XYfu=9qd#`X0nEQh>ZS%W)NfSZ0|2 zrto4UbO^pTd?@EV(I6oae|eAv;wg91w{qFY z|6l>>@(NBN=V8+i_e{jFufX~S{f$LzkUZOtAVdwKo7$7Up_u2BBGEeCXSgD)Cs`BbPJ-Yb ztcvv>1e||a1}g4G6~zsn4axcwjV{4qZ^Ppi4sDB9>yPD0p`C9JV3XJl<>oOq7*Td` zW~c8#L&=O52lw8JiGr|*Sxrn63D;ITw@IY8Y2bn1A_lnW&^*_HW0!;<67xb6Q$X=Z zPutli>VIAEOAc{jCc092>voerWYF0>j@6V`Z6QO6u( z7O^n%0Wx#N!E~c=W>^eHL+pynz_p|&i5|`F;0Ga1Os=f7lxZ&g)i-nK(;~=kFe$t{ z0hyak2&?0&xz%CJ7*+i|;mT4W9shSwn3oZMDYRl-2o+i7P!(s`5}-cbCW(0(mB{#_ z;;7E^$gJ3!zlfj8Bj82wBtwKmCMH74?A75`etZ~^cL;N9(B#UX^sY1s;#~*0JNNCU zNAmY!;1Re0tFnbNI7fZcMdvT>EjDZCI^Nsty$CWYpJe&9XKtfbMXBBfI*Wc}_T8Cc zGEV(U)nWbVBx6{w*-W(!GEhE{y=iz>uZBVbnMF*>kwj)1dsS87VF*@3)yd7&E;bNKR@o ze|GRmYuPvT4aCK)A?xbSfAl^*)gKSWJ^Mj2PXS`-n0B7IR;J*?Y@68dVW~F(za1l{ z%OHeUiVBarj_e9lKv?oMd<8%YsCx-8+8Op%HPQ_%@HI-eNE({+txv}ET;Hk_`kRI1 zOpf@i=n!8e@{(9CIy%MH$xgw!aCnNJ)sz@nD&NH=VA~pJ``-3IxTC!EQvk_gfVli}ZeUC7KlXT=R-{1&6`ko-MhzI(AjC=bqj zw^9v$Ct0l~W1MuK(sw32aVu0Q5mY;tH~g(p`joJ-3F1Z*QcUr<*LuRdA2H<|7AO5| zpXNMZACD0Cm_MFh6X-_8~zDx&c0TfXNl4`ztVTE zk+1a&@X}J@Q-!=1G5h9g3ksTmRYXx++yX|k6%u#Rii#P|PXy=spFZQ-IY6q^R-l)k zxwLY7b}iB?T{XWXfhOuvH{2yYBDG(~dVQk176w^nd0du0*P5xRW{>e|M51EHwURR> zWYN)484!~2F~Oa#*a)*65I5%3_(nq?Axy++-qGepL-bsX5yUktlQs)(S^N)sG@0blg9WY-VE}oW_C#u_T$UL2Q%vZ9?z~alY15$5PvoU=uTw5HY|{`p;`P+r{jDgEB}^q#bTRGjwS|<5vv@qI+?_B= zBYQJ@NmHdqKw2LOrpCE5 zR;a}3neEv^v^TF#Flp;m_R(>$aP!2)tDxDb&@lsY(V5J3Es=PCtNGh`mG@v`Ub0Ux zA^)q;J~X>+qPOMc$ikFu5wya#eZSnf=+oOZ=|5&;mdP;P#K_n=-|TsVYob&>qR;gX zF2X6P^FgOZ^L705Goo4>GZ#K@9V3u8HRM(h$j{7(#v_??NYa#j1U|X<+lVzs)FO|4 z>@T|HZHBLBy0bs|zqN55Yc49$PKOn6olSJ&#VQmzaWkoYl+SFIh0;<)##-Q|5BAjl ziXwc@fqnf!GF`u*H`N&OavTGwlYp9Tj+e#&FpVH1}s)y+I&hMuU31pE2F@DGRA^G8Gz%DVAACFemOb1iIYEF z<;ANk)EEIf{?=*>W}Wo2o$l9@I(k^&)?TvPLXG3+ibatEaC;DwI@-LmX%KBH4SY>5@Vfd1&z-PQT?;SzvgM?98!$^rzClz#ahh3GvtDvS$s$RR zy%6hY4Hmqn|28#zq>j}k3QxXwPO1au!08^v|28 z3VKGQ>2Ygw!AL?BWieLhfyDLB%ni0HY*Y-rUZohYzBq&{nt&0eU(wUmTpw_*xm;H* z)eo!}(%f52tU)I!88cD_RwN2?9CG}%YSsqIiY7V(@#8_15aw#-HB7xN&?>|sNY?~(Kq@a<;l_fkc=6xmc?qUsU z?t}7Z{o61vdPuXETP1eG{El;lqYY7Tkr<`Xe5SRM^H90=|o1uenMeSp39Bc4L@(sFlVE5qA*agTbA0-_JV?Ai*%>#$e4mAgZvQ57rz;4 zjk9I+SAr~GAKi8*zuKWVX-8}#r9X3x5V(`kM1Chtlw8G*bA4}SGY>SKh8$1gKJ{!% z0p0kE?*!1&XB)VO*3v9b@4o#g*OoL3rN=$z+8cH=Z`O*BqD-e5AZ)|qKv1}=3z zCZwdNiPm1^{ZcDy$iIVwXtL}>-(rG8zu!~Nhk`t`)Aq!`ca3v4@L^S@rN31%uUIqP zFH(}QFlzjjc%k4oT`qP0aVtKAIuH*!AB>{KT{@whl9c~b7#XGB9mOG@zleK>Y4 zg}1D|lU9rnP(1(<7#7ZYhEVbe(=l8p*WbC^$++;gEx~c=ow^H??mH5}#sDA+T~;x_ zKHD#&%nxfc1HH=FwBt5{6CXuqpJJk1xT*a{Q@?xoEa;dwg=MoN%JX=tQGJYeI9D_%R$|StsKiOI9#a;J>o$lEAo!Gsby{K+h z$!VXk;VhfyNzBL&GI%IQ>8X8zeWV9GTf{SGhx7dkQP>8HN`?(dY%(?m1BYiYt~9{8BeGy*j1<2S41qqetUQ9{jNH8HRt`fze7# zov&{lAaJbWU%kTn9kAG>Ndg%LK{)8-&=tQgGy6HO7ks>c3ujg98%+FT2Ar+81-vKr9C9!rcUqGrCx7IS)d zj5d<&?`}N)!rap3A_zBl#D@QpP^uC|ibq{J5@uhN5#T##Uo>kOFRE)T08b9(6A|y` z-yRrDNq7*Q3(}nqM+1PsaR%6u-eofdqj^&dMzS=~VCP}DY_-Q3Gly7X4`eM z_9Gv#L(7rY${|lwU}CRTEjz8Vca3W>NbWCWBC@!bnd)-6wt~fGwT({M&5w!QfiGF6 zw1@CvukTGJRaXu`=;s06FQp}jFo9aaM8q%Oz zR!DHTA=vTnFTv3tW6>6k+P?~mgqtSoV-N#%62{iy#gr%u=UqI{Ep;trl{OMzX$DQt z0o{H8_{6?u4%A07o`|F}Z~Km0d0#I8B%ZZtlqfQ#?mAC}Q_P|#B4`z0?vyK*xo8ZO zZb-NR%mmD;Auzyxn6$=(5*3A@X50CrHLD^RHHqr1HRd)w{SreddHf?&;9MjI zI0GNzF2(F+e!`4IYVjvY^3g!>&BNyIJq?p*EE#K&>RE;YlUet@e&)GN!wm4ETAh4D4p6TOBm_fkb zH5^}HICg&T+MWJhZPzVN$q)%Kuw}Vt!+gMD83)Z3&%FkPs<`O@=89(BGkltc<63(t zmn;4Hr@LH+Z!~|8KI;!a!x}P@xPYqEDn8b`w@tyKpU`S~j$3q3V;sU9)m8%=ub4XC%GTV2=pzo23>gE(CY93t_UI$(r zpuZ|aK?k-M@Tv4WOwyxN6`(3vRv9PsyUQ|_K7`4}BiM2;sZiM<t^KAWnl)I&97D+MhhN?;bz#~GRX7#l2y`6^}tUqd9zM+UGl2 zMi&GPJj6qXr6M9OE*=J~iZLzTF`Y??42ZWq9~Llio4|n|$oP@uDVD7Dr545?`?&b! zhrJ-?0>8&nA}E*+J4Mi~>-4&&oqFI1hI5-|%f7QMWi*xC6rWs>t_%U?@igE^X(3gv z$8B5b^7gklYxY7{eLwqSJxjsENQ2@*t3D7DUgxdIT|i6U3|8gSHwb9b6w1A^lD{K8 zFO~^#I!MAj=8~`VS^xh0zX@b7FlnU^ig(??U^HOiH&+M*FwuYi*&!I={HN0O_YxI$ zMiPhMG$*hLKNdo|i;h9&z|I;av2MepJ_zUCf2zpVncZ{F>Om}9`7`I#4OE66Xl1|{WC=JROuDFN! za#!fA76g>c=h|d88ux2&V5MThubByn1k>CsG@h##Ysdg?Q~c|&`p4(PJhtT--Kq>I z;4Z)~4a`(xEWaE5pNBj($B5eZk1)|xgxGtw( zpX&)dYGg1=@G*Jl;J07>0OIDB@+5D?jJ@qKm+fr-(HTWYq8}x+RT+K~|NC1)X@UZn zwgq+1)M7}dX>9{j3i7F&8&!6M|1GrLGG;$M$Y5=(BpB<1tv%X9RFV791K9_7;PM*4 z$fv<+n)_&pCaSHP+WDEF)YCNUoiYE%YPI<$|Gh;jkg9gYTBWhg@%yU#KX-eZV{=J= z|1lv1p-s4I^Z()Nt;3?++P-08VCe2H38hOq6+u!_1f>yB86*^>Te<|K1q=ifVF(A1 z8af3OgdwC+B&2hQZ(XqW{oe2QJ&KK5`pv#xcmb)LUE@lvnS+5H0PA0ffok^g+_ zys+?N9HG=F16Nsxy_?t`+%Wh%H^88Tiikxa@FicIKTx9JF|L7fd)<3ZpFWq1E*fJ> zTeG#kW?k;z)lCWR*lk#|H5ZHVFWPcH-vaqsYFSFDEH-V7cp6*+cmatpO|nQeHq!&# zq>&qj_m)fxa@aP_uLN$IqrRU#K(IdA8bSUPay^y0OIFsJ^71Qo-o>Hh_VbA3)k7vE zM1}4rmn@4nAReaNZ(fvn#eCWkaK>5K~E)N?~$ zp}1z{z(tXQE-L87?qeGCI63<}-kASqp(UuSIonPmvi)h7=MjS=HypCf{TcipEZg0< zmT|t?Q z=}2k)&S;6T_^YFCCG31X!9jJ``xiXOK?B9-mpGMup7Pd*9@eaY)>0I~bs>8R?(+FN zlFB+Tq@iQ)VcqqqQ?*~ql?Acc4H5+$*;knDZk(@xAOqe}-^P?w6fq&fDD;Vh+f%J^ zlyl6FhS{^%s+@?=pIg04OmL}!;zrXr0G}SlE9}e<9VqmasX9N|Fj>8bXsqxZU#cI2 zSH!_ZkgSF*PPz;XvN|h?niOTS&SSTnXs+dceWf@8#$B^#$v<(B@wcPT2Bhh5m5Y@x zpb%HVpX2=+6fT4tOAbov)f$zg~JsPBw%A# z4N@P`Ad@2QN|r4NI5J!{tpY)YM?^(w4D)!0&+*O(z5z(U&w)U!^@}f`t0iAS?{PQ8 zst|hk89BV-^19bqSdbksa6?PcmBwSc;QY}Uk-)r$_}l5;aq6brmm@@Ji}z+-7E3v> zU(mZnhX);8#KHT%&qKLgskY0=Hu;$C)H^5t$%+o=A^2RhM$mdApI|F!2)rjaqa2i|^ z#c&Q7?V^aohdOQyzh|@==dKFz3DH=jZI7(Kr~4_chf+Lg<>tx60C;N z8gwo#-&I5C9d~3M*zz;EqBcPzW4+dZExB-kDN%3~q(ZNrVAo2QMN%d>D`?abls2_L zqaY#?;Xd=HAQyGxt=1@@UO88SL;~(;OOtV`)D<>XJ!1ThhVg2}BEg{N@A2SoY8O)P zv0#4uaSu~-qgGRGfd_71UP-{5wt9>i<$B5t4RUy{^b7Jjl36*{4ncJt7mVa8&Xh=c zP0&2vCIM3}PoUa$J#n?DD$}js{gehk`u4j1{3V~HS`Xz-*?P@aYsxS}ohDi5_DSZp zbVXZ?gx%{T4SC*=mu50&;m08H4$2yL1j!3gpMadz69l!%M8mhtP4h}0l64VGwDbq; zR=8d=R5`f+`JMtudi^p6g z4(Hz|9TvH*j-&eqBx1*K#c(b;eYiuMQq;O@nXCJI^%etOzFHoLb;~FEn7$K+lj_V6 zlW49si8g)|f;)Pr&f{*Kms_XNG-)!vE2rAoRi#!$g~qu!wf0K7R$9K4*+Z< z&Yk=2oIQX`k2VS~P6-<&2Qh3fY-sB%Beobs?qWdI>TFT#`56cq+L0V8QOGN}8IH3- ze-43Mn)E%OnJtraF=9BnEaDd^C=-DwN2gMgtx+_=?SGUDn@)`L#hPh8tk5}!cYwK|;uW8Kfr7rZUP z)V&W1qg=mY;C}$eEX|kth-Z5=%Nb?1So@-~DS#4F@svi{c=XbG@FicJ`T7LEkP8(`gVWCW9wbM>f?3(v* zvDqYF>E>qd{PX;nfL_5oGBcqlDc0|@v&!K0Kme|^#GSZ!aBy=OQ?K z9+-HxQeV5@vq3|~N8bmsT#Iv_gSWfSGT>kV*_R{9cM%HDHfebuVQzb7Q_QkPXRU(O z>3IxvB`u*3^gh=x?%NhM18)|i?CmS31gGhVdETp^M{M2t6m~^$@|}m$2M-#%t0sMV z*1Mole4p_tm5`alG}ld0OtcCI&`35uBU|8Yt!aK9_fjvyt_?64;@SIxX`%Na$RXcb3xt9e$1W? z6uwsA?^t_AEk!MFO!lUVp13_E=uUi@YF&R;8=;URHYJn(nwdq)J0`>V7~TC$6`u1OyS} zl=TzG7;OH_3~Mxhx{kE>=6y}PUyx&W73fF}B#Ul@zavYv;WCqY`2F3w?*xd#YtCWS zrfVhUgw+8DpN4rakvGUp(zM0d^IC6$vj(hbqaX@a21Sm~M+wlg?XGw8cqaylL(N>Y z6%uHGT>czjkaZ9H3qX*+@om8yyhsQ3;LjV|C!fxgJWgCa<{>W98S)#5fu4nO`C9Uqjl4UI^Z7&!WoXrc zTusm(F?$lZAO0yoye5DVB+xr8djX{As4fQE(}3UXF=NB&iRq-4n_m1n#wHX!j~Cz) zV1`E{ug$}y9uncz$QCTcu5z@lS-U&tRFU=^MlJiJ)nofFh&1oNEeA}bExlotW|Z2d zT){!c+(*Jpe1%9cB3XFb6cr5^4$(~eEJF+LDj&>*ABMR+lQY_QfZaQk2EC#LAy&e@ zo4Tb#?>lz)HpAKN$r{|;XLM=zwqOpZm@l#8ZCDfG?5oo)SMmxNF-ae&-&)ZE?l`ZU+vnoNaij=S3QR;=$v7lGvnSbx^&4H}xILAgEs>H2n0Od75f8NXgS)h&qr z+gG0E=B!{5_kG9T+?)7rf5MU1GIJg1l)`2G-J7bKGVs%1CdRmK^E)tFI}o30+4>^% zh&Q_kTr}lrGj2A0sOUFC%o#_;A*#%*&PYEiY_UxDA2hYaA zV%%h+K~;{v9;K$Vufrnf&D_1c;T{B+x1X0N+%Cu|v#lK)`mJ~GQQ%PXkf6EIrkWEHHME$OoB6I1t_eB6W? zA-^wXid#gYO=h9SA{#+sgYO4g;pUPS;jJ2^?8VGJ94%u_*20-mxSO2 z!jCV-&-jBY6e^EsLGKYA_1+eAB8ivr0+4e(0Y)%+6$x+Fr3W3RIW6Ibm>dt+R{iKz z=MO0oXs2%^@x#S_MfS3mL`%_|_QO@0q~k~@MOK-ed-v`Rk4Xx>xLD%xX`1`xwbv31 z@tLI?+yk!-2ziM)!crEY?@uohNF)DhMk^ZzGHE;NyydJHV}V z2xW&_HIG1HXrl@?`R8AQB^iwcm5qkN@KF#!hk!)J1rKhKX7iwhUqDl`9=u@E;pNal zb@69~*)u-$Oe}CFi}Mw{@T;aoM}gbOim3JU?Me)nqkIEHx1H744Fko_8~kM}JC$8O zM2{g1o(iw+iW+ga?VBP~up;wuIB-4JX`INup&JGU%5dZ2(82JD<)rR1cDp2j1EcW! z>f?_;nl;vko9#{F7kfk)$ojA7?jEv_+}-;174bG+WF_h3qiICySHx+~Dx!H-($}^f zFH73DLFCv?uhX^Y2!v5OzI=OOgCUdkaOTji`CD+_J6^ha5l)k`1KTs6mcz0iK*+@p z{(R53IVD68MJCfjIw=Pa50R8ZOOl#~=;-L)wJLA*DCX?!Aj-=vka~&SSC%dmDcy9c zY>mQK!7$=SMF0!Vd)Y0ZVv%MWkK&aWlzkCaVaPI#=`~N;-7A>a5FL8wbdl)Y4tL_# zX$sq3tmMzOwwv6|j?dg7j0$45^8-$es{e+tug3_xpKWTzX-u z^{amSu+{4++(LQ+Ld z3NK|U^renxZy(o=zs!18F8h^4Ms~ zE{=~;UP>9wikp=*96$beK+u{IJpe`%H?a&0)%_u4Dg1j44d#DtA0)f4XC6wd6_i7| z0P&ij<=usLPtHp%I~SXfl1Hf?2^x9ST<8d2ib}Z$*S|cacvIJhUD(`F5%%?Me@#*M z53f4DHJ#-wl5fEQ_nvdl7k$NyabL z96f&KOG$otv}YL4{|&~dDJ{+fk+6L+T?=)iTJSI2YpAjHV(*S^lgqj6H2J-I%wy+G z@6K(^KNM&azlyh&!=%O!X5t=6U4g%uUk3V^r3NRnYFoQ4a$fV;^^B6=4*6x)G^R;4 z8E#h-RsbbL+$y7<10zjRZ`+)PLuGY35g4%rFIQkdrr{B>o_>Bf*j`PEcOQs+mD6qb zTYw#aqx&cr-eX>1u?~Z=l|{nW%}u5Fy)6E=bqJYwuVA{3HD)t-BNG<*m9FAajzYt< z4w4mIGx24g&3}&sRZ)##TAMLD^5Hvy%B=#`@M0uKNDSSf8hIpo5& zi3Lz65d|0$9M!V}5j=N|2AdyFpC4DaCA5XE10a}tZ%>O^{;6QcRFvh~v7O>#9a+F6 zqeAIk+4-H7LV~;6WOVU9{T)D6XA`xCa!^DI!hc&wEy!{CqwQ2N-xHK}9oc;v>%zw0K9qiqTZHq`}UOJ%Cmhb)lB{6|0IoBq&`NlPN`d$0= zk(kTh8iCT2d~kOoN+^IS|K#(CWd$HGhrT@hlVsr-*i0;7#6JAXF7D)vy)?V}KFEw7 z*htbC?R(G+S!%QM#G>5j6hDL7einW@lKQkTBM*j+p?J%Bp9}5HgxQ!y8p=U9`%|NR zK4zLwJ_~1%jLoUy=VdC2|Cd;b!u2LWGK*!JNdN$fT6QQw9Qw*1SHL^k>oba)rysMT zh2eg-UrtZ3t3a?H-xjXVr@qfhdyd`0hki+%8L6;XA8!h8Tfj zXNd9pqibgiI?rNsfSY2-&&36IB+I!^%6vR4c~oaO=Aq~P_zHgpvRC2L@ZkG;`7sB5 zjCcH`8kuD?8|itH3^# zF%wMd@&Qi9L}g&CmW0zqAk4Y$vN9)&#GL_657`;fNLjBZj&oXx71_2Fcj6i0PaT+} ziyfnx?Au$LQf0fWW9~>|HbMLQwO3+6vi(Nw zBz-s z**!7beB{U}xNEx}$q~D2hCUl3t9D3|c#QLHaADx$9vNa!hy@0MxEwQf@;Z;!cT>Fk z(o@PBL)fk;%iB*^UNt*I?gcO40ou|2W8bofy;HOZ3^eAQ!8mZ8fW$U+YL7`}eXUc| zwPoRCUeRvAjgk%S->|ZOc^iF2gDVDyqfkN-))ita@}!f{<<0Z2vg5+SHPA>Z=b^$I z`rD!&_bw^o0ib|_ii^7Xn-=SH$wQu9o7M;q_fG%OarO8BAss`-O^mFS>R}9NupeL` zScbsI{d!{_JpmNwt*B=J`@B>1F-aBAoF>c3c>U<@?W!TN@TGKZ9&qU?bE9#oYB;aB zAz>CY-vo3Fnde>`n3b4T8kWD%Bf`NYD|xS<#o!Pw*pxUm1#@T(N-^)G6f=`~48x2d zRc(Iu-$k=)7-a3o3l+GC-dodE?evqk3gpza=Qf%m0+!y6qZ=tQpE(8C9wZnSBJcc| z?@AWB%Uy@sYl%S!j`S}Jg*hd6Xc#3YfU54QdJsOBD_M|Sx`wOOZrlw6t5V&IEh;E` zGK^;0P{2*$t}q;`YA{;~j|$_cp2CWYcpP<^4O)NfcKM^iEeUXx)li|MSOT_s%u$zWDOgoVKE6CIwO*(T z+!k3WMVrNc>-+&PE43Bo3=NofW8ID#H@1K{BhcPThrS*ny3_!EqC5~S@w;ft!wm-x zBzGnSidI$^4gapzzeGRbCwp%)0X%eO-LRTJMB(im3gM(56pWq=g~{~NGCJkwZ?RA$~gr*j@XG6KXTeQwB#x&On#acsx3s**EH8@ZV-+D>B1O1R++y+{(hWtFr)p!> z+;AZtS6StukIUMew|w^`r+t7Q!i5(5@r=Pa6G_ss-e>~{aGnW~E7h-8N7kKb_2h6v zOG-1ggdI%Zi2sCiP1Oyve~CgCyp?AFTiO;Yt|(Q1Wxt7`^eEM2hcO>F9Y=h*u6ulr z^m9T-Ip^>r9q_YYuvv9lLhT$muaMqlIj=XdZ0_y%GZZ*4iw=e>4WEAzh$RF-z#5Ws zb9d3Iuz<~DS8+)5THw+{O;y)1;|@$&>E8Kw_qTH8k$==IJsqRzo=G6*gE_9 z)}w9Xe;39Eket!}x)YAx@;&oqA|)YT{7MA7WQ815%I@>RSV-`IElrw_VO`y9$d&rR zsH>R%9e&W$cLN?-bD9lygOE%xW@Fv`FsTC-``e!>OJUf~>UM>m zqn7FP1R5p#RlHr)RUVgvZvt&`{&2Osr=cnlt?m=Q2hy^4r^{j`3b!Vf1rzKOW6n;B zHZ7=jAj!%-(%?XukQskY~gGNf zFEKXo9c~ih-IE+UIEnL|M{cZo%m34(|Mv?$9|tPvsAZyg_>IDraD0KK??(?v8~NVk z5LO=;_=v-01<(7nalqBO~X0xjJ(*CPacyIAKtOX!Ywk_f0J?-~x01jWJ9!fY0 zZk1Ia=`Zklz77&Nn}JEa0Mr=WtT{rfTeicC-xH9&=bbVTdg?p){ z@EM1kr$S{E@><2ngcYpXElqIYxU;l+blc@fyM~AneF1&?3YuJU$!Hh!OR_RA)5Q8K zt5!Og83Z*=1j#}DmSqlX(P5z3e}a1Y=Q~x2%T$ABw@?8FK>GG~EIeLXfW)civb?Gg z(F#a^Njx2Y+N||s)*d&`lwXFv?L2!Y4;w1!&(5hKINtL{%Z~{kjiE0iZ3dI0;^~NU z$DyZ8uOr6|j;jh~^V}DwaJDm06a$2^oQl+iOKjWB1{^`-XpRY!+yUe^_ z4S`_e9&EqrL*u70o)OoTgW9>Za=JV3naT3iZc9MQ1twgI_x{O$0S6T%*Fxr({%@phk7)S@>#~^C{0Ju<*@=tzwCEtBHVroY|4h+HM zBO&(e&}@@WNA_ozBx?zG?i5!;>rD(h!s(u(f?s1(ItWg#is^}E92aPd za;A#$ber&7>X8CJO!QFVZII;s{C7Z&{EI9Q4B{MZXLT`e`-QPf_zdjiKR{uMy6A2q z3TDV^YH+;=BP~av`H(SBhRg1>0+M;T6}JYS1ryMf{lsghO{C{dEYP^AcCx z?BrbqR9C4-dgIZ8*zgyR<$)+@6ihg*3C!ViiePh(BF!@Js=*V#8@OD@0O^I$O%*0Cuz|*UdIH~R zgtFu$5GoEa-8{QlST5nM)XpyV7nE+ux;3_WRlc5lg4y5o&p4UY$TNb8qtL9b+kb#l z|E0&$kWN&%MpN-MRX@k+y>I}mKVyQ=J~R8T1@Pvjq6}KUs{N*~N3J>~F6}LaZ+9p6 z-j%?m(eSDweQ$5j|1A2h5a0Mi-|e9-ZoQ?YG~fc}4$o|XCpbzfR%Z>FLN>~GL0diW z5VF>XGZVivR6QQjO5kwT=0gB4lqX;|m{Zk)!YSBU_CX>$$g~tCwLd~n+W?ZT$q`8V zWrTD00Y_YMSlJAX!_NBxf}9Z()ox}LI?4Rcv0xm)r4`UYRYK0)kH+fI3psELXg5N! z8^kin@z47WZ4ES~r(XtsftTyN9p4|h!VvbI`9yE!B^{XW)6~w+&@muL zx^H5Usw3 z?>Eip-UTTL2#__50?LVjq*S*&|K3P7C3CpLoyfBrERG$QAF(n0+|0b;RGm4ux^!z# zk9E^D;>+HikJau;rNEviSOpDg^c2(kk*WvZc#iaE*K~)F)aW&`D1un04fXnzci^15 za;FTuSlU<7fi#kawmfU8!EHuXhsl)5Xq?)Gca4jg2ONST1 zRs(WNM}h9*KEx_#X3Rt9Y_L{@+FedO`9pRp`JMr9)zS!Ze>?f(dh$7R>h3%eboRE~ zK|;Iv*$!64%eS%*uYnu7U!(p6p>()(NyF|WpLG%15igywQx31Xv8{7mTb|PSrHX1;vr~k z_}61VfI5l5x%QL8@h*$QPhU#pFuTI&b{R;8duHwgv|AN%3Mi!RVW}7aKH20TH=D zatrExLzL`%WX2HTIL+C`oWcSci0g64S%9J@GUBmWzrZ$uSxESzVtWCJ0;68OR=dtW z=0|EAU6v~b8-^>UJcm)nBfV-R-b6pn{7uYCZ%~%MJ%<~vF2p{6{3&ys!hS*4`gmB@ z`KzpFe~P?pfThE3SYr@gHxP~lYD-!d;Q}(V5N?wYIyL|pOpYYd+`y9>C{NoamvAis zrrFRMCkO`Asbjs!Vo&5 zTk)~F)Mn5%4w_FO6X8jB!+}v)6z{#ZZb{g?I*R=jJ>wx*;Xf5G_CH|UQnDK#jz}#2 zV?laik)c>t;MiMHHYM7}$99qTKEI4~1H)G(7}2DuLneJ~f5P6QI**Vo*h9@DUX#TGO_tSO2jWHv9k_?pXEM z1%`iqWjGF&!9DOa<%MR1`^2eN{a(Uq-j?LPx7A|ZBvj9Xlho)U#2?d_M_&SXh5=}y z48Nm^aJdqknbYxwT;`n3_zSFhUpp3?M)*|p8gywI)MHH6YH!QzG=sN)mAYj$PO+4< zhu7L@vaYv;Np*x{-!Is|;@#mx8h-^8N~R|%4Gsm_y^d=Nh2L@NAqBIotBw4@u~sMN zD?AScCtmF%kp)A_(lHB4oXzd={@C5G9nu(Rc89BQ(Yg*9=QJ?;OR(A3fNR00?5xKM z<`2cevb#^Di*0EoALjBYj&)4zS$y7znJYZ+HyJ=*NJpyE1~n!IMAp_RvT~dFf>v6g zWeFp1$&}@K);H{jo7COvxXu9R+dsEm4>n1#?z4)rGbO5+R)Mvi-g|`#yf$VIo-G!} zjAQb44r9Jg(oAc5q;B0u$k%d9F9qmj%So(Q;d}%0p+BzrgOr`XmH=X<7B2uj^^LCp z8lPwfOg0~T9l??L!=}9j3MYscXl{QY$CI=TD!7PQ0!H&houng-NHM^QJwX(}H(?hj z)doJkTv98FVA1J7Ighi*212?4ktbKm^)scTE<(C&K(}b%9FrB694Ek^O9*KOE?|Xs zohRd02e17r3dppdl)TMOpZ4V{q~AP~V5n0kkUYk00@h<%2FmUsc!JYh#!fRd*{EWLyd{?cL6%rSYh138;)X&aCm;jIfs5 z8O#(hsRg;hZs69x*Po+2>L(L#C+w!TP;TGz;SWfxcDTs*ZMH3j+*hEs+J&e=8nr|(A3BzRkKPq_!GSH7_0ALQ`cIJd+43UQD?NhK@lv%z zc^e4!_=%K$tD7b&>)6NU3s`MnfBY6cN`-kdJcrz`mQmOZEKz#5gM=nbHu%7ExNnVe~|QQ5l!E-R}#7-4gj(yu&X;CIkO{(RoK??PuYvm z*BjUh^~#fbyz=(TS^rN*R4IJbi1P`kd_U`7{wa+>hFkQr_LSZKS^KOCLa--DN?2=i zA(%pt15buL6+^QkXZog>GP7_?a?Cr&A&qVdTlDWQ07XCMav9~Ozg5Xe$GC)+A9<{f zxA~qsXM+3rNg+hlsn`T1&5VLU0~z(ks(Vh&mQT4X^dTUMv6Ff@0BS7mu# zr|iPH`h+#Oj+RWW@fnz++lf*I^)W*J(?Em2Z;Kwz&8o*gi-BMt1)9=ml39Cu`!mV0 zs1jZ*n|!&68)O!PlG%pg#L-aF=sg$E{C!>yM*tbV87n=sh!l`tI5I#yOcHK86zZ$G z)MckQJsy+dd_q48ig;F{KD+{;(@o~ zDvrPYU2w5@^JnCGoQgn=U};glDh7(`K8_aT>7~xKS7S8y{Tu};nK$l zGiuOylJBjrR!w~`X0ZY?vKD2qQN|iT{bQXVSEr&d^t8W{mJu(G99I?SoCUk(wLt)a z0%CD)C&kz7W`-oHjhUi>eC*sj0Cq_sIo?VPdbGdwI3}%vjH0$WP;$gG@BH8vA zt*$JzA^cY6cxMAv1VngRg7`hqa<1i7=%8hAe`SAgcR; zscqTQKQ}XP&uCMT0c61S5dpCq(0tl!*5-Mxj*S9n(89jrdMCK{t;BtScoeULva-jR zZ$OlmOk0-i>3}--i=g|RVDqrchC<2GnjvAh5C{u~IieC&4kO>7UmT&^)6fKE+S(tW z41Dggrg=iyZ+<{&uX#;V(T#h6j(XZUGW5~}uf1RgzEr20rGeGv^%%}T$(%hKvL(~g zZ@L$tGaEX=p7WyN*vf{kYYwOLSiaK!+YXA8?L8z>f9%droK8mQS-Wxvpn@935iB)8 zwti>O4quCp1L#f^U2^Vf`6*RC13+jr`RthqARLEd-%0o3h`zj>gCzoB2R}6IwD7m( zCckrjtpP-RIABlUy$^yOZ_KupUH9M~xKF(v$~nmgSFa(wJDK1)AFKHn?ok$3TG6}v zN9h>pOfRTW`+c?-sfSGakU-kb3L-7OtbNZ_Yz*LpbhdUyuq7xZQT7{T&O<((1+5e%H!=)gN>KX& zV0fo00T>rXe!;DuUEyioT|f(Y!;YpS@C8pe-4kEJLPpB;3&QJU-~Z>P z^P|>Y4jlNMXc~`YJ4_nnP)d~`^vLmLUnnDUKL=tlM8!xLeiBZAe2cDF{rv>h6R+Kq z_2JVXe2UKDC-k7pgR=st6<81)o5*x8P4`?NdI0xjpAP2GrAUOKGoAP^Ppg9LS9AS$ zODZS(cA6o!lXc!r4(+kbolX)a=Z2Xzq?3g~Cv2OXXFFijVM-*t6uaUi_e2bp$J2VdF! zYfo~1_vhw%^=lhNLXF)SR*r6_d}9<5$0>J%@UIYRLm_pP12O0MAeqvt)XH~!E`?(z zw7l>s5dvT}HoK;O?mkd>A<;r9wR#1-=0lu#E4r9Q_^3S&tH zT}Ay7Rgdo2U|;d*;}6d9O?~6_N$)y zX*>LS;+$V8KO4#0oKyj&V5WS%6%}WHA4=iJTp789qZoxEuW{sIrwV@BY$xdJo07)SpbTF0t-xpH^^NBY&PhDDf zFsT8F9aml@;AXg7-tD^W@{b!Q6Nu;?V#bS$QO`j#Z(BGytI1dLj+t3?7Hoq#5Xk@7 z-Vp*xmmrC^?8k5Vf%c zN2$$}jx2f62k5|P$mHCbXk{O*{P>v0D03)j5X0rMJnWob?KoLlO%)0FcAnC?=}4uo zeb_uQ#X~Q4dzE;x!Bo%Uk?1?pJqVtd|CLSA(A!a6tsD&Dz&eSr1Th8r1eg9I?dY{zKg&(1#))9bY8x+F>VJ! zNYUa;;jUmJfplxOjFX96x!cE2sB-W|Hq;>$bqI>P7KmvE=H&ExMbU6pt<-4o&U;8} zbezq>#2(mcCzd9rr0-p*Bc$mW1Zt;0+@Mq@H_w96U800Iz>06QH$-7G*&kf7F4nPz~a zC0Z71kMyKmlHYZFYuTrWprm2Rb4HEw_ZnaUv4`)eqIH+KkvH43l{RkR@-NNBT37OP z>U|)1V>v`gYuJ)hSh}#E10XxG~xIhx>In1 zy>P;sXn}NOZkj~aGF}0GS4W{!ZM#5hyl`mv@n>q*ZB3+1Mlb3Yd2LmB{kQ=WH zKoG?+q?!fC`FNe&z4m(nd@$SQJ%CL77n$VL66&o7&12dZja{f&I$~e&iR@d*)r|<- z1w+QH~Q( z?y0%^RuwBa{3kSh-^fs2&c4B-+b(0z_#BTDhGjBdGU9fFrd_WattEI|VN*JqvuV5) zmQSMncweSEUE~|cg}o`05f|ed080Mmhty^^?}O%q-1=9T>J03mdT%{&xuG|h7Or7= zjja&q;5?^?l6{r^AM`88t<)!sEL^;ka=9Wurl*1*qGmU0|A0scVZm0blg%_>O=*yY zf(BQiv%PHm3qp%;7_A*@%} zk`a)kFYhl=t3MHzrPD0_-s^0CBeqbFu_o0bGG;sA_?q(sVl;58r{D$O{c2tKa1>vR zYEVx{&Ll3tl0uoVJpEUUP=#D3HLIenb=(52S5_mCiAm_m{GCGYiu# zCOu!2u|S)Cvlhf;OI21=J@`)KiVn-VGI}a@46nsOTioLZbEn_(A=tNUdR7=ndIEWM-m<^YMu#o}AI;03 z_dP-M4L2RlD=^>9OjbD6#m0o*Py9J&kAUk%b^Wkp7Bw%-ZV$6-CT@doY4t3LB2dw{ z6bEP8-bg4q=JLD4aNYF%4U%SJdhJ;pyYJu~Wr&Y}Ibg8X0KK~P{Dh+M9+iWEmk)q$ z$@al`vb#Ty>eyvJ@Y(#rJG`(W66|!)A9$j9J9TaiH|+ikfCB}8=T01sP>Ta?4Fo=+{Ok4w3wEte=xg%~Me|2PwzOS!Bqx)0MF z?xg4NS>(Q>D{4C(Ye)m35jwN$vJ@`!--&c$yx>p9Y*S%L%yQ~@N8r4a<+IkVwzAgH zNDBR@AOVdx?cXTC6U{bafqH+x4V*A#Y$}%FkbwUs_2y~R0@d5cIkq1^-Kk-lj?$|U z)#Y2aKK*EQ+zom5#6MaC!b;Xp4MU5|syb_<992Ek3(Sk`4atfgOLUX>w-k>-u`KEL zooMQIx?2$W1^*D4E)Jc0d@+DPZn+3z2yJT!91?BJG#Uer%cIPJ=|{E_26__3ukWWz14`K)F!6io4a}(Gc1ehq4*3s6W|En6PBxwX4O3U|p06*M$Q4uoA zC2?@YpcoR&1s`6+Io7?~*xV3td=tTleLp%=!W8pN``++*fwL2*HVI@eR!p+gEtatK z>oG++Onx@g(O*A_%e7_sHI!+LGr3;&Y_?`$Rdg3>2aF{v;Rs}yHIBmWt#J--Y^r26 zD{oo0K3Ai`t0BD2CcVHS{4Kn!Uc|0L7MV|BztmMvap?E3uQGqP!>W4T&cT&=vC*Y? zGfq>nmkuadDKqvb(JB)Af6;W${MId^{_NE~-gmQ`FwcSwdmb?FMmO=tsRR_hJDPU* zd=ji6do>A0OxSyKPOl8ZUm|r7z1Cw6BZC;mVq#g!_ItjFzuL{^FKln#Er&~KsA<3P z9lM{bukn(Yqg0a_3tJeoYY})~FXk}A9UPZ0WbQDxbEfTACE5>YP22EaU9QWNmPZ`0 z=gz|e#}bX(F=xO_@ZnhC{t&Br-OQW>N)3iWG5%n{O^6< z=!soHc*pcsV#!?28Obmt{X$Q%O9TVTX2etW(NYzvviP%o_{)Z_x*lx?YcqNkuI!tx zfRKFN+5%;AT{K=fV86L2iHG>0=sJx~Tx{))r?r^;A<(;Hd_W)o{h zoIU=+s3qq`#${Xio%1!h$%SmDA@iyYxopl9G~>+XAR#_F?LrqtROdE#c%#$_Vb5pi zDpu{-(9}$ACt*V?g|Qj?1PqL~VY9(BaJA_Gbjs7y%IEQJi<$-&NrA;NcJB_1;{R8B zkwZgI=BO6?JRW(eDRrO4pKO>5Z52$_B4d#jEY)q>yiAoEldtS0Wu)JQHx|70 zNqIM|^QxREO+|~+%vY6E#5uQ~uNCA^g{7b3u%CyzgXH@I2Mr0RhW@bJD&6vee_*#; zXFd31qAYocPOy0;I=N(bQJk<-E}Sfjo2MwK$ywjnR+qp)Xx8?X=rEPtUGd3n8GdhQf3wCj3G_kY%oN+Nm5i6?v3a(JLheMillbcmx^ijSADh2x%GFVqH1UK zq1E!Ji=xwbk<ZeQZstY%9&{ee{x{u;k4;i#&uYLx)VzM=jZj&}*bk*ux6BpBad)(9JZ z%?AAAL!3f7XKNjpCrJmqQgY&nkn649_s@ek!`hzxg6rwvmzf#{j)fGwv{^nLEP1Qn zA&NTQU>pTL8QXnftN&1_WP(|vgHpdnQ9rwj1Jj0?&3*+cZT-15+$;OFceC;Tj&XFy z$s|t^Vgpc!O=#mkY9raw4>x~h`T0d8RlDc{GL@zVbA?ey@6fi00r04N)HJUTXi`0G z8i|Cf1RX+f3s!=zyOH3@4iUKJMi{xNCOKrvdwh!7SDv{=u_Bd%vT>7;{k+W>9-sx} zuxiKL(^$63?o;(nvv8%qfqv{hhOs)#*h_~-h7^iR4|J{0F^?ju2d=#F?{mzx53iQQ z?ty%<`x-bPj4}2ouah#?k2&&N-`n5Lg%QFxeUN^y3BSF%GA#oXpJ0M{yj>wT&#TEoZI*7=pUUi4FJ zzFpo}?|bbS`kstBwVQlVAg@1x&#kE(zzNd(Iquy;Q4+`qSim*RM1^UqezGc1t=T@m z#RkAc8W2UMLBF&TIM9gHQ(R1x1i2rwMcxP#lpR3c+AdqZ1!VVFdzq2=AYDHwv}o!T(a~&qDShtQGomgdzR}6 zCt@~v&)(C%@XI1#YyY(Vf7#kgA2J=Y+Crt%6rgm8u}L^akO6yP{eB3@p0M}7Q4M%y z4S!HOc>=?^gGc&?D-fzZ=XEc0r?yFGEaV^mmF- zF5=KBT!-*HrbO;{sy#|(%L0}(&g ztD#rUlA)u}^b3Z+e!H5S&GV6wh?(3Je*(utyK9q=zNV%XfWd!k%`4F+o(t73i2o*f z=MQw9f0cI|Q_rG|IwnaNt^CSt9-T;Zu+gfNv8UdhN$=)s7AEiuCu62jnI!DN?Ni<} z7n5WguLe_PFras0u)6arvMG_GQKi2~8h|EL7 z(Dh9io4_Ov=83ZHf8M|#6~bduEYmKS447up@$%-KWQ&RLs?tV96J2mL6|Vr<4YK@{ zVDaQRnnWuIKkpqbohZ3GMW!iyPjX0SGDmiP=tWC}!ePONP=8z}A8o2x!4IFY%FEZr zi@WA-(vrHx{?EyRJI9Q5oV%K6)~A5mO~#R8NW6unPDyt|=Tl8a*dr2sfmaG%s3RNAE9ok#NzVolX7b7G19m748t$&|rBb+elM zuyqyqM=lbU5h&sb^J^M~T5X17rxdpGp`4=@4 z4-$Mf=o4^KNsD>lL#YU777B_ywApTh4nDuw z+uXfivia4dr6$3qc=wI)U>pZJ>n-iTZrNH}t zT6@cYCf~4cm}O=W!grB9%FMTALiNDfw;Q_&IhH1y5_s%I8prvB^NkCrKPQbRt+y z0T#`Q(S)bo34V;{d9pnhzc@J7&K^oXWe_{j{`YY=ajFz^ZhgI<57tSyN5E{Z-%q}W zRUt*%?&-?0oqJjKG%(Gi5uFJsPE^If{m=7jiRDU_E=}liT}gVUq{L- zDTVSH!FU{47z6ZPXi1ES)@}Vo3f$xYh`fYv$<=9Q{OZqzw$=`RxDa!A(}EY^S~UK;tIiQWcqK{9eW7@hj@ z_SgCgK*XrlEjF}Pc#Wq(brX#U>ys0-VYABx{yatkFEi&oMOulasBR&*A3IRdC1B3| z7nDXX!tdm#P%U9XiHnjKj2wi%vr0y5Ys@!OnD=rsB+o1UOdOH_t9Wi>`u3au+6G=y z?-qL`QiGg7{r}d8G)HaN%p_4{;eQaH`OZl_I41{3p`1(? zz2m+HKTo&}B=`e>ZWm))?7c(D-OXh?Yv%BBPu~A5k`69?S_#sHk@#7EInjt6}7DVt1KU+ zVb;>Sza~b?nJ)gpB4}{~44Buon%=Z)yY4(S0h%JV)BU)u>;m57|511dlBu5itD!o$ zl_Sw!6aTb+ax*w)&yn)fn`d|NB(~S+5zjQ4M=a^hY$p-IVSh1h^sK;_Y|oE?l5oqc zAs{ZwdqZ051EJ5v0Erv?VTaJtU&fofADU3&$6D+T4*V7HR4$zY+gjts2V+GC+TE)P zh{dgsI14o5G9=+2{t`UUpHGc>#JZ)@HNV;W_2N2Q(q-*wKJn(!ujf|qM;(fIJuyCJ zUGg(c&vO2P;z2_!178zW9e@ib3_ykmwBu2eYxCI(Js4#+Gy-h;%R^gSrDcH@t<`&VpAQrh~vIO4xol|Dz0OTTVcx69;^xW)I|(6WTlPfWqSZjp6nK zAs}a1kiVI<+dFd68k?lOV=aq!{GfFKY(u)<;A(>}PKKpMki|bAenqi0bWY>AxY#>seGKNJRT<(Dqss z;46TQ|C2UL)sx4xp>|B;7Z|Oamaf$F+%KF!@3C?C=zQwJ^&spxe$_`JIIn?y;xSN~ zra|FkB`V_sW#kd~GR};8yZCBff8hza^t8ydi;lGWM`>vS4En!sT>Y@+ls(yCZqpg1 ztCPOnA^5a_|3cUW2@KDp?*7jPLM+>gj;n*C33E>Rb*|rJfFaMxd^j^4;A=&|1`7so zV>p^TjJ6Re226kx5SsOgu5tv4R^x!n!r%A(DmGthCQ&L?qQmr-q@;nNiDgY7bcD2ohC0o??AUtbe;2x& zKqVQy8r6OsCJAgc9_}Vd$&(lWV%f`1+5XOaezbwazp2*193_!DUjvAFb_eDb&s!}4 zwKlAuBh|qI)Xr7JjFKZDN?GFqa2*OK9)$I#yJs-;DaR3P>Qh6%qa%Ft=bbBzbJXy=?e3$uW1r##7DBHes%+D_+Di(KD@&@TBE z=>M93#l$a6!2+$!jPWKSeVcMntJD1v zN*8m?_((6tS8C1F=zUy)mL^;M5v;U2*_ynLdz&aIg)1yOp#3LJLimAQ@C7EXLB$*9MNF;ly2=z7ky1P+yCV{WPCH7KQG&VY8Es zkYm&Bkm-&Ps)>)BAFJ;YZZ<)8fb5I1DMUblP`IXyy7w^UN*6f)#ixxwXYOH-7H0z- zc<;^P<3ZzBxxj;qH9L*_hX4Ra6eujf)bu9yX=&4W&kT6SfYu!ot|lEpdXm|FAU!gV zQ`5Evbc)jXdi?Qse(xSDF$Y|hgA&LKwwmFCXZqd!7TN(|1IR5cYdqi)pQq;)$RIb6-}AdE&c=V(V#d|GX^!a|!BC5nq=K!9TL=+ zwweCt-_X__FP5BfZ@fq24CUe@jv%M-HTIjT;an9`w87uc1Df54M$TxUfM7YFMO~S3 z^Yfp+W@iHF@li5hT5Z4>$De#V_@js=orFtXz}@D14}i*791HDJIOn2m!#G8`Ty-d!Xunb8O9Ue| zJ8y>wm7sSwFj0|?Jn&(em1;j#8fpqSI~SY4QApx5sW=T3>pdF)Mw9x#iAV?3`R0Bz z&v?)0;Wl`6I)np)iFCs>EyxVNZN@>pr_9t%h@4}k#(s`8cW(!EJe6-pG$TFU2ecP= zMC3aq$f>!0tSo!K@wll|p~y zP?uy(!i;FE^i)C1uwrl+*0W$*;tBaf0C;_Oxe?L3gk{6q089<%f8VFzMbl%YX}*x# z@B(^ZeY3ut15rE%zqb zp7`pYEGE1_W9xV%49OaNQ8a=-0aE_MA()J_FAa<+=C?0_McIpORNa6meF!r}_QZr3 zB%fMJ;Z6`*7Wb_{;qB5xi|_K(xHMs-09;CLLabyzDD|UiR^&+N&45PT zB;CWkc6yhAw)d2WWtw7>09Og7AdMB9atfIbqPRh*uCd&GOO3Qm{{u!Hs2+Yj02c0G zHDGBt4r3rayrcf21L5!g1D)cSO=8gG3P{5EI?`m8F;Vx5lPOH-e?EWR@F@T!v=Wi- zdfNBX-cl8s`(3~}5fa0K*82bK!(_NR1KzC@=tx1=5PVXSDU|r}h>pVTRBa1gOn((m z8Wg~7DEEFoUlduupmt;iF@S#phtX~^`F9sjv45IRP?nIsv+Ea}uewPQf1@Z@XSpv5 z3_zk6oEGrzC(A~Om3pSWw`LW;3L)h}yY7vdh7SGJl{L4K8m*$JH@JS`GxLY@MdKP! zEZZk78ENPa^29%Hiwb>wb2+N$spLwsWiWSBfPnpb`ld$_yV;(=8{#&2}9nxeVfS{MbD*&ZG0!0h{_G{DY`F>tmHsAhB6-{xdVKV{N4 zCH34rn7Ot4V#cG5LCwL(YQv_8CmHH{oTo#lN|}{wd(j> z52{miVhR;Y;_{^3xV0yGQ%Dep>a1AA@(dVwYMaFeDb*1&oDj#Kwdmqxe79j)T&x<_ z-1NjsZ4D*EOxCrEBBG?ylFq(M$!^1#Jpb?`K{VkWN|6d@5?^o)JCj!!gD{$4YaS2W zCk?7Q2xMngA6_3@-zc`adm2wWOaw1v=JPEjTGGc7kV&X7rx_eig>E|$0wJ2`R_P{8 zGOH-bAcVY%#Le_4migAnhbfz}a@fdp4guYO)^<0+qL|HRy|aU>2@r478OEp4D{EkZL3@+7iwB#)l?3znHbIr)p^YkuWb-{MSu*2{d`&C_ z57254gwH;~Doxw92!xaWjQQv@waDa`NOyWK_$L53oV2xfFfXs45v24*2Or3LnV(6| z$td=z7GD5pl_~Z}H$ZhvOx3DMG;HnQ-=%3{n!D&v+t-GAKX2|}@W=;VY*guATD}tt zh_{+<+=zY~Z9rkrF=D_0-

LGKJ5Cr$sd*vWrdUqoq64dk)ld?;Df|Cgs#IE5O#D zGy80S&YsKiXBL)LSw1dDEzb%j$08n${w4Mz)%`s~OgxS)jQDBREPYPPvX=Llc&_@! zWFjmvSjpw`^4POru64ReO`1{aE6n2kWso_T219n`9;YQ$Q3L+Moe%DpCB5-{CtSHj zBGzp~?I}zbRVi7Rya+hW&j5yRrtbT7%$D$hM9QzXg-E)na+K9@Ha_i{(0z~pse2y_ ziWJvr+3RB%WZ>Ab%Q0o5Jj2gFSq$f6Yxuzn9O(D z8k~XffvzuRHCt9Fe#Kze(_s{krq6iK?ofnNSTl?hIYKa}1{aZ++y-UHfSlT@on%YA zG{@^FURYwkCvYe{EpeCwi!pH|lf|1CZkN*d{+#JCm7gVS&myiO;DH-lQnn?#9!XGCuatZ*7{aLkY=Z|Ova zu;n~|yQ&~ch^do6M|Q6X`A3a!pK8o^i`3T#=Sj zY{q9x$UhZxcMCr(M7-fnb(J2mE62F|;5FCho?XgnT_h9Oude;%3qEy=SRpW$2VfFd zAAOSy5_DFr$0QqF9lm2=2uq>80K}u8I0Y36`oFE^W7-SEKXUBx0`r2Yi#DJ50|(1; z8?s0b*Y1)WO;SuyRi9Kd)(y8PFdf9m*2>G*+&1>?5Y8B!?JRSfa_&5Kq?oUX!>UJ< z5KcdjH{^dS;5Sr)6iAfB-2>Oo<}mP-dWX9zJ;1A!c0uZcuXBT3yL(~{von+M!FLlT zE>dGZ>6Tym8{UG{N30dL{SA~Eq?2FxsY>B=M0_{B;u>$6Tl6(~f4EIyY+n95!-pzP zy8Z2bdZ)RI#&>B1hVOYB4ha1@-QJGHtAEyllm1@DhycT$^CRS?97zhknb`uC%&GD{Tg-J>xfbOrUbm@3&-?g0v)Un_^Uxc|ru-yUHvu-*DhyP8kI1!LhDM zY)oLvdn1`BZcM6*2NSYFgk%^mjTi~teC1*ILAOJC#sUX8np3ZJ=Z!XI$g-9^!drry zwIt#duOet+lp5UGcKdR= zq04aInXLtN8ieT0B?KPOzc=N;EXizQpFN+Cb(RLpPMUZX zJ4Q`uzB8Lw`&I-lP-0<~cw|_;Z9E)d76)D3h1L@$x)eMs{QYV6VOxf><0vH_tplTK z3gpgVqctHV;W@G++1Z_V0MxMo-So8ZB zpe`tDl43OGjhqcd_xYQ1FZqbAO|w*98lNa*DFjiQG7=&2(wZo*8N8Nar|D<*!emv+ z&AJN-9_sJBv`TuOm}q*>m?^m#zZR+(ahlT?=`s`0;v2@aWaV>o_LUlPpB|#(U)_tn z98{Qz?}==MCx+8uK$s)?dg(#c5k%>_-<9J?QO5a+)42RkV62&cUU)F!@U06Mhm0NJ zAj;&gzp=YYSmFZ{J~_+BiUf)zdIdV_zrv+1n}zo}D7Vy(rxWe_-kk8Jf46G69X4h) zWq6ZEoq-*XtiiO)+xey7_Cn~sLG9Unt;|Gk#m@<^gWscsOFiGN9y zmlX@>ccBXq(a@!eeH}s=JN~+ox2M<|?%1s+T&vR2Mz&{yJ(2i;H(6$|r|5&|%zm`T zkrvWRA?jF{fUaUU#(^w=J|}v6Y?nm30uLh~+-0P_o!*ZH$irc~X zZJ7DpsFPU^t@yFE`qfT79&yeVY*glFRS?*iiD(gYHjcKcz1sYi)hWQQo~TUdd(ck# zlxn^qM>xc>xyu#iz2_Q>ff0#I^_2E&E=JWQ+HLMsy5z=n&6J|04dJn%XHPhDid8)% zNAG5UYWm9OoGgyfXY5G1s4Dd4bc!d0}rwl-D?o?=qZ7S<@mgk2h^Kjh|*u&Ik zIW%gqcldUjlKKl(2_sxtKqSmHIDp5qhWWOnNUG{g)dX8?1Gz0lpHLW~ta=$x*aH+4D+SCb6wFmwXw;|byO zle?V-+Y{Mqbd(|-KfHqauB`(xa4Uvox7n&^IjyXO$^xTXbOdIY=Hodd<&;y}tN4L; zrYWyuD2tT2F`R$>Ck6_N6p29*`*afH96eem)zZYw=U%J~8b2ODbBI<7YX1@`*E51ci9B}D%tMb<3;2G%$yFze zj<1oy7#_1T58z+zV7n58da0w{!|WbUYhiBlM0*6N&3jc_)^AK2kiraQ)W+0P`k%9 z^==-B3%M%9&L1g{@x~cqWl8%*@XD!w=P`#b`@WHBz~P%njWK0PSkuXadK0n6ochgT z(M^BX%1zf@$<2lx`esI4i7_#$w@_T3W(dw5pbA2oW-7^$MP{G8yAeR3|FkFuVt#33 zIHCKX`Rz&POYEeE<-plkub>CUzLvi%wkWu~hT=0uW_74?Gu;UO96UA?Vk0OyK#;dC zq{LDoaGXg1i}9NG;glmmMMu;vYhs)D9}kWY-?zwMs$bn)!w2IQ429r0JTaf&_P6Myc&pGuY2;=8#$qovvgKX+;@!ny2qBLE z*TH_bmVZU*XU)fgVjMd5xqO&3usg_`Vh(S8-#}Ud__lJGAQd!wa;-Ga>bw@ZQSUXOOrKy%or+LwONAs4xjX<`0#IZ+CNGA07rfvterhi-1h7|!(x)$L` zx9@RIF%LWcP_C(c!=}S=(lp-%s{c)@R8i*3cU#OVM(qA4#lv;>(a~P6c!1BkR5Oj5 z@E+db3-~b^A$m>{Ejv#Cg@4LV?w_5Xk>?DT_h^v^1KXWi@1&?u)aD! zscH7}vspWPj%YkC($6wt?T(&>jdPZ6J2+l)gk6S z$iC{v$_%}(-75Sl4299YY4|?080j7^M3GP)C{P;4mK!-6u+f5~B42KEe#izfbcpTC z#;PBN-}`}nA}jD41VtPz-S|&c5Z41fw~H)A4bhO=bF#J16yy8 zPr2Tbug&u5J27&vcYHg&gO|$_Mo=^Tx^l-R)pRV~Z5{rzI93HC9s}FWpaYi%fHuvh zA6+jAMqd3GPTv{X2D7!_yPSyl3Db^E>VmUk)?blPnRY>t+YI!jeqW-aA4YxcFXZ1B zGaylL{1tIf#oIE`lg|>SbZUX;@iPOapI(>R_I(6nKzp3Bivlu6V zm2??#)-&(N&SmVjs-&(bIqAx4=c4x2&@Rq2tD{u0nV8nK2`EB0Z436V0x=*d)9^L+S96 zeS^+8u!Qk!$b#7reVW0L?*^&y7aA63h%uroel(zP!In2dG#4L4REWlKQl?J3pUwRe zy(3FLq1+NIj@3?jZ>J6{bvr;Z5mnUmidBi?ZI-1>_Q-s-3Qz65pHDYf90$KkHY-`6HOm+p^s^2JGO=T;J@qP5p4)BDMC&4y@XxiT$Nnz=8lUuO!Swj7hq}jDfffTU72Xip^K;53 z-{7hU{(8?vW`PwE%@f7I5y25;OeNE;e|^fD4_5})V$y)4yYN|+C$&sI78 z$O~tE7)Dw94fRIcjo7^-I{3h_&j#kx`ge3H&v2XgOkvh|egxOUfhuvZ9peiYw`&M~N1(@bwql==i)L4XJ77k-`rn^3?0U8>Qkr!OaTbMJiaT<<`9n*P?DbSxECquR?MrS{` zaHS$qF6}gOEPFSRQ#ljnyRFnzh3*5uPW6q6<;mz4u5ekI0cO}2Z`cv~9RBcP(F$I( zHDro<|2#uo$pWLxD*ZPA*3)XabsDVl|@YOV2`K16rWt9cgUmEPq;ub*IlpVFyK zYV&!*Bry|EF*V@#)mnI?!~KaUv%=r!;h@DrTHZX!3m5TX()6)Y>o)mBAumPb{_A!0 zwRrots+SfF8T!LwmLcAw1g~|6#73C@U6If`rurggjq20g4v70kd#GI16mwjBiDrX` z9rovKF0<{wOL`dv6H8f3>hG@sca3|M=l}goP&$TF8N|r;`={x*FFNe!Y9JMa;I0f? zk0ULg|GNO_&#&}mnK8;AJT@JTJD#}(xzEou6nWZ~s6P1bekcM*mT$GY`P%j?hQf*J z-#_T%MvyeQi_qPSmASNtds0@E{!4?=e#d`D=>N_y9cj${K6&4{P_zG3W?nm~6mD`Dpuj=7{zae@hPwv2;(P}_d?L17Owzfd*SKSMXPV*Byn#eap zpLcL&e`4P@*T2C(PJ{mZJ|=UETbwFYM)Aes z%ctv3RTVl;?)V%GzK7*DxmsBoP5*b}{g8S3fF=>~%eoo;1$wa6W0Hy9LsXW<-v={U zZ!7e=40hzXk5u1B-br8h-=kuXdXm16^x3sdp;``a2ygsK?Z!6k+#V}tRloN4W6dR` zpJIkB@4cSn0be`+Brv|fIX=7V?LiyH5IgUXoeI;zNo9$j>&^f9n$l%7q)z<%{y(oe zU^J=a(;J=6l|=^=C;l9~7I0_ZbM%7@9+SK1!+zRx`KS%f2az|6R)&jNyEElow*{*w zGM=$B8|;Ndmtd-)d;IUu`+HX5*sFjj@bhPe*kez}R{18BB3%P(i}KRyb&Tlr58b!oshcWK(CD)eMfN0&afG@~K0NV@ExXA~KbfeJvC z?gwNdObPevx`a+X-F}jZ>oaYWj`qt7O4uI8XET8Z4}Fb=kft}gS7oOiy{i0oN11>5 zd$JB(KcdSj5t+Gns`-@M>lU0(dxE~OQXY3`lvGh4+Z6^3r_NNRw9e^kYkd~oX2)K- zHrzN5_~h(c{!9V399fxhNou~d_L#IzIu5$Cbw7T8Ai1Zz zrk}DCcm-9}cWb;ET6|?RNu}G|Zgd|)hZyeSIT6nWa%RM0M^A&@QAPAA$(q5etPrg7-wuxM#;K*Q zPCwh;acM@e$5dn&SWeK^taCZo{?%Wx5wToJQ_Xmsn|AUkBneT@d^S|AAs3LK z7v}$ti{GT4wg%btN(x@_Q4^>e^(D&8r534}Q^aK-{&f;!e2BNUm&<535jXzxfIa`C zEGz(E6Gxatu8YXY#Pgm3DB1EC1#F==`>})WRn|sQJ+Bms81&21og<-9FuPS!No{5N z1uka0s(Ga;4+;px0MDozIH7xjlK)BHNgR-G%-6Stj(;BL~}DhyEV zAL^0q?FXJeGTkiAq!wKbrH>6e$K#-u9WeKiAAr*118c=yCo^galU3u`e3{CEZMnQ( zp2P}IDqy-Tdr)c^OtUSA#rG|9R&yG^SdO41b!FMJd0-{cR_s^(?nDRzvyu6k9x z2pO#ULJWa9jrIFMluWFpue&OXi6#~!XzGME0@-Rq0!FhXy@+d(1v)l>oQw(1+T=}8qq$j%8#jN?+tEtWe(VS z4Mqx;;`EgAjB|TWMC^OWIj?*^u0ay6I^I?MdiiYJ`>KiPPKwTc$W|^VBLf1SKn3Nj ziM4w;@*A>be|gY6jw=o;B^l40#VlK8vOBvVzv%iH!i9KU<7(77kdqzxo1hCbmdS2V zGtZv=;2(P0gU!7jRHz>K68H!0?l^@@9epd`f?f?m{YU&(gfrLw0J7Srqw(jKjT$ckq~8WC^m-4G6y8mH;I zz6BS+z80QfV7IWybXx1*g+fA6`s>-NvNPBKUfd}~otH|@sLFpnh60A@4xt(H(dpH0 zK){aWl>}WMWns2|nri!ds)LhbXhjO2*_OUGA3{f&aWBR<;UmPg!o*I&6)9ge{JQ3q zL8;gXGK4SFS616K?n>?Q6?cs-qul0jf9Gr*ZI0KL#WvV|GhCg=J|4Z|hsDmneX$=P z&52l$M9uHMzRc_tZCcbpq1=LCo-!J5HQKjs_(jU)rcd>|k5bYPM0uANPsOD3q+V=v zS|(6AkLkz`eNk%sJAYgb`gGLtom2pAx;!m+y(sr)E}njRO?evF{EYDDnH_!}cW4QB z0#2~a1!xwm;{o-PhJL@DVc@%9Go93Q^kt_8B;|P9z<^0f=(X9^s2Q(M;Jj$f4-JnN zOnjawyAb(bz{6nzt(u<(?5X=+n84F|Wf~3n@8HWJTd^RPVmmHL^+(}OFGvI~w`Z>* zot)UMX=sAOH1qXdcytRTD(T~m-s5Tg9tpvRSYaG0&RAa@82C53!xIs)RGm7SsqkLc zv)E{dDsKLvkx1}BNt$oB*6=eM;w=U7(64WJs*@KMM!Dy4bIUD?YbJbjbz4%|67T5~ zYO;K#P=6$>WmrW@9LN#vJ&^O;lyJ!^+nZfL1{M!6%*^~*!>uXyu#e#2u2;+ zeucV<1L5dJ#Yt5?75}#AT(JGT5iH_gIL^*&8|**7ZJMVt`Kt0RJ2N9fZ+TzFqkNU& zA}w?E^ZNO%G`E6JzrD+~j8H3<1O9D2kA|aZ;3A?ie-TMgCN2lPU^K7YG})~qGe!=C z%Z~VM=wxmbdM`#Hrgz+@DKn96(Rw|ME?ulwIlNNq%-8eG-a`%8MCeO!;qU?2qgaN3 zlxkqyy94ZrH_^7+JKSbxk7e_IoOpfw+#0IoyFfYJDSJ}xkJ-zDhPG?aQ#7&KR^mFn zrh`w@hZ(00KcY=KM2}k7na{d*Oi%0d`jO}3%`<-I!oi|b>Etack%R%w6 z$FAsQ%{D9Q((^b{9Pv>a(PJfrUND^!-#6GHwQcTpI5L)sI7^4CMnbF&MZET>*m!HI zF{4rT>piR2A}2d z-lO90z&#rm8djt~`KrF%v0G(&44ER=t(;Jbo`Qh7v<6>vs!ej2Jkfl&9O~y#dX+EM z_>En)WwZMo8n*H?50cf|94|6px6ieFHgB-SFSZ2;gjZy{Uj06Gr2cy$gsr#{c}vYl zU--AtyuoX{8sJ*Pe>!hmydBSL;WYo-(f_Rnh(dA)p4PgV-{cbs5ndTUqr~rE;PvNi z#@p(XaURZH9HMmba=O>T<e7kBWZR_%Xoat&L`!5U}&JA!mcGxB1SCYtgBCL`;d z*9q&y;|+0%<>cK|qqdJ+jPB$!Nd*1uc@r{_iCzY9u2@-%1D+P0%x?B-sPKb3b zkedEh|HrLl_-cW=Ir%#bxAX&hDz-212XP1D!y2)!wE_3GG$~Z6hUjFT**i+26skQ5 zRJgs_1$>$xWRv=X5MBf9shDr$gIGsF?FW^=Ii=@s$h_ZXT-@Mcc-tq)_&^c{{O4xy zXD?<>E50>pUE!6e%z@FAml=2NZq(T?w@wetW|H-`U99{q$_9Ir!!C0V;6azUVc570 zag2QI7`e-Dl-9MviXnOfxw9`vN!l$HM8QstD1JW?Q>^acy9W9aTaydtO9uto@(PQ! z{mVtKR{P1wy7J=mL}CX_xcy5cuZi7)xQ)ZFaX#2PF81coSdXZ$+!|@iRm^7wVNI4D z?vZ$A5x(0}OhVDD59L&(-L4im zh$eS4s_Lqdxgo{j0&B%OEfv>Yx`&;(bGFh{F_oPM?Fpfm-2yt1co%SZN+;6^ZBje(is{mZLzpk;h&$-- zKkHsdFWA2&&?jHER9)%^;W+i9`n+axS~qS24cPgy>W(_#M^!NKdJMFe;s^^h0Ed8G zkU>3i+y(VN%9VO8={twbyrwC!oN(;Pa0>SIpBWwHEAnKMOr!zGU-f7<({%F{qPe&L zu~GYV<&*pHtv>1Xy!i8T7LR(wbRB~^@}e1a5sekg>xn?jj1hf(I-BiQ{E~eWX#(6m zeG{;WaK2=mR239cKiAm>mM=c1V4WD=!9uH>rtrUN0$RO)WHiyaLMwxH8cln*?#gmE zwXYpHLYKM7#A}Yg>#{3}df86p{7!wBO6pPQS9%DXihcIA3Y`#~J}#W^YpUR-vj}KZ zsy@-oTH1f4?M&iNQ8dQj2yf|fNHv|g}L1zFg-iorQ;g|wfng7?9k?X+sIbSGm4x7@-j z{-HuN=?P2{dazTYsL1(EzqQ&hhKsSs2(|(DjM}8;Zi8h#U(Ujh{eW`wesRgCo{o~Q}HZznQqI5N7^YRHE?j(joZ!#`HqJy0G z{oe@j3247pSy$c~d*>svpq3}H_#K|@+@^#0H_+jaJB_=3j=N$oY;)3PB1Tdp(J~+4 zdUE8AgX@2_X?D8$+k(o31*)do{>1bkuBnV8(){w|N55Z5?o2yyc0T91Y5Iaj7@sS@ z3q_i_N<{i6(h_G+1_5D{ULc3A9TRA(A2!dSG(>N7GD2D5Q4p)znS%#cTBsu}#&PLA zG#W=5y~jZ|^QhJ9Sv*drv!Al(ex%uy$9{Lf^=bg$$if`M;QQ()o|}(1>mQDhptOQ` z;%((FCKlW)kA?c?%~A<%B22?L42TvK zA&o&goSQ0)!ns-ZILFj?p5SXOC^c~gP_4IQ{C z?aF!OEY9X8bd^8*Ipwv(gkn29=p!brj&juK=NE*G}S3|1H zSMw>QO^ zdEpoxPC{y#?PPLu=+J1CGDhVc<2wfZfttg2$Ey2WHT2lrilui>s*Cq9A+pkX6 zO65FOg=w-81exp(FR0bq?sr>!F2)}IIeRrd%RBP=X*kHG!lAO@xwEKq7B0QS+DJoq zl?#l>C*AXSO21=7(pa2(bpi;cDgHO=Jg`kh-$xBo5 zK(Vt!+>}8WW@Kq=q#Y(Wpw|JLuq3lJIgc)l(x->(Qa3elN!bx9kG$;@Z#wyJ#5%f$ zE{W&Xxgv`TWRJgH`MXl-@O{!j%g{|dvL!jtPhm7secDph& zBb3^aq-*_h!Xmpf$AQXxup7auzowlO$a(nY)Le=n2up~s1Jgf`%nC1<#evd%kRF?e z$71o3=q5SOq<=zpixH0n1b0INL$EfB@7gvN1&ZJNEH>n13 z1Q(AJCp)l_n zXV=mT8bdjK-WGHwLf}af(6rA5`wBg+HT|*D75A!}=WZ<-r%p62r_E5C=FFB#QHH+3 zg@LYrKBB)fES)u-i@vjx*9;7eY0P9NV4a_wSB9bHay{*Ufx8rDHQMWYPQIn`V}gm3 z-p$A*mdcOY#P7VEcNP`tYu$3-P#EvLVy_@^q0I;Tgl%hZu28XI-6YCph5#`=pLCRs zSDQs^W3TA1Zu{MByp)^WMOj?!9vAyxHzQFW#Cwza&PIKBU_a(M62T(eQj8x>={)1X4?S{c8LNm9 zdq*4Y9F*MD_vltcrR~18*zEznt`aW}#8k2=@xSo_mn0-~>clr#v;E6(wM< zJh&Za!UuaVwzTMU&YUF|JvUaJ2f8!IP~~6nd81RdyRd6IpuP~bNIxjP>7`X_YyqQN zWzmVSu9l=9#Oh+wX2nurnupMlqRlep4!7K96usGG1jG_5$_$yHUVR(K*AZ4{pnE}^ z%l%4){-k{}-&N3kEqM zzSc5g7jx2lLjFSh{{vMOaiG~oVQXA4rM6pMR60AKI57mDFY&=&ReNz`Ud+@m%XFU< z6Y>7|GUN+PTm!$rd(THGSTr(7TZ{<02+Rjj!PE^|v+k|eXGFYoLekUtVQ*eJq|b%S zqDKU#?rWs7cpd2%1I{!I^WV zBJJtSlfQsr(mg9Bq$qKx8PN&@Xf`j79clI~%g7Js8PH*}XqTgx!9nz_7ULn{9$YV@P4 z>qvMBvGw+^-u2o64C^-gZ=2VT$5$l(7@8pW0(tD2XI!FolcTi)2o{``Q&<7XHiOjn zT-&UvsRFv?k{0mM?7DPwm(CCG^<~M~)uIolVv|VOHRTf>Wf=%;Y3WL zG?o930;wV5x&c%ir6f3pw3L+-DY}WAeZHQlSdkk*jacBbX*4TYe4fQ1CV?eM&PAsB zQsde3jmu<<(!OVZOs3TwS)7WZ49s=zBygf8Sh#)?r_5ntd^9I&(YGQb6G+CLcmwnR zIjKmC@-m>jzCS3)IQ3wRsZEgRyQhcy)_!M0+aaBUH1S$Y{2N_R7@J)5Z3Mip z;%J!_dL`{uU20rKZnsAAFdLNd#Jx6YH{}= z)9`F~k+8iSy!c<=uYZr!*czKiGQtp3E8u+iLX5nR!aR#3ur>5j^07m|RO&pSb!!B4 zHRK**^O3YKu`2g-d#S!H>S zBCVxw9u81pMmfvJus1!6KfGJp=BAn7?=y3l;k>cA-$&qeT0h&EGrr-CFSsEd`+>4- zB5d~#&nE1A(sYZxRHn1*(m}_61X5jTx}zc$%Q?LmWGi(r5)0s9P}U8!X*Y3RuS10n zav2e^1tlWqRi8eQj=4t`qzSQho?n&4V1T483V+_zuA`YE zuKcF6$$MyR_|3=cZ7MAQOz`)>qot4YMv=>?QKu^}#+A)sd+}kJ6?NzV=sOLM`U;>7 zG0ogVOOe?sh;rgm^sI%8v`Ck<2*@9#e=mQ;;fd>L1vao_m0oZuLVe1h50}Nbs0N*8 z6M>37daPhl-+WA}Z^%`He(y2;{RZ2BqP<({!zVX-sxsa+fse+T3(t5n!X) z>Xx1SqvqnCc5{Nx%yqV`hgfvJN9Sb0Cp?u->i9M9F zI5Q9{1s~&qc!RF@&&+FcA1W57pU0S{-zEQ}C`En_`DX?Hms!JB7j zD~}yg3p(Q+QcF8Mv00BQ@Iy6Wh{xQx%_(7a5=p?cYo_m?pXh|9b-~5Fgn3Tc+2Zbw z`4}xvzzW%#9IgLEeVcE~=vMljw_I#@KYnLl&FiNea&Zj3>(V!TV@Iu$I;B?MLs*Kd zY0b@wy$0Xf);UlH_cK0UA++}}!s?tw^F>3#Iz`JKr&TxeA0=d2*>uz!`asw@1gE3N z-YJ5H5bj7ursU-j{Q3(r<2=b0mOLyQp@DZO4&rgZiV|zeS4>0Ymf?nHZ$e5|z(-%7 zwmRsd8gU?5#ozAIlBniH7vLCoQ3*%|O;^gry+o?u?3B6SuwSN5kr!4^?SaKBpj9Dk zrRc19Z!h*ifrw_{)06JPJ;`Gz!eqF0ABH`dvYW4fidQ}ppBgeKFO;bCaU(5O73LGC zzzajtCzGUTPoBJ)igHHkLb9h$L;dXkL2X?tmAW@lWoC7weIAX&7Nx?{M?ckqK3xrl z?W+P2_!E{;H_d8ic%{4kNT1tb4l$e^Kd~MhZt=DrY0s0a+Vo4pb6F0IXKwsYnf%b$ z3%~f`iho3Bv|8myKgT2`=^;wR$#{wF|GvkUz$m_itVb^51+~fAhdi`RKf6!Jcl}sZ zodJs&ZJ0fwx65e=G(1c7syLS3VvEd1x389wFIINN+1aCO1SHf}Hn zk0vsiN<;AAMCY+D^;dm{tMH6C3cszZ>)(F8sl&duV^MO!GJPt6`~E0z`j%U9L1)2Q zPB?v+=r}uq#ry42YFiBG#?hyz1?F^_PtyRo{L!@f9=Qu4*T;!Rl#_uhdL`409E9`Q zvRI9l-!+R#)A94kE<;-VXlTGjEsl|nb;mgCYJPSfuW_HVV^S#QWDOLl2JCf~${);tNBpXY-)G~ao% z-|IWPlB(r;m!ZKhAdFXsGVfq0zr#(ppL~OH{rUV_01fexJTW18z|q@F+Hc?-J*F=x z8y_&_o+S7y>k&*N)_x$+W1B|ZX_L3ZNQK2|Gqxj`4{FTAY=UY2NpK!PjEIy;_N)_z zQMeclq4TjmNsAa7hF>RXuh^^4VWH@_Oaw{caU}gQ&OIhyU(JNzi^z~}#<;ApLeaKG zbjUz*&vG(3^BFB7QAE{W<2@H$9kDl~%* zw3@`@yC-AP7wJ?HEg>!0c|mRgD=J>f(-<-GN1q?{hF}S=#5@(F_*(N-`zz%rwgT1m zBlSot2^SKCSj8R#2gdr;rdY33ub}IQ>!d94iYzzztk-aTN_`l8DiUPt7&)=fq(b4E z%uBh|f|+rSah7q79rGQY9Xu8m7DpD@nwKmwvsN`M7M>GB1w2YuVq>{8W9-#R$q}_* zYSUc&T~bbiW%4w~Znoe2g1a>EV7bA%fxQXf6kHHbE25VJ<>+MU{4WgCdep`eSYlrD$v(hho+H?X-29=^7zN=9#UQZ7!l2p%Hl* zAsrzYLGi;fQWp2@%U05Picv~2Gl$Knb>G_)7VM-_W@{$zp>gBNr1}AtffpuaNipjA zNds0@>M1j(j(ErL#|Fnd8)tO+FKEM`g~z`be9@ecn~+VHr#Y#%SdpbxQCwN9qM26X zVQX!eX2i49u-MQqvJ`BoXryT92u`rsHRbB9?K@2-7>P1YG^|@ZsN}JLn1GCR^?iF` zo$XxFIEr1(h(um)a7b|%TTDxfCX>xo3|IU(%8X4{3{7eK(b=?cI0BgiU#Hw9bLfW1Xw!Td2#gp`*p^ z1(rUOIJ@yl`DpI}Z#Ui)Z%(hI7W0-AFRtr>Yd0TdpXh74>&Lfq*Px31>6tz4y+qg{ z*wGJyun-QNRNPcdKQ%ouJ##(HPcCxrhZ`~w+BVvf+F06}No+{Q-pd4HyzdZ93|d@! z<#;h~VPpG6bULCu!A`?X>%8Gm6#W!^H1x;F)>ioljmT1X^+znxNm0MoHsc@juSQr$ zVzZ(<(G0T;sSVP9M1`gida_2Lvys@C&NrTaIHx#r#k9gSLK+Nv6;=>75eA8ci%p<% zj=<$L`SB&ZH@G)zEf`Bd!l17$NSUflk74NTrlszxrR z7sm0XC!y?F&RME6nKO7*OPfOLR^V;0bl*a(=#XST7wzPW%}`CsWT{l93hfo*H!)69 z(Bx_hg)(NX20Ef%qQoV+j7NNHn#Q%2x<;tT-pDjh`J`l0z4Sg#Vjaaz7Mv>L$at$@ zY5kgG_Il;3aqLvJ?U>7#+Lm77PRaDn+vJ!wT>aR@c?cz`*$~B9W+-(jJS{vCr!_5w zxz0ZQsA=Yy@D2kiDIMk!R=u|21-Zb(`H3uqJo_R_>zm7Ror1u25YuKQw2~qGJe>ZT zb7hL9^^{>qZN9eCyEizeGiN1-E#ZQ0u0qSweFWM~BT|;H*{h}A0NpP{DjG^`Ot96G z)~3^3sGu~E?$GG3k(}~TPpmoc5a#bnm&oo5iib=gPwLM6Y|V7ZKKfA^31SUnU6{qM ztS{|rDD**f%w{)uV-Xwt7Qd{hBk#LMSG99n2ZXgZ1%0_ZH zmr&&9>^q%rJDU1~Q#t#2=bVN%=SPlpHc@r;wDViHd@4#ON=}9$HmyV!jY+GaORwoC?QwZwd>l$n}7k!-b4u>`yt03qH z@rzSUy0_oA1SW`FeD}8PAnd1a5A}DmzlpjM9TT;>eZE_h+-%DGmA4L-0x7%JI}z-o z9JE|}?Hv!{e8vHJO5BcLRzY+2`vZJ0?j~lra_f%ce<|PX3fn$gwDR4(tgUBgfV4F> zxq_AwecqmzuafPq&d7>`(!JBKgMJwgsy3EIF15EV?1Fb8iHBdgyYgV3&?Lvee&5}P z8IFb3`+kh;TnxR=dmRcLDCGair@xLXFFy~PAG8Ev2kpoHIK0=|P0P!tpw2YxFWIv5+< zIGWiy1ut5%11FH|#MB*OU|vw%e_+KG$PZy);1U*-K_2I z`+?zh;{*<^jh*y~-K?!_968;1NdLHk6F9y<%|J^0$0bgdJfv#Ua>RnR4#vc+^l$0k zlJY(!CMM=~Ff!p(5EA*bIq(+`shN|L9VY{WtE(%$>pOZ|2U7+{4h{~6w@eI7Omx5% zbdK&ePWoR8S z8^=Fi3wS|>`)?Q+>EAN^u9=g$$pg*qzxhYAKi=yfx8uI=j8oas*g??N+S=I0iTB?l z&i%)o{>zvDe$Ib1lrwiTwo(%^2UHSM^Di}N3S~=ejqOy&-6E71t!|zW2XDhXTH{)ewW@cdgv)NzI|7RQZ2ipAg{C~EQ zbub6UQUCt&c>j5izn=T^dTxe$1Ne(U{KMM*I188??^AAuf0-`t)9@d#<}fh)FycZ2 zN^Y=wX$ar2CNA!De~uy%69{?4Qc9!43Us};pf%e|eksk|b^dOI`wivA`Uts5Y`(9j zRcmMdOKcYZ>70)e@`a;c#pFF8>#a+UJiGJFnvjKs#>TT_Uhv*fD(j|~iHpf;Dx@i| z?@eB+!}NPr&r>UJeY6iS@We2%i2N{c|Jy@{sPBy3_=d`kr7B8@|LfNOx+y;vTqr1; zpXC4EMGp_0aG}D@N&l=T`zhY2ZRoiE5iY&t_|_=d8wZrS1G4 zd|$b3r0N~sP7AhOGi3|baycsBoK095L~?0j<_$YHh{{~EO+ktJTZ(Nf^1$DAlCK6Q zT%u7^xie8TcX_f)Q%ku=04I+2iM>^&M8hV=%=ctxqSp8BmfYbp{Db4guaBOu-C9wz zscFi~FqO2m@*6CGS8Bf^c(PW84efgl4~aT3d>ponz037mK}xVOhG{s{G?_#xo>~p?>v><$#AA%y{@DMqTfq+ z@((uS`SKBJ{v;2Y5EiAM%0kG`qx!d~bR~uSa569im(~xMUA=ThzJ!?s!!x)GsSKZ+ z%UbiXTrV3q=aAnH_r2wQ!tk3NuwNgH{k$l4tMgrqE3Xd{XY>SX`%6K-X z@ixZ^?)|^)?Z5Qp5X?W3T7ZP@$B&CNUaVdf!O{EV!BHaSLsBZ3`TkKw`u%w-C?r~A zlNh#H=%7@K{&cTXj@cTFV|2XT1PYU!9g7QT9;l=RaeEta(2AKTU_$kjB|F@v= zugBv@LFd0t6+{Rq{69d?pS@Hd5&J|92EY8Rtv)o+f4v=X2qLl1P-cLD^1q(zznI7W z$63E=_)2=8mYu>PDdgW9!T&Urf82x^8&0@@Tt;-ZRJ$=Z`(@wX!m`p!zp5e5{vp0Q zuev)N9k;e0Q3RU$&idUC%?AHEiCm5ZHrL6xqIG8|`ed#&-qc|{jq0qXZL_g$%SA2$ zuNQmKTk5PbX2TUz$ihV!Rl3+ygTn1t>Nuf?I=vq$KW5CW#pXtB$3d25g__$LQ_zh6 zW8`-IplXE@4VK-J?2v+m63x0=01g{BtmkS60VG_Xjc#eWIx2eWIMgW~*aV8CT0tzlKpHpB>zravDXzrO+p7@PPecF~Pcf zp*#iQ&}kSEdH;&BbXaQfPCHl6GRwJGfcPY0qYh(Fs3yA{RdKT;1P#j~*F$%6G9AyYG)o{~CLu$=wl;-7e!;=qQixra*}s_HSoJ2%b3~&3vStbZl+R zWuj2odaWmBNKvYMai^8&ok;}pD;5hSH*Wrwt$v2qc}m%ItJUu4I>8W>$5j-~iv@~Q zmNS((DOs3Dj$T&K?1^UroFz;1yBq0wct=;5h7mltK zjbWOlVJFoi$-gm!TvUnCrSR8sa+2*COH{N-C>S}&iYE}Z>fJezW&n=MhB`m;q( zYhZ+IG+Owsmr;X8jb>s0W)Z8C6QhEoc`x&=7n^42G#Hr6z14(87~@Eo$X!s>)uuhjT8hY_M~?HaBaQPPTVQ;y(#iOoiU|w@PhVIo$}os z^PPTwgsKJ*juOM}s9LA(Q4I6xzg^Shq;FmJ)W#G-DH->H)u*XQ12 z$sS^9a-aEASgp0bixPQbou1=MkS^nE?z4=IyQguvM!oSV1q}IQcMAN9)yfR$rxKO#`mLJKzzHFbhg$dxy7@4Q$2Wz_ zMOnEe%0&qT?rSmhX=RomUhiW2)gMEOJ%G#1+6aHfeYuqlT%b~#N+Fpr-4{?41T#l#-4UPF^y017d5RfS>3lTh%CgPa2ZhGOzJL9ScFZG#2{yk`J=(`fcM zk@DUV78X9e*aUU&?V=tC-E0HE;&QX?5K(D0Q>o|VrfrB&*%gk{Xd6jYZM(EsYrAB# z(>V1kw)e}ilror4wCrdaXCsx+C~GeFW-n7rx&f#-{@% zN@+{lV|!lfVy6p29VGyKr$!PX&&6|Y?`|NztCV-!vc47z4bC(%B7`}4(kUjgycb4c zcCGf;N8NMrsyf?j9ZNgYH^-nmE6d4Zq!4rA^gQ3&W6<0{(mU;tl1Z}t?L1KJ8^v6q zCyo2CkDg4QwVX98*ee|LH`a1`GXD0#{xKmv&-@ykcV|D52x=|wbT8C9nwq%8tt+hm z%$CmI^0=Mhy@Ot&ld4e z!nHV#2i{3b4%0Vmk9XXgds~tf*fI zcAnDCQ#OT;mk7IndCuZ6SU>>gxBv^f{`_Y*0PuU0nzqiQyL#Uy%UW+e*j&DzE;)@! zFPlZ0>-~PYqakAChqjE8IwQXL+-vB^d0YBz<>Qz4>u&qayQPiACWFaC0Uci$4fg-$ue9t?G_Rd=GyxE&|N7UNO^*iP_Xv&%lka6gp zbP9o})b`~Kg-ld!t7U2Zk3o@w2!`fgpN~1|WcxQkzAY(PzW|`L{AT?Mp&rt5rL|Dn za%sUv$*A8BUnlGCgECv!azZ!OVw{Yv*lwNHN|omHIfX!R#RMrW+kGqH7#|75Qkz+U z8diI@H-kx=?)+OL_mhyx$hwpWAMLs+EGlJk_X@4fVDs10Vp`t8@>&U_@}I#dEz)x4 zl*lg@CddHvwF4nGhB5DEs$=S*x=ylf<9@9jbiF@ut}_gC-w%P%E}bIXeIp4Y9nGt| zfD_hre-?YFPOlAas<&Wh$g-??@)nxd8n}A>v2*0^0_;2BDn+f8j_CsoHCNfo9p<~% zyDL7>ytn7_F@w($@?3?XD7#Er!p^Vey~_Ui+wqZbfxobx|2X9LK^ILqwF*BB`HCtIv%VN1IoF0$r7QmC4NAE#yw4%4AStPj(em zl)zcZZD}@&IjjjVt&J30dXk~L^VR76c}H-Kt0=uSx`EZUAo!-Oygw~WJ?Zb@c3TSO>f$50M0A`N`4(6tg))RHeK56w>Zs=y6;95zVFsTnkF9KD<2JbdWNn)CY?D{+W9%whX*aG zTeNuoirH?FbeWt%Krj_E84t~0`MiK;B*_u-p>?mKQVS+waT@&3eD(zq6LF1)vgrhZm*W^ z5?)g!MH)tN{Gjk$jbt;R1hHBtrwBWK{{Wlo{Ch4-e1>?g-qEK}1znRi@x3=hC4i-1 zkp48HPGK-7cOYc5N!3)^G>qn%1U#Ms)yI~*+bc;a)v0?uRSbYeBgBZWDKE$q(#)ox zKo-TGrIZXHd;C-6CtK(6gAj&<%}~AB;OBTx*wi16X#k=M?UUJwDc@C+V@u}BcpD_B z*!*?N`|wWzpD3l1zviGErAEd%BUD_DqY`jp)rbvNzD6&<+_Y`jrc4x(5jPo1HOF|2 zkoHxGj#wlEhfy?qQYtR281U}6e5MvtrD^%EY8}=ksC;Cm7-hc+V*K9Q0P%>AJ2cMe zp#ItVL|aikKnLZn0}H$Mbbqe#&9;uuh4IugzMQ$X0EGT=TK7{iBS2?J#*yoL0c%Pt z*=nCbKS=Ch>6?LpA(wZ%Th^*$N0<1PUHkpC+B+f>yjcJ%@YuLk#i`Pa(m0(f0jz6W zPjwusxc9X`B5-3J;!hz<5U80-FTgP3dO%Wl&7jCp(+G;i)1#!zQ|B{7@}ybR_4ogQ zr2haLEPB6>TQqbSL)6NJSo9OG={#>QHq&4<4w{ruPEZ~rY-xm zbH&B&+tWFTQ8Ue+b-kJ$y0=iAxhhlHZTP_7kJ_JS`^5Cx{2x!|$%2?R=#!+4*FSpy z8WGJERsmp{>!=fRAHafIbTX0Y&lHkYL#Z5ZlqbNywz@jn2JStqe~NgC=n!0zQZ6&O z#bQ%EjWK|^=C3139|%W$B7l>*P94(LcAik4tg)Q3i@BGQZam*G7`&F-gHAg!W#MC~ zYJ9eH5*y5){F7`BaI;uWI@x1jcxtx#G;3M|k`I;oWFbS~QS7F%wCU#YP%=yZlV>k~ zat5$S>*PwORZ*qd`Ohs~L0UoE3-Y`V2@+t=g-Gls)lFvrstz&Gaa(?j$K_%br*whC z4CwyYs!t-3ui}fK)PlzASpYZeztJ8$wlJ8&6b?4I76 zsUkB7XN%@KV6TH7brXq3Qlb4;zQVwTAu0*!nky^s0H7JRlYn!CLE8W1`75ltmZhu3 zGp(jG=ub>=8rM`w)GL-gg!uCo0F*F7L4!plf(>_FBotv|MJ4V+3sG&cL$C%mqT%01;cM^*szAibF)T z$){hsyFCjK*f`eq+^?Z%zxjc!sD-%97aDNl3Jma{SHlItxtxwE=M*Yay7ilf>nG)UK#aj~rd+i||R zEbIofhH4fkkWQ#VW@s7?68`wb`+Zmd1E5w~w_Db^yP|m_2zeTW<|A<5S*`wv96CO} zXSJ3l*7W3B^)K@8<T17jcvo|`&+Ag0Fa8DXU8^+=9n(G3DFm+3N}lcId#d6zlsTqYUrBcVEY z%z|v@*W;)57}9rZRDAa7JT@&CCPetRlhtm%mt&yzxpi%K0JOA4ts#re`~lcw=u(Fb#hRh$ z*#JK73a~i?>)Gls&UCaQu>Dh!ltr!s=mBuWVJ@UpY1$U ze*d%%(H~MbSS`l$rLg;dMd*%P3TFq!7eMWql#$)p&UKM8)+342P67BxNf3)wHJ$;Y zrOKq#Dwh~xpXcQ^cYsJ|F~Fo%vPGV6PUry`ecDR}ng#@;l`PLmTo;Bnz?K$%MB8#gc&NVN!3}^;97`!_oCx4r~H^MpPr;^Q?Sd4ScUw=lN%hq*tf= zmcYkx6?v!ZjMA@6DoP1hgPQ>zO8{g$62>Yo{ruUNDHx&!YBg~l|I!A~0O@X7@4d4n z-&Q;}L>%ZuUy^D1_9XeU1O!W@ko8FQZjFnz3(m!i5kOdJ`!<_IU?E37G8DJ+&7&^;jBEOZqwlb%Ci zR|>?WEL(pBEP6tC8m|r-t$}B2$;Vh)A+Yqy5^9HA&>P6)N2ML~|8H7j?TsH0u2L`4 zX{MDY(l$CC56R&zSM%nN+3v5@M)%I4)2J?|1^`()AF^M*`<7O+OL5R~LRqz*c7z-6 ztHz6MlAlOkm)m(h@wUHJp?`#09?NC`#9H0b5FnAoqS1slr-FkGYOOxrb+$+!Sq@3{ zA=ekjY2~bz@qIs|nnJejqoBC+$ikaUus`q}F1F;@e$zKK7i{x4U2+Jla-mZ1D`X+C zy5L~c@6G$qv+I<^w!MxU1NM^j$k{Nz>GGe~k;}29v~N00#_#*yT`<%h+?AHDF4AT>ezXmII356TQbD3D^(;`Lbz{%`aD z*9Xb?fEYo<*YZI_Q1O9rlyieGe4!I-hW-E+KhW$iLnRjqBm!|()PU^$v$4`O*SVgF4JnQe3_5a*U1`HAwwqA;v0tNXn zfYcJx7Rk>ZdL2OMf_yH`jm@d|1Nnn60YGX;g~k5O3lc{o?M+v7Otb(V1=m~{pl8p( zU|a#o%>QvrAG&~_6G&Gpjv7+fQ?b1Q0M7*i}&R=aFy4U~Q4FwhP zU==2xssjo$(f`$Y(0c6Q0NAT2y!`$@FS)<0zW;i-2BhVD=to6`HGq1I5}?dLrAUQN zFjPB6l$7nXHz}aOltv&uL0;u#Zr-)!}1!i^UwbOxo zLewvO@3!+sGBKV$WYhc^pV40z_MBRj3uUnifwA4O94wbOamWLw>MQg+g1^9-b+MU` zb{49XBx^p;VC4|}9&YN)D=w8PCIv#qRwYm^R?}~E>B6B|f3N*c8{v82$AA||ZNPZj z3JdoxR5HKSs553LQYi7rElSc|4-xt)?2McatX$Moi$Y_$b}aTGVq8x*zITC>xyEA~B;9mGjgKkhc^c$shI{a`i~$dF1_Q zWbR%nrfg6A#NaSkcCUd*Uh*51Wk+VFKw*qw7RtqXtfUswItpm~v}*cGfZoX!@T^E) z(}KhALvEbTJJY$+DL@j9$qeRRYJXBP%eAMVu{-RJMcSx;JkPxo@UqmGpIIZ1&*EPqJtS_`U*VHPAqqsY?ffd?zhML+vrcAS%UWr*WF3n>B-EH|uDe#BghI)3lXZ zo*`%AH0Pe(%9Z=qoQjmmg4)j#o~24=ZM~Plh?Z{p_TJ>P)Z9vCm?J%pZA4zBuqrgUkMoMzh^=dwxml z%10Wl^H^D4TozvW+x#TNVmmldLiexEd($HtH5SH8=Rep6WR;tNl90J_{Q&FvZzBox z+7?BsWu=D=CY5kN`nwK=fKv^SMe_=PmaA(7LJl)Pm{a?T?`rSeTy07DW9(GaE>rch zPoHviAw!eRig=cz`F;~6+GE0d^UYH##kWk=#Z~GgeuMrLAX8}dfZ2?yj(ZM`ZmTs9 z!>(rQm09ktzYpGJq|@%?V9wQ4>n%3jn|~L<5!1knMB-a*f_T}R%4mkTx^&#E3nOv) zSnz*5{Tr@k1p1=@6VQ&Ob4NfD)C!Qo_B12}Ntk@y(#n1@Giba;?ii|;y0U=ae_WfO zZ5sZesRt;k`w_)^X%_pv#bTn+X6ot;QU|C*c63#6I*)WXycUK4gGTl1+;TF_6B9l_ zMVcUzW3ZiVFESoPVXjA~B#9xe;leI(-N)8k%OX^q!w4t>Cq^4xZK+^x4?9rzftd(P z;I{1;=d~YprH$RH0)~^-s0WP-?LIPu9Q9~Z@Mwh3UQd=PE9NIhvN$}QKy^Y)$CK$` zY0dqMsod!`)D2O|^f7&m)7|-mL)~uO_Dx_u$t}|EV=#$BqB}t_#fL~+O`ou5om-nk zWf)+3oEZMW2r>*1nXQ#t0}p4W-WzPmz9_4fg`PiVS$fg(u$)*UgEePoXuXEoP1Lji z@DMl@k#=66)np!QiD%g5>D2<{Dh(b|Mq!O$_SFas{Dcq_l%p(Gq~;T; zOebh4-4l%_Vyz{KSV($?vsRY?SiIoNmo0AUxZ_N7vAyenei2UjD)yd^V@pg^_M?Hz zNKNaG4TI<<48A&!%A^xi_aNR{RntxE%LYksHL?tmLEXZYl#X-_ug5Pl*ZCV{7|to@ zs9o2xRhn3S4Fbq$xkw(-Im>uzSbTR3Yy6c)kpbs@WgV% z@Z=tZEDm<(#x-h@`$QfB(*6DvG}Z&>1&p9wgLNwWzai}kRB~lHJdHqQUKS^P!m3dh zP`U(^Jt+kBFFVSYdU(?-&oMt9FHr0j0V)JKIm()#63G%dU$n@G{y9A8I@VA0m?+Y9#j=5K!f@4tAP%)r69i0lB9dov=1ZVgX-7TZq z!GU1DMw2)im(dW%vhyWKQWG_=M>3 zF=ZwjE~TyXVQ|Ev^#g)(T#z9k*%37(($)Lu*Uj0I?bTUgs`q_W+)y9seB7b>qkSOj zS6O4Jcqa0-tsn5Z@%|+OHvpK<0GSxct_v83%LV{Oz0j6$$%pe~iFOwn-OyZSDvfOp zy)U5almd?GQgBqyRb)ZD3+{dgK#Wfu=BxMCpg%y3yXahi3YsCo6(Cz^gMfk`n!*Yq zT{pO`9+PogyyHFp8Q@jO=^VuW0}+2ntrzRref<@`JR!)q0m0(vJ~&GiI$nEbv$smx zdXh@+mmT;Sqh~w)97w?>U?_-e^v7G+u>A_Q?j8wvJuxH9l8FR%_@a>s=tYcq@(9+)D&v_ zT&zz5x;KzT^;OOd5bjrhf3?lc=UMg*NwW7CUSRncP%2i}=SOeq@_~6B($uYvfCjz+ zn*sP(36w-}Yhd6^R-2DKJ%Limmk-FwLRg<3b|8Z$s)0Osd)VZded%rpRpL$?8%lMV z(2D5|qUBWSev^o0^5OdmfQWD`OQ;L42eoHr&5ZyRs8j=rJO@q3Lmx|JboThRl4d-e zTK0muvL>6Gj^vRCSNS0^Grm+F^?6N4?h(|GB0{Wdk*Br4xXEHO7?Vw>%pz5BeJCG? zwd(*?WM;h%^aGxjlQ&!n=d{t^FqmkDJpH34VC+95m@&M>4)&UdHoCZH$FXboMHEsH)J>qR<+Qvspr%EcZ zw@D~X3>ar1mRWon9}b{I6I3%ZDZxu}5GeL(^KJHrxwNE3nzER9U74O1UHw8DPoqj? zsr>T9LUTWPLc3+b^K7n`pmCwnZU(2;VP9mf!BDoH>6pSVJ;zCR*jX4X(ZIGftC$2q zzkN)0Vwh{N6CI}*Y{n2*FaYEtQu@ZNP=fa01;I)>=S})!DvkS#rV^ovC)cbO0riuu zuBIWXaOUm-gskO>-j!>PXI^>dnx(Cs_mD*-X#AC_UzEB#vKp=D2`mSYIyMGk7*%;0 zzIQWvy}bWjR@95}d$4mjT2H?n@18GKr&o#L6v)8xa~$HJ+MBLbGKz!Qeiu)rV5&eq zV!$bsDSw*uP9Ub;RQg@1fM4b87eVFP<311Wc{%Q20YAzwUIybv~%vS<1`H*Sdgxh~+5Z zsM6gG`Yz(A*lpfuo1wRF#&K|>B3+&N^0?)lTpVvUc6ojqPr-r~{*?CDq`iW_1#*pz z0%q>$pUo};F=fi{OMRTU$zg!nVbghu-u|j56%<~jIyW?6$;^}>=slkUiWqmkU4#Yl z=OXsZ9b4BeBowT?!2$g68od8Xjahmcg+@#cwTQerhJWNs#`fxHEgU{iNN&TXsAZAw z47G+p6aMWO+oU<#XU`ox*UBo@m7hkN)2Rx;`|^;P|gkX}$|R z-g-pllp}@zB$Mk1bqcqmypEgyBr;sXWd0b>EHYNi{-n3a*)uwi z8JQcl23zv00c>?0UhCb*x0N0yDmu0rL;$D46uv5df5+P}Chu}tep{LpLkKdg(Kgt` zE}G(Kb4vMyW9IIg;12tX$k#re#_>n0@bWh`V{{ZhEwYRmhKV{l1j2^W9rc{yZhwdU zmvaAo-y4wa%;%FgGr+^oz!G9$bF*Lb;%p3|4K0dV!*EHL2F2PK-PCCd;!?RVLe%_p7S!) z5-6NZ4Z(*Hh_WF(|0a$`491%|tp5e$e3fSvLM#IG_f%=(~jU`e2K&Gdd z)M_(tUjMt}%TEZ~Vq?73Wsh}{Y)MyX4CcZ?&R(TJUXBR~Jj4az-sG9RGa0>T+|U?nfRu7b7dWQ`s@c5>B}TMdo!n0xV( zpVV2f@6E2RjrLi!7_viHM1SJ`EQ{rI2JFJ#*VX8XrQ7}9r)4gg+&DyYRcX%;re?y@ zC_K^`eciXtYL`Tw?WAL^_Ex=UbZX`#GH-6Et{vJ>o{LKgx4vvz7heaPkRqj1xFl@N z+`05s`Yv$&T1k~ULv7~HyDc+g*b+_vMW2OMJ_Sv$kHw+<=4cUm()e|k zb7MD+W@#sOvOZ7P8?51_Yf(C0!89p&)4hW{Sz)%=Vtryq+`=%&AT;5r1B9zxsJB0Vt@dIncW2+W_9-Fg)pK zkI^mZlps5T0;L9Oq!;&P+ou4ssaS9}_Eh_58l(gJ2;yE-Ee6kr6j>Lz7!;9dEu!4$ zc{F(&k;*(`!{8`t25Ly00-!)z+%CWlL%2xiW1{#k+KO@_=F972uyzZumn^u0Nxoan zI0~O*bb{k$nWGfkUI?Mb>z7&v+WU<^{gEXCFC5p}5Qv;~_#}jaSv`Jj=>rws3P$B~ z>D=xPYQNA}1U~v*c+lre4@8ikjVa#O|Kq*^y_dvzc{UV6@rbnc1%s~k%KGQfEe9LI zT7AK&I+INE(xPCS*@EfJ;qR*rk#l=vdEI%ROMZ?zl!)JalK4s*?g~CNm^Kok8nGaT zt%i4)Rpk`^G;*pu`4&u~bJHX`XT;GdF$K`p)J-{+sDicr_2Wz+!dLocZ1Y9zXiNNaRCjCM7F)I= z^=!9OvZdf6U;D%wn-OxXrMch`p^*wgS;6Q`*5#WSR{dFg&6BPtpyt%2i#sjuufC>u zuYj;aE?9FzsNeIHpj;CC>I-uUD;?gS)Z}OmT>FrC>aen!3-tUt@@=5w; zaEDd`NFYU?@2~I^riFDXnA1GIp6tzxJvRRc&Zx1P8NJ^Li37xtxlAm5fk<3I657qTZ5c<3abzZSJ%4i&(?QMNw*v1TmZ#gsb+H_rdL;${q)GP z@|VCym+6n#G*WPn-3i8?ORk)otz2Xrx&x)3GG8)Qoq>(^YCs-$FNE(}zrYKl+O5nO z`jy;vhLf*z3m_ME_83BDpDLPE5H}UvapS03qn7DfBLDe+0SpErVfHD)yN`+K0Wla{ zOg}?q(p>iQt%_D)Mt53PS|JsRnDV({D}G*_E%Rk}C<^83JSZ857(`Ad@9I zJX1gVFrTT;G(g~kjM~n%)XtodKf;pju0QsBwI}oA*F4T(b(z{?PIeC1q5jWw}+KtV`;)*=e!A~Ns z6qNEeVX#n{RfE%Qo?jW;_7%-cxz&A4_cUF-Ya3%W&v|yEQ<$e(o;B~e?I7{AXIZ%W4PlQRr(a?+>G!s%wee(G{W=cP91}Uo zehQ)pz9n~hE}@d&WH8}@P&lXx_7t$-a)s206Ad}*;CO`z5h7QV!@iZuJbz2Bfj6y zaWwN?!@Ps~MU+4J0?{v^-W&|^&C~=@;myf$wU|7KHx-uEvcoa}e!*e5a$}|k;Km4r z0fPN^FXO&dp7K%VH==OFbqX`hZsf9_Pdvqnr zLV==+EBH5+-~EXL_)i(Ze1n<>j_GicV!N{TUM%FsuJzJ;Z=%JxkWttL!u2V5>9`Gd zE@Zen@X_FLlXh>cp;WHQcSGZD&h`<_376Z(#)q_eLrJbqwr=)|)Z{@7`rbpga~40O+QeOLJsnKs173yNE9jwA%F zvN3SZUCvyhG$g)*)+@L_^gM{ zLCO>KOcxDblS3+59AyvA?yweZ;^xduHI_95qC>s94vlX^^3J zlX$GXZe|aTSkd@3z8Q3Vqbb%nI!`s#q1iH7=ckxhaWlcdc94?9^wzQJ!${lhNw*>H z=;`%-FhoIe=Fdgiz~v9MLX2^_wCnB)dG{l!6Y{iNm2c4Z?|#nKu_lySa?R%=y|Ifq~{>ep6Qk zh4T-8DcApioYyUwP{rhzIwbe=P7?+Dq7KKBW`(}`H<v4r=&gYs0J6=Ia@E^oZ7!l<pUIT#9TrrVa=_Onb`#)d||Blq-}dP-_nM=<)DPd?CW@dx>-mZ0W3k zi^%rJ%&NsDK-Tzx>1qfXDqqoREO`ORb*{|%wMa8sXO8OSblO|?9ukvgBl3{1b-!5c zh$K{|r0L~1ozKAPrI*2JxK>5`Grzgk{!zlqe%h#5J*Tg+#@^CpZ?alT(u$@f>|h?K zQI_bzPRX&*v)Gy(fuIKKIH)L9;eB9&eDXlzjgP4j6_jJb%SA(_SPyKgT@Z zn`foRW>P5a?o*8j2#fB>Z|9Hi8)PA0gPnOLkAai-e2-qtO4_33(N$am%s($qOmDVy z42Y~M&-zrYkGoO*ntyg;dcz+nkbX{<4;Rti6@us-Q`BY_0<6f{Q%F zAMg4p6cu#dR(=mes%LV)kEjn&g@Slq?(ck$|*E>vdz#3h!FN8)mgF!^nuYb&|@HQzuvtMmvf2VMlZ> zaiw%oyJ=qNVoh>lAtLGE`M5d~YQU`0d}ZP`hwb(g?TTzFqG;{`3DtJ&58vfUV6I{L zn0dOl9?Qv@cE0xkgNkJW69wbTGax4_k=|}x$klgZ`WCHmxa@i9Zr$0%-hgxE`$5XsR(8o9vy9xNP6zC@Af<2)kKyqWffDyX(VFP^XI9~=INSXo;KAaYAJDcHRaBZ_G1)aVWznH{C+gPY9s})xO7nZoU2?> z?QX^^@xzy)6xybJ0YSGvE{wi4*AJ2ePoIr#V(V^|x20GFaV;FN;ooJ-|HBT+N`<&G zvwBC#E%7($;3^@^N0||Mb4@tE8*)oSPdBdCSOpPXK>q>Vxz0@j{Q*j#zb`hFme*3rcEi~e~b;ILoWs{?Qz zIMOK}))CkB!ev71^{A=KUCNbyL5oiBi&Z<;%@wehbDYRvONwziM=z2&^(-eWo38fj zK2q%lCwIC!hbA(rxQ_l3_qrj@;>DD=lq6pM;+$&$(}}-lp^mHiHgH?D@8~y{xJ=#@n|H{kAy=Pnk$6zB?D;lKCne}Pic(wwJ|_Vy8qhVnVRp>;1h}k3Af(lbWmjHv49KxTkCNOUb(su>C@}_wW7b!l=Q<-3aVfw6ncXZs9xG zRuN()aAn_Sf=5^8VO|m;j9rJ&EH8nCM#8ClL`J96ev;)SWkaRu9cNmTyNgN1#o_pT zLg{ysv&5wE@;-zMHd$eolN@jYee(H=&P-MIE${i~NO0(6FO7uB@tiC~8{~fjm>KGM zO<&4=jbUC$i5*-N)jn;&XGQHEw1NVi;Zm<{QWv0*XE#I#I7-#My|5h4Jj<_x64Y>ylYC_oAzbdv; zmwfLI%09U*I);9%3pY&?SB%I26mEMcol|py1&1Iqy`#*U641W7;lV=@zl#jOt*OfU z*j+lJ>5}~b_~C~Oj*A*nlV?m{KRXNjJ4c5SEIdDqjZS#E@CVXXP2xl}=fAA4w*(P})>mBLl)N(pIxl&Ow=UP3Ic8JwExN4O2eF9&}KUyBxz|PjpF^@RthGT*b}krcU+#u@AiN$3L+TU$tq<}FDWC6YgUoJ52c^MM70a-6H;@Al^g@paetSj( zl}@0Mz@QVnS9oZnTzY@9ynOxRwIuK=hCt2?HrjHMVYZfKN-{Om>)!1FN3$WWUos$C@m!d$`3J5*ptPQ%56{P zV{PxY!^ahfURtJI;(Yg zH3D5!A=@5a{^KkL;Osz#k$THMFRk*aDu0{8&JmJ z_qjcfRFkH?ljCgYN+|W}M8XwT&hpuZ+WrRT__TQf6qF|p38#JB=70K`)jmB7LdC7M z_u13UonHoAoPek=!)xsU@U^iJmLs%SaHPF;%)V2c2{n_QcsmcMU_T8TY2=U0C@Mq? z?lN~lb^^gB?{*D_EKjNg)%P@oY*uXlEHqBD63N`u))ag6Rbv%+jXu~*axm4ZGZlWT zOQ{9a_#rL(dBz5(hwS#mr_3Ay3hd>O{zExRB2zpQ^Ks{AmZP7Ru{K*&#Ej+uWv8B2 ztJl6Pba9X#=58wYjp2+^Gtkn-`}2*+HI7b;cdR{7mul0j7-df>n0lo5NU_2lk62kTI%=+ZVOi*_8WU)r|UfK(K zFK{4X$Q`C#ZPEBOOebg}(d(rtXM}#Y#KF&AvzBYdqi@_{?p+cGiNuodF_pA#S%@UJ zM?~Ul@rYLz{5ZK0rk-2F>Sr)X{@tWOSWxpr4R%<@-NhmKDdV+AgF__gJNmpCb3*n? z1*xM3}oAFoSR;(e)h@CLq?axKJ-`;GPOHGB#uxMpM(VRjyZ zt~h7Ae&`wO6d$E+*lar1e!msq(=^}DL~eYbQ&({%hJh}Z?`tEMSYG4Tb{!2j-=`;= zY}1uRTY?z6d+o~b+nSyDs34}#*Ho*bTvcw|QQERe&Q!SN`Pdvmbhbg1SYPE}o=@jo zO2aIl!7~dFf4k-SRt0cFU+v-SM#lwwbsL=qceHeW7DS=fOsi3{WWhFL_jNgo;m4&0 z8+|6_cv}^a248z}tW~XqDyfdGRDu#mYotM@HQVnxy___BE_8n|ZLikQ>j>d>%M9kc zK73i(*M$plvD=ee{&jJxrM$|n1krgA*`nAZ!h26eky`i>^3}z9<}1X|lY|4TaO+Su zSk9|J%IENL0v@Qtsn~))0Mvw)Tq66&2pKcDfKI(b*4^-6 zSP04=0MWGmVbqgoA4pQ~9@SesU6_7OduXP}%bTpH+ZOBAl{GyKNV@$t{d7-$@0VrW zh}=1LTSvF2`f`DE6>FrT@GgY=|IL_g#(Ux#qHf5hv`Iz}+$OazJcUPZ1e#ggr5uE0c z6o;q1D~AX zxC?UoQtrM)fY1aZhPOp3)7|C8o($!1v%4o?lO4;RAkEuBVaSCF ztXFIBhjjorlJ(Ef!G`=DTGP~!$+W!hQw{WpLD5p&(}0>dNxtL41~bD4j&Y!Oda&N~ z8m+Imidd{%r-_Ch?Pe0?LTH}vutXIF=)%|+uK#3IWpq3XDQ!APzY?wGQQ`!D)`fzHB;h_VB$Fg6eF1?0QIK z5>*i4G%Rn6vB=a}C*a^d>Q{nre99>LI7!PUx2$%hK7C%4c9@G7@M)GEU6A zOpx%lCyixEqkCE9Ive+52JT$J)2UbW9;7UTL$=zC`sstJ##4hR%~u5Ukdo!2UM+IB zU#0l-SHE%g9|M3n$Ky<+{;G8Er=Tq@$LCct5~_w$>ug~e&oi#5>jQ82 zrE2lbt<2Ycx3#MIi@gjzlk^22k)|NwT&uX)o6;-MKUaBvM))fkFd|5nYhV1ycN(Af z*|65>yr~&3S!b&mR{9V-)BKFLe|=qgA8$5EZbp(|Ml0@N@c?PZToTo}5~Qya3d*)I zaUw3S1zHQZ5t%Sf5I%bnVZf@1vMBE56swKlCeaMc;@ zhv#uZZr*x?wnA@>AXTD6eyAC}A=vCh-^|vZ*Mzr5_s4aAe@VCaNP$gYfr1^T?^1ro zRkJ&rKcNQp?bSKo&$RCHM?_jghc-qH7W6wxlvQ0kmXc7j75_<29=jL8!upvHqd7ez*>M~cweH(P5sfenyr$ASr zk;UC9_wXO^oUuyC_m4-YRNkY*(nKXqpvlJrdp~Oc$I!%Qw>Ue@o<}nHwH*L-q+m`J z{B((J%z45tNpAET zmspQ-R8Jo2)IuI*AW1@hC3n9sviiZbONxz)!VqZG#oGg!TiM%EVnXP7Az{@V$N>z9 z2%~Gh?Q0tN)QA9%=-gd)!_=XOO7Car74*Iu&BUcQZ++xm!vP}U%=0Cnn|-*@#s02+ErVjjM5jS{=jd!8HNri96N?t3U~bG&$TwP5wlK-59S_z<;0z9-VomBWEk4 z0V3}wij#alz5(5wa=LdHsM>5hifk}A-Nm}+XDjq}W~>y+33m6l|DpHn|LIt&6kSqg zk4GVu3Me5+^Y&7r)i)n;;BHe9+}!BK=hH33oV)Wx2M;eBGW1py>Af}J#vXOU7q!p# z>S#9k_<*9HqwRap=eDbZiT&{^rP@Ls*usLUs4Ju`|C^cAJDPLaFT_l`hl|HzxsV4l?hYXo{(I zw7v1xU_NWLl`wFy3Mi{rA(?_mF`vX%CwxNgg^qLSC{N~5c{ux`fe>vcycR6utp91I z$~bF!iE9Wx8NY6#b`c_Twc zAlansGgn@{du?`O*}-WS%ANy&ACKUJ-*?#Ov6XkF$`n9$wm}yIkyxt=&3oPLQ@$gr zI)CMQoqT^sDdbwB?>r`Dr*dH60ZmAb8ePD;4S)l{gUYAo^!~a&7>~2<{%aCf;_G?h zB9_I8xtIA=up|TDop8wWwJKqn;xke8BLeV8&R<@;*Gbpf2lYTgVhe~b9**C|FsFW1 zx{UF=rz1bq+~klX_DlyL2B)&_qwiIZfsa1Ga0dt}cj7}K&(n!HbZec7U8&xAUmsT# zw1=9W3eAk<%GW0RVT=AdJOj4(X>?;(3CKUZkqSHLi}G9a4O+Sm4PB((CEgQQ_(^iM z_}8k&%D_wFbMpEhLp-7K<%)>|*0c_D59A*n_K$XS=UIDELv3nn{6DVWI@G@%`$o~d zZhLgoAazkr`-3@${bT)fS3aX-*taIUt{pHQi+g;50^^!4D_Ddf^NhC1!f5@vX27>( zmzitEGfOroIZk!T{iQo#is?vDC4fQaOjiF(Lhvih2>k}j+HKK2ZEx0VU zuL`7Qto??c7@%@tI0*tez7)nD7b9+R($^*Y;R%8bU97WNiAo1;M;Ybc%m`C#Vd=hs zXTM0buXJc|JM(|NI6WoT!JEs^@Ui1+xdip4IbI5Ls!cjM(h^m!*B#CpZ!iwKfHGn* zJsb}gYdze<5}00bj#V|wmg_aKy!th<2SP4Qdj11m+Sj!8$8>P9%1rP`l2WZ~neKd1 zKam(~it}-(4982vc(VBN*16;a8Kj+^YQGlQ`)L>+Eh~}#-t@&#~DrZVh)meZ~@c#>)l+8XxF~vNIZ?5I!9qK}VX*01@fpCcB66_*K{qQrqkp1Z59pRWW>z%B*4mQ2j2{|uXu`PNB zA47FUwm$jhm~samwizRxr-sOdIUCj6f@mwRqF$jn<1ARY_v&kw%>yNH8ei_MOA>hJ z!{`KzvsT-QD6Q-Da_5(cSj~|=-0Tb~CuaMp-J@Qm_*32RF&%ulPO%YpE%Vj;AjM{o4?Z^^V8?@oqp7dlITPF{JX!u z=Q*+7YG8trqSVMc7&)wAAwNO<3UF2kct|H|(%F*=tLe-E9NncsQar)Ed)1VO+$ccG z+Hs-2H^sPl-=S=tJ(hp_!b-nHA&hKt|0 zdw7q2GlKpVQ$ner$HX9uroKzUg7*zHX{qkR@Dnk)9tZD(On3&gYZCy4@uDXMan)ZZ zl`tv(+U|LM?|aU1X;mlha|3kFTrYN}ijy!WLU%ccJXIV4i~5?wKah29WW{|t@z9Iy zSAqJfQX~2U^uuUE?Y`K4ZNv*F`a_JpB0+`wG4#(B{bH z%obN2GX8w~xdU7&No#HoiFPo$wzM@k&91Ru%97oCzS^?PPa}G!TI`~I2fA$m%Fjti zihg}T*M;ZT%PJO!w5)aW8C}ya>j?j9=kB79oA6MryAtn%S;79oZX~NUtXLS4 zp4-DDF8{Cl;erndSMzb;nP4VPlWUd)7KJmL3*ned0VA>SgL*|87 zfac@;<&doKoITFg&6mtw%0F(2W_ndV5NzWHplqFXcS$T~T);kb*w#qMjnZQz=I^V? z8~vo7P&?K5Fb^n88qR364c-2@4Aq^jQ7J{$0p7AE#Zh)H|5Lnz+-AnLbK5IX)n%h` zumP+Elsf6wC~sQmB%xXa3)&XZKN#u$dN0S>Y6rS5IaqCsi6N$xk3ZUL>;W1Em0BOH z&3{+$q=83rrt;YhF~xLk{XCA}?M>F^rjwl_F9{gc{_NuxOKs}{dHSSsXshTD5T+y^ zY$I=?dmgUy*@c0#kKe=Xr63xf;B%1ZlzA>giuqti&gVs1ION9*Wurzl`SeYl>^Y!} zsh@JXpCYY-qwYX`u-b>Ml7OU9Y57K>*No zgYVO86?1z&wZa(#iOX{>EdOB4J3v()Bd!Pv1e(;jo^tM`#(9+p{|Whsg&-fcT!ESZ zvGbCRYwDO{G{yPn8aETtV%uE^n$BkJ`tK-pvC#cQT{}mgXHOv{@I2znZkD|9D=$8~ zRX|TL{rZev#LOqXrZ?CG8P4=-L^oEx(cQh9&VzVptn7(U2H;&x5k=JSvmZRoBJ)|Bh7vAcV4CajV)Rjc~ zc)Ce#j~>VPCInf3NA&6m(%Yw>TV0BIpsFO2@MJ;oH)Mr<=VX0|O72VVN0RzoxN-Y% zcNBwV*7OW*dscl5aUDba(3Qm=vK+W48flNV$%BaP{ps3kE5*FA{p}JR-*8bGpH8!k zNlQJU(%*u1VQg1VniS#Jh5O!brqp>@Wf4fYj^O?wSn@

SnZ#iVd#HJwtdbd(AUE87S))UP-d0>|2Ae;u16XE|gtO zu0KtwHd%xM)R0?ESL7a`>}u+pAr?U2=B2xZ5nV zA#Dq;mN&zRdj=Wo*k8MdApy;~Kbg>Wi;J9_~lW zRHE`Nk>qCMO$!y^@}7>cOI?yQ)j&~g%Rv#PAODG_lh=-nE;rT2YEBAdXf8n#rfXTm z(hQsj|8nI~R4b(Mr`%Fpj9a#*q4aMC2#n)5*=us5XSg&6br`<#TA`O3+oj~j%yO1~eaJ?FkWjXXedtxkfSH;ugl`!WHX7RSea-sv?3Z^Hbq|0(DY zZ^erRp8y>38mjwM)Wf!Op#N#3V={ib(^gJCnAm;Zb{j2p=m5tUyZx9;r)CgBESqFX z)h?Vm^$CujYRHxfGr4GQ1~S`rc5Q9V1pxM^Jwx^K9gl{|^WW-f^A^pt6M2oL8!y>4 z;ar~mx{4C#*^Tn>*Sq=SZv)@5LI8l;(wlQ1MGU8Pm>OGb>A9+#8t`A0sLQ8Pkj+e1 zx%7N%k$8GhsDdMRZa4J{`b>Q9Cj+I5dA2ZmA)Q8gu!!fm1Mvs_=0Gs{Bu$~B>_`js z$LX^G|2)aR1JbJ-&*eC7y*`+-mH&Z;^KJZjd~U&W{8a9An`%s1)?^c?kn*x z1bFDke-P2<&Ms7!@^95#)ZJX#;G9>j`Kx)wis@&+oWO@yEj~?3ntm`LB0}?Ymqg0P zHX+Wc&8&7v;w_aY#!f`D5Z3AybGWmkB#r={%K3M)Z|-<6onCE(7!`bZepb;P#){#q zf`-yGHocw4REn_l@!p-A@Yi}w-Pm-+N+ngLk`Mo#j7=$^`halsst_T-Y@L$069jVmdJjau z`aJ)-VF|ZtVzG_XGvc;usr0QUB6~2^GD_hwiQ}5R2k8DD(2wkr$@XbbaZr$e@Pa|?CK>}#5)yu&n0RUIO8 zRF!+L{KX!XZO1M0(H^I@;(yw_fpWJGVz&kU{ zQ8uXWxs$t_Lj^Br^<6&;w&orUuv@^ML9`TGou?`5u8&~&%XEo}(RUIH2ZD-=&Rgcd z5Dv=d-kOj1k*iexI7UrQb0NF_Q8PtLjHRj>3tQ?g!`axA_-qrNwk6k*9k4?D>Ed3^ zNX=0NkOu#EOIdlOzX+U0>!`#!mA5GctqtU1$`+Su7S7*3XJqs#{ot^3$y>n$a zuN`IdbjWOZ%cV}b5d1_{AgS_ikeBcz6ya8@->SOQ`(P`~2nvA@`Z2O$fU_!Czr z#7_mjnwr+D@%cv-a91Kfq8#%_ary1FO=h$mI9$~Jj=lL=M_CpvXrXkm9q&XK{>wmq zc@vSMuwBo%i_dW#O^uS<^-+T4v8zx;wQ`_m?s)E&4L7MN6|noI@E_6JYu1S zAYu^=`HtP)QGMjFfz}O~R9=i0c$<~Q{OYc<$dMsrCiRA4##l3VCqXDA7@3Ys&t|wXW5_Hg=NtRc zg$bfmCHGgq*P&9nifsrd;~41gl$E*;g) zcNcx+%5m~qTLI8@BB^(e`Jh|*|5`WGV6r{9J(>4jE;>hK)H%6{(=>&`6y0qX zi2U?c^EfCe->>n6{~F5=3ADJc#}59X^~SY?AT9v41Qg-@7s)QMhxc9ui4x@^CM}t~ zKKjUg^(^Z_ONbIAi(x8y68xw{;c*OZEMTlfBYn>Q=+k+yTiZm1uEOW=wPaEO`|f4= z+Ya-;`t32!77@mj86>l^_$c2HfzSBj=_OMWE7O7m*Jj9f8{OsWXXKV%PN4!ioO$+} zxvCe>M%I=+Cm(d8LnkUe@nYnLwq!9A!Qe^yt|>rZIH{^MB{jPGTq?2NH#~55uF8CG z%27o)BINz&Me&Z6h~`)LGlwVC3}u7avV_G|ku@RfhWAVI!H{Yxa5F9iYxp5CYMOm( zgZ3EO8*0~PX@cit7R<`MWU;lgMwlWYPpWuzP(RWTY=Fd_P^+I_25)S^f~n_8UR36P#7p!o5=5 zzmV8>+#ZLD$*WS>@62n?)r3c?&-vS#W{jp=Gq*(fXauHy!J+8+s3cjb zQB)8KF(?-s7fFlc+4E7Y6B6PLm3j$c!AcuZ&f{!Zx~*9<%4vGl|9uAo49yXw+O8$W zxa?l76VlaNeiGnuG{zTbIgxqhn-ra3WZ>3D$5rwyNy=>ejvA>aUWa_y_ z=ev)pcRw+@*r0lxEm@Tl@O#gnqpc`4thO(&JAi)nTk?;u%}J`(J%=22_b@P&1PA+q z$ZtasxI~riP}G~G zHEB8xN7sl9bjjNPI6nV%nEtKcaaeMh*?G3zayehDal%s;v=0b9Q(KRKV$C#J1@&*# z_=WYP!=UwB48H{p-D}&m%ww_$Pzy}tXe@U7Ou)VdiuzXVdU40)m0o8%pNvCf>RJGo zuklK%pi1J4{b*Ki+}mpCe)Y=rI+w8!FbK9$I4*3^xmuh^U!4`QqN}fT z0s^2yK<1j7Mpm}0MXu_2mPsTU#qOANDIc zaa2*s9sEJRrpy&_!EV+GK)RlR{^#}k_mw5` z#a|<^6&PzXX_jW2w|r6NwnJ<2HA>y)B(LQOZG21fXxMVJN+gau5DuADVm_6k;o%b= zx&>NAf_FK` zRBS3)2LS&CgZycaAxRxCwm&1Re@eM{m?-}1DERkl`6c<)-<3gB3g_5)zel)SM8=63 zQ}sKit;y`r-RSqy0KvrDVnBG3$_tJl-Uduq;#z z!zXu=Er{+-`_I+}&fj#+!O1Kz+XAsr!vPc{6sb%teJHRgX&BrLXv)hQ+|AFNe`BP16ibPbs`6d#0HA8C1EK*w>|vq^9`Ai)stGm%2{a*s-D#h_ z2*iC=RF754SA3C`f1hDojNyo0f2jd*{o~GtgPQg|Q8oImb5dEEr1pWH0DuGYR?lA@ z94&IGRT`rXUb){A*n^;AjJVAjqKf1}&_$Kh-N|)t|9v_A*So)3MhNyVbpM!ybzlqu zMytjU3|B-o{T)_- z{SxV((7|s0>wbM?Uwvf2ALGKIvLvT^lE8#sM+u6Pb=v!ia)hXC^TqF4b$03VUxKiQ zuycywf3~I=tV}kBizh=oDanIVz1u>P`=LR%>9lv8D>CCxQBE$f1gdhLmcT|i+4O%c z0a{r1l#J1w8}#*=X3yYjzvZInfcT{S-ihkL~I&5{)C!g;HvG zVQ5v)^(`%;`ESw|wHGiJOa9~xr~(#ha#GrMLjV_5ktZ-3g@waq=uPi7VTgkyLGhO( zz%|eqn_-ts(p`e2+vtHY1`J}#E7yEjMHMSx*JuTLS_B%Y(qlZN7^N!iIKZGf^CFJg z+4qAdkf#YyWvx2XZ+}Gp^ZxNV6DxE320!Ea+d~?OpWjBWZT)2zRTu2+T9+cY=URwd z>}hz}lw0c=MQPx(t*6*5Ay@1)F2;dp=@A$*S2_Za)B?$$5qxfga@ddAC(^FGDdx*r zC7n@q;CRNSF;O(Nxe1tor)PO72X%`SqCw}}fmj`+0h}WGl!h}!7+|yBiBtILiWT>> zY1XHN>*S?Xa_0oG_f$x1Szl-xqIWk=iv zcRk-7-mO#|#bjI5qcBT7Z&SJ<&X=fSA!Yb=twRkv%q8r7et=9tojsC=O^ygZefkLU~bcJBI64f zkf>+bN9-KW?w$io0K1m2d>ZaOaO9Hn57^!PTFz^+k~lPRHP2B;-#uktMuf>-*@UKS z?;ZUCft(_jgCj7dV(0D)bA1mkAN#$3T7lLM`byaN|Bbo-=SCY~XttWRa-Zj`I}W&o zit4mv@t#ApN^gMpS`!%7X%PzsmWg6HDIDha0Bcm9E0t*hM(6VO00(txWhM0nP%HRd z1|+e;o*eh^BQJ4s9N_Ry$Ul*0X5ad|!g>K1Oi}iTPp%#)+!nK<0j&if1!4EWHUcI_ z?E>4fW(8Soi1lk*zAuJUyX&x8@xArTdV8R^jiEGU{M_Oyvp9n3HYWp-fOJ*vnZU$A zxY(OeLSlz~*{qrEm7}FTgx+z$(0yJ>a0{KpZcG2NosQas8(se3gT2L?*2DRN54Xx24Fg45+MPdf^48On6T)P!4>kK8; z@aRzxZ$;<_reRoNep+Li9PnN*_2i97Gnm{OO3A6X zosdAK_vDN2tZ|(9e`IO@ zW5q~gB0cTN9ZK=Qs17`reugAug%cF^`+8dd2e|t*1dFYvNU&+_9Bc)0)|&?fQz*L&1H%(Y$5`|WFp&u6K2?z<1LZOn z-=5)Kkid2RIt)0*FXvmX|7RBZ-{0@mGn9&1TGC|%sCAI9ekXBNpEMJa`!#tKWyuOK zJWxjg*?y8Vi*;Kg?z#NGM}Xdv8p;2~0{Hiz{Ev45Z+Z}xHA3o$ja)$I3$49CKgctl z;yAaa7eT{+*F5Oaw|5kB-(B}lo38jHN$eged<7Lx!V4>M^?fSuKL<|#{ayZ*U;pb} zz*iK2c$4>}6RrV#U2xU1r8#!*DO={A#5++JZG4}9{!3r>Un^f`US=B1yb|(~;NE$T zw6XSq^V>zB)d|i2pWB9pl#>zwbd3vuz*@()el29HCf#-`NHgFWndoY<9T^G97$fsY zBIEz-Z*_Je=woJDBef2p!W%=l%;M0IXi%gFSmBb=wEvIQ`5&9ymscczqdG`<%&<&$ z$!x3RbQ+xtfhmXzIqN$C@}C0n{&|sq3;2ZMz=420gEBBrZ7{Uc8z$iC36JA+yPJI5LM0B!p}D z6ot~x|5pI@AJtPGAQFD4NAb5ttY`GMMjHPXVEE$OWz3)u%r?XGb#r_zi20=ygb_oC64A`NI zbE|XfhS{)vpiU_GDL-d7RL~mCAN9Ieqj37QVPpDyUZI37&kR=-TL3E|TA{NpX0D&X z5M$`Ll254#mdS^FL*O$nq>1L|Rc2xhtQ7aq1(YCc@fDda@^HFoiH6 z$ju+fKCq#X*U*7hl8$0WtN{Jd?hrhK1)SbSCGFbUJAKMW2C zF#EDtAAqA2SlsR3!b9b?Uv90P#PY;MumT2cPO$=8Wyvj20LTVl+v;ZH2@PTROhv%# z)L|4d$B%oz0(K_yi-A115HPb{nYOut1E~L@oc*tTNn9UA`8v}2+0)%H{PKaN(Ldal z%N`tOpxgp#Achv(pV!nx?7!u;V&vu_;W(%?j&(U?jQ5`%5=wu2fl(T6*_%s3G%WkM z9j_3v@cqI$n>B-Ry9U-<2Nub9ibfr!;x@lc1KT+^O25Lixt`_y zggpE5+y5^3BhB+N<>X1ldK8Zf>v5YUj;mPeGn&kKm!80lXd5Q)5G)()A7;8U)CJ_F z+ixx0-bVZRy=eb9)LxE()&)|JiGMT?j%*D~tT_QH4M9qS=%ZPlXs$T-a4)px_p+a_uhDQA?7fP10z-uVN#-_?>^ zF;Fqp2jccHjRK*g=J*L}cnDTx zWMlzH-Qs6Mh67+;BwO=ktr#w=fV}w7f9y2>XWyj`M_f$nb@7klpO@9}jy972*@K5f zx6u=$x;I@m_;sCF$IGLtWP7HuKJD9hnnk#yg%NkYM&?=9@9Il)3@XuK)Yq$I9% z#670LT-%O>krbhX6BS>gtcAqoi$|em$ymu>YqCGx*tF-f6_|oq^B=e3HbsbqjfUWo zOV2jqr#~Q9ly<~f^hC^NaG7GTES!!n34fY!ihqNTBVS5`T8fyQ>?k+yH-)xXq$8C4 zi2&;)<*wgLVskg_^Ga?!5&z8ZFpc%9OZkvl5px31KTyT{6bEeXb8A6|+yQdF@6u@c z^JZ`8(;UwYsg*v;E`=2ZH@`!UNNR*GEWSOssXCV%j1vO$Wie1pC@GhIxkeV&iLa4# z7(>hCQF|Y@sMFS)tWaqbtAOJx(8WP(ASUgEbCAHRpA>h_Oy<)xHymWHe-w`|i1n8C zLIzjq;6$<^=F-+t?C#yCE5{aNi)tsjldGhF^~$*w_pYYbqXsDVE5q>nU%~+3d>4QM zsXdK|?${lC8UgY&#TXR)G!j>XIr>mT2*A}&z3C;-$&*hp()%*C1L&GQ0%{@wZRT!B zl1ic?FOvIkY4a|BDyIs;|HrxTN(w8IKIU$(5!F}ZO$$vA*XzsEt>j*N+V#(q2F_x% zhjAXpMoXruB@4$dzO34XFsPPQSxs4CM;w!e&GqqyBT%c;<7a_kzerDwSj#<(?-y0) z=`trVqh9ATJP)uo;A2EkBAO$xe4#`+%*r$;OruU6OIjjaL^#1tG=A>?n!`Rx{td}% z7^@UtD)uX{bZ(lI_yU5Ep9k-6jO3At8W^-b3%of-r=u^G){REJ;6c)36!;!eqEnr7zcqzHR#3vBJ7`|`)a=}ZaB8u*l5@^wr$(Ctp<(l#Etu@!2pCy88ksc{c+Q11RBnsKA?dPN+ z|K*u;6>p^u*_?3$RpSz6r?Lh8PDeOcl~H72ya_Mk@fO5UCJjlmc?41fI8aC*Xze@@ z!pa>c+)OZ3+om~qGcO`FVcX=5wXtigQgE7Q%-I!BjZZk;1_LXF?qpQSWng+Lkv1oE+czU{8r4%#SqC}%fF9$3rc!Zp=Wn5Xd*|;Z3 zr#BF`>D+fcZtx_?yXSeq#|OE|+%Z;T+~=%NB|{v9h9*HDlALRXeQLp`s|f`eLbQ4q zjr!WLU&eANw7ma_rVkH>nQx6}kWqRlLm--|lK_db9U-`17R%6ur7A5%W}!U_Dvmz# zzW-+mf&XE?nOR@`oF_BNpXw_*8N&n^CmzCAPJG%^BECT~F_x-GS=Ms4F^UtM`6?Ip zKv`mwojQKRokMosRkO1>?)o61@1oq`RC}eKr3UiM@07*^ z(|8cPBFE8iVJ9{^TbA;RU~lcJh2dT^RyuT1zgJ}OmSd%;TJH1q4ry{7#V15iHq2tF zpG{#|7fB?Nn{xFR+EC9#{*c@ttlso0fO|jX4`mXZj>xfTUM!6|B-#1xGQ`@+`e%Bi zITG)J(w&djQQe=uTt6B{KWe|~9_DWg;Z*cd^dpnlC4V8r%okGqt}X- z%in|r^FwXn5r4VzFl}oCxDMd>D5ZJNn|E*FrYQM0Y}?M}0EJ}!lNerZ&F9;Xws)a2 zpH2L?Ck~%a`wH-O+(}NV>)=2x%wf>!R;Xo*`ZfH27wE_I^uK&wIaz31K!#W2F%QbK z_3qwFASd7aBA{C@bY0IE&+34HMG551d&v(Uz5`m97b-%9S<|t(HI|sLUpGWkXx#2a z4ZEk=j`PxA2{%8C4|eVCH)}L1#q_?8YHaO+7&j(AUAh zdSpzkX@Oc-WKWa+lB*zJ zt=4qqP^skPH$q9`=+@Dg(LVcVp*3U@Tt{w%9o@K;K)(s>l6M}o=jY0srSB2GV8&?d zUE7Fu@^;^6)15yt!zG%HrR2(ToiV!rgp4vR+ZK`WEFLb-8o(B;XCwpAx|Z|{&Cqzj zPXLOdwX(cTcfptctJV4M+Fxk28%EVZy=y_Y)}S7+VBcqXF1HdkmB>T9MwHVjn`PYn za0$&^1iP-_##WJb${JCzSlInS5NM_OipKNGb|=3bQbF}CGGE#n+*3GbxzTxM8W9P$ zA1S(kewGPR0A(tbNC2|i&83?-_|tU#`5is;9s;zU~mUbSa{`#S0wTLhXuuF?p|m*Wn;%S7fg7B0+bAos0Uqys!=h z`Y1f83m0PGb;`1{Rd$607U@u9`sf7VsL1~-A>OZ09}y-GT8kh76+E3$r>M7;WtZ7J zOvfofvUm+qjkeht9Ug9N#nVeDcWuP~&`UpP42m3P_Gm3Rpu1gzY5m5$MFKkaYs#CN z%Xfbp@~@X;j*ZO(^BkDJq=zKyjE*p1@H(iTuM2N0IwX6mtVf$&@b8mOdbS4l`G3C} z=A618s!3OEZg|`3Oae_`>nOh+-wzibIv2K!jeH{$vkEXCAW+o+Xmn-ZNbLMJZD)BXKkHwQ z=L24gh6N2t{-u|-|I5$MkVxZ^qlKZjig2>?tW}|5$LU-8HxZke@>Ky!-?#NM zKBec5D}0Pen7lee^AXBeSeZTren=&AZS-C3%*j2)Lo`i972EW*!uKk(td{5|y;VZ& z0*@(}rJylMijHaaUV46mA|m^o_P#VxX&pC>-injE1UPK|xXK!xAna@?aRT`4;X(s3 zKWro;E=sJuG7Gx96+gS{SnwN&y5*VS_(?Lq#Wfr^jp7KEFTWFE<5ayuh<4{yEd6YE zCswzSY|OlZr7MH%iR)#=D~(4LtZ)ySu_HI=u@+>UwXPFAWjuA&t7~3insJ5mQU3_0 zgR?(9nIzC&jp?r_ zi@e$E`##=>$A_HO7Ko`q@Msg)a=9YODE;1x%z>8iq|C1-@|Mn zBo5)~4Q^l|jLr}@AcHml)S~h}WIpY6_uVKA5zo`w5KiF2nFDIiDtQQ*Gr(fAK+UrW z=zyg0mH%&&(Em~j@EPbCeO@3MTx~i9`*xkqPhsrqvD%V%+B~fO{B=5)jL6n;%ph`S zaQ5QHBh^RG?G?Hye=b~`xV0+5NiSfEPTXex8i-Ud>Ah6QTPk4DT=6hj zfZD@BamM@91;4ajhC=ZMQe8<=vJUmOJ@F##i0JFAiZDL?@&@L&VhDx$cFI^d5fi`G zg_#uSDoaXcXrRC12xp(ebzJ<4(YLnNzT=8)uyj8rQOENc;|jEUbF28C2tR0a2>;Zb54vAg28E zM6sgL!T!HwhkqXV6fF4g$mGeb)d`I8w7)&Vgk=rKjV#Syge4M z2&{Y`Z7?UPkiqe*bYWucRbxi zQqLi6z(`v`f>gV@OArJ+7orY|dgy*#l4S=dbkPMLzTD`ese;BiqsBDq;@1f%)IHMz zdM=+7UI>DB_3<6>{tDR=*C-PvCP4 zp~2gyG-`N;XE-~tq|VeR7%$sb|Gs>Z%;p$cKJ<~h!5>m1wBuR1$TT_TvK--~@k^L5 z5pRnBMo38i^`PK$V+368>$cPKBQM+)xLv?#Tns#*L!5+vYp9+XeG zSs!db)!PJ2&5NTxY=uZeP!^?C7rsJI(6Sek7|_M?3kE4Oya64#-~YQQ#k1+!fM9u$@Ucu zd%XJBjA+U*$@b>kDoe8r_e`dozciEPui4P(`Iyi`*6b(CX`*_-Y!hHVBU&sxkoxJZ z?*=0v_=`~x85X@Xmy4409TMGu4Au9;s`a?3oReMb`yzf{6QDBg+pYaddcL{iCzk+K z#A9y*Uo_IilAVKA})l(QoB|s<5dUd!m=hWTcXN)c+HYi3p4P`s^ zn3D4u_WiVI$oiMfH9K=2gYbjX*OCM5`q^2el;nx>pOU+VS>HNT-T(SMTQqppA={J0 zFxsDvhP>4*pL?k=_!8HJ{$ z@S=?-w4JW@8RHeS9>1Sm+A7g|7JY#O4;bWMHv4{=M-xGL-&Tzv^yipSp4$h?fG;QZ z5eN)czHtENn0egI2hont%qAg;SwI-k)nyRhEw<$T9vI}5+kgiE^suJ5Of1;{e^cx~ z(+%LG-hF6HMCGGf{aYp_Rz$D8gp+gjSayzc0G=p18TS?i}m5P7LzE1XIR z+PuVPgHveV`n*D3%j8Z)bN*_Cn1qOMW+h)(S>=LVgXxBvoJzlPY#cU5$)08lk}!Zd ztPs~HpCCFhPK?06XK6vF0#Av1IV6ijaGMP*0MrTX{tGIlEedV=c^?C1!HiO93fFYJ z^|wYjzAjuQ7gNUsYI$f97rm~OO*5oxqKOHj7yVkR;xe@UD3(90jf{4B@A((2{<7<4t~2xbJWJ3~le2ZK;vjmgUl2Arzd*ITM-?8tpq_GtuJu+LJ0a#B4x%m1iI`-`5dWwgWHwmMsOv&Ha$Q zCDw!R{M%N-wruBM1*%~7aK>|&ryV(9Km!%)$GIs5j`fCxSo*Nen|6;1mvP19{p8GI zF+P zpe9(GO9gM|h=aqJI;il#7_>UV_heQOaQ&H>GSaKuX80u%hf=Cpb*jO(^g9ZFKeklF z{;xblqd!l$%kiOy(N?cJ-CB4%^DkP}xzE~|jUIC^H%MaS_u6E4cH}ECApwKnPSoXC zt)Kn1RKKcG3~hh5={$+wd`b0&_wkBD@gfBk?XXfXA&C5v#CGzeXdz^}W?AE$(0bP0 zf|wSJ9q5!85N=ao6;1mVq4tBV&7fP$O-KUIz8EpX!D&JkN`+zkn^zj*jzK8Cn~Qi> zv*t^FcYtm0x#fLsSsaEFQ<$*x({FG?TzXoP!()Cj58n|IF20ec`V%R~TCnlkYj-Jx z{9NLA#Cc(42#yW47`^TfZHyaKi%%KvRU{co}M-+%aR8}e7bNK?f$z*i@zRX3g&o<21h zz!J~I&&BB*?jT6bkdMRg6{I~7az>H7pwOoZKaJK+j6PVVtK!JZzj2#4f}m#j znwG@HZDMM~Vf@ZS7fgO8{t;A(&fkeCUL7h4HGuuAbnP<)RTBUH2~?9RROa`62KU!h zI4=m0YS?|$HX2_?0dM3rPF_*l#D~2;_t>S#R022SAAe|?w8zu*<)d2hnh6$vGajiY zEp#J>S4bvm=U+1jkZS_B`B&+V`ojn@!xz)cP&jI%`0aW^?3>u1ao?>rvCaB!XJORw zhNq`%t&pJQ1o*44lo@Lqr-!@J&$=r%jqa6kZSfJZ+(IU_DX$ZzH5f82+B7?sG0`mT zai8*ucIt5ZZ>5`;e@d!p94go*NR6@fgIkA0MPPLvAMKqMwQWqAkA}E*pwOIgZz!L} zEHYYHpgfs3Uk3D{i~MmEz20yTBk*jfY^oM~AzG;&Rj9rXdN?8guO0OGOM+r-kV6ap zcA>?QbaI_?T&>k4tK%?$ZaFK%rUEofLR3Rclic|(2LG4o?w__PIKnRu$VFnpF9t^h zRGEy@dFB)Tu!_?X)#Ma{3@0Wkg)p$f_XUK1X}En7hagaZWe`Mz1DL5fP79 zM zNBl&1wd0|5isD$xzr&NC>s=XDLi31Vwigl)9NgO%Af@g&NX3R6VPu3F_G*!$=el^` zPp>IS_y*SsDhPKmsKchfOG${*qfE|Y3TFp_iOG6Jw|NwQL-PE_Q!Wdf>7{gmBAlmzEF8uQBds4d z<2<$K-XmP|w%SI*8xUK)J`{)7T4-KMHPl3G!&?j9VwzjTVa}=J&lOccG{?HRNA9!89c<}M=fzCUpj`i(XT>Df_S7+fe5&oqv%F~wt+nu zJ#$-a+Dc~HI*$>+Nfx8618y;TRjkV&7m-pvaX~)GQHf*F3^9QJtTckQRovjD@fU}h zTgq=rSKUsp7D3_&G+yM{tYq!~7}@=LfJ_xJJ7JGUSjJC;g-!ux#|d`#XJL|mX6sOy zegeE*xJL)D2cJStXBWNQR&|hX7x=2O&1~?rrb1mTR_aWCyQr2qj%65d`IHIJ@Rfdl zvP<*C1BW7A(Nn0UWGH!)Ed-@XIN;Z`H)QS*{DDVj1k*Y7FmnF?!^{m>O!2mOPPLCb}&GMDSit*7YN@P*u1N3B<=QUl!P zMVqTA*`3X;lMbPL!c5J0PtBh-RuK~Lac!P0{n=WhCq4e^Et3u}SU0ZztzW2tFpmX9 z&X&p>E{j+uLaACB?PhuJ_vcMD!neziyJNp0L~0zNU=9mbaB9_xsex}F-n2Bp(2xe~ zfKhDLd#}^a9})kz!^ItHfdbP`7hs_^0REr`$9>75o1efil#+m-xoraYc)MmAI{Z^E zMN&aQy}sDKJiwyvfvNK$acDb@`KTvbdVD1ziGX8qOB<_^Nn?@@TIeb;fE|T4j(?<7 zE5f=~p(($GzuBv%--ZhhCk;bL^p|O(^@2z@-nlzLj}Nkwg6ibxiu`uFfb(#tM5Xp^ zHX`Gu+u_p_$8=nZishPsz+%>3K68@4023%QD~xWgTN3lQ@vf|YATGfZ1t_RJeAG_9 z&8K)%Fr-Ik{=!fVvh5rLohlP;&maSYcLeAwtA24r$(iZDWki(B`6?+EBKkeW;GGyY z)Vy#+sk0b>XBO%X-j*8DIIObx3RtKz$BFsLodJng=vDM>XvtcJ!cVA6E$W%(X|L|~ z&eVqtbDk?fedBWl?e&(^zC&`^vo$|mHQ?dF2rv{We_a{L`*^n}-A^W8A#&F5d_onEW4QA0s~x(r)f zw4O94DpfmX*7Q>myLCee7j96==rqENFbMxO1`VgKqR-7iPGwF9)jY!vnq)GYm=h6I ze6V&R{qjHdphI48_ILhTrU@~7UBPk)*UdWjPy_x6Y$Ns0|MGEfAs{?Gu7@7K%}8V* zmv7!ACevJiGk4$lSPmQVOvIXUuey)>*BTuo;NM+qh;a}uunJ8hHQe1T%#R>aW9(g1 zKNX@ym}yz^|D30$izDa8vZK&v9FYq> z2Yr^qz0ADldf3@tN?*TJtr??#?rfmy7UsPn6YOh7;gJ%T`3 z{d@z`%Nvz+gS3u^kbmYl)PPQr@%2$-l&WDx9G*}0A&c~Z8QbvQE zG{32X9P^g-&SK0Ue2Klfg-_nPyAQ8NEEn-L6MsFE1yPoG87_g9-{l`hQBN^F%{b7C z(5PVa?83vAp&0Rh-ONo0TV4&u3qr=SoLhk~gdSFd6+&Wft4Q!46iZ4$LE?mV7DNd4u!}s9C@-$t3jWv8>1xXE` z{h=gB^C)Btn*A7fMqNUXU068`%21aDZ@t-Qz`3)svQ~^nW+c7~G?Vmj6AFfhrsP5U zOk~l`I4F|JQ33iP0V?1QHvSbY=|kUE9s4ccqib2_#1UlkHDZ}9U}++wp}9l9fn39# z-t#ay|5djcCce=>ES>0U_*!ePq7}}CxB!VfxNXS_*XNre`)jt37csZeIYll??R?QZ z9f^x~RK`kl6i>Kc1(mzvyp>Gmr&d+${Y;p48V;7rFTy~ZlHS6I!L(8M=_z!dr&z*$ zB{$q1NcKtxrtpWF$D3Nz!I7=v)6uA3F{5$y&@Q+u(6;U4ovy!mf6&SSGUHPpphZ-! ze!AOjtI2+J{cU#YW^1O~|Gk3I9*7FZ%+F~K!p{d~g#2!L{>h}%qNs?F(TJCkf0A59_Fd+6?iypCx&kfhDiBU#%9ng6kHUr@2fi8w z$2LOM8F4)23lRlsz!BDbfzZdriM2@~{%a^li9u#T8$Y8)P|Ls2 zX9o+GJ!6htAj({`2fZRXB(r+t3AUBB`ga0=hc$=(vLrSkwD#a#BOw8)+Av(Zhi>MK zR_(1R!~UE-Z%eg{)WrS7Ui`b)c?PB41y5Lb45_)%9I<_+Ym%p8ObM?b_P6jC%;u0! zZB>0nC+bF)<7KGW{LQ#K&={3Yb0IIiscMtXnYeU>*e8`g^)l@;f=4Ag_&ca5qTAd< z2MbLsS~zBmJG6%_r&b)d<2k>JH+l;WV1L;8s-00dX^dWJX@O>e6#EsJ>_6RE@ppO`kI_D7Nj#2=L-l=;=Wa`hCO@`Adx0A)Y;T?}xEA z=HvfYLhZj4A!bwk5PVnpRqMK_54-7ifRBc|8=Ct+6P!pLDAC_?DLD%i)xu1e8g~tg zdxTDO3(lHm+o3}D7Wj2YTQ+Vy@?sriIzA3<#7#(nObGoFnr9DzsDi?LVq_MyJzmNY ztYjknv49Kf(}p7q0XNe(HOg!g`a`Hh3ld((Umz8=*KoN#xK!BGyc%tC=BkwmkT%Sp zt*!DJtNlSkeisDG1s!#@bhWGTmr_tZkP0k;Tcn_zc-&f9$p^3Hlm%&65pE-_p)`}# z?HH!iP+{gyu!qQaQdvW|+orTe&{O>$5I6<}M2MWj0Xhrgy%0mi8!q0sqsUvny>i`X z1lFq2%s$UQ(e0?>o(jrDZL=^rJO>MEJ`8NYG zXZDABPtVYY>!OmC(QFiGZ``)*Q*Tl{q$i)mhcfIGw|De;Nu9YR+s)aw&<*dyrHklu zF%p6iY)T)!(N1bJX;aU>?vJ<;0MRQr?|eQV0gDen=2brf{(20I>{NjamWv%28eN(n zvd?9}cTd0~5A)^UQsHfeAHbZJ`EW!-c2TQUDZ^uYlSk%zsR4M?1_qrnJphNRT2wT? z0k7`z0}mcN64@znisk=U!UFjrRQ9)G@g83Qp(8F-b^2 z$bNtNopfTX-_i)RMtFfLn83*P?aWHqUzT~X+6J{^Nxu7Sq^gt+*YW42!eP5WasLR zpFUHo3BT=tNVG|5u{Cc%pmPeZky7*CSA7qtP3IH14TipE4P9OG4g_z1^ZD%a+%UQO z*Q$#Iugxduxwg&DGh5@zEg4U*V-r5}JNJHq(p;diUkc~h2z7NuKCgT$lj)c|U=c`v z%6@;$9%=3#1u{0(z;f6)$#wOhv&L1~j&qmlS;%?H?xa6v`hZPq#Q-K#8y1cKR!#6-e~V0Wq2igcu<4*FdXbehrME z8}}IhRU~XM(EGzvZgX{iL-D3b)|s0BJIL84v5=jZtRV|NYtk;d@%wM^x!+Z23e~u4 z4IwO83AVI?a6FXHP{MW{g!-aty_j@mnUT6VF)6J_QBCYaM6oO0EQEea<&rY$}~ zZ%l;Vb~uP5Xl-!+ET}S@;Pr@Eao=%F%07PGr5cNy{5pFtqY!JrKXW*W^ zbl6fyor?OkqU)De;dhf|xSJe^D)`BiMh8cwR5-rH@I_1K%@Wc9B78Q3Set@-DF-U1BQ6J+v8asd*axCA6%4Z7w14? z`55psCF~p^MTbPtb*gs&d|fDmkpwDBV14p&icz!zu3dZW)0i1=K5gqE$z3=2S*L^d zC{5EGFW=vmN$kylg`NO^_G%qqbvqg#^2$V<`+qkc!Qp;!cPEQvu+MaRNsPHNDLQR# zY*IQgza{9=-JYY_qh^sD1?c66a=7!xxVcgL|H`=QTgUNS3nYx>jY}}dWQcZG4Oo^E z%Orh?S1r8oHx!VUM9jX`jHkz_esx=P%-p6RP&Y3zeILHD%(G2Gg1BAF@d_oGRIP^ED1+4Ipu|++u zp!i`P(5>aA2d&~^qEu$8m67}c_hG%x{i^YnAoa+@$MQGm`6|)}6L4y&0u;NHQ0G-b z`dq;nat~;)2{N4bf`#IW&G~HsT&%9YR~dqjn_0KWNq^!= zl&iD0W|d2Z3PUWdxL_jDr!Lg>3d&Z$;i`Z&%4F6?;w;~FIJI2vh5%LWdI2FSQJ!dR z8@cEzIFG+2Gs{hU{TJ}+ZUtM{X|?|jbXD|;sJ5v|mTIO&m$BIJ`js~sKNGqdt0sl829 zo45JP!(u!z`F4@9v}v-w>gm5m4R!f+3_w-2&TBZYQ_ZqU|BR;>e`Ex$WTF23Hhs)J zYv^luTin?ItUI+%yTIN@e5|)@kn-(yDulP7M)4+|OzIoY|1v{N!9&IGm^Dk#xx4L6 zwUT7`j(8KNPwa6%v4^0VnV)EpG3=*B8#oMAZ=1;zD42>dt>1;kXU_=<@u89DAqk=- zhR2iW=t@k{vn%+9EqtSlCrUBz!Gs<9Y-FQ@5=*`ruju^)k8E!7FctnRmoR7whStTl zx1eG?A@wMyuM5*k+4WMLGbSW={`oT;`2HN_6tOHGeqzOUzJezG@v;ZT%6c28!N@@Hgy=D?&Z&-D|Oo&PICm*U};Y7k}*>Gv< zS4uG=wQ^?uee%8Tu*ClHrU8`+zxg;^wsT5)TQn1SYLjT$;8IN9-G_ap#!pe4YpqCl z@A!F`V@z&UYMpg`pPE$-#{D;SVXx^D){OQpMA^8&uu{Hxw-65vy-;QYZ%UOjdnG%J z`=L;k%q*;N&i0Ja$UG&-jJ66~S%0AN%4)E`Z%7u@3?;C(eGt;hH8jfBRvXE9%?=2| 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�d+#27xhNZX(GLWjvW^#T~{8S=1!Mw{)lhBx_UM28=Z#K zK3!Lr?d5>!w$ipEq1)_5C}#CC4MAuLmLhXHQ7MwLKoY3Lp3TrqYq<6~eiI z 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

}U$dlXKQ9~TCvF?O zcGb3hBg`&&-SBAvyKG=bSiGYORW8kDCOO7vVVBp-!3ZsR{$v?v)oZzVg_u1;UuyZs zvwt8<(1A<$54E{!kb|E4AM?Q{9E78%-1{Q*Hf)u$(gTXeiLlP)vQa1dicwBj{> zRxNEEBIkT?yYKG=3R(xR=D^uu-EQ%?Wj)ZvfVA2G}wL zptkL%wYUcS{;=b0-_^R8*D!7m0tW&vKL$%U%t#gB$2xszPIuUZ`bM0z9_g!V4{Q!k zAx@}U{#BkGJLIYsH!nBaPv!^Wwn?D2;=tq@0Iqxykh0!sF%hTsA_HC>032uSV{)eT z{tH`@ejXsBji(&;x55EhC}j^Iy`QO;wt;I;?YI#?=A1fP|zSi%n+>UKR4#H%GBNha>iSTn@_r4#;d z|IX)=%$b7XbY(h?%U2=&EIpo?uf3s<$Fxkc)_rvRWZ$xp6-76zU0CKBS1*F;@wRZU z<#J*rA)wJaGv{&(gqR4`oMV>6OWLCP^O_z;Xx7<2x|KF8yWCzg_l!l$26oGx_+fuj zei3RfRA6>A^{G;)Q^Ww+)>`|I9UOy27f?}J4dr95n!a|)zJ9eCp6Yu=$}bzwq5m(g%2C4*9R<&hEj3rWV!j2L%Yk(kt&Wmdow#eYlBwZX(4@V%73TXLui18T+0(+>mA!#lYMRx-)+44Jn}!ZFaR%J1C3_ZX)t2m zsk27b4XiF{szuN09EuX!uT^9YJFqB%-@B>%trmD>ruaW9sKVZnOmZIJ>1NaOR*}-*i4&akcbZhQEdW@w z-c537-X-$V2>xH6@Bpg8ym@2t3?E)`0_$bRv$pq9P!b-#I5>2z8<0!|;lU_KB;$_Q z;?E4|$B6u>0JpYYTiTQ>Wo{TXwH~{_%(N?Ec1x{yk$J17_Gv`%c72K;nT{wEpf${*+lV6FF3oRaL*4*^`L4 zR3LD&C3AzL&R!`%PNp)YW{$__-(CP}tkvU-+=bU?qUJt(YGOMtfn3JV9UT%Ktl1qG z9FFQTpys|)wVmGX8hFjn^nR(k2ECM@j}>C0UHEP6U)!D!5%9v=V=G01T>G5M~H(OApU z@sh5h6*C8w2ivl z3W;ReJDhKz7W`J7A_`p6Jo)y`Vb7V`REzo8MqHwg$%$3mA|QL^=(hgzlKrb90=~oF z*G;b#TJEEyXOp-Z7%(Sy()kwiaa@Xe;xi+G?=%GaZpW}MYl!JeO6+LLiSunMZ4aZ` z{awbtq-IO0pBnnDc)xZ+7?VB5%{2X|o7=65Flv2CJQ`LLXf`AS;ddu-E7!rcRj(aP zl*$18^dIT_DRRXs4q=kt%Le(VfZNBXFmdQJE7$41*`Vc}eDSI196Rz$&$q>^QzJ$0 zGM6NpIHqTsH(tAcYPzmda5b2lB5tLYb;0gS4yjcZvN_lp7@6{M-pR}rDg4}^{+idc z=}lM?H)l33h;xw(zwW2&y$!jDE!=)%djp{^0Voa7AB&w7{(>L;&9}z^Kf#nxPhby) z7~tR4Uo>iO5Ad)?p1%5wx0|uKh?%17_y2e`|M%41-cSLesG`d~>T*vEHq3@ox*uv4 zdncexuKI@-w#5x-s&r<H&S4tEa0??o(&Ko#jK@_3?+HXyW7q@l57<(*w*6r?@@-QA~%Q2_0CD$7) zHz#Zuh1;7y!az2d15iTyQt@IeX0d(j+k}tBn$B^`F;(tU!Lz)&Bh97f&qRH0VOu-Z zamM$nF}^eDsZ*-N#eoc{O3Pqv!d{De`G(;o%}DTjpq*Rr(N8UcR!bbhQk;3X6lTz& zPH7v{8Y}m76oXs^Sg=Nv*SkX@SpHO==W$6%$yWZ|aoZZeM2l^

A<0(EV2vLjEb! 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⩔_Tj%JH^Vr4HbvMjpN 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 JEi`h7_&*Z8Rt^9F literal 0 HcmV?d00001 diff --git a/docs/images/img-litmotion-animation.gif b/docs/images/img-litmotion-animation.gif new file mode 100644 index 0000000000000000000000000000000000000000..083148e2762bbd8ec6b680ca7c6528c57828d1d6 GIT binary patch literal 1004859 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®=nO7w9XeoOt_+9 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

N_%y@jUy-`8!K}Jn)N0$tyRIkI`3=J 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

S&0+PAxA#m{-GU1FktDSE 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

93K~2NVSo{xpZ5}$ZFps-# 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
    DZT1 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 z≷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%0A@)`LRlJ(sx$<=cACp{z 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

    9%Prj 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�-n@-7SfNZCtfSbqkYu6In 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 literal 0 HcmV?d00001 diff --git a/docs/images/img-litmotion-debugger.png b/docs/images/img-litmotion-debugger.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6960a24131d13cc690c28a38b399dce6a4976d GIT binary patch literal 77985 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%0D+J98yof2`%-w1 z^rB07*+VV3%}r%H(z>U<;mIUoPsZMC>TRJeLx!z7`csBkfRF77Ufxov83&P2*^&o|X>?!p#G#wh*;G-UDudwZj7z2#aj0HHu zS{`|h@yyrB6XF)c%6qMM2S=-s{)%Un+9<0Xw@wI^zpR^9wn-@C29ajCuizLQiU4G!}fg+%OUw$$|I(x^az8m0Q z7@QWy#B(9#BuR*g@u*#5MxA5!Gsj`mfV%lNgF_^PAYFP{6ez%zroG0}UP5X}bq6#D zAPgtv{;4VdtD4<38(=#%Z=j)J^UC9VM@y_;rP(!$)9Mo})|Jh7`v>#sx}5AuKE-Kp z+SO@9U(PM7P8?BC2;2GEIDqJL4SM>{8K43}Tep-LNrf6x)m$$M46QdgqM?;#$XCA2 zHU0aMQ(+cPGG3IkBHzZl?Ye*Dw6azJdcR{l+j9#d;kNC(TVjb}jFznWcRkO3Q~@RV z$H@Z^_?uyhEuHMi@!dRqxuV;uzy#jhN}G{>Dif(fE1Dw<-`$G##Bi>5r+q$((K;~c zt}|@AAXXHHtZI4QUH=I#o<*kH^LcETUGIfUal7$IA1MX=!wa|fbwqfM&RDn8aAAyn zO=_Ny?(>IxYEA+3*h}LC)Mqky=-wm^>kb9w2=PmEYdTpYZQdim44nenK5oKp46~2s z!Jk#R&}tn>*8uK}&SCRG1#wL7BZ+Wzs6_VnUaa>F2chzdMs{?7juW*|=Bu&$pjyw+ z(th#uia`l$BG(yU2{haiR5c}m;#7#!7(Ngu54JSunOy5oJ_Ng>Q|a1>SsApR+Y^2X zx_c;)t045*N<$3v1F4Zx zJxB}wnLvg6F^7Q|j^2f5L!Mvngomq61quDGCyb=OGZrxO-wA!mWH>1OtG(JZXe0IwsmOhEobxJ%ENIV{08GI_Z0Oz-<>!N6xky1M+P53f& z0)ySxh1OS#whl>W8)xdn0sU~2fFoA3S4hR8H&aSowrBJq&Om!M^!{USOo65}~Jd7XI2Q9?W#4iqC z?q$TlVhbJ>G|#Zrkq2pYIC}vmM`v+1w(coJ>dspCFiOi0H_-81A0nx%*l-52Y=C+G zn?mg%AYJMv==;@l*G(q=v^TS$YoXj1lLLcLL-6Fu;|)2WSHL`OO8*4bus}NgAP<3) z=`mNa8>6c6MjzTgvY3Kt*k6@brl`W6{n^I}5BB%&F3TqtTc43!dnS1$&>ibL({Odn zH~~HhWXbp{eX~O*=LosJ7%dKv_;XU8(zQFHUBAjgIA%gw6iziR9rOzWUcM({+(ZSuZ>Z zEZMI?{TK;>(hcwgG7l(7_dZNE=6v|EY_jBzszp`YTz+@=TtI;2zP9I3T()!2CoNZ2 zbG-!FkeVDUp9|qSLLR$=EVpYD{d$~H)%RRFVZCbWF?dfAF|L+z-nu>g{wMs zq<$j<@oQ>iMSxdr+0{>rNbX2%Hy@U;q{WR16~ozBmM^4y`RpexEiXh_Dhlhx1Kt+J zN(sYX?+fSEi8=|GA)G_tad) z&j^JVK_;=-H<_`x-PUZds7ro@8D40C*#P+>(hA4p>S8J8hka6v(D%y!vQZmD_Z~{y2rsoO5DBx$XTU_~u1^1; zG__B5xITDEPeeu-Yxc`DHVS4=6D_E*%92;s2Z|SlU#lO5@q8?T{MP6u?9ZXV(oG)> zl_sp7mZ?|S876{9*s0n%CPqpNK^fv=O;2MRH|QY}3_XUProSV3W6%!34u2{Qf3Z&q z$sWGbg#VM~?_U!dL;P}(MlX>}V-m6K6AO(ty$LUX_dJ=5I{q~s&!Z~fdw&M-5b>O~ zn%Bi~+<(gAF_BiemhNbMIGLX4RhLP2{YqO4eJZm~7 zIx#a%H)I0T7#*8knZkWynG@S)({vxRn@%~CFZQ-}1Y~*iu=h7YNg0)j{KEd6P$N%X z%@JRHOoPE<%i!8Ohz7ynawo5YEOJz*^K0`{5Pd#GuS6| z@S1*;`Fp$jgEj5Efb}(|fW+WXgC(J6`+oM5lRb8kkL4o#Zvvh9Ex{X;J;`|dzrpX@ zp+pero5_BbH&@pu3E+T$nb$bo;h=;Aoeou3vm`!SR-@hb_RZFp5>QF@lWlZEI3G;Z zYldDwNa1KHzZc9fiMSB58j^~dc^kEtH$M1oWtl7&uXT^sUXYnN|Bao|n`gIwG(JAR zOS9b~qv9yQ$vRi{z^%PfH5as>h%bniKLBCgy}<5&3?J2h+?cS(n0;#LDJS%|Uc@As z^NmW~5PZ9XJ)}p8@-^eUJ-Cj)U*?2mDL>k38s_Jyrf-$A(XHTJYDn6ptp^#zkkd!R zbg>}cQWfJVw?y183!hFX)8~#M;YVhOQQw=T8u znb2vAWB`OGHjfPf7v25g>#)Lf4WuTy4s9p!$)%hnKdAm%=Ryxk z8LDqk4(;ymv2fto`^rDA%dJ@D519$1PXh_jT?3q9sJs_b)4G^iRAhYK$jvjCE*iwGJ%E3258XO!Fr^D=S3MG$Z#`q_CkyzL2g8tia~_$OKf({} z_yuli16e=XIQD3hG9?6?+5g6TdgJGR- z-vAtWAcB)9)V=Z7&9C0OgKT=H%O8u zIoy&T!b@dJ@$~wpRuLYqp2qXSQK4Z6KdfDt5Tk9UZaDK_#W;Tz0Vxm0)43`GiUs_m zobQ@$KAAE#A_t%N4lNViRqDTsBu!Wval<%?GA3mjJ8ob8x^t9Y{ns}~FkrM{eLa{r z{hM#TNUz_*B$^OQhe1y}w)|JNr9xKMC(%r0o9G&@GSF-8TT(vrAAeoS2%s6oq8-WC zaaI01%>N13@2LC%9l!T;bM*iF>c8W>#E{Rudr|E_$c%LqoY39iw;>D+;bnpU~NCCHI&7XVoQGWoNzl4(T>ME0)prN z$Yx4AD(3&O4#{X~UPb6E=WO`|-eb2R%{ulC++Oj$*c^)v$B4j;;m>1w6Tt6>86$t@ zdFVa3UML~4YA)_9W$bmiE7)%mw>^lG$k}_Q-LtQ*O(|rxKgGsQijOdK;J_vpenh<9K06W2 z(o~t(s-yfXq{%+8D6#|&HMI|Cwrc?hWQ_y7?F<+)_^0}?8O(av; zgA>5UzZ}gJ-~yt>{H1cbX^CPyONaz;-KWd#_DwN3 zATVx|ZOCzXLp1NJh%;!-9RQ)~0e%wAdSTe;K+Da`8v>BHbh7HAPnmF%0czEg1O_Ee zyGbX)*&&ZuLqMR;#L8N~36S7}0CW~Mau*)?gHph$a29;|?b|mFpIi6MO?cQ3rNo>w zs-p{{9e-!V87O4Y+?#G}xy20FXAnSECZ!XNp|$HNmG3Z{m+b7X_8a$eHjUvc<^ZMC)v6a4^548Npwj5>&T z&iu~X+k2tW(PYg_Nhx}k&l`E}7q`;nTr}Gyx;KgDRh+K3s0Ijpm}yOR{u`7 zxVE)*Y5#k9SQ-En&-k#OUU2 zMTHeiDI?96W-zR%vM%&%!CjGl9Um1F*gt~l9smiHp~3`Up@VOjm^kjYLLZ^rZgWoZ zg!yTut~-YoWqnD(upqe%G2iwiH{`h$b4K+V1rgS1KZ@j<`iGDE2e!LS$&NjGkMK|d z$QmlmCX|?(jvx6$jqR_XL-s&vEwz^F&NFD)xBDK+KL24eIAWsWGG*{&Jzt1GwC6v z5jB1cKK;BMRD^>?bI}!hPh^RQDm~r~WD3DE8L021d_4SJNefYpIE2-YTus}<`Wrv+ zZc4Aga`jJqoS*S-8M82@e6316yYoLT90O^>(8Q2<6Gb*ZS0Ec(h6-QM>PEjMYfP9$d-I9-zn4lE(V8p`QUd>&zAF|a zb{t0U<5x9K%TyHt1ghK^r0_vnu~oTx&0mJ5Xmkck<9sk21~?G|V)t(!$o#xMAj1Bq zv@S<0B18tDXIR+zI9(q!H7zhm@ED10EBpZf^~#c{o-oJT{4x zs`l5CD9aY}T^awxixK@LaUj_y;vmE(>Hw4%RJHkHQ;@EaLn2O9tl@%M*xji6ksE;& z)!innXI~*#rN!+C+D@M@7i(#8Dt>J%Ak#@(w|fR~5tSSq;e;Ju_C69dfw)=n2V$uk z1lvS3RClPaXj<_d6~zIYZDB^c))X0dT)+B&^`b;F)&-*Ap@~hWBh+R+uJT7J!|1&8~5*?)<9q8}upYPo89GbJ=(ux}%)1 z-sas8RG3`Zd5nm27sgPu;*V=qdvhp+w$b&c1pa0AV7g%LI2lKt` zr|9Z%J2J@F{YBLuS%W{qVb*H2PecvX6H?s$87lZQke5=}y^5I?Ui1W9NB$$sqOmjC zafkFr6f+S^g(Ff)M7P22siF5pl9F9xHqqPD)0^6)N6lh&i5d^qm@^SA`IQfdK=8Ke zq-PWiniG-=h@|w%y^@e@jf+v?^i|{hN2Q-PlG<77ad(h+5H7|TBR8M@3isusvgk~c zzg35C_ay$(rQ_>|=>{?9W2yEwIw`GH_+8P7bYq;z9G}WZUWN5L#_(5=jT7Pfg6KE! zIqHHD421ME!Dx~c@l^2&V)!|FIaz&Dw`#+oWwBiKmdSXs`)jYj z5*q%i+uYO5$nQ*(vF8$RMc10A|*l|p+XzkX+98yN8v#>Q3)+l zfMqiJxRrplZ~ShZ*v>tHV@ z>suyU9{eGc#LoBZshyqvw?0p=lWRn%byWa+^8024^?aVon_k~A5a<%c{Q5i5!#0{5 ze+@5_8q=o^#1^u&v86WF<@X~fBA`T_ zlsVNg6z4>Fk>K(;m#vr63O_j!S9gh-l%$vAUD{h?FH(hGmODD&+AjP-MNj$@&X4mU zhdIv@M4_=a^0u)=i?yayW(+scgUnkH=Emi*{-zPz(Ds0?m!Mh>UI* zTDFIDCt{0zFB1%DFR)0NeP&MN`<=qrIcbqMBU(}en5qLVU7_B?Mz+6qBy~1ORbp@{ z&emVhuGrsrHtCrZepl=WSzwGUqFvdPmvX=RymN682JeWw)m`{UxinwhopYGvdMxr^s= zN*lwO$#c`oMJvwY6oofzh(gX+gtNQEh2Wy2`$u)~Rq%rbcTsfL*B==DSzW#gwHY8c zcNQ2$VXmZ{uO)JO#xdc!UQ?dO{KJviCW>o>tbF4`i{dXtw~ETohZgs*?Nna59aLR~5JFGk@--H~sH7 z9bNO!Vo_SXn|H0yAx1PC7Hh4=s^KPwsQImc!1CDGSiXTM{qxKL=@Hr(Znn%;im9sw z&$Qla(ZyZS9VW~JT4FJbO8f$916ghnt2@coc?G@mR9<&M=DIVmi;=#W6G4Z0+gKvW zk=S*CqeCC(*xbP-q?K~=)H3HXnA3Z;fokAw0GO(dB!%#Pf@x%=fJ)3{+uw@@7CRMJj^ zEX}lf!9Kx%0f+yE9atD>(6jmii+=pS(1ahTFvkz;3o@-#=HZ}nkI`?jmNl!2FjigK zi@e(Uit-O>?^**kBzi)e}*FQZOgp+^9fmMBn*a)z6-)ie`WctJ{MmjtYYFC zl0fSLXLFc7@c>uEk~o&-4!onlVh}8}P;{^4Ht8#jxNVh9W8LgoaLjg#JQ(-So2Dip z8t3~*k=K({y;}ly1s5AmhVx)=_e+7WL*8k zB-H)!+gYy-C9tGu1h8J_CiJL&|Mx_J5^W8j^(gThW@e>Uz@uUYsz+c!#1)ji)IzQ- zYMPoE#pbiM(}0F>P)02tyEDuX5za-%3p*SWxi;GPR$Xzf2f0GnPc|s zLY3dgLm;+f=I#0c7dk$z()23b{qO~cPZa$|>h~prnFsG-7PY^>AH`RCUOgcd>S+2c zs6Kt@x!dzpj<*$u&4Kml>i4Z|mAbmXy!I!!f-gE4T_-908wsHq!>U4VL^vL=bsaZ! z+>K$q-3VL5!1Z4?+gbbnSpdQ6FVMH`{;?&n^1`Y6PoD5{6Y z(gv@f)`+`*urm>USm(LNuWKKSPGJh#25#v~F!;0lpE(~{+0gKLD3sUpDpvO)@WD6o z^4%MxMCv;uD?|M(vs|=hOcl@W-io*9zi30=D)Z3~SCME@0vbo0I4DR}S z-@l2}cj2s>v-BU#SMpUv(VBEGd=}{EF_|q<|MO#VX2z6=f@=RI<^56N8J}ZaLqmpH z+R5jdUT9Sn2mXXpkD?d;4p0hJdp1)EEMpFL40=J-&-+nK+EIh+BDIH@CprPCAO?s+ z3Lor6fUg!*92_5t1TDd2TjyqGQlArc1u;LmuNIaHG5hul2D7dp{+mFe8iI$dp%}z< zT}AbYJ>bP#*%xI?_eL~URcZ+_&<_k17&D<@9=lh)lRl^Gf^+}?{Sci&Q8Yax15PXM zl~}#P_3Vmi)3poWA7&6SDw8Tuoo-Q-RT{KeZ}z!!7(9CP$Ujt)3{Q{W0bPQH%Lj-; zR-Y6;JLLXQ0R(0{J3+@CBSDFsZU>%O#8HOVgk~Z8hQBbGb($WcpyF8A3TUc9D$Jjg z{OZXzvD^Dq>1EGv(%D@_GcUO(`4PC8XLpu9`!C%yi;NG<`Zx1;21lv~Jajgm6B0R8 zWV#qAdL3JdIjs4G+giL&monLOGzdAn+;pcj0Pj2phDXZ!p{P5~dayJqs}HEfz7s#} zccW<5^7&w?#cQWm#g-9=jKeuh6%Cx8LOT~W8L8rQu3B)9E22ORFMx}Yn9jr|*dM+x zxAdY9uxjTifRXnNf8F-KkaVFRn&_w&G@p+D(QL6CF!W3OUy?!ce#LbEU7ZvS8P?0} z1PN8MF!6odL5!@g{UyLk7RUM~BaXpr#iSnhFwl88+5}N=Al8@6u$YHk15FQzCjD+b z>4{BxI{kw|7m)Nj`b;uS_)CE6?|w00rFexi5T#oJ>UFv zMMBJWW?ujM?!&-Pl?=i9Li{8(oe6j?EMnnLwBqRedj?WQyC5n3J>aKy6l(u2i1SFl zvR`-I-+TXkg>Yl29&iQk^SH`OmInOqYW{sV2i3j0wV&G^uJFWH-^)?+>7_m zUp{=ZN9)HdJChZt8+o!Axo3$BA&vMtJ;^sq`|!s$f;hj!=$P?`y{R}h;o!ss_#wJ@ zf&_xX4nV}~cxx!3F5)*J)}V=^5a4WeKcNHALF{C5@=6bJfBzZa_sW#INh}Y8$us)R zx@`|98K3$_H!@D2GbFwFDfjrEKukH z)M8*-g;}8Biw&+Z+y>ZI1f!XZF`Ga$!eF51Xb8aV@82&XWWNMLq07VHy-p{wryR1s znzkt;xAQQ7M>HiRjv=U&s~-LE_+Cb$y+fRA4y^m$@A!5Dtx$U&dZh*drG7y`6VUWx z=|Y3%FRwF2y#;|zpsy5DIl6)_CJSU)m#4lfDE$J~ZII{XVX%ISYcSB&Aq2<=q%rwk z?5i`eu{{IYfZ+jwED*5Bi~+k~48#=IH~J#;Dk|83!nb}Y?(L)14l$sfj~_@SXg2}b zgIXuIqZPpjpho(FwpVSyBCziLNEad3IIGtqN#Ft6lJpIjZZ`LPD*Ue94R zocQ76$Ilq3{%G>N;$o(U5c+;UGD<7OU3sc6_cJihrj&tO3m;U^d$_evV$eR5`6Ge8 zO(8%})!>qn62C_H?k-2lv)h7dWDJ!EtoNc^w*iBA6^Qbt?e={Xv0LINn$)UwTrIAw z{nW?=rS6Aek#&w3iFJSkL*JN^X^a4 z-SK))mFW;+DM=3G(Z6d*1DM%^bMc>A9#TumXvw<0#{lh}Z&KPVsn`(Plzs;-6f&KLkwK9kX}c-z10=JF^MxQl5E z+YnOFA|RE^h<%Ge?6|){ETKrXk-~0h2Yyr&TV)pc{}K1+;ZVNs8#vB17zs0!eHmma z`%V}WV<~%!#*#H6OZJ`YM)vHoC8e@Nc1d$Z+V@o*Yk_HJdD7HiV#5|Hn`uD3lynT@cJmf zu55YlH>}sSD}JTuJ%FMQTA6$;t7C_S_*5|5Eu1PTgBvW~$MAj5T+~;1!{?_#UKqAs zsqBF`1ylK$xg9qXx{d%LCNJbal$7-?(R%$_)LW6W_Vp3G` zI~;i%dx0yXeaC;v-6@mrQ*TH2!h(#6s>J(~Iu31wm=|REE_Ur+!9S57EKUMe6$w;F zg1IgibcX*PZ^A%)tcp$={)@%`iH|67JH;&+z9OJC_0JJx&jAVvL9S;W5MciIxC199 zpO0oBl~nrgd*Z+esAKPTtG~>G76+1}@gT{75K4XU;q>|&nb;2R+X`(5-VP@vXAO`- z*-E$y13-X1V+5<$s0HA{{zsJ{h!{N4KwiSFywH1Uf3C&Ton^8+SP&55D=A5b+}zw% zr#X1lZ|UkHtv_X^>*BzsB+}9BikQh-N0OzJs|#lYr)Dmdy9nY);~Gz3n>X+un?n*| zW#zY&m9aYa!bp=TWFx}9Rahgq+`gJDWsZkxvZsFpApKFCgw<=~TCthg*>tPN6-ifo zx-8EL(T{#D^IEqs%J|V8=Xgbjso&Q(Z>~}pitXPuvHU3O-}5hjfq%%V5t&~C+a5vL z!D*rYnbU07IokR}ULC4u&z?;J)Cxs?GcA+Kd&%pUZE|FsIg9XRoIM$m-Tn3c2Lt_z ze!C)H2L>{*0ec%(HU0-xvbAG8EbzyJ2z8COT5Z|30fG{20cn>QDYUJM0mq6FEv z1?!8(9!*6FH-}R)YZhU=*3f7l)VF2Jt#?k7N;2LXckrcVK?bkNE>%}nhD~?GML_DN zoaYMO2PYCF54H`Gz8pKtpdoDw4B=LD;6Bi6=U^O~eL-@g>tGicV7X2OW9^H^7ZfKa zC)1hg>s$XQ(Hw?~)F4osQn=AkXJ-h3=ff9{tR+mGBBM$RtEs7x@dMj%OoGi7DS_!+ z%1(H|YD6$az`!EVX?h~IH>`iQIOipC#;?@5qk5P~pBxB4q~=vG}OdQ#`JwYUZ{6&TQ?Qckt{ zy}U!9p9nj&(d7TMq~sI)_t-n%x5m847C%0+92<;~&xg1djy5(TI}`%n{gC5H5rt$W zOf?=zzKB3GwfHy|**D$1OrDgO0_`j@j#$2(&6F#Dqe2vL1l(Ppc)0*RxAw}!(Vqhz zCwd`cn}OSa;Vr~_qv|s6vX9>p_<+y;6EdXIIi;*MvcI*YeDmhbRFZU8K<=Lb8&sdJ zb{rME9K%m~^s&a=>>Urg67wKcm$K9S@rKb*v8k+@^1HpHY>wyI%x_=6p7=QAnF*-; z&uG9_1r00aZ}|=EibWf8gj?PJ_7`gg+rKa+5b4$CK zRzVoQaQ!)+h0b(@ud@SVLI2*Cz9A{dj$~HeXY)m&eHVwB-gEnY+R_`>vs2qr4wE!k zE5fP{yr6eI^KH* z{pc_j%c;i{6Sa~k8!&R+SZ96xuy1-Ev!}3mc6F}u9JI{r&*u&fSxvuq`4N2Je-34U zYJECC7h3!q;r_l91i6@}&!zq^TXF`9Bpk}GA3`DP-{VaJh@4Wf8N&eD#eac&iNsaA z;}rdgX&&SX2WT?3azEU0^?#{m>%)t@%c2-Nx4pjRaOkJgvAzjT50E&Kytnfz*yetW zb$ymaF~mYka{9$99q21bA$lFg&&P)V_>uxV)Ko=E^BVT9pA_|oS~=VXN^Uc^$FYwm zKQAr)OlPz%Uq4t2YWOkwU(O9yR~+fCP5OUs^(L&U#VN#8y+;L7Q%tOx=ja3k1mMBe zS+_Xjc$;q}&%7I1n|n7JknNxoS4feD6UN&sJq z2JIJvUFhr@;4d&TN^5l1S}$208}7f(d`=jOd$3FYfcs8a7~&kAhBkp#qlKi>fL#Q4fxYhxlWpxR_Q`=muQ>3GgEm7 zEQuaquT`FXKAp)O_ymkMMfq+HH7C8}vbc%2xA*qC+!-g&qa!v$x)P4D4j~g-C3_vA_WiYS$w2(kWA4-?v){H;<8*1+qShjUh_w>gt?UMr5N}e0m-R6QoR?>B_!> zGL@hFQR-~XTyGBh;?j~27J6OLLl<|Wv-r+a)32W5Z6@bK{32i}|^pj3WUGnn~aW*JfJ z^8u46Jar*N;xuQx9avSa4z1rz!9!5Q8)(+#a7u&o$(uKCG+NR2Wi*^NAcbh{`hgAC ztZi|cDk^kJJ3l`@hOn-@*IJ`MTue+17-366Z{IEG2WQq8q$$0`*?FO3N7kgu-arO? zw_Znw-a`%kZ^@*?Ue7P6ffv?e1{rcMpyOesE@{V>wm|U%gr$ ze(~Z(=~CeOtl`U-FUbq_i^T?GOTul{;4bmtF{GlZtAifHQ8-fVR*A7Fzpz3R6M>`=8w$}xb#rreIqPQsh8v;ItAxIGk6DDH_lTxkZ$ zR4}Jn#|YJV4z>~WDLFx35k#2qb3re3l~`yAzrApDQ>PzT6~+1?ZTql>aAdO&0K`0R zkm~puI|&sBvqz)N1BT@T0Jx3wjQY#=%Ip-c;BeRwAFlCMxFvM{*P6Ahj& zItFN5k~lg(CiX%Rqp(1CG_PggXKT$htyt2<38o1SERSSTTr#tHv{}0fd`UV{*e|^{ zR$a%aURyZs5aGYr_>F83)z9(DHZd46!xV(dqK-af>?StN!2IZuMEnz<9+akg1t|wSdQo+PHSW_;RQeqL!!-$gNxgQkNiHt)F__G5-OA zGnA(KSD6H7EXreKzr#X{nUA(9tg*p)Iy_R`m;!mLm7{3$v4!%$FKW$FF|G{rE*TMW z^BzXw_V9>5rBu_wLGxBhEes+rIjEYJOC+Otk5-H+@EMF0>_&?gIZH4-?X0gV?}Ypq zP1_$yP0|H_%P8CV-O4rP{0r;nS`cj4MIxJ*AxE$GWW2cL5&%j{fydm^`XcN8_xtix z-fs|*ALEWl6g2l=IiBF@0Tfoh#g+@>QmW&f9$JqaT0yO?{_XJ(!uS zQnVe~5z8}E@8#WRZWP^nF&L8iL3Hj#)P&U+9*ka)Bl%_lGqDU!rgXO+JcA*C96QyVC2=H%Rih91| zy6zm8s>Viw>LdZ0K&?pE;?t8-ps|!Yu%=BgWJ1Yv$U`6ORC)%g6*x{kvHqt}XvC7M z%TOm}ZbSl(4HPG*rk@-CClQ0c$X*3mM2*a36r#NTJs223+6{8PF7)3YA%j@B!8<=a z_1f`&5_B}6N*ik~q@JA3-`WHl3%M-&f^Jp+->gjvC4IAzq`x%p-&~GXBcE6JEPH8f zu?j$958AclQ{OkJCYtKWhPs(F8NX|Z|0$;by(xYxhBIChT=$3kmv0~#fNp~$O#s-U z(nuAm`sJ0gocRAj5@7%z7_kVH1L^fJXQR|+j#z2QIP;>t2{qBlYh*8F#>!EbrAjMIQ2>g z!aI+!6A)npHXq#vdu7H%ijM2+>xTm{5CL{*4F$|e1Y`~ZAwHt6?h|3CX%B6b5sp8=oD>AN&goWjPTogNCvstAxnjrL~Vd9CN+%oN)b$v=W0w!HJ* zQBqL}8`=uVdh`&>gNi4)l&Grga8fT|Xs`rxl=Y915qr8xQOovF+b_=z$njYKX)~2_ zS~{1Mlu#jNwzs#P00N=?gs|_jv9UqidTmnaQYw>3pAe&a1U4P%>3;_%Oa+E9b$fzh z3QA*uy;^zWwNv(8HYZw+l$uSxlw9*u3z7)cX#solU&yXO#Gz^yr9ndX6S!5|Fl?)~ zP!1_!%*+wBR83QS5a6}9@vPPooqGkiOO3j_F?lRc{2-EW@mrzO&dTj_>qNR^8^32| zCbWd7#$gS#fx_&dA_-dN24&E8Y?dKZ20eu%O>1tN-EL=RVz(~pl-DJssUFhAai>pM zP#({=MbZBVvBSqJpaaWHxWcbQ5mfo;&z=nhkRu{5FHeYg#R_PapR11Ht)<63Ny>1s zut0&&>0&hZz-ZR{DJ`}=7;R>xQ`UAm;XX<^Xr5E3Yv zF6{xxE{s{Sql1HF_iv#4Gz06E7GL7PpJ(0O-7V}#YY~C>AztufSPQ#IzVUc<^HzZ= z+^p+-+bYc_e>n|Qa>xelfZfhF`Ke>pdW(KIDP!2~K|Dk(ZR6=^E5>Sam=a?`*bDcv zHgAD;yohrfR`;zWZMTHJ%@p}e%f@m?{&WmW>+g4~CCoGCIgKf6Clhe}=lJGFPvcC>>K-ke_Mpddoi+>-B zzUVRi!B-AExO22^TS-zTIe&TYK?I;CjhUUdZvD3?z?ta+$VC>Wlm35$j!O){C?zp9 z`~3f{J~&1AKqv`mF6j9u4vL7tj`Wj*X7xe13wm-MO{|c#d9xb2X=eh7USlm2&SL5f zOQbp4TY~cSI$2=R^wZ6Srx?4(+J#*Wi&MbsaO5De>M;!injIN*hPQF4mrekW1ogs? ztwmWnwOU}TOGR=~5+_JGj?|QbnpgMcO{-N8kFszlu9~!{)gM>>Tp=gs!913}Pj$UO zyK)c?p7Y^6359p$+}ts`Pr!+WaH1*xt4ZZFhLY1R-~I$Vw^dfPVCy5gpS?NvR~@Vu zeoakHiQFHPH;NBaxwWyep{ZHE+XZODU-D6fYv$kY!-9P_WpFYuB{9|57KwWybj zilvm~UfRTND^J_ELN9O$=OON#M*ZB0s<6NrIAnpMrNfysu7Z&BSVR?FeqOqep7YgU zvC&;EP6e1Zz(x==A}}QI<>SLpIgjPiZW+EzYhl=EHOqXxr@eGDWMwNAD4_^zwB|J&eh(rS#xV0f2)E6*Qd-7%}0hh*REjWGS{Ia>y=xrgz}4Z-uu~*rcfi z`sJNEy+bqM73SLC*>}Z0m@AdL%wBbU{Ia;Xa(p7`=Br?ES4g!2k8eNV<{K|xb>Hv& zbIEQ%;J{)_c>eNW9_;VAkm4Hs@1V-zp<;R8Z;RIJ($^im`_+-JRiT6Vq}MRlv>2Tu zk+*-a`o211SpN0kQ-^y9T!&K6^%nfIhgdQ4wFisT2QCph7?9ly|7LeBIMOV%X7?eR z+Kz(54Kvs5X+S<^w8>?UUHqJrgml`r$fl{kcmsY7(g0=&H-n&O^$riQ@g*;DvdcAZry9|HI3WaU7z;UzUC+3MajX>M0Lmh?ZrWeUJV3WeTnR^2I1Kv^FrH>J05+{(9y zSCfrhR)9J}@OT@3X3kCRtV>oJLB5xIY3b+s#NM&>PS4Iw(V0LvYxax5UILgkMZ&DM zZE&Y8#PzpjRkSq4tO%9Bo9iYfj;m|2LL@7eO(|kD$urp+vxn79$s=^ z{Oa`kr6u2E#^Eup@(y7klm*I<&k`7izh)dSX6<_;<=D-i2PnJg|IyOAaG^CbP z*2SSzQdTB=25<|C$5G%sL??ss=XQ$J*My;oy z1*m&J^TqG4kwnUwwRU7FYd~!>G=LB(K%CMVlKQ%EIZR!?m4k1yrX<9z|CC0W!LkA3dDQ|L&nRw6$Qm3d&iNr5Pa__Uut$?rcb} zfFo>VfOq0|{nIZIOvlz6b$sQC$A`4%ya*x!PwKD0*p0@zE*s$MY^gaJ`DF&QKTSW! z9+W!eDEJNxC%uTZ@vkji4NeiXNI}l_i0b0e30{a zqe@`J(2Ee4+O}ThuuPrv*~n&m4azB#mpYhXNpg!L*ZE6he@}peL-8}U_-WUex9Z9T zz6d2<4hFSW;c1u-CK~iBMLuvULsJEmPID;2C7cN+JZdv75lo^zvh5+%o(v4G0;2@G zDRs5Ei~?XdOw zClFDJZ{y#gg7B3frZG~nW9+BmF!8a-;zX~oaeTLvnAdZVh$+aGEbln`p%jUhUg*1SPJ5|&8Oao@fInDx*wgUgL!*YetVF3kmB z2%x$=n_^Rxnk{7FD9>gmcK^tU;-db?SFbLX2iAqPcM}E|)@$oyeut{$$;8FwM2W?m zzH^sJVb$4w+SXf=!;?O(^a6-Xn{k0hcKaO~FCma@HiX1tf47Hc!*AuqT8y?jgibWa zx_HTjvh#Ko)bwzDPVDvlS$RW{Ca8xCl>Xk9d2}acjA6tX+$K*~BA<{$mafVv&RkJu zq?8p6F&8>Q;x+By7!0^cR+GV^U%uyl z8gc$1AR;=^;J-0SFx-0xC5?JuoGASL=TFdJ+{H80u;>dKcI8A54+UI@`lTEaN%d)V6WI>_c^Mwo*Wz3y z)whNzxsn+B&efzQB@G?acy|cA1_AOc6hIyWBw!sEXLxcS$jQ+@3g~9Mp)bI>RWHa_ z@BUch$La1uA z|L_}QrOyd4OEenXJ5)=qDwLQS8_CVu?#Qk{LLv|@A2T-som4AdQc7yLnRjbzizgd+ zLzvkxem1sv+%wR;7{3h`x%uMPmyoaI=ck}HLk>xJTB*S8y03oO&aXLet9<#-^^-4x zG@%Judw8^x0jrOO*`A*$A+iU=j5&;f-7r+7qlk*|UZUY6;f}!9U1=a7HpM!xH!?k3 zdw!;9a997og!>NnfmZ>gz7kR`5o@irb-g<32Xk&GGRnXm#e78sRY7e|~ty*A2 z&%=ign}Ll-%MVWn6|YCV8u`RKVb93h)TP` zjM5cg3Mq?LNfJYS+f`Y*-2Bz#mUCGTob)H=!c~V~7jJ`yq7**1-Vv-G09K1g~sQ=qg9_s zG+r%Vj-6nnF~}W{)Fg)%2D%&}|KMl@US9nW*xd*=o^PF;W7Zt+-P_3Li3YZw`Luzy1+E?X%hthF1}NCxZ}9``6!x>-vKtCozE~*~7I}`2j&zK~e{W;fQRx+L z+1a=q%YD{!`mMcbqFkWxbV9}qS2Z+Z z1fvQ{8!1=E!e9T6eiPe{>OH9YF+5zyMjDeHQOsW6+yASc!uWM(NO&;fd>r5dA9Y;g zK8bu?!9ZD@uI77{ z!{bQfYfWc7>Mi0c?1A6QksbeL==6etS;Rz9EsxBq?Q_j^3(HttVPWBF=Qn5eL8Tsl z7J2|rtDfV89>4{zz*3h!jpAjlM?k%{r+A6J2lR0oKuI!rEDxFIJ*)w>{136w9RKZf z0}+%d9(xja!mrVF6a~w8t{Bq}FLO=dc{2al4VI*%E&I;tE3`6cD*$Wf8OY!(QE^H% zuCu}W_j7U;a@+YMx>AI+lvIWlLzKjHx&3!B+V&dvQciPscXxcbbxh>F_E%4yG)K1-qAzJG)`|z1^DOblY!U9Y+x0+mO<$yz}7^C}ctc84e~R*qcGw+fwJgBtS(Wq2cWsusZh6gUb0Q zMPUv1muiGt3YpqG$8c%Dz_)MdGM2L~$`MrQ8Zh@q5p|F&dT5d=cz*j?n|R2;=jy!t z{8oWIgi*@%h##O1XeqPouonwSu5D<*K;ig2yzJw_+sTi(pWv4%v7#LrF}a`@vtjnK zrg%`ZU}z(p%=y=}+~&Jm6gcz&d1n~cL5HpabpCoUJ$?yCW@>hfglJpJ^oK-VBbF5g zgc*+MsIopTqY zW^=H+?>^flJM_D0HeBu$!Ki3=O+~#Wk^4tFVWL@2PtTn5`(7jMn5JRrHE~-GU8+JY z&WtP5?7aoW;2ClO6(euN)2k=EZUqfip2H8-g=ay1#G_G=KT^D@N6=Rw4KFJjQL2>T-SV;6m=|a!N@O8cTXTkQd07#;zx{9U-!eo zgu)Jd5~LjxE3L4JNNK7fzu=z$!Sk&^H?K~%M7Nl}olG+;J)^OWQ*Yz2rgtl?I_<2M z;o$(pZah*m!_CnzGIE-!{`fNvV01Gi=Y-AWcaAy1@0s146}T=OItqcVfKa2Yt*u$D z1Mb%K>(^^Mer0TNCLovWjOolfho6hl0Zpf}%<_U8{YPjdh4YMvuvbQod%(I9o7)sTiz@9<2nFd4K+u z$q?!zb778H|New*%dkyUpfs#5H#e900P?lP#!@jex8FV7U7u{BR$RUs^1`|&&lxlJ zR5j*}8;fgpJ!WiSDg7Qz&T_f6m>m!`O*tgI{ps(A7#Xg&xq+m+wQ0rO6vj(wNc zzyb+eR(zm6h78VBf_|e!{pXn^kgJ%f+s|-BI|Tq1H*x{kGs4Mfd4`6nDk|XZ$i5yg z@mNq|RxS~Xe#AYzf}$1hq-NY7dr876a){`JDIB)nPynf8n<5K zJl*4P7es5RPc_TCUg8POVjqWSWFokYAm+OgNFmp|Z#{#QTI^MXnfuJ-EgVQ^Q3hXT$Pf!`4fYuRxdR_Ah!(p=$N9Xoil~dy7M3T!27PYBwn48yH;!zJ=jp|JF(h$3qL$5D;{wCU4)onLOP7 zYI7WAc9;Tm4aji5BEDN_3A`yGWaP4O$o8;lz+gXVXc${zf~<;CV<6~Dc^iUk5F;I& z@!{;WmMr9re#yILGN(B4TE6e2qLBWX69Xd9cenx>rYKJX_j{$PnPhuL=cxydH)pmL z2CVyOkj98Rho;`@@e!~+4CukUB9M&WZ)Ip2g~?NuJ&(u0Fg#9oH5ujD4)4?t?RzE0 z`nRWg8M_Xt-JxZ;kD1|RWiO!&t%l|dxsb0NcOBCcOYlEB+cxAu=Dg?jNIJ8*D_t=N5Fm z>fc~YUlU*0>$m@&(0F*@tnG1wZxW9MtQCSjGItRF?Q-WwY5f|4`78!}yaZ+`Ox zWpB~>z)~hT4|{x#lQ{!m(xG`pHDG3hQ&V!0b_|0kCzxvdqsuzdhML`P?K0oRi>E;k z9JQdJ;3V*2ji%&oyRH8UCZT8s^|2rmaR89gKaY)NUxy`#X2`l)^MOeOc^ynqnonI?W$8%qGqg4~ey z2A7yqJX~uD+_lOHB%$ROZ62H+dK6x7yZo3gHg$%MQ$&= zHTwOX9XJ-~<#5};yj$0=a*?}&|9@4?9Vl#&Y!Lmw(BeelhN(D_n8u#DH zG6*OmqNk^S%wSUMV%6E*Ev^T#z@G;O=%hep(E+?v)bzq8XMosG31-ungTjnQwG3_w znpt{s6cvH6l@Z8Anc{%UB3pcJFVH*g_gf2cue|_j9^|tGf+r>D>_L=Ue-uOQ0<~M$ zzOR| z#4}RozNM7CIkD03Dhm&2Sb@0oWix#+@ao$+9!+K``_jlWbO#w38IAZ7(1XE4GeRN* zqHN9z%kjkITF zWz`=C>#bO*Yl5XYwhF!f^HbK3uoQQXQY#0ei31&NY&u7aId+cymk zMQbpot7|yqTUG;VF2(4+sg%R5BD^^Z=4jXQF`t?H{d@PsCVTK^-p?QSF(`sLDSvj? zEvE@ykPrlAyV?*DjxKAq?-CyO3K3W=oy~2slTcy>M_zTVCT-;vI)@MiY5PvAU@$ZP zCK!!%N?*HZ5FycTL1GnkEHOpDB%1dayQe3OR0}PgHI|5v^&0;6`7@GD-V3?*qm7k= zNj+q!W1Jpr7f>A{#rbBPjEC~5zaqzjHZJY?AN*M4G|RvbdrE@oZp#@ukv5t*ytSXx z<4G1UMnxW)$K@B<@-D;;l-N=Ons|td>sQM?s5aYQys7m!ew{)Grq#R7#qPJP;Ae;LV_KGB!26-;6>rXwi?(vABzqW7S<^BZ(ch+#0qv${o7T z6L~W2Up4DLm6H>&e_?r~w!APW(=s?Xid5+UOj9l^vv}0(#Z|(1mxuNHr_hFr1Z)+A z5dVcCxrs!<6sU(b`^)9Mnl~)`+waox3voizv_@Ewtq4cBXw%L*d;2P56pwQaZXz{0 zDuO~5E--b5Lev(4kO*Zy>aSs&D2zfVdah)C(=x=NIqG`LQp*4+Dh2)mxpsw+DsQ$b z0&eliudl~_YV7HOtyW$3DT0YeQjO*G$d*e zB)j08Xnyzs>Lmq9Zq?n8KcFpm;`sAIp`j#{xdIWb zlHHCtgoVx#3=dswnYVPQIJ5mXN>_vA3726DFGK3)nM)Wq!z@=R99sLe(1PAJ)K-sp zjY7oDU{gU2&1@QSmTJcg%u`p$?9#;aH*>sV_e4n7-;$V=Kz-#OI2w;xj&tBVMZhUG z`RdvU5WWE4znJ^-%;gUefIVB6iH+Qm2*6|vd@1FQPeE!;A9zgVJn(t-<9B;E$Jp<~ zas=&it4gw#YlMjqGen+bi`OYmWLZeY8^xFj=g zzJk7^{7fR#d1uk@*E6MgGB9;H^YYG-{a${D#+x#A?1FM^ibIyda*wOlF}^>h*ZVBD zpLWbdvir(HT5*1M|6wNcaE$ zm5*@feO1y2%*uIr<&&4iA7EnxHV0C@j!Az=zfScO+bJ0Hk|T9lcBihQKK0Vb8=M8H z4y2OHD<_}SN4DIJg-Q76(BxyU2OFS~#$hr6h?YYZeD!LKmpcz~uYjuM%ddAI^!ilm zfLZOk1q+DTRnl^$B4mY>(7dXyIFH!br&n~c6iDcwuKTF7$64C01GG7O@YFk1G^%3l z)0|D6je?0(cW8ONC(wf4o%;R-_uG5ehGl^e(G42(960E`00aL0ph%&3j$5HSv*l4T zJ9)sTFNSy6kK?OrYKHWqXR^MtT$he&Z&d~$_FYx%Y@Y&diA7VcUjC%`R0Shpn zPlmo1LOc@2yMxFM0%F6o5Mx5yw&K4Q1$9ZS#HEUOynqz{_%J@Ap{z8$Iwb5aUOiks zAa+BRMNckf9l&q4XqBB-jRy>^_B62%?wBEr(+4&i-3G3rqx#(>5Z{aH5 z;AA_Bu$|s1NM4134dAs|V*Z6izg5`*9uaBt4{v6Q79)_)<3OwCFMZ+eu<<(g?yk{y zzSU)Qz>mDu9VSbblK1G}SpbP=hdaqgzp5w>-M!!+ijPTN}9}Nu9QQP<@#p3YNXHp})aq3Uy$c#>3yehB2km^OtyGSD==tM?tS-P6SSF z;-buvjk{Ow;>HVd0`8@#r+ie6=EyGlJT;6p4COTvNJBJ$(e0mFc{D<~;N!s_e--!ZZLHKhB2* z0Bz5P8J0l~(|pN122lv2Q)wRJ9{D$+x`G-ExA@XxPzjM6*lXlw>1|m=lNDfGCv7`H zruE)ePexFX;&M3X$D*qFNGFqBFJWLjM8vTisTW7rjF^sVJco zcgP`DR>GNCmI7vp0x~1=*yeJd7_zNG(y*%FSylyWx7@FFKZMb6xK$Q4?5q^QBera_ znVT)o9sSu>IK>R72s>vd9L(NywQ(_8gcrSN+Tdp!oW9+EcUOEpH*57YVjUny1H+;| zf)j%tot5RE2o5V}-k>t51rGqM6l(3v7MhP~{V5G!4@x{1>cNGLgED+nTKnpWM8$ZS zs4wE?SJwMFUlo23bYWEM;M$~pJ)+o6&2z`y=^{|T-dr!XOZgT zRa5f9RVmOc-<05t+2!YYsG#7DFo~`H(94y9YQZOdh$)xvNG-{&+ZJ5<0 zrYU6`eMIi)j`7~euPy&@(`4ZK@up+os6Ewt0?? zV6z`P5yqdG>`89Z6-?}XMT2e8O4D%8THYaSFF9S>^em>E%{ZY8)HfiTiRi)z7jd)}F@cTBX684+T(_v2W~MGr zX&7=HhY4kzL**{h4jqHw@bQwCETI?|RCgg&BGg7fNLS$#$%T@$ChrGhtTJ5kylwcs z6^aLS9$(R!V41B$<||Z;{%E;>cGhQf%yg>WaY`nRT6Dm$RZxkx5Htvik(<1(jyyCG zp34%n(!=c8knPzd?!}2;T z?DKwA!#0667HtdPJ>FQo$kY1<%S%~&`efX}CUPQ*r76@Zd7}A47`L-f^AK-#1To6g znYi1VI_X1)ay?sI+`x43r``lGxmKdp+qb?r8>45asAe=ZtJb~cKmI7rzm;46d!F`^ z!2PMlYcZ80Brgl1enwSylZdT<3iHRkb}e8N*v1!?Wpb5H&w82W{dnQD?X|IoYnqnN z8eHng~sJ+Z%K1NU>t-4`?`D9jd)^u{y$mScH~-WZ zzF_PLD-C^V)Fk84Fnax{D%vwoB3m)L;C)BZ$C~}B_j_cI8>)T&u+--@y>78FHr;vG z)A0OO-K0w6Yt|~Z8lF-SAQ6g{?(^~I?0Z)MZL{ji{X9E0*zkpWfY*hjUn1g4-~fdD z#Ro2T(-*h5Jq|b;B?H-E$0$O;dK{Bv*Hqc7O}8Vk*UITQc14Kdv@SLPv_YebD=7Jm z*xrJM2f)0@9sXH;Kn*JSg^RozpDDe?8L6ou{sr&=Yb_;$bgw~=-Q&`*tu#@~x}pJ1 zV^FWx2_}yvi#AbBvlM?xM4tf+1T7O26U5Ir^n6*+Z^jkBaDBN29MngS zADbR2q!S2mH_nR>PbMFp;SOW~E@VA?otv$U>rYK+7zt=qpZxqp8Em9QIXT%90T~#7 zT1KfizX_hl27*x=L%3~l4>c>$nxze9?oCrY)TgUu!1rtMZX7fVCPz$wc9OfhVCSr2 z`&LQ|7UE)HLyzv@&GEA^HrGMNiek}VOvq7z)qIfhbt}^zYkCVy}hsP-n7V;07`FbqiH^`;_~6pnva)- zBhS7uix~(c$2v7#}d%nkNN_w024icB0M1O-^8}Gc5;xs??D)1>%%okH3SpzBx>?4!R;v zDb62n-#?}c0K{-$Sac)xafYOweRR#KAa43H@3~K`w1Xp0yf)|cc0r%#$7YX-Mq)Wt zdogDVv02U_kD9e-_9de2zHJZB@!Ze>R@h&l=c4@5sBlu1Q*n_|wGfzdFgDyc6LX~z z*kW1$X|9#a3kx#mXCJZ=uJc4AI=J=CE z32CBMDbD9*Wqqx5RyV<*FJ?rw*o7~rI7i3nF3S&CPn~_FMpS}O5HOcF?u?VM40D%c zQ(t0-Z$ZWy2F^58q-Heo8}Qyr7V_&G^JtGGpeZdE@)G1|3D!krt=_d?LBFeLm%XE7 zm52F-yUS%axYBCrAY`GGv+a^P4Za}{!G6;H5MAzAjOhA?(d?$D+FTZ8b;TD);~Vnm z6=x%Jn)zQ_uJ-03A|2ldOKE`<9ANCiY|s@hPmQ!g(JMIkUOx4bg7N%Qr4<^p!`hV^ z@rWhn@X!axI}fUlnU8qW&|-T&gYKLZZYw6ri?smZ(a~UUpu?TMPpAxYoi!)n2?wdBi2= z8s^N4)TKCTTjXLSY{7<_lewCT2L`CnH-}&!v&1d-RAkXcMc9#eQ0}ja$DrXbP>$aC zuCXrzTa9aTWzSYq#4%-wN=bD#7J(uB&T7Kgozh+v13W1Qm%8 zERHeLOlzPs+Vc+sI%Ursi`OMBVMZWZ!^jllbd@vLEkp1f86RZBW{_*_HtiDo-nSO= zRgjjGD)wANPTpoCs1L@p%hv=>uk;GW&MckVj(sw2s{nAr5MmjtvmoBJdcW|ofCsE}IyfkSI zd-nb$RsxN#VU4672TgKXn$Q@wIO26bBmp#rRNx#1J-H}8uLlV@3co4^%d6(zN15t@63*e+d2p-@$lsX7v}ecH+M{8{vbfjg7UZ9dgve zN(Up{p>+$?w$7$cdO<(m&#s_z8B5s>=CTp@bxJt&Yma8m5J$sy+kQW2Zl%7(USfL0 zTa!4M*fSOwJzpVon11HnpO$U?z>~3AVCGaDQ7~~rU@3Z+;&9ZZ-J8A}K^c0sA-B~s zS=rc?E%l7!?ccd{w#Z9Y$0A9icI>(2PQe^UMR|54zvqBCTY*69#1rGX?2Zp`sL#9^lN{sX{+OyB~f!~ zmz^Vi=bg4j>uck$hhKK--L&Ix@Sez)r^wf=J~`Op5X4Ie((HJb4LXzR6< zsB-DF^vA46HSfjeN;#*cWAHq}b;i_{r8m;OyI&ZgjMft(TW~Kcz+MpXqv%JpyJ{8w`D)M<5)ZeWWNNJp+ z%t@uRv=+&TdC>SKND+7wg*}wR!!EsT*C~d4w0f|kwX3lnrY9}TLD9fooTbF+E1HHZeO9&pOP`+vB5^Ju8w{tq}ymdFeWWhYej$dYC3 z6q59{WZx;fFm^IDc4a4nN?MeC%h<*;_9c~lUq<#ZveR>o?|uKy{rvg-`q_ zv!|Ki1YM60AMvd!G0`iX(|au=4rWIRMBfk&k)khOE`kc28wP_B#c8i$p^E5`ld*uy zmwSZn)`5gmq5{tjSAHAs7)|7uZx^}Sv$heJP#9r$CY*xK5HIVn}0@A?Iz zfzAs$_6tO|Y(AjOfhj1QC}@7V4Q!qwK^xJHvyng2`q*~1xnBhof{y^eKl>~ekbBGm zrbq?#BB)g}+gMf!fcv0xo%hY&+9)G1KDta48it%6IF=iFhx{rsu?AwF{5NlSBmtrc zdTIn<2%mX0fyfvH>=d6^1q1v?5P-uDB-@$a8$NiPU3Dqa0HoNshR!;1LHUys&Gdk0 z(ozDx`0rsck^Af*OjI8db$y^R^^Ft65`~N+SBZfkC!pf;0R4yusF8^(Z$bgZb?r#r zE&-hkDDaDMPjmXNkNS57D*1u8HtD~7wn%Peom1=t6Vv>UA8#D*h5q&1$74BLfQv`( z`G__{Di@;BiD9t?I~ZfyeZ7Ko;*hykvKWyov50SmWk~`d$b;VDOJNV3_A%d&w-FIMiAngX!AsKrVXVqj8dt5mG65PwbJEx~Sro zkG~&FSSGo}YnkZY1XFLYZf0`GfuRxtP-$$O{pTsdH=Rgvc+-&6g5N(-+UNqEFau66Jkb(=d^8kPxn!}h03e2(?@m)U+Bmjz!depRU)-i>Sx zd#${nw7|x%Io-ehQMtc`*5MrOQa$Q`Nfy58V`MaW_^5Gs`de__r>bA`*?_@e3+*^2 zs!>{QZ3z(uX29gU1>7(USPW=d6$ubMgtOmH;@@-=_dSFbv$G zJlhD~l4m>-xo@97$WLohe)M+p$DZo$j(!VG7|=+NJbSJ~e7bN)?l2D<^&&8}pfG$D zuX3|N@k>#|g8vwPY;TU-I4=A$zh?Z^#qKXd0zLia`uc-7%p*0p=ebo~4TsX_PNX(WpVjzhRNf>hPl zKg}OqU;ZBZRld6UP6-W(p`Tfq-Cbie+!MaPl~1z_*h)uT4uB*;3)F6_Wh>W$p+|hX zl=fUrAm(ab`^)g~uwQ3#pXMUoJ80b|NfBHTd1gR^!C~GgxS%R-vvPNe1T{+MWjFw`5gfH*bAo*elFu67m)|HyvVdPrs?)3 zs(wOiG-C?@Wr8?yEfvl~LDANScrY=60O=8)nDk5wHY|}J^sBGQ7zQKu&=0#Q(!w@Q zXocK=@)K{YsMxW?cK501fCm1IM4z1AtS?$#jW`eG zdgmejO}Rs;xK5+@UOtc~5#1uIUpfL^3@WrcO*q66n87qMFl_@jh{IEO;ViXn1yMek zN!>wq($n#bxP4JAB%UK(1#=mKiJI-@Ja63?mK1yFYpKY$7A zL^tqxaD_=#k?Qwx&V2*p^cHzAFS!Klrx!}&k`D2yA=Y7x=kb7Ds7l+C2chb0?v@9< z8ZltPF|BE-1L!m7cfj^g|5uh-i#7{*gDt-n8A^&2RNDe`ur(fPJzkz0Qz%WL*}Lsz@#*D&?7pX-ANO)_JlcvE zX0rym6Kh})v@scUv|g={qH58dK2!iliJH|w!Er>tyE(m?+Dg(75{WiWqMh0ebUC@p zs3*DYUd-EA67F%RNk*f0_{MJ}!m4h7iTsWzSfQtjAHSdNxCIPKQ2N4SAabF^hyjhm zGRHl&TNXV42MSm|U%emg4*1Yt@2=sLRU9^(Ol7-m-cggy?82hGZZL{Uk;YM8N|OzTI2v|aj2a?;^zlYIq>M+Kv|HM@fQC#ko2TP*|EZ}0hfPhBUz z4$g3fK;s3yOp0hxfO4Jum#a;HD$&j=FK~-LywvFY^0MRT47Ygecfje9pCB#fhn(9M zn*juObEp9aHz&M^-okTCj>ATkD>-)$;m5V~>GNlE1h8hrsE-gTl(F(T=Xh%0zi;Q< z(2lkI+6-K#@WJIS9xV}}@a*5x8`q$369lqI=x|gAqgcU{Sb?nd*PJ^77Qbuay`Rg` z{wM^KkF7QG{f(_jKKzMrnW@V91Vc=9G^$>U{mf{XXTXvisswti90{u#A2lv~5?8S} z_lE;zN7GBzo}m*QgzYY=hw@(wtB1Y-_sx&VeAmVdXPdqTCe31CdodXNv=>Y z&&3vqSxU@3Z&h{ZDQl{*@A=bBW_K@AJ1m6t_LCIRSD2vQAcs-6_d<4xj#WPC8GRyO zRqk@~-aP0DWa?F>EuWCK2mc6K22$El64TOzAPIJ!?mCGVGO?Rtl<-RxLacq9*eL)a z>dqK5jaYv&ecwEvs#Xt(WSg(j)h#=^pDU!$ck_u7QVsYQ2m54ZcsYHOoFLxjLrhDf zd=Q-EdcIq3;PCeKXeDmwfXdCt0h+S2t9yrviw8=lXR3AnW%z@~V9XxNO=sU=*-A5% zqfWxEe!>0~)Bv4W{M!|!{Fjz09PlY#_)Yl>^pyGMB(lpb*`)MeGfaE;*Z8B@F6%h` zTd?vi92qCaF;V!AynX_puyfKzuAdD<%FKV*h3 zJ=7$p2s?)}58%G+pGSG_+o!X#;FKq9Kqln4Mo+)}W+Z3;wr})7h2Yyz7NP$5bo$wd z$=b?Aw7{q1=R;34oc?I2|TBua0QW zr7jMG+ISO_6;5w2)}a#StzT%SCdQLlMnC4sec3QIPWw4;R_76@rjOVLVaKzOdRjHY zOI}S3!0CgjJ^B*CDSGHnh_yV%oW}#Rrsc(?^q_@Murp6OOnGzYOZ##al}7r1{+N5m znG)q;XmkyB^d>#aJEhI$dc^L_+{WU@)3N?p&cFLu#et^JeZGA39nvHUY8jgx4^D_R z)K(n%n;NY~o;NP`CYCp7`q`)IiHUA)(CSutK{&y<>!@cfy1yR3d3W4X+QA~u>?}q>#WT&j#oA%Bg8S0EJd@j{Gzk`v<*0wa?2B^&a= z1}WDy{ML7Y)HdH1D8c1hO=55_G4r;QbM+xDLE{{ zYvMh7Q8)fTaOY9hHtAOo+!gayf+$gR`?i0gUzT^A9PhO;X2t`eaZ<>i&z6zIXuNS1 zEy{du1mA3Fd-;9VPHq1mjXe=OR6ySi#X3(8)fijfcllrz>$WSVUx~{ovup?=yJoz+9`0mrR!G?ODm*UQfA! zLc>E~AOVR}jN7cU`_`1jbmI=+s_IXs@d)Me~mJuMrRpmI?oD84u-btjR|@&vHFzE!_a z)_5FOIR0*rCy6McKFIrehxp?2IH|bYpx4FKi|qpf17Mr<78AZW>)Qd9O~Y2y0CKl&`1 zj_E79C?Jkb_`hW(Nh05dOhY-$YT?=BUWsP5exoE0R-{cNR8nZ(!-iEZ3|AKtLfO*-_I5q6QTX*|FXI7tvxQ;KSI(WZw~w5^QAzc0ZEE%)cVFX_~de?Ri)4Bh;wcLPRl z6RIz_`J3_ZZCyhw)BD6|EdFX@KJE6q?&t#>j$MN0y*=3Yw{q^K#r-xe&~`VHUj69w1q-XVj=_XND+iLAM=pVZE6cgvOcUs2noqUJ_= zzOVG|l5guOeSHzM7q&v&0si~dLDXjI_@u}EuY3UPfz-?Y-ya!{<7!$X?{R=y=DtN1 za=b#Fs25jNG@j| z0UCjR@Dc(Y-YO7x`v)H6P$b~%JS&Y%vTtxgi~w%goi>4PVcv&tGt^pn3{6BbTN(P+ z1h|(*uu=)J)ZyA8T{G~sY>jt>%t|uo=I>i0{a*d0_q&ws43>Z!w%ock%tshV>{oSh ziP#dD8!k2AdzCdLG^JnAe?NlK#jDUJ*7at}@M3rRQCGwct21!z6?qMsiJ5MAIjpMj zflC@YcxC3)P8`c$<#+B9k(mow=P)t$H6~wN!CoLzk?|uG>=+{a^!7px&&3@4?a~ZD zd}}?872^8msnSHgRFhj-snb({s}G@6t|_Y^o}aHtd_c$5mxyCAL>wKi7PkO(*+fLl z3@{gcy;&$vE~Tw!3(+vF|ds@-wO&0-VL(N z8#ZZ&(5MAXD3Dn21%aJTq}^L#s5Xo~2Ec*da`WP#TlbY?fdcu|FeMEb*=@^LyeP;y zI~<@h!j7zStaP+&C5;2E66@_>0Wsn5)sLWdjkNOjmNQ_;Ex##os1EK-o(J_Z>*JbW z-hXW%OiAHBcz#V$5uU3MF`L?|s$b`ClhVG7UbesDp>}mjSH2Gq8H^574I?IQsIy}k zE#p5F!~v$kH<=t@`#pR&WOsJ4jSk(j){=eiI+Z=|2V3@q*^{AGq4lOTP&N`np#w&# zzz(pRBa`qaf`hlFGuSk%438cUpOQmqGUNp~8a$_MI_LOc))Fa=+ny$)Y@9tXHa zj&gNQaXeUA=arQ>mY*+ETsiBYf_cNPt4T7Hg+FN1MuYH@Gf>zP_zq{m?a&=mkE_(1 z+XWAXaz9?i>#m7~wqEA7>3p%z_hSZ-H)a8K-qZb-g@a3;3qlTa3>xJP*LE7+k@Gfe zaFOGm9+hkXNBbfVYUL}o!UJTK0%{PBkyyXU2BM5`niDN(*QMCq5gU+!N$?;=aQL)tB^g8Pd7jU!MvthlBTOC$gpM>z zeHA@cKXSHxtsD`Qa-};O%Y`1riZ3j(Y;Rqe)zy*a$*kJaeB(NDS8-)=Uq!b> z%g-vr<7=6dRDt@-#QN|4+D-bx9R@?+XDh;FwjGC=$m8v8{E6Z`=rK|OO9e| zzztpf`7hV-zmV#A@G`zN$!RV9tEeE}zc8vxOyJ1GtUyf8oEC|P3GqCc0e_ta9bt$1 z-#*+LcruC&!f&B`~T^WN=$|67Z{I3IHf+^CqlCV08l<&d-jg_x@cuc5W^#-w!}jK z?Pkb8#Git%Y#3Si^O@BL+^(pq+I_of$irMn1Z&+JPke#z9WC n?^4MNg$ zRYgTbnx0Y1*ZzX3iGn4$*1wfp7#uTUxfCnf4vyHcFMb{2D>i4E-0Lt9+dcXgI z?dT0s(QM+v&o1dYYn(#(!}ig@bPi}-69dIz09<7Lpx-)op#Bbj1%d-u7}2dB1HAu& z$HDxk#cw(o_r~YX%1;q9{L(`Xm1EE@dXtzN88J7U?3yw!AlHemvxkQP(@fctLHk=J zz*W~{XL)c7%yO737E~8FWIVWlEzY-*c0onZc7-N}xw*N~0hrkrvR!81J@Gby1@>$? zsX87_OXoyZHP@z5kz5VXR)rcc`9eC_Ev4=@*#W$A_NS3$YFM96f9C`G<$GYy|8F&M zOF0juEJ>u0L0mzw-FUoG%W5EyiH9`-*>`QM3FbB!d~I5oP9^6CA(Xh5sAw{!-BE!h z?vvjZd9FZ2^BKV1d=`FRaod2-hmKWB$Yrdev%2lU1)Bis)tbOPxBaaa$fVqTWCv)~ zi5x$3L@4me4|k>VSGfW`I@;TWfQcv_z=QX;lE7#Z&I;{E`l)C@cYz`C1#raeN)7%h z;;S(SYHokKUf)r`U);(7cO=ndIfuA4(|8L2~=vLo#am_`O4L$E?9{ zVWS}7&ph`jAPt)rF@DySA#(ZVd>?>WlONhbg#|iBv`zso%-;HO!9TjC$ffM(dfSKC z+XQ?WSJ_v))d~yZS~rTuP*0+!Vw#fpfer1uI?H&ld^&hYTA5Xz0cR$Wd!~;cPq4-{ zwMxWecZt2-OCaT3x<7~pTzuwypiBEGoeg(JYyr?_QbLD?5@p$X`%MtQ-BF1p7u6*H z@J!IJUc*R1(FhOdsWK)CV8n+&#d)QyTsCZM`}!op5|C}&U=o7`s@G}%xXRr~>l#E?G{O6$az$wngI1@}KtMR04;CsSFf zNPyAudMRdMJ~5c;Awnt_m=$ee>3x+)D5f0dUeWiWfkgD>xj_Tz!2&+F+;72gd~@KXe8}tYZF)0q+R93GE?%XTj4x`T5oeWZ->wx zs0jYM6N71kO-9mr#5HQ}t8L=N*K88$lc+i~Wa#u`3e)DP!<&+0JKDRur5swg?8pW| z>8>0Gz!Je8IFIKp?Pz(EdW1;&5@r59&)<`kw}=dx?R0%C7V+Z++r zKg#qK4agi-GXD`>qnSducQm5G-fHI^Kc^s-RC1Z5Yggz!OB!kaNU@2_3m2yFe3h{2 zdm*2-Xpi~wUfk>doCCJ~Os+7kHC-jm=2TYFrrny0vsb5iHKugrqsXQB3;ZlgCzRbQTK zly)Zh0tS+BrVqrFmQ4PEWDgy8&5Cve+&)02_35R`HEmp?e{Pk6xx?Ye&e1d3-^XYy zA>PR@EGhe&;M?MHukNlc+{Re?<#GE$Dq0^>z0;VBK0Hqv&yEQd(nzR#_D_#kW%!*B zcfk{gYR#0!&Yh?EKKs8X8IRZ{05n4)Eeu(SFvowt4v7ZNjrot1|M#(~AX;$e!LofN z5La7uFd!kH3OG5~%ET@d&F<)~<&sM1E`g8uj*1ch+DWy}X0~}rRARB`yKN7033A$P@6S&w7^q+tESPT0b-6`)eNTPF03pG4YLp6v&CSm=@M@r{?pJS~tzv)7k+x?$UaL-zJJ+Wt|O->t(!I$`P^#r#V26hud=C3~t3p zZOus>TeBJ!>^$EA{DCHI;vxT?9+-y_%Oy)vq?pPrs2ONqeDSSEz_;)q=DB_x&!;UH zo`LuGb5>L`gNegcFvaxptas?Wy7!Pb0PiGWL@;%)UqtD(9)MEWtfKy4DO=?50}iB0 z`GlXgv%14ai?Wa(rh(5@@ss_P&&7vFz)tVL7yV&jv@tZ4*lN=Rwkm!Wn!C*TB>L30 zP0LUs;$j5zK8W_}q!bW41xb&=P0ALAc6OXS%L2QlUA#h9!jgat8Fsja67h`7oCg9d>jc%42AX@jy^$o;SO$ZZ&^WAAICH0!&0`Owjqj zASBh@5~QpU9au!k8UQqQUvK%1daT(ph=J_yR%PL>z~ACsg1Y`t9fjAIMl3c{|C8sU z#yNWpxePYrNIlrekG3hj(8D2a!F`q*HAv8mY7lJ&duT)TZqMa|aj#d*Wl^fQC~VnCaioFhe|S;AuA)`)@>hkdkxqh{o8W z3#eRGXs&0=IJ)rtx}vOSfi50lRn@wXitnz7UF@Onxprs^$~BRg)zwu6G({hk(+D`b z`i_JHKHwKxn7Dh-AsgOtc6bjG^d4TEeJ^~Jh6Kx_E+T=H* z*Wu6U`{3d9*7`}@=#j*8SXNyW0Qv)jZeijnA$TF)Bs@zpWxu4wQx5pNcTt4b{@Y_d z?X;Te%#+spKo%7Uik00mz%W|%$3L8x)jYn~MlOoDm492zK}@_`zQbc)goK;@rC<;X zx%l!vF+>fNmO(Qus`+AtdQ?N)_?B^(lojv97^0-GP$0|(OJRthIpm?UTmB4GYLVbP zegP~BYmB3WPO>k)MDyhg z-rz}s0ksl>k(>S+M}?{t_q#WKnOCH=j@^=T_l;YhUFvQaI_2KYkjKkZX%1>wFdV^+ zlPbLpsP|J|GwK+MnQPG);L00 zal7pK4M^xK9zU7pw9|Kq9o?LZO|M+V5)V$S0MyAdP)xobf@i-*-_8$t);RYM(F%}f zYnxhawheMe@bhiE z6@>xM_sn$YBx$NIaMx4kP^M~-^0#8A!u?#ZPg-!0v?(>pSKU0bU--{4UUqci^Qf~!>_P%K!T$gDN3E!U6J4!v!Fk)4XCq*6QmEts z%O)b}Za-quzL3bH`L{_7Nk2#q3<21bsN0C7~D*Y5(+9K@w|iyAmGX^|eE%E z`F_g+9Iqr{QsfA+X?6jOr^roU=+?sOj;04Tl`Vky(n36>sFI68D&wO^kDf^-xx$m? zr4&Vhn-wu~6C~UCpH>KD7j_?*)_CM&EhXYDgwo6C*WMXB92!>{K*nYG&HW}cIL>%& z9d}6l{|`4GU{peGi*XN)0WYnI^DDrB9)qOk#SqWAt*M6K@$;(y#WuS%T^}gD2C{>R z4Y-kI@XttLiv^H5BO}`N8d%e3$oaX+c+4mPwdl4NF=ZZ5Kvyi5iBwB4f&TWuvf9mD zsRk%nV8oLA0R$pDcQMiaAw=r7q~yL7LS{S)!nskk3651uZ}q*rO(mkV&T4?TYY+H* zyh=Q1MyR-C`g38MnEe;9V{79&UspH~Mgu1wR6k=dk#xEGOPIL=VaoN|u_t5JVhOPP zDBha^6w!#QC&C#I?MFCs#emT`F5?4@o_Elq0(El&Trp_BWU~=?PR1^PuwwraEO7cU zb0T&;>sKWlbO3v-)cpuZvsCZijgAdoIa@v9MT|+5cUBdyAAxOyLV=`JNW7caaK+9M z6P&^3j!1-^ju_okJ2$`1$9V+(41{6c#S#|t;3S6A5ULU^B!5opDM zjn%z##lll&HaXPAG9V6;=AqgR>gKpYmgX2u;>-^(c43$PzA{?k$p73+j|(=rovP?t z_Paj?;O2C0%_reQ369gCaUQsxvyuZP6V;Wwpv!N1at}4YDpmFY_#xa;D zD9pSBq1GQ`C(Y=4TOtn-`#41-O0VP@-E0;d7XxpSi9ch!_1 zv0fv;VRN}(#KNB3=Tg1ARfiPEa?5z!)}jJW22ADpmi)Z1hCCsU^G*650>0IS|DDp; z;+r4<8NMJtI1-M_9(Z-Vi+V9n9wS5bhpWwX!FEjH-w)0$k`O;n9>9aCWwx&abwwWV z#tuuk82?5#%AiD{Ubw+Au!pg_09H6%NZ3ZTii_*%oE-?&1Wo=x4wWvz9TW4s&i*&{7`^1Sx$Z45C2i?v--Zq#j@QDA7#`3* zGYq`%OSE(Q@7Dq`KG>q<^TYq1KL0)v7|uND?{xd$U!sXFG&H{d{4c#T=^t>YnXJo> z0*q43j#|t>Q}0G!&EWc}Z#H%m#kHCH5gYN5Cq9+cm4}v2j*4q3uE95dn-KOMUKjeZ`9>FQW841`wo({(dL0`ReKMWg zJXQUR-`%Ka$ijP^1r~Ukk+?0_S6S0I9`NwMJ5eCiZ~R+I@|{zEAZlF7mFrpv?DSs> z{TQN)i z7xMvz<7hMK9F*=xXvznyW-bWMZiaa!oFAA4<0?HS9xmiA>-Sf6k1m1$4`Zd zW2Lt>j@G{ve#IL2Eyn2@Y80@`DL(2Qfp%d}`Ew3F-=n{VW_Cwz`LtRXf zu)0WqDOxAt?TOyltEa=sQmOIToLyhm*A4%cjJntAF3vM&IS5HGRp04~^Bp;`8jp<+ z4HVpMPciuF9?~VXnq5X6t8$Q0JM|)QeW}TeqQ0V8=28DqxP*)Q*ZxxJ8^uB2z2@t0 z$ilLos0PlrJTSZ6uGn8bUljjq__e_zBh!mthjpmp5AP%^q<_K{6I{PEI^sHx-xbS9 z7s0yY3=T#{^A`vIk#p3PQEl~Y`*GXCA<$O0P~md2(f$Ep|LEmX@(;^Lk8H4&k)KAh zPlBAD!bd!VM98|+?!aUVZ}JQ4_Br->9&x1URrL2tSq5m^UcVxKn>PDTRdwQ~=hI1Z z!QnMYk@ep8mOkh48El2=>D;Hm{2vW+>$-_?F%-z`WOE1V$f_xiB?udtj} zk_2&E@DM+r=&>Y0gGxzHKXPQ!vF1}^GWh)p`iWm7O7y5+%wr+uk zYjxnjhh{bF&*mf0VBWO9C~Bm7)z9tB43^pz7{8C#OQ}*xn*+|Vw(+&<-7O;*X2M*I zOp_DjvXl~wgUXi<#4}c&9>fd#o>JI>4#(L3KKzrgw{=wSKSR>StQL5$oBSfwKMAlB zuX|{h?%(!IsVSqMFGB7h>b#!~KD0XswPHT_6GHo(c2M0+`~Y3mFndBRA<+F zE-@#ww==J2th%!(J<>5*fAjfE!PH3Rhg%}Z(swxyoUUT@vO)MwV;?Cl&+wr^SV7f} z+*%RmopJX!+nzBe9i9NwbIYdwaji7bJMS&+ct%CtEoaqxMchC333h){M`|OK)X2Sb zUd=chyTD%0{B*EM@^)GH^mhhFXOpCy@pGX!Y`jEv^UyPO$b!cHt>cx5Uk{|7e9K9G zTh#Yt{BMHK-4rSHUr~1$A0gLDt@pR5t4YS~93h-5J9bhYA&HNVEY0#B=Qq?6UPoo- zB)2TNtuGJRaMJqcUbWoRlxxt24fMB%gSr9;x@rLHY{ zeSM$2UhOrC!$mFrxf7p^+au9_NWrH4rT8=M@4)^v&1I=`A1j)rC#>7K3O>vSmmKbM zRFBF|xM445m-CSy)jPR5(*YmA`>b0No3|l5-fxG(i3PP7pgZ)y(@lJ!n-ZJT0jt7) zd+t34taXUNdmVg1?ZNTy!ra4~i0DXHe%ds|`|;@m^+|>Dr8ae^i`hpg%ZV&Ej*C9H z>e2H7<+!#$lfV_ro@^h5N22?}bso9|nuqHjLvM>qww>o^uF%vxEsi!P#5^`ZUP*9n z@at3S?HTaed}HotYKE-J5*V#_HRCkstgq)!>CzaE>iYOpcR7wmc{-?gXg1BxF1;Ct|50+PscGqwW7iNm3f|lQ z2VK@TjufWKhyvt|xs&7vb_cWHJ?!0zC; z!}O8c)>f7_yA;b2qW!g*YglgH6oK^m>AiS79<_h{cKAPm>v@5;*&8StADrUetpWbU zr9n~Ye&-y|;#;0~Luc={@s8V|It~ezBYF0p|MZhGm-rO^{kd}cW!1jGMu95&rwOWE zFwlG;RnP48&U|NRmA8FH;DK3Q#)uGS^+47S=t^G*L)NAx74IE2%a8u6^%tw^w^N6U z){AR{eQ=ExA+pPJqxG8(Vt;;x>ae|QIk<$!#u?3&2H87MtrYA+NaE;H*Aqzg-hffp! z+IsDA+k1Z}9b+ykmWpaO6;N64v>eAttp*B)?yK20E6sSy$-Yn4#5$lqz|B@gT=W_w zq<&dJ4P9|TEp6sgAsdF0(~ZmPqT+#BoFVSh{a2ztRD_!i_0EUTJu=Cb9qwqUHSk{B zT&t7oHAYY4Sv`d$%}#&y)%yD;jQf2LF<>EYif#BTM_}dLPaE4iXHEB6Q!`{E_#!U_ z{e<%;xdYL@)GBeV&lX$xe=RC*56i$d0c1r0x@?=ZJG0uAEqd?IYOpoUra@gL|qbYn%! zR!gE+?g}1bPM15TGp^TIG1t%XJN(L2I_wdRT3=c$$|&nP-~9G%s3Y^NcF3S>L-6sWkP|4OKMq)dNp;XkmADhWXK!w@D;!c{CSEH;>yfKU5K`IcKC}@f$UA6nNTG z#ktNRmQt7TMegWhx<0<^b01adfP?ip@t$+arm}>1u^x0kl1}6Y)&0PE-*iL0vT8nG ze69n=-|vIC#t*D|1Aax3xe4j6MqM@Is`f};e#=Ot-Er;gVC%rdujEg@;yn?}5N z@jK$SNLCHa0DQhAT9h%Ke+>#B>8w?SrNyJHpVL5U{JSQ-UDnIJUzU)OGaW+>5&ZI= zu?m{n{G@Rn*`*>0GQ;2a2|}!XeUbcf>Cl79ir&ot`K=N<%ykw?;HkxG+ST5NCz*{P z3;iAU$-%u;Su?)!k12Cj-vmW4n~^=Lmq|`~WAlLXG{>zqmWO_^gm6M_+u`r#DOfeZt!U5xpw)ht72h;^-5^|^1f^OagS%l-JX6bKfAYgnh8PR$0SN{ ze&N%66inAJzSq+U?|%RCJkqr}S9kNuvr%92XC=xoYc?u-&M?!Q9hk*RRQEKzLzi~4 ziDZ_n;=V2FM0c~Eux7tPb=LWW0~jbV7`UlBNfgs;QjcdS1o{H#;7cHi8t3Hd>Qj8r z+nX>S8)5#gM#)?MlVm;;`bn%gI=y^QjfuG!tp8z=7=uX(6L*fEpG@2j+vr~+kg95> z7mJMr@sU()b5GYXky@4&1f8a z=1twz&((()&8cljkwa7nEb*PfIf# z=3anq<7ukjg*yn22%67rk<6vF@L@c(oIPCqXr7Y?Qrgn=uFb}$l(Te3DnnXA5q*ik zdk%W7^-;C)u>%inR`2P{CBD$MLuV9Lr~0vrunrY3w7W_nA@2@F_I>CX% z>!qpTY0cZGuH_zNV-Yop_+Rh^`tYALq1~;qkzymVh%i_2{E1Fee%!LoJv44GCiNwUuP%NdJzw9Lrrkotsz-#^PRfoDmJmmN6+M+^Ftn zpEmkCN7l?g8sWJkX{{aACRD|dRU>-{ip!?{RDHAX5?wQarNXf}^;WMBon<3R>2(}% zd(*8}(IgbSto9-xwNzUkZzeAn2ii-?Rdi@DHWP~EM@>I@1%HjTZJztB#_z*W1 zTXOgLpY@7KPEzhtrRzUBt)hOw{i}a^{!H{KuDr;Sz4>~5U$?{?qvf%&ebmm*uzIZ= zBG7zmbNu~yp>S;E6nxsGp09oPJY(g}e>>VsfPQmziV-1U;}1|Uj`mV8lmymH=ZEMz z)l*HA7w!t61Cad`gcz^7h7U#GMI?vTNX?h3RaZrWoagq08~1rBIN483nID@aWzk3R z-&(yN%63&Gc#-*u$SaN(?H+D!NJvlrr1pz}_H00rm1R^Obj#foV20HpFQ@WDj`%Q` zwFC@yiU)0e&9hX(Gr=)nAqM6}(ifQ(OhsWJdD?Udl0`qQYf)zds+n5Xv_V*PW(j8X zt_I1V&y=Pw`2Mmw--R?E{q* zC{W>*45C-5cn-;CXYhG^sfsmRMPz#3Cz0$MIrk}8M()0hu9r{3DzzR>kt+soUMcCV zVoVF`&>Zk)37#Pp>m5+@$fov0_tP3iWkN-zlwE4S&@wuUmCDn8s8MYub9Rk~po8|l zXHCL4@F9U6iKDY*G&Ixs3bb}C72G>B8nv_+UXesaT9o|kdO>m^+nB5|MuVd`3bIlv zkBwj5b9e~i2>-UKP0=$y-l3UGhhFRxM1NsprsUut;~00r&Skb!bO~1ydN^;s6N$~- zZKyPI;c|(pyLox37b}IXeC-`1n&p5F`` z{nDavFFUnca2m^0*D_?I((s3#Oa;A6kk1XQ`EoJj{z$E{3pbRr>8%Y6Vm0&@tgc5I}0O`FnE*}Jhx`XGk`gItniBoQ+)zVvl5!>O@+Hgx@h)piOA!)hjPQ^T>) zL_W_?_$rC1c7B?CuKO7^S|S^*9tM7_HWMog)FG{8Jm(TEU;l}qkqbIjab>GfnqO3n zOE5mc^1D3=wwlFeYx%i<9G%N&s%UfJsVYBcZnG1!eqLVR+2!}rMy4pFOQQ+Tp{&y5 z@w2De%n856IHiD~z>kWo=!!AYiF^Iz3^dK^DaWCL881NgP9g*I@gtS;=%piTlTgpP zJuKBKjGR^F{S`<}_4IuTMxP20_n2SwXxjVh);SJWi-P?8gEEkVL%$`FF% znsBO#-lG3}n!KlQ5}Ogl*n_0R)!oyn&Sf-|QmGxKpheumcPXWZ%aQS~&Au*RYy9l6 z``vO!(C@KE{ME}(o<3C#R*-5izFEdOvkT}@N3M;_V69B=~Ag36RpS`m7d!$ug;C~0K9wM1J#LI zWCe}jEDQ22&x(Y;o)?L;FJBe(P1DdmeB?>8t05<|qx{{Jr<7xV?Lln&RCk%}7TtHl zFwsOeipUNig-&eQ(dns{==hL``P%`)yRRj$FFy-B{5qwC@2eyi_Br9 z`uZ+cnDfML_nX+C;MZiG{^5CghXrrHlqMF16nBrQOv=Z-sIl=_@Uf;To!Kb_9syyB zRo{RSx^!wCMTt^}$xQe-0#`k$#>x}7E>?(MIp92;fr{(ZeaQArdYw3GYRAnJ^7>~p zJKY{CD?QnFP;tef2~(?{DZ)c-5PrT#XW^lM{|(LtTBp*~6Sz<8MD`Pv`uU($dA;>O z%mJ=yfN3Mi1BW>jOk3S!x<0PrTGB?z?^gZO8h1Owq>r!9=rD1?&vU}?spX2CeLLTx z7l&5^FpF8*6o$FJIdQ8V4bSOxr0JfK=kJM>!cSSaj>WtSvegD^8uk-69O@4}&URjbL{(Sy5+RgLA#aI=YlNxY|}+hlF7ZNtQH!&0|`$jO1T z{j=)gI@c8JZibEN(D(>*wckQHA>xG-_EA+-;NDthq#Ld)(O&W7_64U%5BZ$rT_Omq zq)gA{3rY0eK|N!}?!mLoA8p;4+in$-L+rq)dW#r zmgz_gAH9TQ>)1u*O`}Cob*hXr)G zPO9Wcq}|Obb6ar)d7R42us*&w{X_)sK@<6R?yHlTcQZ6E4S)Ct?cI~z^`}KWu72#V zXvXzxHVjvz{EFRw(Isb5S3d7-U((-Q zYJ|B^Q()n=`^O=4de;wWOO_&5wnfFr7_>e9$2Sn=T>nH!s=}6Su-Yb7oBWmv*Fk-W z9Mj1)lyepNGmSfz4#aD6ZZ6}W3cx7F05U3@7VU6TAkqV56@G(RjVv^be9k7R|zpS=#(|h(OWNmcIq3t6~FJs zq4WQ=ckcg8?++Z$wS|M(u_dtz6Xvc-q$Q4MD7v__xt?q|Nk&8>G`DiM6P+B&F-h*% z#H6w*N0@C^ZX-=D3yJuC=KKAg^F9B<_t75jU$)2gcC(lF^=8b z=-Vj;7}Avh>7<;1!^;(@p9Be$qUmZF^Gd=96 zoP3O`TI^z}T97nUKfVA2C#llKdx8q9o+LRtI3{TiiIZCsB==vL4P7^@ z${~;M}y_0t@m{#v^W=?srCh^%<-G*g{$E(ywHzs8Wj9ze8oh3PGU0oQ`jDLnX3hj zC@?c>;)=n!yc8>{MvaEvU5`>bmsMc-?ki>YxiC(3`6Il`mT#Ri(vcHhLv=eL(S-@Hdtq#M&B&{t0~^E48)8B zSyAhmSzj~KH`(xOzV;r)%987N34<~rpFUSneNQ5YmEu0@tJ^HCH%M>&C!Z2}G2S7QuQ#^&ZM`c6f*P(&G{TTk+U|{^&$a*u z%v(Q=kk-m%bn(+6u6H*itPbI^3K(bPBKYd%slXZ&!f53$WU+^ zeN~sysnmm?YM$%6c`3i8VF>Eyy%|t;`c&?PcAnpXud;=pUhAGsPFuAKLC22@@63>Y zw~%ZAJ2a4xGd^|5t#H0*myFCN+zXpwrRwZhXhL$q6*RjqL><0KH^K8?nwu>=rKFx{ zw=_AGX$W5uar19nnLNfqKP%g+A%;S;u!)A;*{P!g#QihX#cTe+ig!t5BMtJS+TSPDzmeddFx(~SCE_?s$5!3;1%Q1!~XS@L%K`0 zuouW1w2snCUlG$?@y5u#UET?PZIDHLjGsP}QrL56wl-_+*Tr_jWtSTIqFWHjW#X)xh8NvdMlVE`SFK!({lTP<(MuxnB} z)TFQpDJ%)MvA$_{HB4uE4}T<-4mC>QE4b}_r0eQECQTbNjehA6qYz-$ey|qh7J7Xm z<$}M0C-;Y7!`FHh>qm`l+vE$A4m|#Bh>~4dBsQBuh~^oUZO@Z_(4OqdlWSNRpYyX1 zn0=<>wVP^QeYbo)y4@2(y>j`IRCPZh*9CK*4OLuR3nbWkEMZ}!2E8}l{jh{jT_Ul5 zMPZWr^~I4mef*~uWzX??=axl^VeF#@h-oSqE1w-?YN~v)*5u*bv0`#wD_6*$gD?Kr z#=_U003bY4v zBzMN=>p9SiPN+XSPa-F~r>S)-ck%K(~*$4thhlNcJU{~NeEA&8 zuyzMNI0K3h2E9h-x6pI*PAk0Hi&|G&Jqdw2S`;%nL^JAirLd)Eq{mbSQ60~E9pK{% z)<%$7i-+RjDm0f)1`LFi^+CNK6z$Ji9u5v3I$@on!C`W_WG zwVBO|kN$bVTVOx}eu~Kq^sjaz)fn7JupA3a6DZ8p+N#`}+gY^rWMioQi%ZX_8&3)glFajAP4rF^%?A{z(!s2ws&SeL zGHl>(jWRiPHD5N_k$>k2+u)biL^m)Gbn3izNh+6xc&rV6O_zHC3ihuLm8psh(!w;} zfsf7fTDmD}AzVBwvh;SfwyLQhB8g%gpVnF(jvZPqO74Q^<#pb(_A;_HzI<9_h+~RK zg+&GKGIMp78~w7c6+6ShRunTrEL3IR&(&uP!oaT>Ns|a8YF>GJYmXVn7-?JD*))Fc zQGl4Gg%@7dX&7A888C|t6$v2bI=JKXd$S0cVN@$a5wKT$;pP)P;DS2kc7Cw9ENuha zeWcgO*mGo{TG+EPWjg%)@a~FUi(?mqqc#k&dj+}jF#7S2aDbEw-u3n^V>a9MRf`*n zx!n#Bxj$~lHKrp6Xv*a81i8FYJmcZ$INn*fx-ka&EmcPv%u2VGlTq&+hIl%Wt}hdK z#_G4^GbatJREtJcL)brEOP|Uh=S`{?#~`ZUK2sy8vYepW#`pE&$`b5A8AwqCmKT2e z9glB-agMrMjcK?+;PsrBTQ24FOq35qRLdyx5-<6f@=93GQ6Z!${-qIn7IGxOY?!{< zhmiSrCZnNrVlApc#*MNN=)~qy4pP%jVlG2h6rjIMSuKS#hpR^$s+&|o0*-lWO)Unb z94V=6zdl#nwTUw|?VSnCn(qCUlht^2_dCAHtw4?n6`&2e7P_C#HO#HC zt4$)q&*Zeuy?q$XdolEYkbT@%>4uKVwIj-2CXwf+*V(O`CevTkmwtbB4d)dgv~n}L zzo_wO3_fCB+p9E^+OjvVZ`i{Ge`?z1>FZHgMh2^Ru$^HIIIfy;O|4~o>gwp613@LX zWs~+avF++g!gB;^Bz?Td%og~5M*-gZ6F6#&T=wI@WI z)%FREYC{RzqQT>q`<`z~-$#^dY;O?4i;r!b2w_y;`~3%s~C zFY*sBha173i?Pc8d|*Hq)K=;&x@m=rjuoNf4Zrj#8H;vIXFK8wrA}1*#LLp~oZER*~gn;n!L!>IInqn7zlBR;BDdL@sw{v$MK10lSJAm|( z**E9y6EH0+ifoaxC2n#^SR~tSfSg5 z^Zr=-wJ1dJ(j8gKE-_BTP8@=l1|mo?2A>sUGMK>rLfT;DR+lUHd;ENSNX={mw+;1m zh*&OOqw+<^{rk5X6?eY43nIMaXxs30_atjWMQo-&$2LPm5aqRItp!tdlpv8lyN|U9 zvP;Nqi?mB9YIDQm+Ak$}uZci0?EKt}1_2)ZxSwI!NRy13wg zu(E|M(XF0f^&G2j2(265$gq3Jg?IFjv~^d~qVdW_Fn6uUTni2FH%aLfSvCi77E~~p znHISBvRGH!(fIeUVl0x`x*FoPO<{Rq-NQY>N*`fRH}xGN<6K;`*X#2pYwJVO(c@_o z$3hLVr=n7FclD=@L1&$LypAi6$W8Xf<2}LML%&5OuJ{Zb1Lej6*!^b#g^T_B8E8#* zx|oK%_belCHW?nPW`^Yw7=3*zEd6exOfKTly;8om*XO*p-|6Dz#nclz5s7mdRLGjB z+e%;9zVucgr~md5r6X@k>hJ({EXb-G+m=e%*-Kc(J%>$54Lv#gJ$VtRjsdqE2gTv- zxdA207$p`8%CqrM=)JG^Z0Qm)Kl^&Ct!O3Cb%m%*F0FoeyJ^}%te2&+j%dO0?7tUp@&3Ru%SoUiIP^8bU}6|%Zq*A8H~o}gT<2< z<3lJJ_>k3d3H+PoBRt<1onEAdk%d&9a>4j?#>?K>SZh8uAJK1naLe2L z=CE6EI^W-XPei3BZ;waMcfXoHMBZ}p$B4a)M@78XIr6CF3Ccs{52X{3<%my2`G zcPy{O`kQ}@E|j^87FJB=gybtpNF1cNWdvxJUdLueJL+CL8BjIe_| zn#xubK#U|YgLk37*cV)w=7tlj zj^K^Otwl8NtLrp(_l6Jh_1stuW4kjmLI`_i@ZDXZgG6)-B)w$R`fE(DHB0rq(NvV? z+E(}23c0TD2mT1j*hG7;*%4@(ktV(z*C048U|b1f-9?tCAbaAs&vL;~)1Rrw7V}`$ z8(R(~%2!#BbmDH6H>n=?1SY&i-Ud4Xk)XxMhIHm#T{ccVLc;>-Sun-jd#P0S+YngA z3b0VyK>CjxUt(eVv{81wB>Mc}{X;@F(%7Jg$335*oyHkNlK~{+uPN6)IWBV@U~P!& zP$kRV&rIdZVKonVAfZl6j3Kc!XlqKtcaQPKT58ZBrzsu`y--9pjbL!o6!ijWyA>hJ ze?#9mhN}Gwj~Z^2uaTaDC5=j8q=B*;g3cwXx{Dk(BI-@c}JA-BjPvPkX zvU-T+E62yE;fkGa>{x3P>cia=+}~XVU&W?LmZmw&r_myHD|KUctGuFG!Ojdnh|LqL zOudj>%AFkH9pN0&fSbVu;KZDqoc5fum5(?-O<7iQn!Anmnp!P zR-N>h=~_$P?bIP;GJ#o@G!o(2yo%*74og;LdIcH%$LSChdjSEKf=HNz^^~1XQG>@cYWkBd}7@OS_bWQaNMleID(sR!r(OU*Mo%v z0$J0k0UPR@w#RnIQR~~|b*ZOj@At7zu)cqMCt@C;MR=g&mDAYNDA%Oq6?Ox?mPL{F zqwpi~GeS8=ImNIQach0l+T~AtUzYgf{wN__AVR3ZVf`l6DOirmEnO|$Ok6WqBjh4j zCRikxy4@l~mhd!YJ@zc#Fus6;7cykk&2r3%7hA+(#pcmBVpJAe`;GG(zHxEvC-t1z zZRUR{V# z8z(H@0w+^)@kgt?($5RbCuAhzsHRH?O568S!;=)>DwZlX4EKDGYE|@SCiZkZ<2K=5 z(^@O+bCNI(yGtzpJk7Svg20WSQR-b!<)@=hEmS5UmXFT6M_ZKFVJ*i|#I05p)9%&A z)x|qxI|`>7rw~l3FpjWSVet&4DjXIMHxr(=us7RBt;zR?>Fnr$bS@ii4jhmA_UATc zIlGM`Y(~c9!#uuuI19#m@VUn}nl;9|^Iv_ta`sgA47*~y0^LksC6{hbOm1m!MI-hh z4ta|p?(*s+5GLUGsOi1bGt<-j=qUGM0G5KA~}UoRP?7oQKR2*i~blklO1j0EOf4ss2K zr-ij)8KfD|y-8{heV<6?#ufUI`!U31rtZx9jC$V*#}dczUhfB@54j&kKkSAhg-1Pw z1``Szx5or^`FEu)`{OFSdedDM(O4>Mpc=9*4V7Y)Y+&s(o{6ws>mUy8C-t)QZND@3 z7TN4=MMg!UnXa>ZJ)Mp&A9n*=Lv;W5;?*XsGjtU+*gL^5D_=|q1qplDVQe03s)mjx z=SGnx$M1R4plPa;sguOz^J}6jmi-(3GTpP`5`9uV{0w9GYwtB_;-nMUO0^d$o_%tV zK8UL@S19Jtf-#bJkw?$Vr63C}YZ_IR=^A39d!W;!2}!?BaMueQ!`+V<%RNyfc=ye#O6G&>hl=G@_uX@1f(3L@^eOyMts2Mg)e6EJ@7UJL4$7E=&Vrb( z_!h@Gn@*Vf)Ml#MJi7cd+cFn3xueb*r%SagTm}z1=*5e3G`qCaVF%lJ_wxIq>!Pf+ zWV9JIXG>|`$h2zoR7#C|sz+DuxQc&`PLQ4*?mgLMx6}T&lss-~K z(;wHSUfWE3UlreN7m-K^wG=XUtXPcMDW&en?N}q-wWc$N^FQVtv}Ze9URu4^>m(b( z3oWG1%G`E1+pstB?N8wA5uA4DTbmg?)LFyS)zi*tTK6n18ZA5?*o8Eao7-FG*Dc%T zelJ^FX+M$Q?kGOf=5^uRgU4FTSP&FT=vX&>vRNAI9f>EczEcf@tj&2sv-kSe>dJQ? z?nKUw*X!OiuM3ZoJ9=$x*zEG0u;NAQ^-+3nTM$VK@<=5~*t*ZJ+}6n|FrVdRnW?WUOZ{W(jo&5Np9X4q~^ zUAA(WS&LCkqKzsoAHx4BA#;8y)*iC|>>C5R&K z0l5AtSR$090NI4|YpsIL`#qA950{(*%%oTGY0vF%uul60KIX%GlP|pxjs4t>k}soh zfq){)NKMjMMh1ZnxW0=3Lc~Tu2Cfi+Uj#%V1klfG1cX2W6AKdy zr63vw1;ukaLt{P#QSsm8z<&airVb7^e9X*FPEJft>`c~nCd{n7yu8dTY|LzIj6e@Y zdl!g?dEprhEQlFg|5_BRdgmD=Q<2gW$gsfBti( z|7iU8Ie!t#nK>I-s)?Ebl=c8mf^0lIEWgSAyXpTVRsWZim51d&NdId3i}VK*d;|~_)$LMGYZ>qL;4F56mPf|)B?K;PY3!Q1ZK_X)RH8p|{7NUmD+mw&*{&PTJ z{K==yk4Pp@6K&i6cRH*+WBGf_CRZIg4X&|0%uO@6vi6!q1|BDqCcXCk0;)xPGwqsH zmaK4fHL1+| zTjl*+*~y-+wN0`hZsYzWD=zD~go6eD2d@!vMhiVmb^lkGXOch2BdS;0W$&~n026U} z?|ngMJ}VE`&}s5)FdNDF)Yae5&1pWuLbUKCQj+QmWV)(%YofH(RJUUBWhN8!@qfzJ zuns&{weXVj%4IFl#Q#2_!m4>SWY)Y|M#4q}k6teg7CF+dlIW+JkZHQv;iAyxLUj)Am8ZAc`<8Ew`L3t9hEQB5J;&IGL-M z{W{Bjt&89ZBEN&+ykKz!C$Gk6iB56?<%#c93Ox zUSBwt1D#{P1`)&)vKvpR(r7uM_M0Sooa~d$g%Ps1e~aU!SIc-IMDD)VvihDXwB*wL z_WHE9?E}tmnb#~c&cfXR9h(-=$?9Hav<_N9*G<^<#WDN#RArDmCDHB@u;js7g3;(z zmXkvyuIs6D&zQ7fBhoP}Etd&J?_7`Jv5K++qo%j7=G_lNTmbf^wqD;-Ic-mkZdH!! zWT}@MXQiYxTh2GmIvQQvT<-Rc>v~!F-KXYyb%+Xm%)b($D1CXdZ8c6uY5?>61dm44N+B z`NkJV8=2k8#{RA}HQvEd)^*!eulN%Lf}VDrP4;`PZtM2IBnFpBa$ob#`!4mkDE7W@ zx*fwEp=C+8Cb6z_NjUb(jyonEkNqTct81?}ev_KjbhW}P!-T@afz#uSi2S0Tm*KE( zw-LRk=(7u)tm5|OGTtA9ca3j~yDC193Yf+!#5{ z;GNG^Sxqa{DeCYck*t`vq-KA0g=r;aw6Lx9#;YdLEkf!R0%p0_8RIIdT0)@lV^a(M zTvPeV0X5SqC*7f>{8J(Wz0Y#Z(biY%Ws?Qxy6C~BdM!x1<1}cil1at4ws}DrwmnfuAF&Hv&YU8SEa_?u~_>VOdsNm-W>4+itya zl`@C^z1wy)H|dD7#|p5cAt|fsw+)cF-!Y7G75K9aH_Yc9ZlekY_N@qo>-6d3EJN8$Rheao>l$7>hO` zmEN)vPIwsUDQ>%>W^L~uriwvoSMZs2Td|(+x8cmKIWXsBwgYdY)|>mG4i$4YYx1iI z0VunQw~m}*%u+*Dc~p^Rm!aFn)1g*6kwKml*A;a}w&OSqxd&45(g1?cl#Y-P5xHoST0|VTHRNQ@&Du>Q z|KdnWg8S+wqvh$fOvcfXF5`Qc!^WFUPUk-%!qF{#w&Xg`J9(m+JH?-|bPej#vdzb;?Hs{M0 zPT)w%gMU=FVR_=wWHnX6dXaP`*|c>$%DH-u?$>n-O)7g!^ICC^UQ=)ZW z&A#a6z6mNOYxK>QU3H$qyk8537&?1u(5qwkXzxI($hJ)W&Dt24Z>b~fwBW(>J@B*< zm^Ip7j*JV8|SlYNzR*Y6)2T3CEifUpo2ENW5rwYcsqvgD zJ8wKLkkRS#uh*~e?#kJ;B;%?pqX%OOo;CMG-2%GRGDSEREib`&@q_U~vrknpEQq!_ zb$6#?`1N5UbFcI=5((P3nuDo;MtTpg3ns0hT6e(OoLnjnNJ`FHDrL{B_%L3V%A{*SMBx(ar^eB(rs!%!wYUd zpkfdiVha0N!S*SR40S$9aj!3Rkb7CyN!A#Q_LdtD%LUzuc33Km6~yHk#K?j8kH$S! zVUd_7^Eeu;5__93!VNc!ux;f%1 ziiioq@GYd7scLbOamzsbFrv{y4bpc=xDd-eMtg9zCUpC3@ZxJEM&st~GcWCyC|tTG z+a+;p_K@*Zgpa<0H!b?3FiI5#8xi)393yEpg?thah+`~3NN$;#Ue=>SUvg~+Q~YhD zd{S1(0V;PywtaN$eWTUSNT%{|B^NI#yhK0gdp10ha}WPGwF%x$$2C2}m&rFrPj4lr zhtvxbB9A_DGGtOUKdef&>>j>OaNEmKIRpGd$)4|JiF)T}Nga#LTdhWOt}IKE0Ca*T?DdRceVQlr_HElB4PQcZFgt{la8p zgZHpxrRe;E1%F7*@$z#9vpaeMADkp*4@SS~%FaX6b9{(L^HNlcb+`g^?Od^o?TRF$ ze96s67kr6fwMtHRLbg+hO+bteOS!~W7(+Pp&9-OX1E!hC(71B&{F{ROkZ>y#o};Ci(mdkaR|LP9 zFYfEA9FgxKccGJ`^7Fdh)UD$G>?`>S?J7s?lY$MM8mP%(2eNG1lsoI~^;Z-^i$8Gv zGA-kh3MxCunM+nvi{I66uLo=FuJ>Fcp15#+{S3BO&*$bpE+SBMI}@CiL0nTO$)^&N(94SL zHyWG|!fGawo?S`EW^)R@C}=UJqpwL-JnEMqdA_pXkP)Z^N0|t@Oi>|$?K>#Om;+Y& zJ2~?63_L1+WAol@gQA5N}PqNoA5; zB2!uZLLd?gS{CiIw0tJs4=6TJ#y1rqRhV=2^t#aeAb-zV7!%h;LG+xk_y+a770Jifa5p(`5x=+a6=OMh#KiQ_9!~Njx@S6a3u3|q1PeBZv|fZ!|GrsRHseA2 zPufF>O^PL<4f&Aaom6w1cv>i^TJm^})u27*v55bKd8JmYz-<=8mL9bH;h5^P0!x>}M%~H@6#)JOw=XXC^9Q0nR-Q_i+^BWl4#d4p zkDrXUZk!y;+o5S;dKyVML)()}x1Rd+#{5g>t|s>w(~DeUH>dDT_*ieH4%3FQvg|sZ zgB-YZHo~F-Wm#$O1@~b~1|rpLFu%rbGKPqcuXWS)*t94k6YfVF?(;m=;u1tFJWJaa z4CR!Rw;J{}2mz2SW!ZX!0Jw?;ZnPHq-O4Ank{$U7@A_03`3zSv@6_7eIE}-_TrRw5 zRKUx}Yzm(!=^)-Am>DnuiOsp~3NTJ(9Nw2g zvpa7(EdeV`I5Npz-giuwKYdy`v*(3bos>K)Y8WB_f6O#Jm(Wh9b z2z*l>QYth5nsiU{)c6MMPn@ByX8JL!E)zYKwIe<%x=A#&4GJa z&VGY?JrQHVYqpgvFMaFLgyvcsZw(T22rqsP;!Dd~aAv&02WyOl)JyR(-MU7TpA@wS z`E?~{$Lo8gJXTXlh6>(*LyQ^r``H$&Y>gatiljbh61b0_pCP01-Kx!pS1I>AY8ZjO zY{3UHA1Qb@gGlirhI((pWd+SN%g;2~Y4_HJtVeS_%n`;#bL(a1D(3YNBoRqhHqRoL zGhaHFT@E>Va(g6SobRnolK$oUfFtn-pvLw1E9SEWZuhmN;KEw<5nG%V^)T#0MVr>j zM}u}WD4ZOt{;di#OFeo%@glVL_FY|l z@2o>9xwK1%`_U-sS8mQaO>4`!vaW=S4jju`Dpw4yR@vIAX_`@V*SKPDe{@KV({@J_ z$ry}kv;$iuS%X0|mS(J}P{TY&%y%;{4GI%Ju6}E?0>$wdl6*R;i*#YM@VPxgjzyGv z?1S$cNW4RR0O*CU%gxdQew0eS{V@JiK+hJu;8TshYC(@)^BQM8v;Ly2tCo0URl%T0 zV5p!cUPWZ^wUTCIuAwgRwQ?cTm0zK`?#(r5Q)bNsH1s9-8j*`2=H&^`NMx68HT-Bi z-qIsN;!jl5DT6pW--d3p-ZITOu4O=8a8Z2S%5hcL+d7ub)(_%V%J$-oyri|(hMf+_ z5Er?*^Pv)smS!kcLOvr$N|gNq+3Uh&SFSM*V)ju!dgQCvtRzSK z7r?`p3eH^UR$8vJQ2st|!Xk?t-7a-OK1NP5;EY{lrdF{1#aQ%S)N%FAJqxikM0ul~ z&#-z^6yj(HE%-(1ExES0h&G27g2JYD;Amdktw4TINMpIuQ_^Hl!ppjjb@y3Yb1%NJ z64sa4q(Sge-a4gN9}=hg^?$;kyM{^Luw09e*J_fOsM_dn)r_$v7un@SIHA^A586b~Ugv#+rxqxt=SLs^4roNKKG6h%A*1G;;Fa zO2KKqe}+`)I)4XEo42k|2YSNnHe6MosLVdn!V=*gBP#wv&B?6TlkO~u+-dHP#r+__ zIP_CclV-@l(d}Dbd?NHGugW=ZCmurKBc6uHcw%ec zZ-kCe)kj{Wd0d`QqkI`vBLm=>s$=dy*J7EqMU`0@`mICq*-mo+jPZjKpzyhGFwk6#3H39W;Jlms_b@$|+Ab+h=18 zaymg&PS9Uf*F(R9Zz~#xm?eHpWIWqGt7vpGk*{i7yR#vfpm2=pM-q!QGvI{FrSq2G zc~;HbTb6qE$^s^LYN+ie=LvupCteUS{?P;B&10cp^halPsHT(G(m9QD4Q|tutQA`7 zk{yLN4n>$TaWZC(kD^DWo{W8aTogQKw5*|+L;Sw|yWCraS%o7hh2c^<*;{5>ii3Wy z8+QGM8$Ewt+`idu)mh(>H|^KhW0nHusVO^8%`qNZfF4v>N8^sz+%lW9sCcL*@;g=K zS2m1UxPd$>5-nO%7hc#T+*dWBo8zPkO@mDZXgJ(|#FElhL({S&d!rZ74wX-lKzss< zyYeBPG;NUj;Hz9jvin!qAO#*D1TdRC-n9h#7qVLA6tGQufiwQ4VD=Y1xevTHcLrWW zCJ=6Y)_oX|?iNB7%JXFhetkM$jVU`^Iv)|*^8JCF_6vvM^(0e^+O*3CW;L#Pve)JQ zjFvVAhhx3QD^n|6*1Kb*v#Ba)b-qMJ=x@=TmCl6E9M`iJkBnS`F8Y#ORtcG#Q@!63 zGpgMxnwH4VGFaTloPC+k?~Q_^{Bdd4X}n)1o5J#{`NQnGzO8qz1_!DPV~e8u(V3fB$|`$ae8y)UFk(J&0S2hHc94g^ng; zn_xOd;D%syCQ(R-TOv1Jh)1uY#_ZKYCf4jHZ!>91%!#M8iE~XtpOe-6>DHugK1?Bs zsYcPi)ez@jOH4vAz*!87-~6u0lKZti;+djlRZ}FaDWOW4bmOJGrdFHz>3(4yJ}$)RlJ! z7xG}A#+VUj&z#^RT}6rr%@|DS#Kr=#rB4#azBz%V#fZ1SRf#k-qCT}=B%T8v@Ex24E?Tx7XL)J z1*5u3A?H{tR?td$lU}pUp+mFrb(lb zzm4vE2MMPup&q8YE`Aim+*lHyy8=WQ(jH?NWt7IR(CmPiJ$oZvBCLw>$&pAwyzQ*z zW`MddcF1(9Riv*>?Z`DHk7+LB*^LoMI)A+Xj+{x03+tQo3^7rRs6h?xl%(;Kz}V=fZjXhRu%8P0vJ61=^Ji^?YtsO zb4s&Z#2D6;4s&Kobnn$ZIcf3*2b=^qVX!|cRI-JAe6dYeXY=+j`F0{1leAnTrBj_b zdIag~LmLz3BqJ`XIl~d(bag*t;|+MG@kTdw79`O% z%b<;kE<3^Q)whdQl^W(}6O0sqQ-3gXhOhsr?jJgiBf&o&Ss>&ChbhDWy&3$_l zf337L48p&fl~7Rks)x-q8bnG~=oH>dtI~O28RoEBHz}r28CHhEd3CAUg91GqOo@MW zv62U2-_Md}lwIb+X`}*Cb;pmOeI+kZwn*&`%!@wNnjrg=hfA@$gIgmP^rnH0vp0^j zXU1{bD%RC`&Nf#HrnB)HhFKi7lc*GVaXg|W$=&?{a?Ogs0ICO@eCF}F~#q4*Eu#2iSj)_!FqWzBk}Y z^$Bb9e~FercWn%>RND|K|AEv0VHiw_h(z+?ty}lAHv@Rd&Ww82_T=3^gHaqK{Y=c7 zkCYVCR^lwYPZK5lVR(HKaOJ=TJyDEYC8;Yw3VBlXbrQqVKZ#<)PhcILB&U!pRC!0D ziA8UTdQoqxqz9Wn8M4!8265v~C;&{0H+C*&wY= z3|Qv!(fGHn-&tSqgS)iN-(mS}e58?&n;%LAxc`y_!2tQIf4Km!qKno-4DN@1yCvg& z@w3M(>;cnRqHlDuObl>x7_hZ6s&X@i4XXbaV%-kx72!viTjiO8i11R+f9}LN2UM;iEm$NzZHRl}iPF>?SY@8i)A^?MC`gFas*7 z!^iEXc@z?Cg+ia_2#Nn>kqIeNn#H4;w55S8uN0}gzJBUpK9Hj~K3wfJUi}u!H6Wj- z$ID*E)Lc66d8r;za_G5PSWU+-Py>ZW)}+ z*vq=b5OZ0w1mQEX(W?}&nAfIeM3KnEb8-I2%>b!~N(_)g2#3WO!=+p&{;L)tb-aav zugOxIg@;mpuyP_?>vFxAq1EJL{_`?!&jQn@P{Ium9b_>RVtcS@| zrG<&6YmN8&DoN$;ID`)U08-9)`_cRIZ%3fvZzI-?EE1=@eH<1g{Oe305bp!t<&POiBp1_ZH@Sam z9Vmu@S47MQ4a5P+iM`xzrMo7ezz%S-CI$g#zHS=`fD&_FL1(JgD79GcqOz1`)?z`-&WnkqrC#=acMfl<+3> z(C)f^a<8jW`Dl`#uN!y;ZEK>oRWNk|*3fA=RW`_BH86u~MbAbY7;Q1mko3ChOenIe zI7;_1>Qsg#PWf)*<&=j90NtlvIxteSj%`}20r_Yt%WT2&I1mj31|eHpC_S6!mGf|= zh3amaxRKD=0`l$`@s7-zZt0QhL0-n6_Oy`cp?l#x) z`3oOp)G1p&EkcY7K938B(@#!6))UYsv;p24);W)TiHIVMCQz(~tE@EnxBTEk4NfkK zuR%PE`ljIU1+j!~ZtJ-j6l|>lO0@t=Nu~iTErJ#MiK@%prltmP@F)@WtA>c53L-}h z5yVC#ec8;QecVvJgb_a;e=gN@EO>j_U?RPA(fiFi30Y>_cZlk}8%VJtC7V2ML(I?0 z5eP+q9Cfy6uLLPHqQNwV-wE=;-9xT~k|7r_L#GsFmw}eHqy-(sdL@a70b+IV87ei9 zxTU+SR=EsP&PF1Icc(XX-9)UbT^U{XxRxxmuN|y8?aWNB<8AU>8L9s^cRpuG7xBdz zsMsy6+(*^g<1~eu)m27~w>NHXiDmX{uP@baO^L1YQAu*|+T=7A+_PDyd`+N;_Q-wz zD}nL(!3vpl1c+cJhQsW$dYxlowPe5p(yezfa13<28fHezL{-UP(CD*e;1w(vy|=Q7 z#OllnKS@2l&!*uUjQK;IWuoUOi%+j^OZ)L1_g?f8e>xi3O&W&@oRsLaKwDhTf`1$1eGq)S*c#omDnf5)eyQPPs;9@XCyw)L z@=R3`(=E&}dX(p}Mf*a`bC)vicJX4J2FnzYUI>sLi`}cAeU|`>JM$x+l9R2}!tK(& zi$d?<6QJiA(ciM*UuAn-%gp;q;P;Nv@__>}Y{yul^zLg9na!+1naV{9@p+F23^y|! zWD|3R{8K+OFy>0d@~eKM^JzehO1t|z^-6YMJyr4#zFE=#>VGICYs`e8=!z z<2{9*k800q5@DV-9M*I73SJi41Veyko5rI*F4~E?S@1{85qp10yiLXvF~#yR6&$9p z_bBqT>uK_OFO7gH#Xn|s62x(w|2ZCQOgG%3_7iQt)h7HPnz_gBtH2w&o4K(M zwDz3*5Hd*p$&>{h5qs_7xJw5R*XB?M)F17={rLcZqg6}wQ5o?;sWnj7R1XvZoe&Sa zi@4aV5v(&GObvbw-EZ4l0FWxMZedE})L6MBR277x8jY zO#*1{IrIUW57IpHHH{-O@TrLMUunyJNvaXeZH>Hl(xU9CmPB8CswVuX(4IY`c5)Q71?F$Z&~e^?03Uw}m1JkP(tgmxrKID<1oGW+yYzz7 zO^DZyz$OyOPV+I-9d6{nxS^A6%^AxYXDl4fI%xBbujx{I$c+rWA+Ju)eQx?d{zf!j z3P;}`%Oq#)V`LF%GI}xA3#;rIJ3Mw`51e;m?$_Wcud#ULldJk1MFJ3vc~=Qg564ED zEl%aceXg(lG+E_AsnfKrR<q_b37}I#vmQ5Pj%c0B#_g#M4!dR+-Qsw=Z3o<7x(}9}UjhyGo!$n_pvMlO6dL@R1 zI6z;0LUc$mSvW05INnvF(Ql_{+lZj12v=~PD5)J(9}I{fHe3xSUXBM?CBvVO=cUyj z=S5}@0cbCNd5@IKY0JrPlUt$*#x&HZG&eHQRon%61<6$Qjd-WE2#Z}i65%SbXFZEN z{vO&S$Qa#JZd20E;XcNLSEOrI57#Ew9sed~G#f**ll!`UTd|=Jns_f?Rp{=k8}#lH zyI<~@p}%+gjHy=jei&-F>T|zWRF^LHgT~WuM9OnG@}@gc`01A3&w_lXo$3(Z3GE|8GIu~_>Q=K0UTa`Ds} z^fO88VUE3gUx&XI(L+8|7do3yd|AxZcM3a?m}(F!mYL;<#I3LyuJf;Kvq8Kyyj2kw z`aBZlFkGJ>DVet1-e@)q5G}>1&&;<7C7n8QDf$g}bh; zD#!zGZ9NPPDueH%2i8~(pL-s3Jq=KqZ}f1BCx?y^aNj83-du}p4kKeE8Z5OJalSTX zW&0iEQuun4O>91XTja;l7<~ijsG}L;iBJnD~QHF7JfkIZ zqf(aidb(H%9>95UyG47!pM}^Mp#|0j>d>yr8a|CXFwqjYd?#2FDd~t_76A zI!lg9;tIn`P{qN0Q@9G~*@)#RP%+a%zWYcQ05LSfG`#WzE8%i-*+6yZT!F=pvSA=B z-Otni2RIVNwK*O7Q99h9tD626sG*!hxdU;;#h^+h!+|SoYJ}6(e6I?r$$$H`jHbEN z=KBjbR=du}0Tbav?*eshGQi$QNcxh!(9t{M1kz}hXW0S63mLh=M77tOi;{)1BbZa1 zq>h`5AnuAjfskR|ymyil5qw2VzbaekUV{y6Ya(=K7&FC>XZ^(M>JJ+8(Z$$iX@Tlp zL#JHgOT9Qj57@?7VLUGo*L(vUj`~p`+0Xej!NwP(rfxMAk{J&f^C-%3s@4^FwD(l| z>|0FgqdS*{~W z@$Ix62By4sWCmDvx_v$MQ_CGBk3n55*Y97}G)GZwu zO3U_)V9>xl4-XHwzh-+P{EDn|@dgwfQJq?dEK7By_Rv;~!zXq6H4aTh z7^C5hwp80xSht0SOK<(EhWDKwx}49Pj6A-m#m)XYMlxN#?NhQNt|~=Zg!zFn=dedq zH4noB@Bl3Wo&t@~y=XZyysfE29-hC;P4l)V=$PzySJLKElzZpH*i-gh_cVjxYQZ_a zTV9}uPc;p^4uGbb6aR$w6r5?o%bBtNw#I2Ocl<98!xF8=Uu zAOS6BGpK0V;ToUW2msCYUk5^eYglX>1KthHER=%410@Ri#DYKBV>_`F2EX8}%^A+5 zF`$rl>j_Dm%@YQrV~TYBr=n!P6tq0(s6)OyCkGTTcP#OIP|+s`s`%iyUB~JK`52-c zzwS6UzunQ088<8SC5Fu3XM;a+{y9gE9a0=jdN`_9DB*%iW74ZLeBEWc)qM0x#)SNV5z1g1y_ITWe@_VqH* zF69nS8m&CakH-NZn2{M)`S6Yel!fJAffRr{F%Zbn&zy;TG(Nv)clJvhe^3g*(Yr*d z;+NVi8T|ILfA*_o0;7j&-TLzi{WI||R1Ux;y%7*Y>Gr7Y1OI!#Wf;)%|63Zc z3Mvm8I=YOfr)RsDgsQGbWiD{$qMiIH>VI<&=0e+=s_aQ^T!kbwc&a`=nw{t ziq3kV_SzUelAF{H;3I~B9$52u{nhtm15@GcXznql(3Q;u9lQRQJMlsQ@-lF2_`hK6 zIq35acPTJTJa9Z9(xU$dN(0znD+TC`>tc!bx~A@n+|1sn6*-~5uv}ioWG6RZMvO{;=S5y-R8gj zYwP^RLPxP^haZvr0Fk~LI7LXB0)_Qi42TcLWislQ)U@2TE2-Ow<;OqO?ZEO!YHO}R zstmy4h8dey3@&~ZLTF?xn^7R6eKR6zjP5mD)%a+Aa22RVI?dw;jwbX1$1f~)8cucC z4chPHJTC(91P*F$>ReWiif9aP0x zz^%0OtaIF^Bvpx+lsh;$pd8J75eE|Y`MhA8o8KF$szazD3zWZYbNz_jlAvSit7Sb* z>>v;*b^4j&rCkd~2wVP0jyzSo?p%>X72E$FY{9Yot+*^Qwc=J* z=z3(c-G0WlBa-I{fvCK92T)Cu3PQ&hB^nqZpBZpOCt#|WHPM>wrurTA{?SYyWsrbE z?;N+*&(ui!mZE_-tMEb&d*yewU0CaTSwJQv2O! zQq}3s(6T?;{&%9mClH%fkpR!hhA2V7F9aVSA677M3Y?Xh@?j8BrHQRI8>UHb;f&;P zeA}Kl;dOhxZBqGmz>+RZ=%(hHueKNg6 z^^cSE>zxKfZ5Rm#3LVYmQ^!!^CaD>nnODH}j)qHtGy%m&lmZKJRQU|G$mbS&G~BI}u&QdI~rtfTspz2#i} zWKaLfJK9+dz)v$t^15-k{QM49NV}f8TT*Y3xm?D$=Kp8E{N(9lERqqK;fNRCbd?pm z(AA!wP!AKm>}Gd7pnXj=4QGIJcDDHnL3gNS>f$WTfs{a5ywWQd0+yi(D*b0Xw7E^e z?XM;+iW{!f=MH`#)zSP;J6kKIf8_OBp@6IIW&j0@;o4P}>L2v{k%+sc#9TKrqb)gM z!sIM^VADuaJ_i;c%^axhbUN!4O?$YW9yZng|1tO8;au;3+;~KZN|}{eA|r~-B$UX? zCbMB=@4cxMA!LN?y~*Ax*|PV{%uZJJ{d|9nI_G?^>%M;1b^r1E=UnF;d_M2-8qeor zy>#Qw1nw*+@b=6zfUF2hnT#$&Dc4`BYG6p5V?d(|7f4}J^JaePy1L1=@?8h_TWkF4 zzO;PHyt_-hOevLiV2YZXgi1f4X7cENRyax@KPLK{QsT_u4UtBmRJ%c?2je+0O}Caj z5xGr6&$9@FN3g~O0G98fGgwkM)t8^~Y#U&wa~$(-^|FH}u6%fWyi?Za?x=-5EU=b+ zUruv35Z=h|H+_>oO9W;kEm&6!i;cAvkA~jfUT!nAaJTB%hV|wgrmS>}X`H}#87?BA zZqy7?)pA^X^Qb$>C?FURI;6q}>tY~pU+TlG&zq^E_DhW%21i5~+1u|3(xno5=b!!0 zhN_XtClX4gP1(e#oYx%`C=)#BwCixgbnJdc9Sr5BV~k)YI!SBI5Z%ZUmbk4 zIZl-L-A5++d4V>vZsX0CtCY3@Y}6$E&5lSf=2-1b7Bz4S`D}e^_fEZtC$){yBTC_5 zNl?pVkVrKhJFH9(>VheBy18h-sVkv4)%kGOy^DPFU<_<-;~IHQb!Vwo;GiVjU!y34 zFr^1wse-atzV`!HWrQ2^c3ngdtWwIsL87Tg0Tf`!@{^B(7<^D3uWweTJjj3ZMj*H=V*T@q5`-L2F5hLi%)eE{<;p;whvijc(@DX%hOsH$Hj0HNQDgXV+SQ@E( z0c6jq)XUGFK8bV~k)JW;Gt>-_MHeB!+e>`^e4Zp1x~{tv^tv(`YCLU;QZccoU5^M! zs}P`Qjv8v0xxV~R#6lY#9j$Vc@f+r02c?9@17wuu8;7(<<%2m!LxZvzaR93fNB_>6x2y<2>otr)EX-s`y5DTclSG} zk0_*xymD0clT^N;D#;38eju}_lU z>OM(!vz=ADxngI~2{EZNWR&=Q+ZI>wJ;(x3mHsnZ_|U-DZ;*nInX3wq%A%ow|TUPU+Fca71#ztmQ&*ke-SeOCj z)i>MLi!L(=C5)NtDG#vW)-QfKdv~k@NoOnDNPU!<_;Et)x^5~FAKWtha-%f(%KHNzXT>T zb~Ao;P|MW~D4dE96$#*-NzE1mm{W9&7bJTVF>i0v`zGKb?%l#4(Qg`-ns|+h>-zzU z9E?mb-12~1ua-?&l_9O4bApYdDp!O~&cySi*PATO`oQK~XsL1c?Z_xZG>bWN%J}6Z42{bVN$q$Iu+2u zXX&)F6tVqP6wuhr^Qv1wkPCj=-t58*8mO=#Rx#!`4p>`%f&U=09;}R!K?#_-S}j@Y z&q?aKOjNA~EGEFe*j9aCC!=(g#rCVnV&}}1?)8EwTl0RVANVP1C_bay8NKqa!P0+%~aN*FYH{ z7m~{;8rWjPxa$0~_aG$+oyjOKYrmOaF0gqmH|p9b)B_w~PAr+~%}u$+Vb9E2k?49u zB;?6sSdpmNTbaome}6|R66#+v+u!|V9x&U@X1z-5v?*}dn&2pB2L6Qg*RIp_oq}_W!`}u14*D#zl#03owqO~R zQ;P&XxU+)SO#Yk)j$^f+0Z|^=9^->reaDF@D|}ykH^?8*Dwa!C&i`f@=OWZ$aF_Ay zvguJ@8mTx1S*l;WKP!$7KHL55iitB@O~k15JG*oo^!E+Q54t|XW$CBL8((?v%{hV< zx&jmTN;qr#F|?MQ9FID~&B$Mdzti_f|1 zZN*yajMoKN<}y%ZT-_5^p_X0gE17y-Om~R`F7tq%Kwr?CR3~4zJ2Q$4D%rWm5p|Mp zPB+H;Y2WOiEta)W-}fOITSV;eQXB8$89=F!&Y zt!agF4;vW@JuAaAl4%s&mZ=DyV}0L z&#q-A?eE?IVjhD_J1fbS86Q616v4}DIEBPNq<48auuOHUzs>zx zzB$irhV)y#toTYsKO+0_YeU%ddevbhraM^iV{Cp}Yl7|K_$HnHF~Ub#IZWTedHV7= zTdvX@{w&X#_o+L}M|lM^kWpEyi9t&ATJD6*#@15PKj1J}vY&ejX5JolJ~~Sfoj+)+ z*Wdd5IBwnyVd8z7q`p_Juu0+-1;w$i2) zCaI+rLUQyOBw2BA-$^3WI7F)U3Ly55L(4n(~ozfklw+-_c{UwrvF z?(K6*H1eP?yD^viaDXk^lj3a3yzFFg7W=oGGgn9B`P;impVV4pP4#3yOX~QQ4BJ}L zmi77c+Z;71<*DUw-ts=GN5pT6(6MV72W+P@ag2vyUdee1EE;7324a?MnuNaaBu@qi z&ju!{v8UY(1!(>(LUkBFqVarx6;6iVxcllf+p`ZQZVpMs&kbkUQtl&B7D_Y{;rbpP z9wkkNPXGWF79f5O!Lf#taL2EZ)mqO}NH+Ov@kQ_5Jq zH%EuLIK99irevmopk1lgNzw8cJW7^~VQZ2F0YUF}cfd()uX{#8ILhebn%ehA; zM95Yn=>pAK&lWk4ZFf&hd$Rbot|E!@V&T1!hYZ93Dj$U{R{J2!Im1=@$?Nov8HO}( zKh75dh@Q7nRb(-vuji~WEtPUKm-BVNGJ)hLtX!7+LLxc4w415&23Gp|5M3nY(Whfb zIQ9@EZSHKeNh!1<1Av_6Nl114ioPm*qYe7;(yO5#PeIN7+IeO*P~VCxtW3!bcG{+Q zk_@E+qpUVB757VGs4ZS!9iFF9&e1+=Mbc;qp-oI@_vltrxyW0H!Pvx2r&Og^DOJ_T>PNzoQD)1$oob1Bt!|Dofo^}Lm}ef|Xhzr@1M>Gd#+W-UU}yMWK2B6G;GB==2@KC?Fy zd#EFM149CpC5{t}9f*dI!q(f_mE;r&yQe)L2InOiDU?>5vJ2za(vmm=*unZ%l7L~Z zP@8KMytE&|Fs~OWGszRSk6*+vAO>97iS)yJneW4_3n~ODnNzV2*Ybuj2?7r z<4&ZIIfnWR7ZHM*`g&9h7G!qZ@VdYzGJPMOA{W1gK1DOJ6S-uMdV(RJInq;8(aZh(QLbVh?`j3S6v!H9=5+8CA?o8 z<5bn+PT3Us#ve$^knd?2I+tm%QE2s8h;ul0BBl@k`g6BtFxXA!NG9y}#~~#Nrn$I$ zv8BN#Jw5%$Efr1MjxyKepS@n&%v|MO#((;tD7=`8tG$DnA#M9O-w@%Z4NUr2aPL|XV$ zT=3Q_5HXQg z&YZjc*xBkFkV!1i%qSTR_*}eOqWKrXME}5`2k%C*ZSDI#_lZjcRlS4c1WiN zbwl@N>Ps*%-F}jCX7`waszt!I^+M^|22|hzGjczjb|#&~z`Iat5dR=dm)vQ~WZ?z^ z%<|D=GLDv9r8ax(48HGt=>B zls(V|Bb47%fT$KfRXvRe(sMKZ0=_MPc3SJn`b4Nv16WcY>4u@>gx$1YF`H5wk1qzR6NfE<7m(Bi<{VI8C<3xjc12uIE zIUF{Y3p5oGL}I@HS8{26TP>sP^sS>aRq+NO`F-y*tgn#H-d>z9Ug({|%oSgo9}v|~ zc7E*_Pj>P_#stp(*fekx~+D3VUR94UCl~$z61R3OLFUBH09Mwe2J@B z;>o=I0Kezeouv}=$1Z=-lcfPDH9rXs4%I@_IMs!^YQ_eU!!^yt9~)Lpza?lT zS)o4?F=bFEx~4{2glsJOj{N-mKQ_#t>FWDLM_)4H2$_(af`#JeucwTVn|M1O1OS$) zCoROKJlNs|Q*Zj!T8#!>h01Vws_lw-oB2Gi`70Dne-Ygilfd;3(cw$eg4RSBz3Dyk zmmdLh!i;3!cz5k%h)B}qs>tnTpGeg6xSZs!2J9`Q&Xy%J)2(OK%{68lL?1;xeTP%5$BWc zl~AY+OPV3_1RIudY$t1qu8i>=nP%O7Pk>Gkdpz~3%m`Mg3njN1JFEOs$*|x&y6cU+0*8Wa9r>Wl*d)Vu!YK+F zd0*{TXU`V}R~>T?ARurL0-ZR85!+vlKI(o~TOb4)Vq?MO*4qF=_!D4Yms-qK(h zz!&yPGC=@FaSF(dYNl72aaZ@|qA}lwMflE=x+WqvwCn&@TOqjyO88A_8zvC?4Q9UC znP)K!8w}V@;N7l0Ny6R`(a3_lKSMN&Mw!-gf={NPWzO$;MWLd6G`XPppivWj zMZ4LmPgiQYBJ$82nX8b3gUSM(i)I0?JzKM$s4d^u{Xh4sBSLu4|uoDGg7qzY~Z!L z!#37dSBMB)>oejl?TOtAH7u%ixVn-q&-m@$C-PF25N@k<9>KL>#6v#4V?8xB20kp8_^toiYH=UtERQc2661oOw z8bq~9%k^&t4iqL~-fNG&5`dipUE!tgG|9Yb1HeOAM#`LetP~hKH*k_cvnSjD_8494 zRHfXyaO>{KDtCeOvJKs~j7Pi~-R(&-jcNIV(+*mH2qsE4bVJt@;@)Sk>Ev;vlPIK=E3N^ll<^4}bk2MMXC>G8 z|0-#~TvuvHRpGlnM7^)CJBG%w(+s3!t0cGFAD+Np0r&}>V=c7qM}!Ed>rh+H*azoO zEreV)Iqv$c5P$N;{uhF%>}<0|h+naxsChRAC*FxHl(`om5`-*RX64Imc2~5qXRP17wA5vs}`Hiv2sxyJQc_RCg`T6rM<3e zk}{K<2)89mhl1a+#!{Vktf%iCUf7u$HMFYXn!yEcszY7i;hjd=2xz>4tD zsbd$` zy_9s0w3Kf2$-UoEq{#&R3HQqT_=|1kSs}vr{x3Ay=jSb!@Df@6v>vj2jGWV*X?l~2 zS2BIy46#feuzWo<`$U-nC_hTo`T&EWyL#2rj=tBMUvLyJ>%eq+*t|^VH`p9BFYE`+ zOX2@tnim-hrQ@W=&V|FSIMQ-tEB}JpD1C^~;@!P!Y}>>+knOJOYN`FY=@QhIuw`~u zUVZ1qfHV+x-8aj@z5Q&I&bR@YfOVM1aLM)EPLt_gVAXz{z+`v8kp0@0ym;^yo%zh6 z@)XGTQ2q$~f*}8y(vNguhfFFXS);y)I}nmHmDSOg@+1 z1`Fo%0Es{2H}MuivFT(yuIMi`6E%Peh{0^YqN_)qoc@OW@1N3|ADO8XzEP3PacMyp zbPJ8R@?oiMZsF|5`jVq1P;iTZ#7*Bvy*u-X+U>ve7KB%zq$5xS04!EOaugaOF{wsb zRPpR{0v#+~KTm%F(bfb&NHb|9EE=!#|B~17eZ|tISA^oaTZxgp-E|a7Oje`P6?ymG zjG}4!&2`8UWAt6PU8&>*uxu#IWD>rX$OuCfPslDVm5o?<_uyu2qEP{F(xZa9jW$3z zb-!_rp1f8+r+j`#o@95kd{+-J0fkFVeTmjlP>)Q6=%q7*clYPVA;=6x#AXZGPT!Hp zYfw)_wzPdim}iu55V}J(Ur2#o&;o32@ENjMxrm)DfVA4VsDd@n^^LnJS$}|9RIA}V z^QVpjr8P{-`!V3rCP(vT-3Wn_F$9nl>taccKroruL_Eh~RLZ#y{_7K3Kv1&aa?f5j z19UP-X@P~{;R#WM5NfHXD8OPM4onypOkJLNwA+gmmT~g97g%e45E?m6XOml&On2=- zuMi9|-9@scs5&W_(ns&P@H1Ds>ccfC_6{_GNs=eq7op_{iSfQ!m&mmQb^+3d%Byd& z4Q~N0NTXjNL45ULuC82?%Y%WNxxMcJTje=YIupk)xVg4q)Sj#{SYqRg`(SdymE;p& z6?KrxQ@AIsqvt+Z7#>H2vB6Ll+CXxPN+1FkdWJi%PPM%{@+#pofH)eisD{N8)v$a( zH7o`jWSswPSYTPbpO%njP~~}kwG>Kdy0mTRNlu?K)V?yk%L5IPG_a;5plclTEXs(b zFT6eR1kJM?w5x-LBj*vL-tg#KUUne$bNlFj+(8CB%RPi>T9w4Jh%)2%61X9wS!ZKH zdayS0F@Z1q{+IkI!`1=(a@o13{RJk>DS)%EAo8QTT^YbUO>{x?WbW`W7(pFFK}yCo z5pP)3|7hn|P?RQ8fHZHxbnde^JblLo8VeT@JXBwityKF}ltCdqCq;GLT2t{a@<9o$ zC^5FPt#bmM1ZgYo&b1`ZwkN%Vn4sql7E`U%y@F>&b$le_hAZNB8VAJry5C=-Pe2p= z;)ipZkbvMt8V%wRtHE~B?XY(AA$&w|{GjFIqJ}Nz)T3trOB$qsK2`kgTvo~!2z&KF zt3X`L=h4Zk(^}aXTQ-3(o00Tbsi2<-*Lr^J)JS-`@`7uw2~PH(@CV8`kgG`76&AB_ zh^JKfCnk;^!|T{VLTi>FNGlZPkWKMg#u`g~!LU+%K_I{91R-RY5RYQ|`0X4W4GRrx=UbKn_7 z%x(bX&?j!YHXk+{j|y-5C|$ArKz!NG7I22V$pp$9e~`q;r?Bb9cK7A_gN@TPDFoh_ z`cl94RvflJa}3B}EbAYtKP_Oop_y9Nu4PDsCjR^!Ll_XJnrEjgJ2niY{paL&z_u^OQsCGNK(7`@qTEsT-Ox{0fJ% zAnQiXopluNWiXny+%@A$OJ5F|(My1&*lnInxy$bj*@%U*ku<5Pyb_xw0PxM-+eZBC zk2DeVisUMtZ|!lU@~Ov!%~lK9@Sa!O;?i{STzlX2SM9!xvnR^892Inw*k!t*j*F_@ z`P!AJu0jWO<0|(PHF&^cK*lzFeu;x0D4yqBHP*aN&Fz(ruD%_qZt-0HxK z18CcD!GKhqU(;&tBd=u?HC`I-z-uw&LWEr)v7v`iw<|qtEU@aB)g}n_4LD$pH^odU z^>}y)Zl9sO7^!wl1U3L#Uy7~Bo_Q=|47okSvLrP|9sY149^Z${2V1`n8hR}T=jTvr zjS697tUp8L;NSRUVZ0uK>@w)nr-lCP^fmS_iCqR5oGiP=V_49Up<%RA4p*J)1>gAv z-Gslej$haXGda^8F^zBUILDNX=%Zp=d;-uz=H+xy1^w-Bb?-(aQ6GWKa?&#g1--~W z3VPPifbe75fr;Qrzwkc``jGE3T{=Z-3{VD|FSqpC2qb&l*}D~uAm^QjhW!OCc_WfO zd$wZK7Usi+j%~;aTAEfgz)0)Q48In*cM(}pTvP~ZK;ebNbAVraF&yv5TdKbngf zWP95RH7EXE2trpy_8cno3-+7;`7|FY^qk=u-)nwte|;3{LnG;t5SqH7+mqgh-@Uho z^Lb-|aPj}y-z1}~DzZI_vH%In%avPwBl+i@!6JU<_06NYu((8F3d!5Yksgl5!=j=R zpR(et#H)S7)L&1)hY%+H#}T~|%7ejj_~De{D0v_`_8!OrX+_84Of!-#CO$A8j&>XL z3ld*S{kY(Ggj#JWBIIu=Cov#4N9Q>Sm(|k``;-+dM{(%$pWeBWDs|fZLn9{***B~= ztw59~j!f%Z-Q~fC+H0W)eI?u)5D;_|k%F=3tvNYxWXyZLDR5*2!;;eV zr<4rFdh_eo_n!`59u94D3%EP%F6dg2P@nxP>j&Q$?X-pHentrLj3JG)_yM%xHbbX` zP~DV|3wq9AO~tjBcMoT`2c}=?gBZ-?yzKuSWh=-_*kKs^$B0D@Gv_16d5`Y>LF~gw zShpt>$~WXZ^x|$F{;rEPddFy*#()Gmm5?_p6u{ebR8_6}v<#6tV-M=jduWV7Z-$h% z7fQjiu;zPu7mDhv@$`~kB1@o@rfy{?IK0*~v=JattDCIu-23WEg7=&zPa7;!|IC8> zY496<%l43H)8KjjhF`zO2Ma5vXjqczbUz^HFmFjQc$x%I|@Q3hMTCB<_OTl>#DiLwj68M2Xt6u+!5{w|Fr5<&^nGy~_4JGBLvy`V(6ONfJ(84^j4s)XGywTs8VPVt zX-xq*Wiv(|;66Qb03K~QtrG|31Lr_*p3NTY(QISK%@F_iJnF*()kiSm(h_O$LZ9(XL)w<&n&g9v{qG{vL9Gk z$XTqVm{?746Q04sdk6po(s=I zi=gm;1nHs%x;QMTsi_CE${aRBfNmMmmJ0%DO>2Eu6*3CeC~SXRTmp5cU3JdJn>q@c zG2aQ0iZ1@@K@H4Aax~1-pqAlULQXj$Hb&Sl0Ooo>m{gr7v=t#BCJse1X+9zhm{ilP zAZQB8--9oz6MCJzJ3L|4alZ$Nk<&f8RvCBeRH2^`eO3Up8M0n(u*^3`X7>JZj?^Rff05^1Z<4YXkDhv+)b?6p*BYqFNxl)UOb3;tb_^u5O(bemaoef>b z+Oy(Mdm;46;*UZ9!~E%#>g!D&GIObPk_7Y-pu*~Qz&Vo3+Y3nZ^OX^5%qy%fsA=yb zl2+w(p||8}>%YAsZ5K7W_Yp9c5QfM|IO?h7u_Kt0VzKCBJ|>;k5$^p-fyui3lAKg3 zcZZg^y|HUZK$3D4v?M=?g^T8@9uHBy zfMROS)Ob|DJ2~Gy53{8qKGaaxDTgcqrXxXw=Gqmp_mA7(jUp$~Tm!sAELda7tdc+r zVV_WM@V-=JNl8Cco-GKUb{+6DoYYbOE`1XIfn!gW z(lDvrCI7LDcZi>wq1J@q=XlVg3)``NNE!kn?TMHE`mKc5{D)*)x+*vK`J`R19~NDz z&m6ZFt1DLf`^j96?>Q@KxLr=McUP!o+YT3gf1T7{sgn?$!OOTKfOTc_!rID4{K!7*lr;t>Xa5$NR9`$PQatb(;=r+5^=grUCnPkxU&}X} zy4T(b!^qg%ZYX^W&>ZMS2tzg38!C_t>S7tS+T z#O$$SFtk~a#o|hsxt|rVbq$$)hz&Mqa!AtVV3nnmypMiTN_bIc75Gf^g+ZR2PS}B; zR^8X*B4rGSsrU@0Gp#Gf=KxLU0qw-yzUGtJ01yUE0mP7&z>x=>HnZ)!#t0v0bouH+X^U)S!5>xmts?L*Mt%w&m!k3PATUt zCgdZLc^P>G17_auGachy7MotuD~Jd7%PU-t3pfMW&zj!TW3#_lNo>x7R`miSp*4U? zRqe%~BR#5MitN>mz@aw6jygBZVEB|+uG99*G$9J>Idfm)ai2lHc*avVT_kIa6qM8K zeCcvhTMRMUBa-5}WD%@uZZj)UN4!LlNIReimb?q?)eh=Z7keVwjqT@awgY^yeJ-uv zmM&ZU`0=CvbbB(P0c#U*&R&kLel%DeC8Thfr*D#mB$%ZE_nlmEJ*(cjBHqG$6mc zBE@XySxzSGj_7JpLsstcu>8diy9fcDl(amSmcd+V-8eT=(Pb@Gdj5|m?tJM@YAF2T z%J^jR(q5dRd<8|pYaYC^N!Kfj)X`hF-%1P4>Hc_1Ut4}l|D)~J+*Jh7HYu zA3sg`PP!^r*B^1i!8c?5hPU(kdiQ^wL0h28@{MTnO8HOlCRzmaNEF9HQJ2mpK{@?_ zm`%cs`|$UY6(~E_bTBxR*KABIk;`z=#cLLj6-j!~sVE*)uXFecE?gNNOehTa;fDsm z-2NrIxDptnc|+t#Tq%JS|7T;F{WI7{?OM!{HjI{LA zy1F|3%$VkR-_67034e)KV6uC>c_ZHbovug-opgOQwoncAI6QHFyiIWYi?Uy5sJI-n zzByZ9dhng7se}CE_g$#rcmGF2x&RI7*f!PJo(yh(vhB^ds&Ais>%>yGZX90A!H-?~ zi6V~+8S+x3|J${UhH(k{&ezTYXa92vH3k4W6mHuW{An7HiH&^MYa}og9q-=3=O6rk zKFWOL@>Z9=PyhEvu6$mq_u^7hucG7r_YWhBFrw3)iyXIY@8Wt-+lqW3KK#ssXTowx zQdSn6QdEAdsGzIEv5d3_9rS#--n!$H|84DkPPkm)J}yM_QyV4OjJ%Ek3J-lmw=E(n z>Q!ar_vcEJh4}7@Bd-oNGBF6nlrF*om~fwci}b;$tFLbale&h8hzRynUIFpJBcn9J zT-Iy@_4sVlukm_uu*`^s-E6r-+#)j0c#3$h*yk&#NR~@MqCZjG9@q~MeWh2~KNN&- zK|zQ_A)thwxqvkJGX13>BnWXXJ1>drjd+WW9Cz`$WB0lL;DEHT80W!vAk(kdNeoIG z%t%uyY()i<&Rwt7mfrWP5kxza1V%G~Uk!WlgxOx82=v$s=!V)Jc0+-)jv$i6AK^p| za(-;YkuezL_P1ZnRHC9(Lgt$H-+VB^ha)L*1pQRwZu`$Mk`FVw%!sN&DsuNo!GDy1 zx*pE1lo*`4b!`*34;F-jH%%*v)|e#d9K%P!lz$k4d(c;l<2?@Uel1})R^uBFg<4b` zq#kgX)idV5rxp!-5h%P?fkY5?0PGpphp~dX78cq}Xum>1JJ<^urVUK0tIc07R< z(|ap8vKe$B{6dRTDIJ9C$wh&Ra}E(x7+k{*h|0f*d5HzC#ifMU_>&hxHzB9i6-U7S z-Kk$R6)#wQ!qobz{$YPBM_)lodVU0|>j-t%3p{qK4U+Y&d+ZtxI;bq(TAfF9fY(ZX z-dX5|UT?x6+vN~PlC(fy9Eb3N6Qtso!7rDk;=`Xec_9lPY2W$Y=7hlkm0VkxC@R0koc-6URG} znrkS|gK8zyV&pl=P5WM*g!9DB#w*+w(;Ca!pN^3fq+(~>EbEY0KHHy2dG{DR^ILO%$jZ0R~qXAfds;{8E$((=^@~=po6hR_ z@1BGzfhZJ`z{QjecW^Nowrayh0bO5wX4i-69UXydD7m#)ws<0^*J?flA?_XT^`*(a zQEa7me=QI4AQK`g8EEzasY-Q@BcSbl+en`Y=>Ik5YQ*zC=&+_5YK2rYq&R(r-`z+& zr^P>TX5H~cDyj*cL{Cxr6oSs@>OrcOS=AJPRBYDmwP-t6G6yXCdc2_2x^>arjfDQ| z@%Q-hBd8q*^@jNbVaL{Z!JOxdaBC;mydKR;sS{m&cn10-$a6K>>;<_~#pq%%lr5{a zju>PzYWCOFzkhz2_X8L~a+!PeqW%S_5w&Ewsy;;C*eHZgb23H1h;pMqIdWNMdovYocirFPB zAPUOr!!|D{WGZdqDGelOrQ1R}q;w?w@k zPsK9(LQUgO)7SB>`d7wq81`Zw_nzDY3>b~U_Sy2?oxBb>QPet3Z%U3Dlc!bnbf@0z z+f!*(Bdv(Q7zz7b5HCO{Lb55iNtZSjt0_Vu7p28~rn3>rkB&!>o5rLtt!g$&9#f>L5+1{?j+NmKtuj+ynGrp<*kt0XbM!zex7@l+Pcc z619i=-~y1y^4nj<_^vqU!nO&OEI(m6aXDRNq~d;Bi4_x0SnH?ku?p>XlB6upeb(>V z(aXS^^?ZR1EIVW8JFEM&31S6LOhS=Ir7M}W@2fq}tG|T@zR4Ewdh<_-DCc~Up6=Hg zINnlWhw5y-x(ojMQw#2@y$6OgITdWM@I}zaP>WeMt@l_Ng9e65@d( z&TBxHa;3mMXte6qa`WAI@UL2)8$q~kfb8b7J^;>Cm8NC^Dn8rwKMOOKY#6*sf;6^Q zf)85-BHmq*IL)oUgn$t-l)?!4Mw7B6@sPu6UL{72RO(%z9T^DZkW3Y>iTCOyx=3ta zFqfIu=OeGMU!~=YuvH>Un=_v$ADDK%&_9R7a?xJ52Uqb||7VA&24Cbfh6l{mQnduL z8|4ZENhxb$8^#eL(nem9v1<4M!b&5#B_+3>;LrEFf9pt+xsnZs1RD_syg0REBKbw8 z{ki(*7bhk_$NgIRC1POU`-FuAO$~|y87y6v0RH02<&sdy)I;pMGKR0P4@&MM=G_->fRz|FMlyTI>9 zX&p6QJNOtr?-L05jA12OlZ7*G%5p8TklTNvF*InsO6Tmsp1;>D9&w>3prxmeJ}yLP zJ6V}DqF`*2y)#+))#NO4-Gtab-bP;9{>!S{Pt?4bN9zudlRtK>r@Xz14rCtF=;snE zxGBKC9_fSGzaJdubT)knnApR(UC=?@Rv*Bi&^um4__rx% z3^C;Z*!|BoprvKa$uN5DRz%c}C#LA0VW=H;q?;eocTh64?go%O{-9>Wz!M%_yl zXXQLhQEvj1A(A(I<1gA_EaQlo@z_H4C^#4oYU}-HG>i)+|CY?Z|2I;>z%`#|V8oEox1Z#308v3E~##K1qSfXNnynF`n-Aj(kWL7!?~%g29eG zH)VSGhYRS~<~iCep9kH*LG$-T4`Zk}$3RF0rj=3uA-^Swg+A|a0nPi4bx1!dq=&B) z^GB(##nT6{l`BgE4vd)@rDc7HyfefapIzx-SaFijuzU-b10x zsz7qnY?pud7Mv0K^WIr#B(JCg{&E)~fndbpmexaLTq8pIBZ2-=nyoz74f{EjEnsn; zV)qTOMYeeo{Y-ulgUMc=So1}&#kpLdGj3$-dJkMEb?F+2pofs-;Pd(sEjxmhcSpcV z%%L+d&GZwD==Ex!Az(;mAn5b@!DYDQVE*{z%dV>b6`a54F!`5dWTbU;bi@ng=J8>j zxG(&;&YzAhph@5fCY?&;CH%P-)ar?B?(m|Phwm@CCvkj*`hmV3;pNZYG*6rxk78kq zO85-Bg~BI(J;EXLHgWcHnsc&8D4`3)mVXQZY+5^8>%I$b2haE>(H=(qX$U~|dj1LP z1Q=huPv|bs_T0G3*tV~tJXqP_n=j)-L(LLJ@HVB()z%o$s%j*-Ix6>C!7zF@Sa$8I z%YTpHm_e+X^=6VjVj(e~>t&0tL(((Kpk91m0-#}^L)Vu}6T=kT^f6Ia0ER7B%zAoH z(pO|M&Xf$v1#8)&5kZ{4Js>cjyB-PEN3iu5uo}IG$OFpnD+UGM-6jB!XSJB#T9?>8 zKxy$hM=6mdt{ctB6XJhkR%hku9mYO1jgMy05 zOGVJ00*cvOI%V{(A31Uyu@^5G%ME5&N$-P#iQm!Tu{!=3n!A2sWut2|Qvb58vBuq% zx9nheQ;D*`ytEwO^?&IW?(cUC@3fyvk`3vmqt_t(+4eVFFJJnqJ@SxEuzE6nliFtIwMu2(N?gU zUul&tF0GwR1n0Sw5l&o7j8Nz!$MvszqCEKRclp&zV!o*|!>LWmP7oKN1+soM<=*Dw z4wxslgiBe>y=5M7eGRX65<|5!jfiw=1Xt7C2_o$#kan#risR?v)N3m5Ohu$m*t%Gp zVT2tp5(d@YTB6-b0>YQ+XMH7NXDAy)48WHCCPI2dP7OoH`jE{x9)rC{1HVt!KI2r^ z&I9f_0&A6066DAf@FzT88hLZA%HM>C<8!aM!Lw<(cY4J`U659G9g_N%LvDjePz)U2 z1{D{7*!Jg^fkSTsT;NO7bevJ;Z;|{AFr7&}-Faa9(s76r3Z(`}?$E3+*h1o8R>Nht zBh89TOZMgHd=nVRAxWDry*E<>Qpb_AZWABm;qh>Oq?~bc1C4goKmUK{K$?=^nTZUJRTl*NNO zjfCcs0D2O30yf2M+G@Zjr9`qCkf0eaScow@+s}KP1X2|C2C(O-Q{KEe9wAK@dK;+8nn9J*98t(*5oJ6U5V69WxXfD7+wIV?xVt)Lq zQ2`}#>UW&`}fDFnri~;{t;f$A2{Yq;$ zto!Pxlh)i@flj^fZov|Ow^{bPj}QX3LVfyT;&NB{4%<)818tm-jmxiJrkioao1~=X z$H>}jjpXDFMVR{qLkRf!V|kKNc=-&O;Iuk$Ki+wnBD`0$8? z?NY*%i?%WIyOy)ipX7dx7Q>!2x;9`S?wb6ab3=02tv34nqVw>wKN@QY?Y8;@o6fWd++06I87vKNq( zfM5BtLz+f>7_3Eo>N`!<%$O_%U><+|KAo=1u3|S{Og$ig;D@o9YQe7n8&K2gH+WE{ zGnU$PexO*ab!a2vJrPPnBnQ3k+mRFv&7rhrJl+%G6Q3n*ftS3~M8dk5$dGC%Ap*J> zQ$<0B1lmHwmO&TiQ*MbEkv>qB$`8YY=UAF-%D_8y>X8W#C9B5QQ_3yLS0Q5|%}?*X zIo=w#CFp?NJ>ne1=IAS;%ENZb<8(OgA4I6tKqA|dhqUYypm1I)`z}*40_G&ojHhdC zHVNn_5EoN~<3>_g=7ZxZKdCaMiCEYs?}JyT0VyNW`gPHmexJ3h6X3_{vICrrP0ixo z$pF?5)ebkN$utmPw?+z$L+F+3#D(-|a@!5EgoZ)I5EF8*uVn!#ox|ObK z6<(Jogp6XOhDyAE<{%tp!``pr)BCNH_|l?PYzt1qr?VM;E)E?1pD3;yn>|P@PP=V< zWmDMlJd<@)_~{T%Gl+~*Gp15huz`O4>YS}y0ime0fm;3UJz+!l zPk>s`Wd4R`pX@z_e-EhtLc_GB-$&X8f9ulv167`gzSg{fz~W1f)2IFZX_#pf`CZRLwCwA=N5L ze!x@8MmXQbP1p=BU{Mfvj$yGiv4DdadiYa93m(5H|4@En4?h^SmH++rt5LC0uIogA zBrcvfX9z7gLShT|+_9loZtimfaazngIN_qM^h?u&~ z!_5T_ZFEixs9g281(UPLs9D}~jg871ED~Kt>lzUri2gfnYdQc*^-yVqInLD`| zGVq9pgSB`&R`{LgOye1u#kXMx7(|uBbE3R4HOT?72?roKCm@GrC7r6Sly|jTUGR(2 z^2DQoT(;opvqGd#5RC2`V~rEQ-JL35lr=Kc$TsAq%mNBd$mibq1j(&FwS6%Nx=yKy zCVnXycO9E=#>mY!RwtTiyUeO|E9Zi|J%V4&EjV?^Wj@4@z6}n5#jkkt5#VG#@fHjb zVS^@KNfx4I(;u+?^`f6`hl5Zyn=v6E&9xQD3jQH*&i-w2=`dIpZzd)O zC72~Qz`FkI%4G|62g2qDtmkvPj*#qE#?VcJp4>h*r267jooI>1m%g-9%2!HHw7oFd zp!v3I@S$ifnOLYjmZLyPS1!9}v;0IGi3sCB5VTTeFVb@GREEi0T;VCF%3KS6(xxiZNC?u|%fXq=IEZR44-SL#0U$lq=l7b$w)8Yq?JX7Uk7#56S<>H za!qN5_z#^yiA<}F#;6=0I~3vW=P1EIy{SqzfV+&1hio)t%y-YNa2HFu@g0gO5DzexT&HuN05(bAXN5^p5bSz%K zl+H{97Sf@r0l7M+xBVF=3#b;{MxVuTt5%)V7uF7l6^K{m|U?SnR* zHJrL7H~B3X^|XFT@}ZsHMmoQS4_s~9hS9Y3rjy^(OluGCc@T>>GYdpbOVEw>#*M8w zracJLo{14)2;d-4q1}5xElApknF)fOP&od+XnRlOk1te1H4>7*5OIia6O=A2gqW!N z!4~I3L&(Wc5Xr~@X8)Y*rRCd0h7#%3nKGqRR7h>CJ?4Fn2$k{Zq@!3~%26aWhT>pX zfrq(+4YcLXZSM5{rpD}?fz%k@KY@!d|55Lz#txtmn_aBJga7g8jU{H88OO5VGwh1( z{pz2eAbd4I4}DFqQtlptD*Hcn!Gg8y5~UQze?HJu8K9N_mt?x6x`GrP1H+q&yZ>e3 z6Pa9O<@w@{3t8|`e>-r$9=ypT=;uMA?aM53;g1OS;PR*OC@Z8?fBi2aokmi9a=7L_ z(b?9R)v&+& z7$=rKK`;J<d#nAvHeen?aB5d?ZSn%C`woc?3%>GOQ3!BRY zQm-Z6+Z_Oj_Qb|_W%@VsG}d602cN0l8|BiEp;%olV-7R+V|C2}zl;{>?)5uI2#hg7c%(P9JcBum)GCz-P@|bvzy*lPP$ZapuopqXUgy{F9Dc10 z#12y}ke??;tuK;c=o|y)?{vU7W1)sVdC1tDd5zyJ5PMR}{qB=JMTQF{+DflA=(n*9 zF~0v{l4P@Cl$=HL)^$AgVbA!DiveiklXP%)+QmUGYXWje2Du7b&>_^;eih9vQMP62 zHWEDpB+f$E9I&L!kg&44`h|Ttej_o)+k@*Cq>92(51#LD<=+4#vX~2+r_JfrTx5Y6 zibR6g$Z<9#0Kad5mQ(}88>L?;?0>o-xpDbT2u>*3hB4i~J`^E}PQo@M3fX(_9YUq-z4zXV zkP**$=~mtU`*~hIZ~FA{+uw0r=XspR7|S1P^CmIT!*{Zq&#tKl`Zl3!_u`f(-VP=b zUET#&~ej=48vgUvqs0$f05Y#gG#kf5aC$5g08-gkKyzlYQqOm>Hf=vhk zmy^(Kr_mMGIsZPb_H=OM>wFuqIH)Dx>Y;Rn@N}?Mc=+S%$RxCN>}`os9Kc=s>Z3mf zPI6gWP{FVXdY^d8nebi+W;gZFbs(gKz_NZJ=|yiD&@a`4&8Or~jlpuxJ}WdT#Z+{f z{PQ`8UPOeznXb%8`|m9xKNY&sSv7dXFDfefvPjD0w+!&JE(SFbIAF{1^UnY}@d5w| z(@GDlhY$|m%c|nR&I@;N{lkw(I09!dPr#L!JFMSDL$;pUBE2aT_N@H=#3p9aUYos*cU_Y-wymtz+p<7OuS+` zc*7AZw7)H0-KOWGiDbl$9vuZckZ&p(M@-fn6&nHoNxGmRjL)^)*%&7MN(kj$D`0yk zgg29K)YDq`V2>j7*G}NBb{1CA2B{jXv+UjXJOeX6UG@v@7HIe1Xy=7S3WH{4fdH^->Uaiy@M2=DaN1Z7oJ}^1 zv5bJbq@WC8Gk`j`8Ra&x3)fxpfgp;0DAtkdj?{*e{9k+5-q)n)gIecvftmkWVXpy$ z>L}!#u8WnBodqY1B1*K*qApV#l4W%>;STo{F(@$f4oOzR@r+l zF+i~?IYib;f921p?w`%m;x3|2L^dL`e^uPMji@g-g3!gUIp7M6U+&W6Xi8vXd)BRK z_yVcc)DbY(!2;Jymz76?pN4~BSVhsEkuj0(TP7SB~=VxDIp z2A{t0?p#J%?V~+RuQL+-OIv)YFM%59LD?t*>I>6x8nUBTNX_132#Yr%WOMBY$Yyo= zv6(?AZGDII7cJqhBl?*D4kjJ%F^Q58G1;XPj6EqM)S*Rkd`ti|J5IuI#PE^~QJ@ZSP0cY$TnE;d5j>v{+@8DTzP^c6>dRu|R^xqVDgB(~;LbtycBYT&q z!^c5$(lJ~*)w#D#!>ir5Pe0i#hlsG98*&-==nW}6F-=V3wJk|>z6P@X9???xc|gUT zzB=l5q<(t4PX z9>IPdNhf{Yy{y$ybxR)CyF%YBJQN%f1{D{>Cf*z3) zo57Dle@3}QribzS^ z>tK-L|Bpcm)Q{gqq(yl+p!6KYn~eD9zNd)9!k-2!L$5Nd)e?zd`G^A|EL1*wv_kwi z=;xr!t)N))-5*>-N2m@2%jai?o6F7&e_p3)T-|%FyqMb{NziC4%RfJg!jH{eekc(l z0eWMjw0_+uf2}l0^sv$>P&L^9^|xQ!28AK2d4$EQ|8r)g6)>$+W^Zk{L?Aar)Wd;O z`y1d{PHZjQDtBS5L*5}mOqm`)1!I9NOg#Cd7u;sEkXdRjch2+!$g2hG z%=T|zxaGFc233Alcke6E-g8F<6q4G3i$l4}QjSul#w4VeyxyqO+>vGM$_Dv)_saTo zORP#`lj#1PjNt%R5k)jV^e5o>EA7RS@mRPy8{6v(dQ)uvduY}L_+FA34chmRcS}9M zI}bISz6k*-#sgdD^Phe5bNK-n8kyD;?HwL$<$Eyx0LfQGw(afaLN{{O!hMe=PG(@f z&^z1$W4RoJ?Um*J1fCzVX&-dy_Ac2Zvu>BU`goOb6oicTm-{81ny?Eq$B1cMIuw*b z0GTKnz3a#`5h#azeComNS|1g@sBkUVL6E!Pb)XWy6!aW z&6uj;1m=UQpIB=jTZ8lCDyyUufS>Nhvv$;NK(f3Kws6{#Tr+Xa50P0(LBECg3edw8 zX=6DCH?xKZ<4Q5<$z3%U-)LC-a>0AkR=^I%t|>r(RzYbHx#I~6V8Z)OA?VZCr8_^# zhp#Bw0{i@&tr`%vt5T@yyM}y_D;RZAG`6ZywosL!ObAp6O~+02BKJGEqtnO3jLmb2bk(IFrzF}lszOTjb4TAfG&YPup{gT zN;2w)iTo$mZR8e>_-zX$+ffkbPhS(S$$f@zPiKoFY2{GzahoN8W5 zi;5#7Ws-J;;baI9ksUv-4LX`yLLb-r{-%@EkuJkgWYCR$uCzT)6t8bfYACpf3*|oz zbW+AbrN@Rxedh`oaliM5<~k_fHv{}hA)ia_wT>nX z74@4kBS>dQzClZax+RW;6Th+3H<+{8nd>wVg(@bSDbw*q5tv^E+ODQb16D!25Gwd) z*n64v&;!(fH9&}zEJz;Nly*&bjws>^JpXwivD@os1%y(GBwry>q? zzWzZ{8_&HgL!vWgWwYDvMr`TPHexUqdkGEE5;P<^?s~?hTI9WJG;kel5T99wsZICV z_C$=)+}6)Rgg@N{Np@I!!Fmi z2Oeu)s_q*owJl`i1^R$Hqv8FMsPSOp_QHEwGcfqgd0gdP^r%5@#N(jW!b6r_(D>yx z%#f7*Xa^Nt*hK9I@~-kvc}J)S<61a^cE-KqlWfJLH(`x3E^x3!J327iVKI1sue`RK zL>Mt=9K99+c@FO%ve^ntZ-VsGIM>rfYL*|$T?To%D;Lwsu)W4u@UKg9027FLAf^2u zOw1kgEG=|7nzxwMOIW`%S>MqtNHSu_6O_+MCIN1iR(sJrRIMRUh4vDc&gVRL4hM%8 zz2l*UH}R|t?p8s4n|YJ7%Q2?Pedrp>e?n}|Qu@R#YR;sAAMcEWCr6tmhHPDSZWN#` zr55`U)&;fFZ#%SGF?&8bo2|=sHs^!|MbQ)lMaelP6CcTlTNLfNopIz2dvAgS zOdX0bXGzcQKHiA(JeflQI$fPv+q721yM| z0Fln^r%IKDBa<^dM zlfmRQpp}m8)pP$(4-!LLd2~~zWbDgCmE6YM4xao9arcz+GaxH1$PC%>{ZxXu>+W}s z>%HlN-Qjdw+Ho@^>LYMT)IVlKCGi7pG~Al@=Q*)MuQpqjj3i3ZhT`)LI&uQs4Q@6^ zMTy1Ou(`?sBf$9d>fx626roY=RJ+n7uWNos4f#EDE5FnA`l^W-rg16rl$<`zK+d7- ztwD9tW$6XIwFTc{)a=MOOYY`ijnod*MiD1*BxJC|;&P!$roOBf6R#M=Dj#1W%lxJ(937B+jN!$aS<`FOp*Vp4e4)-4l0}+oE z5Mf+fMQN}ml|&L$YZdD*luVqdrWRP$)HFBGcJ1oh0Xr^(!fFq`&?d^uz-*wKKeYjM z6Mrq{PEZ80OFi6~3B}93@;WQ=!V>4Qltkg~p_A$L@#C1|Hjn>=qHXWM4C>d*qbq z+)rI5?*kypAXCWwSl7y}IdU3tll;IR7TAHb#X2?v-(cQZYr(B9Jp^B10x>Omt2T!X!unlS%H>N_vfok3I7SAD< z3m^q<7suF_?8^_+lvL^QB3TtxtlRM(0AeJ3ZPqX*ID*H~K}do6av99q3U(lI>4gg` zQSuy5G#9kguF4&0(H7&c9?cuS3j)9TeI_?s`hkMUMrqkAf*6`u+4)t^j{lhL2Ksjl zA+!FIXm8>apAtKO?|hMqZvqm#qms?8uNMNkT|q_u5JaYIXe&pJ!_J@uF-zVKwjHgmT3@g@+ZFEObr*xK0rFpD3rT*Y5UsH- zIs)pI#kX_wDdwdei;(_uq}BQS>XLDQgC!|d@z(mfvJ6kzQx}*e9}GhQUG-3_-j{@( zZR^tj&V-DX#1C6AkT}$N3GpbCUc84b-tgcNSnpGtUrfH624oONl2$sE{58II5s(%K zGS*Xu6i`4%%g}jOH$^P`&t=HHHD~7~1kd*E?6lRYZGKAxE3~lOMy|S~$B~#zCRMsY zEo{O+2j)$$xojb438ei{7x5pJ~BQp^7O4Tse)*PXpr*dbngV@>LZTgIlTS zKA)mWE) z?6e(H58Ey3^I=Y;I>XUtbd5Viqx&66hDmekMf;w&?X1&pfhWMfc)VyR@yq0-Ow$Rf z)z;gAF~Nq-QSPGFEZXUBgKAUm!UkB_MKV-ZtqyZO{d2(Tw%#O739Ma`Y4D;P%33L% z8~$xZa+`Yi?6~w&=Pgmq(Pqy}ul$yj>B+~PJLruvRPs}9Y6PAr?7tV7^Gye#8b8v+ zmJ(-MQk9q;C08$tvgtRB*VYsH*M=?2XTDs9a`Xr07fcdK3WH*KPZ9&ZAmAGs+TD)% z4t{;-e%=zD**>XWWTq9EK=&Kc(UwOr$cqU7PX;k=!P4@r{S^Pf*jN~$U%B(VHG(FJ z3Xg3hQQU+Lqp<1sV!hw5hrnFu6`g2rGQ}{i$qgXnJOn}uL9O2(A=$5I@>2t1$%^+Z zZ|?y=TTB!Gmc99=xy9hXpJq3v3l^0HtRw zbJ7 zE28i1o_6&AyZ-mIHMQc-)Bm6_a4Wz?yB>L3>G$;I_j5#H>_mw%ieyInm&mXGjU#$A z%h>-=ic3fq0ZguoqL=>jrqbyEn7= zRtFEbpwu&!&fj;19HzIjVJKvXk?-F71C~H>ikIgg#6Dtwt2hIo@i0IVn6jn;mDUE+ zqn7s%I)dOH6K^ZEHFeyCxRVf&Oe%H7o9(IH_m2V4Md8wG+PN_8Ss{+>m-_0Hm7FPX z#gS0prN@ENg#uOO(_xvo4Qx~>p#J$W6WCmjOoG8bTit8s!b3+$t^C;P;%Z=Feb9FU zqO@*?l|frB*i;HIbS7CPj;{yK{vk!MQ<5;CMYldI0h>u5x}OiNl^>DV8^#Q!!=9%t z9luYH1hrGr7r#NNrL8kKF^-~z8cbZb%BZoN1HoNK`@1P6Z?VP&6v!;od_hT8!b!3C zev|dzcL%=^e1<&hvHA_5SiKAm7v)IK=uNs~06EF&8ej{chI_=hRH{}J1B)>bITyW$ ze9B_}n_QNmNxw0Yy|v_2(lI#CPksb;ft@9&Iq$(Y#>*Bqy4s;Y5+sVU!a7V#W~jN> zKf(7mM0(pZILFMV+N?D#8`xkL&i6nCN_+FTVmt(h#OCb8;Z9CWOzfn+F<#|ThF~W^ z9G)}`L0n}6qBq&=AjjNTa;kLx^-eM)mfJY@yZw_!WA;AQY{({){0fIY37 zS~gr+o?Hx4LwW&vAT9wxTmvLozWtixjZ3a^0RSQF6CfeKtTh0RM3gtktggtAI!_~V zE}$TJ^qbIq3hBML6!Is*$$WWZhm~p-b?GH@~Km_z3+n912o6^IN2CJN8k!< z?FIzmAqV|yFji+Cs))uNL&h-;B`78|vtnnK6d@6KYqz=q{+oYn4>2#6na)^;+XE;K zHlbQJCdm-_xVz=L+oZ?RkfaZN3&-X|O}ZVG?<0c}p+v6r`I&>4K!MB-A^@|yHbI1p zx^qkE!zaNgxW*-`)5R$aMD46KWR7V+n@L^kJA5}&g6^|sKFbi`VStcDqWl!bMBFv8 z9gUOhW5AuIm4;~Etu!z{LhVtC{=D5a znl(_k8G*wVo?^#&*X?g>%G-~HbxLsSql2zF@e7=fk1{MqQfLAZwNsSS-{FkTD;-kxQ0%LPsRW~$;Bo9>F@sDM(6J24|lOi_fILqGXW7mP0; zoI=ylNQ0DC7bQ;2^h?NSV^8 zYkxnp$rCvzlH!~t%=0@GQrr2-H8RrvVX_dyl-34%iHDCT4+T;EVFIFAg%ZVv(wLXy zQc%e?ESyoAv=^pV!U2FK>4git+PGkHsQLU^0XjX6QyfHNpc+0SPo)(xciLZa;1N!u zxpZm@ZG5XG^~*N-q?l-2pqgj;X%Y~@eOuDv>+fKpSMZ1cGN_J~86piO9Z7c^LcRq`k_HAIvT=V z(f&i1c-|6ko>x#0{GfT+q{SlD-~yNnF)=L9q4{o4*4FcW>BHF21=SYF29dY2jSJQJ z&^v=#-sYm@uJn<0t=_Yrmt9%$saiG~!8|x_rRsY1Wle+LhEms5?1%bQ?NM>Z#M;l+{MsXb&2A`mp-`0{4VmeCh=t4ASp)Ng#A;0rmo1PH z)Yf6lo`9G(cJ6~^0`BbzAREA_deoZ z1D_9ZRY5_PsuQwCEc)hz{buB$0gAVC-5lAk={DXe##)tZK4SNCt8Vpxa86j;R|YJ~ zHGnF{b_PCmwOG8D@!!#e1HV(zTrq;o#3!LRdny~w@^>}omxx(kDf9FQVZqI3ymkpW ztzt3a-9W}#7y)RjL+@!*ROFWc8XAL(BiTqDN@lxahdfJLGX^(D;3Z1!e&|bdEul)w*=}K=w6MXJ zT#o_2_MR~Hl$BZP+ebX)>IK|q`Cg@jSt*wB+kjyjwrw{!q{dEIt2?{8(>7HGA)Zo& zL1)3hqjv&b+`t=aUP*a3c>(Ow1-)2A&YM4KP=$ur>%qU0Px-ZuUAYzS-y}!QMbK1tQ%S!_rU@Ob`|xKj5gGK(zg+jG1D`&mWAReVwE`tf#SZaJ3GtDZtUk|tvXdwYeY&8Ej zjJQ0huOc5&Le6piX*I}DyS7xZTYeV?L_Of;mzK+20~D|Rg!PmQ=dfpyBLVx;M?%fK zY6Zlo>u=4h(4opJ=nxG5yL^v2 zfEcpwk5h1aLj&dbdK={pz^2l;mOSgIA-BY~?Rro!NufimfVs6w=w_A1xk!TwQrE-+8Y+EV?g zyW}&m2>Yd*=MX`uW^{K9lNd;%EPY0~65CoUkoOug)0Wt`%~;TVF@(Q;r$)54e{{76qa~%IC?}__mCb7V% z*>L5c>lf&L9FHIRgf0a)L2UC%aPl~B)J)%YlBo5Wpe}O>k5EbG050pDu8|t&Hh063e52i13U$=A~Q<4U!XyjQG!*~7D`14P_ODe{3Clk{VLC%qGh%lMFSTxj%@||% z@%KEEr>SomkK}1v`;+>XK6<0R`?&ATK@4sgUhUF|3p=y$&6j07Na#t{1p4v==8LFb zc1Q)v6KUpWZgt(tnMsh}?&mzSx?`>b^PVO4vaT#ks+BudYISEyi?6@K`xzB3ShVj2 zkR7e#7u5dXl8o$Dkn_o>y;JA@UZ}tO?N>|a!O^vS1$hFuNq zh3Q21e9M2|d3*OD*iV3=+O+3L&fjP4*Fz<6Xr>hde+vipp8@%u0MEqYdjDZ5{eEZ~ z@R=A@i2wY%Wk$EVh4ekBG{J4`B=0$<{W<>r%PsJU$yR zQu62d|NM^vQM5kG|Cu4|KLeN}Ndc*ZpR9jzqWp~ATU%wXx$Zc{b^+w3^W6#tQ7j1J z0DXFXCXw;mPy4ULI7E*m8<@w4_Rb!g0KdS?V#_HQ5O-?dD7wIhb*H_cG1~IgpXcW= zKzB61*~*1Z48IR{U|`^$(KGa!VaVCK;a&KbxOk9u*4D$HUN*)Lp8o@`y3Zd2{KByy zZ|^GetHy-(dTlo6biZ^p_M0SQDqE(~>R%R4dmosCfGUPGufC+Mgj}r3mVzG zzp`h4V;2etEu+t0`KktUZ8li*S2CP{5dRR4G)i`3&xGJjVZIrc=5^u>0g`W(kC53^ z_6BhMvat8K&_HM)VmDI8ksVR|dzU!i{vE6RLGS^QO&2W96)1zgd62+hg$?3dlFgbH zt4lPFS;!A3`;EM_;xFT8-H75d&iO(;iAW+SawQX)WAB=E7NUSyXt4uVS3pVj=L`ak zC;*d~xc>b45PZg{g1j7L-nl?ZXLcIDzgfUlT9AkH_6Q~rw+n5hO<)vD+HT?BC|`N9 zOYT$Z=ig=#zm^F8DB%BK-u-+YHb5aes0ae?qZs;0Ad|3zz4q16fJ?lnrGpJ`9ARbj* ziJg?V3%7t){gfeeRcZBy9^gu4!C(m8`WEt_*52+EbG08AVi29ShxhQAL~c?r{}FB}0@Wj6nkGr3n0g1BphZ%k}p1c7pK zt4irAI^Qp_>s|l&=IVobFnJ{fM*~lwFcq7VOIAx}!N&Ok1Y9QIrF%zNs`8X8|A+ka zV?5Q3i3E47>cPOF3_=Hbx1ri^V+&YI#XQ3l6c||4(A)*Rx;L4nFTLEr-Ly-BrIhhN)CGL4mj-%5PO`pOt5>8gs+rV6JWq0cJ`cF!nxOIa zRiy;i-5qL|MO?zTWLv2Qi)bAseMs{)+7r(!K>CEi@AL@=a{>Tb)|Q>#(e zVNTKj*VoiUV(vFkt#>G{6h@|zu6}A}GX=)YB%JniX|*yMM2G$5G>$TG0R|(9)nNN} zSR?wf5wa7Xgffm54fyotV6nXh5ipP7O0uO7G;d-{>U!a$U*zLK4v>VCS4k~OQe^4LQ)ZT?C@mF3Bvuy*Y9}Fx_Skk*__SvhcQqJfNo(mr ziN1gxN{ba_4vGqao=7wsEaf&I{QwXX3xq-4%hOKv$0Q9BB`%K+e3r~G7a_8}(NPMH z@XctfOkb`nwzVw!9j~(+EKcwabI30NKmEiBlO!b{apGD0$o`e~uR&Q>fEf~dkZ5s@ z|C!rRNMAcNT`6-d!cxq(Cr@8aRio~;BDoYCA&nVqp(cKue$EW7S)T4ENM6$-|VTvBP}2pY%a z)w1?Dp|A!J%CXeZ2|mCyfH+>=@FlufsLJ2LMz8y&H#-&<3!rIXSt);iKR13Hm}1BX zl3CFg7T^Dft@^I0=z5TWXx(g>!>Vxe<96`Brqkb$$JTQ>5+5Zh8Jm||$5eWYF4%?$ zi!@O7YR6Z6DjWq-Dn`xn{=?U|EiG@QXOeM*c3>=ELI48{HllcF&BDG(K@d4Z7E1C+eLdrA}#aHiy?ViHfYeo(cBUmg}9~wx`uqp`! z${}n?=2^VDZ~~OIFMEI?cnMdoW%iobqJ5n6GCsXz2+Kz#5%eNfkoyj$d;tx}nH4(T z`sMy!|Ir3G2!55HOGScz9*^KKjo=Xl=$76(2bgbNs2M8w2I0`5g+nfV$T?Rd%;df( zbL<%snBryUS9@Dh8ahljM}K)HKU*|e*L?m0LJ#c$SiF=!!CSAS<94alOF{4g#|N5@ z3mhG0$#4HvXrze3+=Z=js!pFE>Ncy@`+>*D6@N_WnN{MrMleKzP^Emc7N!v=ZH{^t z$Vv3<48ODcHX6tz%8=L|m}dg+Ztshs|03wH09~%8U$w zdoMWmX{~e|zjW7v!S+r#7u(&IG}5kS?D$)j`g&eIQ3_o0QsSxJ@sie@_=`YxP$BktaNqOTBU*HK%~(`!YCI zp$WI6Lp!)vsrezKiGO2aE|0LK_=uAqyP|hYsSIKFlfd#VsJ>=1u48Qr9y~O%*m_0bHEB$kp#%D_CTP6gK?pR-rhB0yZ@s z{XB=^{FxW_zWM&M-^i~kn86qdsi&@5_cubkbOVx!AO|8uaoig7DaPG2;gicWP$GZC zCXmR-AH7zMc^LP`S2r1{rx*thzX2^PkTo~$UV~iQ1jRR+^5Kz`_#9^{dVlx{D=Rhc zaI9MmVEkcE<>LE=0jJ07G_M<=z8v^TAl)T)L>hcVVq2DrLj5|Zu)@!*+L=$-{njr) z4dWilDBTVRZuO${`q$7vC^HRO7aoplsDg=(CjnyZLo>++pt()RBTvC^80XYYwxxhoR8zSNGN1gyUZQlz-4p1I4Dk`vNT`N@QH&M4yf?_S^i zCZ1W@w}64y<;pbgU)^~+wzs!pp?Z;moPlFsEP+K0{mhuFrXb`8UuAG!@?+#s7evk8@uG5Sb3v79A+h*LD9Btjdb=}_* z-UA|$>n$~ky)vEs5G!*t#L>*3zix7O-sr7}@vPdPozQ(AO%+Sa^Y$o~ezBOLYK4GG z+7Qhcowy(qMtm*B@>cj~4w2-d%ll;{#S~V%V=&oy&fPaf{OFJFM#pHsHp8A{#3og` z_iOk5QJ{=sehoX9Q1{!z|GL#tmz0A{`toL{LhaEHjeThc|O2sqTB|93^b_gNHWNukDVzBbx4$p zY%j_m=9v@!kx4%}tqhJ|(MLp19Q(z*U=#XxCnorR>BMNj!dn~gBpywby%p=TmOF^W z+hT-{%Yo^x987y+`JRQ`**qH!zI|!xrJd7ivkd~jr7!5X0C`_myl(F|b6%E)J2sPv zq!NcM&FyKg;^ywcz>zojLYp<;Fa>Vi!VtociFtaDAOG6JQ)9{JTH5ed!jF3MCEy)A z47oH{BZ+bobtTUW%fCN=O6aN^Mj&NKMMZ02W@4dZYvcT4z0;h1=geYC#^PpumPv(N zWyXZ%ROd`@euCd_{0Y^;*4L+6!drQ(dqUblZemwTfmBiA6Xqe=&K< z)@cS5eIM}ZbeJ!0@kA4GzV9#~FNRH?H&i|ACvufeFPTkQguUBFif2{+lS5(m{o{q; zzq(~IX`oa-laiXToOlvY@ge%ze*4aZIFcZYu)7IaGvPTddJ$?&2Wz_6D@jIv>GrnxBg=}qj|#r4rq+u% z9S75}I1mE44!VXSX+FVGk9{)(^VRPi>kEAxsdcnP(N>^R)K!SM zxr+zog=d@YG(^j84^AH062&1*)(pktuiiytKOTHvYAIP8=0`ypn4nleGuB- zh9ex`ff$`w0=ks;b2UIJ5>L^sf~||J&r;uuK+z0{fa@mM7L<3p&Rr(_b2aiuodjM@ z?8yqwe0xJs#(#b7d)$O}45;E35QDO+gJ$x(D)hVd;K{a~P6pgteN%hb*S>8K8wk{@ z^Orf#yE}n8)fOhn^=1Cpe1aIl*YH2ScR$FW_Gt32TH5b2v^d%%7A!~gPPp>Uz?riZ z558;;Xmonm4f~wTi~76==0Y+}oI-nRy#+&3Uz~oP!F5Yx$m46Fh z<`RgQNf#?WIS(^Rn1vM_Uj`A{)HpYIHV-RX#ezzC5fs~EoNwDbDdMFgxWNuBxow-u z0k;}=E@cs#)bIJ!4IQrn$#>MIopbKB0}+Mvdx1;{Ko>*uZ|PFaqYnan2!Q0RP<>AOqBRY~M8cEU_>%SmxL} z3lzlbiA@RdsF*D5TC=oQI3T?%TqVlRf}I$*POI_|Xqu9Ok9mRoX?C{nuT>QP4$OVA zV&h_r4t@7aczlN^OBLiI`Wfz4$>w99=)gY^era-BwdD^CK6O%a`;h}eYUMsNm6zYL zu0J88jGfBJ?^M~jz^caHRxp{|9G7S=n#xS;8l<53v~I2IS%JDh6sT)>%m?dD>D#^N0+rrLpn7Qc4{yiNfGZ~?zA%LjB3AJQR_W=B9|NODef zc9z=lC`u%?%vg$f&SZfkAOnK9Jox?I-Z!Shj92e}wwC<@7S>fWeOt)d&UK4Sesk&* z#*y>Gg%I%@;2(eF-C>-aAG&x8FQX_b;p|K|#MsjX;oqyd3@K)F<3y6Ra;BI(?Jl7H z7EpvlwYNN9MV6$dXg|lTt1UT42RNLW)>6eS1_6hDWl9%iAy}1KLAiNX(z@3yDU5p+oML4((sLeH!=Y-LiN4Vl7fm=a?A_Sa8UnpkX{J~iy@hBK z&-z>D4AY^pR(ShGTt1NP(Dls5Wa=1=k)36$kEQlcSBqVPYonxmAdJkrS|3QrtEDZE z6-nDUxinq?6QuA!h{t8GJ5Z5ZHdf-4mUH%$Yvfa=wu0VkL34o*7`6os^dLp}&_VE4 zItu5wq7aVp#{Jc2EV`v}nBtopiB^y%)i;utsWNz1&~B8MrXaK#L}#blU+L57;mpXi z`mz2|jUK@K2w^bj$7ZSy$>Nf7wd)IEQ%T%#=w7lErd5t64|~EYca5>=8|Vm15%4AV zt$RCe1P|=s*C*1Igyz2xorIvkS~{wBAwKn#WPagR9zA7m|6=N(=VXNh+LxP8H!y2A zJ<}UlBWgACzL}sWNHe#cSw44khXK>LYsC#N&(2HGoXBT@j5kk_mx?(2l*mo8s86BaTW{+H0XZH zqr3wGbQ`2?CohRvp8%bqIg*7y?Jskm$E&uvpF*r8v&0WT#(*|s~b`6u8*Z6J}? zQgZcdj#){Qpmj#9miR1Nj26#k8iUY5{!mJ#$lYnPY_Ndnc-{4t%zj&O5A#@fS}NJqyIt>-VfYIl_RBN6_lvmk>4%3d$$a1S2KD`u|JNhvk1CWFaR zq@@Dv3gLz@kleLVu~f+e4~MQ-__T-|HUN0;VjWt!TrSq4RE44pEL@L+LjBi4h0_l{ znQa;ZJZ3RpCZBhkRpSgG{}Gzqb}_~h+q&lwas$rC&6K5+OIABRt}Iw8r#ZGADiA}- zb!NxroMYd6DmKyG!glq}?@#wG@4i72dXKf_*)w%Hffq2Wt6@_qD^?j+NM2~rMJ91nX_plqDa$y$YRvNYI1A#Uruazv1n zLq3&l{-a!8LS$%vs{b}ujZfbdd>l{NoTn<|0q6KFJd8ZP%r(jiB?E!>;EwezyTO#4jV*l)9Pd?i_ zY9{@jo+9l4(G-z8vN`s$F&m;Qtlc;0i6`ZzS)G2EX~w5do>r>ZsF~>SdQcGRv!hN) zwdz5qm}75-vIjqi$B}UPeI@`m~bebiLR3apTlWte&Pz*16Lsi_}Abs~Z2pI|9s}ue>p= z#{Mh@KS>ZUr_@>5(5nx;T^T>Pvc9bxB=68owSP2Mpuw+_O%qx*CA?zbpjrLu@<+x( zm3qgHe%iA)IDxUW!0w@>`fVH>V2=8DaadI#KI(IB4mHU>U?*kswHKNW=>-oJx?ai- zsUXjD%nova>3Fbw;9tA?QG7Mf@?%S?kP)CQ(4^w$nkA5i*7*RJjNXDhX!|??kHhz) z#K{vEa>KW73M$SEd<9cNYdCGr(ozX8A)Rg0vI9p0;~3TfE7xHEa`S?1t4z4*6Xlu? zhmBDTIP2ejrsyxtooC=p?bKct2iX&gz1W*+pj0lec|mR7A)5{itL4P$a(`-{ym#VE z#UG?DrZ~1p6G{*p42_GB+Zp!^fh%fH#cSf(D2m|5?0EBlNmsJS+y)83nRoS{TZ4I$9F6Y`*4AUp32m!TzFx54l+8gEAE`7Rm>g%fU$!A})jS5%E z9(k&%WYZEq5o39K-8_bzUMEuAIibByM6jmHT|nY|DBVjiR>=&EBajn*ac(4Uv*n%r zN8e$}TqD=@J< zv|?fewX|eFnu^(_$SvvS8pWYzL1QTJ?up3C`qhvr6T~&wGKKP0dXT`#&U!6N-&!x9 zh$oMpjy6_{kE_XpWTU@gwslL757q?@s1hwhv{RH02Y=s?H4~gcqoHc+Nd@DlCyReT zLBvvURqkLrUd@SB;*%yxwzAZM&P>Kf{V*SfPPciG01{kl=kjA`UIl^#;9|cp<`KtOX`t7Sx#)OW%|q7rP)#Ca}O05REeiwiTQGN z!Tm-uljCPeLfR+6PZw1O)+CB~tY&^3CNUaD(KS|yg*hG09XxTRQ+hvVlcP8ps_JZn z>$+WJw=QdDIwWN>Ywj8fqNZeK(e$nT^NGtWQYdXMb6&1SgOEaKr zG=fQ1KUpG*cQmmS2a6+c*1_zOI?3lhAPlVpcxVMqZhca}1oMpJNgS_MX`hwmt$H}F zG;oaNFpMfgK`oXNzOmN%CH~dfE4hXf7EC((m>W#}k&V5HMj*KOV-qw}W`)uS37o_c zZ&f=#%Tx#>lOw5b_59n#?zFs@vb%j30<@Z$aFp782kUMgxq#oFHR8wqB8|z>%yfSz z=T8O(A?>QI-75Hh@KXeET?JB;-ghM zh%$7HrPfmn{~FpqL)myASK}c`kX8;u;!d*Zbp8waWGgII!Y>dJ`*t!rdxX-<;HAT( zq$zI?682=n=-C9aedsGn7TGPy4(j)UzBZrw9>at7UL3O#kE66-qZDHPir|Z9hL4Hg zC2RfnxEa7PdJO>QKDr+I<5uzydKUE^C>en}j<=8hFPxTS2RIwS?&$-+alC(sRPL>3 zn;(5UbX{zVXMFL`(f{>&cvbp65x3Y;zQYIp9@Okr4x7N&5ZmR6!`eT>=&uM2ltBzy^IHBHbP9g1`iqdg1%&K)JvzAemmrF$s868Y?1v>2o2=h25|cVbwW~S*ucP{r z04^(Y=VVd@c}DqQ*GKXVv6&9`Gv?N_WI(SkDgK;*MW1mEB;zGuM!>BuUdH+N%h6T& z%_w;fF$IhT#nud|U-ckKQO3aQNZ0OK=HC7*CWjV|(X%SC_#j#{@G~fZ5qaX7u*E(n zu;wiR#&*H|KB;PPDa5?M9jysP&*kR=?w^HWt8qd;GeFO9wuAv?A<#@-24N1{Dj)fckG>YA#)*@07RS=&(5 zY;IgsysJaNJ)Qt=^o@`na&L$|?e#6IU2qk#1rQ~Y^rQwHf09DztPXAU7R@At^&cU3 z^0P?m<}O(RZqVjBtrH_@B-CIe>_%_;AT&Y^1kj%IAUhr!0E?4KmwsXJqE-XbFpo5t zz6`2cwFp)6lKks1xxqb9IYq$?Vd3A04JvUIS|J$Vp3C70FL0&kdK8bGXV~TZJ&46% zOl$-jaSfWLaX^5U@n#8QQ8Wzv=RgCXs4P&b;E#!qP4UQ+gg!2a*UD8?A7)nyz@|&J z1YmU|u5J5UkfKVm*bV@J1Hfuts;a~xFaQIA%xkmq@g97*m*F;2$gz@Y0iB4x(Cgl# zn3Nl|?=2xeD*h0MRU|k{NNs5(IV1c*AI5#Xmh#?zK^P#9qyadw*0Je$>nIA3;DMp} zB1G3?&*nzCmw7whnEwZWvw)+RMFJ`pGfBHKe{m*r6f7QgMeC-SvNfAQ`)9sp7a096 zg4G7@vJdCvIqXLPbVIk*gmGra81qcB%dCpky)mnIEZNOGj7b8G#aJbTQ z0O81U^=o|L+_r1D-{><3nSd^FTvCDmwslIP_z#r=(y4QAx3|0p>Oie8Pjw~ElAs$+ z2K&KOfSfm7r4J1V`81cDnUaAJ<#J5jFf82A_y%N7^aJta!Q-E)6O6#comn|6S=)w9 z|7UiD)};4vGPTaUo22{-3Q=^>axig%fzFH=89G$u^jW8&Ji2Em+G++CAt*ya<9-0y zo1mEW=m(&ZvH($dYr+!FFvrez6N*YG9Bn*~TX8Hhz+?-2`qsPJiqWxeF$;DIa41za zefrgpEVXIT71Ap61UbuQ-+lFUcuJcT#qZ@^`{f`E~18^nd!%=9%DoTq*s)|`@r@N=cBK(|Uu%^^F7 z!1_^6#P@0H1Ej=*#V{?~dq~nY9iU(;+Q@}Z@Wq8Vpqk@UcM4X7z^m5reG z;AQSAvG#XxdF0C4^calu0{T%(M&a>qk(6^NnL}w8826MK$j4v2{@)IK^inX%2wIOI zjQc2xn=nJKSz?t8?pqr7Ux74`X0ie79n1LT_4kl2 zFbQ_jGtOg03)=1qO6ncDh*b5(>%K)Ohv}j(z{I{+i#Nz21~@G8`?XzS|E3$`euDnj zcI&gr7>SO1V=Fg>G)Lc4IE$lz=y)2{@>Q$xeVx+hsBpZ*#6le({p;2{dYfM}32%5f zSK0=1WwK$#xOF@foIUDFoY$_T6WqrRDj0HcECdba=4`^9kWtq0o8qx5trn$c{jwhv zzcV=b9Jb5^o{zmj1=1%&LOmZqnP(e%ojt5r!6J!^HigP9Ure$jF6i#Rmw2~B?F_s> z@eWBI4UBSARF!G{ipSHhyO~YhYY%Sw@{N--S(YqiDrSOsI&c=^0qYJAn`_1|9R#Dw z?F7YhUkaRUOsqA*CSf5Jf_5HQr;6Pea`5}W$Y4a%<9D%d>R$pXdgPC+Q?aYlvkCK- z?!r3os5Ok6ta@^o(8vXcaVRt}kJXr0)cr|OJD3g^RTKI009adI56c~1oyogzpPt%x zd{G8w$8u36^b zIhf63V5HN>bcmPOEI>ags)yX2@IBFd>a}TKLAq;)*$cS(w+L>rPI)R4ZU90UVIf%( z4%TbMu(%C%u>tiXQR8Ch7~FVkUlV@=GG)Jb|bAR$BUqX|usCkeK zOfo?ttZtc@hTRBO;)V!2G@MbAbH`4<4V)0p(|w{SlN~{lav$J$6By^+?F`n;h8pL3 znQ!QvAYW+3tuhl(W$0>-fOp2|D5lJY`pewEOWUY+RPb(cfBs2>4Z@nweA}sy1+6r2 zBm(ULe)|}ax`KM>@6rf?iK+*@k6hPM@X(QKM#!S9ysHLmu4dW$%>;KJB+|aIKmfE! zP#0?Y!BMsaxPIh$M~_^`zt>!rLi3Dl8%$6h2Xf)R_yV@%nCi@Qbb2xO1hd<~qS|>2 zKT38M+;PoB85LCL4~UyxMP6uVJ>UB$it^BGdQL69xOF0IDojsFnA#;Cs@TU!chPk? z7-1bxe|TEL;f>B+QLnH zp{Qm|_>$`i?2v)mtdQ8Q%RrP5TIGrBzvkq7RYeF^dn!*@oDek(!(Yl{1wZAD^FB7} zK^Pn8nt>%yKnb3SHDm!2E)L)QTv7M7|r;FB{G4AL%fVJA$H zBo&={=-|sTp=&u5_;26YH`;+sdkq7>5O({mr3=T0d-CbegbM#2EwWJpYr#9JcrW0L zf8dN>^RTbv3*sC-_a`?8qi6F*{A|*1c1o%Lsf3b|1I+5ZJyl!OO(1Fb1bcU$=kBS` zl_Nc?{`}8kCw&9Mx%d{Y&*+BiHMHFFlb&t+PHpn_=Qr6PQ5?PDHJrr7}$K)%ozF<%gL!FpYh>j2{Z)dD)Lc zt2J!)K76ev)CD<4?8EEI_V#T+IB$P&B&7GJyT7&$f)^2A-o2iYDYX7=#cBZn_<#CI z0__hLXg^jo;czfeuay_FO5$m+)~~)b9tx|bK(9S}Y9HL*vDV0w^ld@Pc)Z;3DtD>| z<44tRadz<=aC$kMFX$EnT8O0KDwzc@!!A?a3jE1Vpj?ze%wNU)%&uzlNAADf{V~=K zj)L^W4=}UB!5a3394~JOc=G@}h&0y!U0P0BVvSKA9Ul~M2v0i=W;}f`jyCW}?d!kP z!|*E+{}taaFkj_@X4_B==h9ymf(>SFj|On#*Ixi5q%&5bQE=DG&)1Q`tB8h_4>b3j zZNwJzx@>2SbYTQ_Ud8O7wLIfppLVEIc%Bj4;GR~`hN-N+d%{i3bU)#yJ7*bl87|7* z|3r11rqS#e?~QSVSTN$iCQJQDJt45ZNErW;;c2)c>KqK-+~q(ks(>E#O2B6JwIwOv z0@*qcmQBN_AbY?in1212UZH6ljb?P;lm>aZo}hNVBZ~u@sS20JpKj%edOw3&^$Vgx zfTYd?l=EDJ?fsX5YeRw7h=Q7Ga2&Q67c}?jFrfgA?LF+-ACTLSQzr;PfK!X%lt4oC zuNR>#^69k1-HnG>*^9Abmk@8#4Fv2uSt+HE(3(kBTmE`4df@`IPbRps>WLZzrIu3v zQ1)L!-XiL5KX9Ib9%Aq~O=5Ix}R5JJbKPSAj^uDz?M@I$1E>B%Zb zF-FCQ?L=5cXa9rkl}U(<|A8`gz7cXK*#=>Ts_F|RI@^M_APiouNKd9*hVl>%TV;%p zdM+E`34P#18RaEY3EvHoPH=CfJ*yEn@tyKUK&iP zSQdTRjkB%nUypLjLdQznH^~|lp#4Uz^%$2D;gj!ld@INdDxpt*X~v^UM^YA^ROE90 zC4@_ElMU(aPK8%==>Z2-x!j=qOg>{LDRcKHz>H}G$-tiST+GSq9@i!ecc9y$dZ;~Vx- zNa7Y3(jnxwCLhYRa;W?_%t#%00RgQ?XB3}ThWw3jeE}G)zS`M?7NXefwWA;ZhRr(g zyZwrI1I$QbIuZ?_F&s^}D1P08SGV-dC**5*Q?0h+(1|UJao4=Tt&P-m@ROT2fHj%W z1`mKvmPbZbaA^lwDssbq@4hg{&p?JYmAN+FUtL9wRB4vbwSqx=$Yg0NNO+06U>(?6 zT3xkHw#n0-MeL&OeJwul43%HC#C=vGbO9scdU;oAXXG9%7X}405S@yBLqn={piFn0 zsOk`zTT%m|5O)~4ZYlD)muG?ei-{0FKotU5_Q7p8=N{j;rVxXjxsJExaozlRvBg0> z@{I9md)#hvl(9{pCq~FqN@xnhZ{_`fUWc6Ri3PW`kUhG{XKd|jiM@Bd4nxr_BA^!N zuh>8bA*%NAAlrx0f9{A7YPaO|)W-Qpssa_mvm4fJLCu&=$>i;H;^LruAPykDs{~Tc zpLLxlEl@vV-w#W;t0DG-fOGD)_!Wq=mHwu*ahp1Ri2d`decx6-N+WbUJN=9RB$%v+ zIoWX6qW8um;FfuJuO^qR9zLh|kkgeP@LdvzFlTj0M!RBUFJJtZj)G4E{tJrVO#}$D zMjTS^rYQIG>O-$Cygq59um1v(nH zVXN&v@*Ga2FQGj89-IdVw~KwW$xgyLaf3vOC~jQqrIgqx)oX+VRgW~THz+A4He1G_ z=1&?JRN{--6@4F&k@17#NgjUb(b>rBFZq~49?}IJbrtM3vJ34GW5dYEt z>peDk#fVHHIQ}k02s_nvK)zf#fsO`;=g3w0}hY-Vb7=)@S zRYI;hF^?MW+3<1$`&8FlFLimxbo(593<`K5MIYQ>tcQ)$>PTQFUVoIqA7wk-9M&kE z;krBLR+{w^o08Ls$~XDR?t(KDBGyY{`5Z{`t(F^OAfuOboZ?>UM(NqiH#39KBdeOj z{zJgGYnr!+tM)m=yzO_iMSk3V!p zUqjG=m>E%`qod*eh{WiL_Oc;II@@$!*G}VXh_beeYK| z*tg5q45au~kArT_#uo(IDdtD%YTzrioZwBV0RZf^)QnUVAuXNzVU(V29BjP)0KaLI zbo`DT3ze`yaeQ}#FM{RH*pr}{M}PUc`U)zW)yLJ1GiMM-xkl*8{wors?-!GKz|!?a<&S3ak!TG6C>=b8-2kwf`5ow8XZPbk6*V6KiExh<-NVP0VRAW8gj4S%#Dv=p; z1=`eY@y!}=@C2}OxsB+%I1W!(p-_jwBbIUr1%oB%w1YaHISEL9k`i`eTT%^C$#W;4rk6(T^;vV&^vBK0M~6%ky z;&(nXMZ0I+bx(KVu=$llRMlN|u$gh}0+O5yPl6|KA2#&5KsVONg;3s?pQ+$b<}2{D z42Id6eP_tn2S7ILAN9RGv}DMlK{PsiB`j>p71UE2yDOSnlLyn0-J(rq;B1y4LBb}I zt8WAU_W(^I6_qB`4U}fs3Px`booD!#mfPt`mQk1wfP3S>PWuld7R#x9gFKRN2jkX^ z{!#Cig5=11Kl=s47@@=QDW_j89qO$%1EtX|U(0KQNr?C3hO{MHMmQBi!*3y5^e@1C z<~B1KcV(AWY|Ro@Do#;X+E2rOdn3-}B`M$c%SY6YR7FmKhKeS#0Z`T5ndzQ>Gh>4} zH^Aq8v4nT-FY&kM8s0dG$AC<6UPQ$PhdaQUFlA8j683Fic$Qhh zqYVbi^4}zuj}Zo`(|$y#(?%m6gfj+syn6V4dc$=&lkw4I59yu`=fVLv;ol8(=+epX zqcdBk!Ggs5yG&B{9x;o(l2+s+DZu&FmPzqX_qN||Aa^lr`H7kQBXF}i`oZL2iGm$F zFO2mn&adZc_wzK?!ykL$+|XwTz{3Ji_G702x-6UrQg8Jn>G(s%~4xF zmwndQOW75R;g6kc>#+L!h2>O9gj4eL7dke z$9EMYr&M*(Q>f1lyaCSo`|E$o@*xOfzWK)G5n@O4H+fvzzIWAQ4E5Bt3LqU;E?e|A z4{4KRyfe{_sE4lve)HTR03}$o4ACROBpz&#rW!!?o`~wEdttbTyJ)iAL4nz!ShBMJ z23f+Rh?9M}`RVwIHTaflnDRH~8=IOKZd%)U$lI|&c5o270iD?m96Zx~rut-=FENCH zQu&TE7{R~G6RUl2_(wt?2_^KQ(zX$fMp?`9mW?W;yt~EB9#QfzE0>EROm^&5j-7H9 zt2K0@E6%Ql&S5=Rmzs^#*74V1G9TO`asa&?$N0R=J240TiW^1#Gow%Pceq31D?7-m zBk0x7!T1Y8{jM;d&qQ@}EYuqsw$mg>%kIZ({l~+3ky=4Fn^_qjn$f#&ibkXHs2g04 z%tga|Xe*6&i1{Dp+4R2v0o+nCco^hGwE3DhuN6v9DR(M-;fxegfb(;hTO|MRc0=a8|gY~MyB zKMM!Z&A|5oOcvd%qT~1T zHwZn6pbmGBZ!V+l(tp3l17t)VA7|e+X#Q%?ejf1T#G*AVu4;jg%%%uuf z?h+fAPz=F!J?PGVgpvEbzGSp98e1Yk&v_{8AB?8;rzIV%EZvfAA`Q4^w{N)MI>U!? eC3D%AMJ&?`|7n--=O_#O(LSYrGXI2a$iD%6*m$h~ literal 0 HcmV?d00001 diff --git a/docs/images/motion-tracker-window.png b/docs/images/motion-tracker-window.png deleted file mode 100644 index 7caeb9fb4bca5b0e2ad99e0d594b5d951be11f2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295620 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

    bdwC_6;oE7HcX=I# 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 V;e=QsvuMDdih`zmsjNlB{{ft-WM=>X diff --git a/docs/templates/custom/public/main.css b/docs/templates/custom/public/main.css new file mode 100644 index 00000000..1c936677 --- /dev/null +++ b/docs/templates/custom/public/main.css @@ -0,0 +1,56 @@ +@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@100;400;700&display=swap'); + +:root { + --bs-font-sans-serif: 'Roboto'; + --bs-border-radius: 10px; + + --border-radius-button: 40px; + --card-box-shadow: 0 1px 2px 0 #3d41440f, 0 1px 3px 1px #3d414429; +} + +/* HEADINGS */ + +h1 { + font-weight: 600; + font-size: 36px; +} + +h2 { + font-weight: 600; + font-size: 24px; + line-height: 1.6; +} + +h3 { + font-weight: 600; + font-size: 21px; + line-height: 1.6; +} + +h4 { + font-size: 18px; +} + +h5 { + font-size: 16px; +} + +article h1 { + padding-bottom: 4px; + margin-top: 18px; + margin-bottom: 22px; +} + +article h2, +article h3, +article h4 { + padding-bottom: 2px; + margin-top: 12px; + margin-bottom: 14px; +} + +article h1, +article h2, +article h3 { + border-bottom: 1px solid var(--bs-border-color) +} \ No newline at end of file From d5279928faf6c76adbda06281e567d962e425824 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Tue, 24 Dec 2024 15:40:30 +0900 Subject: [PATCH 219/224] Update: en docs --- docs/articles/en/about.md | 59 ------- ....md => avoid-dynamic-memory-allocation.md} | 2 +- .../en/await-motion-in-async-await.md | 49 ++++++ ...outine.md => await-motion-in-coroutine.md} | 8 +- docs/articles/en/basic-concepts.md | 22 +-- docs/articles/en/binding.md | 7 +- docs/articles/en/controlling-motion.md | 72 -------- docs/articles/en/convert-to-disposable.md | 16 ++ .../articles/en/custom-animation-component.md | 53 ++++++ .../en/custom-binding-extension-method.md | 6 +- docs/articles/en/design-philosophy.md | 2 +- docs/articles/en/faq.md | 22 +++ docs/articles/en/integration-r3.md | 2 +- docs/articles/en/integration-unitask.md | 10 +- .../en/litmotion-animation-installation.md | 40 +++++ .../en/litmotion-animation-overview.md | 12 ++ .../articles/en/litmotion-animation-script.md | 19 +++ docs/articles/en/litmotion-animation.md | 31 ++++ docs/articles/en/litmotion-debugger.md | 34 ++++ docs/articles/en/manual-motion-dispatcher.md | 41 +++++ docs/articles/en/migrate-from-dotween.md | 154 ++++++++++++++++++ docs/articles/en/migrate-from-leantween.md | 76 +++++++++ docs/articles/en/migrate-from-primetween.md | 135 +++++++++++++++ docs/articles/en/migrate-from-v1.md | 84 ++++++++++ docs/articles/en/motion-configuration.md | 19 ++- docs/articles/en/motion-control.md | 131 +++++++++++++++ docs/articles/en/motion-settings.md | 56 +++++++ docs/articles/en/motion-tracker.md | 10 -- docs/articles/en/package-structure.md | 1 + ...-in-editor.md => play-motion-in-editor.md} | 2 +- docs/articles/en/reusing-builder.md | 19 --- docs/articles/en/sequence.md | 69 ++++++++ docs/articles/en/toc.yml | 66 ++++++-- docs/articles/en/updating-motion-manually.md | 30 ---- .../en/waiting-for-motion-in-async-await.md | 29 ---- docs/articles/en/whats-new-in-v2.md | 69 ++++++++ ....md => avoid-dynamic-memory-allocation.md} | 0 ...wait.md => await-motion-in-async-await.md} | 10 ++ ...outine.md => await-motion-in-coroutine.md} | 0 docs/articles/ja/basic-concepts.md | 2 +- .../ja/litmotion-animation-installation.md | 3 +- ...out.md => litmotion-animation-overview.md} | 5 +- ...on-component.md => litmotion-animation.md} | 2 +- docs/articles/ja/motion-configuration.md | 3 +- ...ontrolling-motion.md => motion-control.md} | 0 docs/articles/ja/{about.md => overview.md} | 2 +- ...-in-editor.md => play-motion-in-editor.md} | 2 +- docs/articles/ja/toc.yml | 20 +-- docs/articles/ja/whats-new-in-v2.md | 4 +- docs/index.md | 64 +++++++- 50 files changed, 1266 insertions(+), 308 deletions(-) delete mode 100644 docs/articles/en/about.md rename docs/articles/en/{avoiding-dynamic-memory-allocation.md => avoid-dynamic-memory-allocation.md} (93%) create mode 100644 docs/articles/en/await-motion-in-async-await.md rename docs/articles/en/{waiting-for-motion-in-coroutine.md => await-motion-in-coroutine.md} (70%) delete mode 100644 docs/articles/en/controlling-motion.md create mode 100644 docs/articles/en/convert-to-disposable.md create mode 100644 docs/articles/en/custom-animation-component.md create mode 100644 docs/articles/en/faq.md create mode 100644 docs/articles/en/litmotion-animation-installation.md create mode 100644 docs/articles/en/litmotion-animation-overview.md create mode 100644 docs/articles/en/litmotion-animation-script.md create mode 100644 docs/articles/en/litmotion-animation.md create mode 100644 docs/articles/en/litmotion-debugger.md create mode 100644 docs/articles/en/manual-motion-dispatcher.md create mode 100644 docs/articles/en/migrate-from-dotween.md create mode 100644 docs/articles/en/migrate-from-leantween.md create mode 100644 docs/articles/en/migrate-from-primetween.md create mode 100644 docs/articles/en/migrate-from-v1.md create mode 100644 docs/articles/en/motion-control.md create mode 100644 docs/articles/en/motion-settings.md delete mode 100644 docs/articles/en/motion-tracker.md rename docs/articles/en/{playing-in-editor.md => play-motion-in-editor.md} (96%) delete mode 100644 docs/articles/en/reusing-builder.md create mode 100644 docs/articles/en/sequence.md delete mode 100644 docs/articles/en/updating-motion-manually.md delete mode 100644 docs/articles/en/waiting-for-motion-in-async-await.md create mode 100644 docs/articles/en/whats-new-in-v2.md rename docs/articles/ja/{avoiding-dynamic-memory-allocation.md => avoid-dynamic-memory-allocation.md} (100%) rename docs/articles/ja/{waiting-for-motion-in-async-await.md => await-motion-in-async-await.md} (76%) rename docs/articles/ja/{waiting-for-motion-in-coroutine.md => await-motion-in-coroutine.md} (100%) rename docs/articles/ja/{litmotion-animation-about.md => litmotion-animation-overview.md} (71%) rename docs/articles/ja/{litmotion-animation-component.md => litmotion-animation.md} (96%) rename docs/articles/ja/{controlling-motion.md => motion-control.md} (100%) rename docs/articles/ja/{about.md => overview.md} (95%) rename docs/articles/ja/{playing-in-editor.md => play-motion-in-editor.md} (94%) diff --git a/docs/articles/en/about.md b/docs/articles/en/about.md deleted file mode 100644 index 48cee6c4..00000000 --- a/docs/articles/en/about.md +++ /dev/null @@ -1,59 +0,0 @@ -# LitMotion Overview - -![header](../../images/header.png) - -LitMotion is a high-performance tweening library for Unity. It encompasses a rich set of features to animate components like Transform, along with custom fields and properties, allowing for easy creation of animations. - -Following my creation of [Magic Tween](https://github.com/AnnulusGames/MagicTween), LitMotion stands as my second tweening library. Leveraging the experience gained from implementing Magic Tween, LitMotion has been designed prioritizing essential features while ensuring it operates at the highest speed possible. It outperforms other tweening libraries by a staggering 2 to 20 times in various situations such as tween creation and execution. Naturally, there are no allocations during tween creation. - -LitMotion not only boasts high performance but also offers a rich set of features viable for practical use as a tweening library. - -* Animate anything in one line of code. -* Achieves zero allocations with a struct-based design -* Extremely high-performance implementation optimized using DOTS (Data-Oriented Technology Stack) -* Works in both runtime and editor -* Supports complex settings like easing and looping -* Waits for completion using callbacks/coroutines -* Zero allocation text animation -* Special motions such as Punch, Shake, etc. -* Converts to Observable using UniRx -* Supports async/await using UniTask -* Type extensions using `IMotionOptions` and `IMotionAdapter` - -### Performance - -LitMotion operates faster than any Unity tweening library, including Magic Tween, in both motion creation and execution. Below are the results of benchmarks. - -![benchmark_1](../../images/benchmark_startup_64000_float.png) - ---- - -![benchmark_2](../../images/benchmark_update_64000_float.png) - ---- - -![benchmark_3](../../images/benchmark_startup_50000_position.png) - ---- - -![benchmark_4](../../images/benchmark_update_50000_position.png) - ---- - -![benchmark_5](../../images/benchmark_gc_position.png) - -The project and source code used for the benchmarks can be reviewed in [this repository](https://github.com/AnnulusGames/TweenPerformance). - -### Comparison with DOTween/Magic Tween - -Among other Unity tweening libraries like DOTween and the previously mentioned Magic Tween, LitMotion possesses distinct features in comparison. - -* Excellent Performance - - LitMotion operates about 5 times faster than DOTween. - - It is about 1.5 times faster than the faster Magic Tween. - - Additionally, there are no allocations during motion creation. -* Curated Features - - While LitMotion provides sufficient features, it offers fewer functionalities compared to Magic Tween or DOTween. This approach aligns with the library's concept of being "Simple" (although room for extension is available). -* Simple and Flexible API - - With a natural feel using method chaining, LitMotion enables smooth writing from motion creation to binding. - - Unlike Magic Tween or DOTween, LitMotion does not include extension methods for components. While I acknowledge the advantages of extension methods, they can sometimes lead to confusion in terms of readability. LitMotion prioritizes API simplicity and unifies the entry point into the `LMotion` class. \ No newline at end of file diff --git a/docs/articles/en/avoiding-dynamic-memory-allocation.md b/docs/articles/en/avoid-dynamic-memory-allocation.md similarity index 93% rename from docs/articles/en/avoiding-dynamic-memory-allocation.md rename to docs/articles/en/avoid-dynamic-memory-allocation.md index 41464b94..9f3014ad 100644 --- a/docs/articles/en/avoiding-dynamic-memory-allocation.md +++ b/docs/articles/en/avoid-dynamic-memory-allocation.md @@ -1,4 +1,4 @@ -## Avoiding Dynamic Memory Allocation +## Avoid Dynamic Memory Allocation You can expand the capacity of the internal array that holds motions beforehand by calling `MotionDispatcher.EnsureStorageCapacity()`. By ensuring the maximum anticipated capacity, such as during the app's startup, you can mitigate runtime dynamic memory allocation. diff --git a/docs/articles/en/await-motion-in-async-await.md b/docs/articles/en/await-motion-in-async-await.md new file mode 100644 index 00000000..24bc7708 --- /dev/null +++ b/docs/articles/en/await-motion-in-async-await.md @@ -0,0 +1,49 @@ +# Await Motion in async/await + +`MotionHandle` implements the `GetAwaiter()` method, allowing you to directly await it to wait for completion. + +```cs +await handle; +``` + +If you want to pass a `CancellationToken`, you can use `ToValueTask()` / `ToAwaitable()` or UniTask. + +## ValueTask + +You can convert a motion to a `ValueTask` using `MotionHandle.ToValueTask()`. This allows you to use async/await to wait for the completion of the motion. + +```cs +async ValueTask ExampleAsync(CancellationToken cancellationToken) +{ + await LMotion.Create(0f, 10f, 1f) + .RunWithoutBinding() + .ToValueTask(cancellationToken); +} +``` + +However, using `ValueTask` in Unity has some performance concerns. For the best performance, it is recommended to use UniTask. For integration with UniTask, refer to the [UniTask](integration-unitask.md) guide. + +### Awaitable + +Starting from Unity 2023.1, Unity provides the [Awaitable](https://docs.unity3d.com/2023.1/Documentation/ScriptReference/Awaitable.html) class to enable efficient async/await handling within Unity. + +If you're using Unity 2023.1 or later, LitMotion provides the `ToAwaitable()` extension method to convert a `MotionHandle` to an `Awaitable`. This allows you to use async/await to wait for motion completion. + +```cs +async Awaitable ExampleAsync(CancellationToken cancellationToken) +{ + await LMotion.Create(0f, 10f, 1f) + .RunWithoutBinding() + .ToAwaitable(cancellationToken); +} +``` + +### Changing Behavior on Cancellation + +By specifying `CancelBehavior` in the arguments for `ToValueTask()` / `ToAwaitable()`, you can change the behavior when the async method is canceled. Additionally, setting `cancelAwaitOnMotionCanceled` to `true` allows the async method to be canceled when the `MotionHandle` is canceled. + +```cs +await LMotion.Create(0f, 10f, 1f) + .RunWithoutBinding() + .ToAwaitable(CancelBehavior.Complete, true, cancellationToken); +``` diff --git a/docs/articles/en/waiting-for-motion-in-coroutine.md b/docs/articles/en/await-motion-in-coroutine.md similarity index 70% rename from docs/articles/en/waiting-for-motion-in-coroutine.md rename to docs/articles/en/await-motion-in-coroutine.md index 85d45d57..3240ff3d 100644 --- a/docs/articles/en/waiting-for-motion-in-coroutine.md +++ b/docs/articles/en/await-motion-in-coroutine.md @@ -1,15 +1,15 @@ -# Waiting for Motion in Coroutine +# Await Motion in Coroutine -It's possible to await the completion of a motion within a coroutine using `ToYieldInteraction()` of `MotionHandle`. +It's possible to await the completion of a motion within a coroutine using `ToYieldInstruction()` of `MotionHandle`. ```cs IEnumerator CoroutineExample() { yield return LMotion.Create(0f, 10f, 2f).Bind(x => Debug.Log(x)) - .ToYieldInteraction(); + .ToYieldInstruction(); } ``` However, coroutines have functional limitations such as the inability to return values and await in parallel due to language constraints. -As an alternative, it's recommended to use async/await with UniTask for waiting on motions. For information on integrating with UniTask, please refer to [UniTask Integration](integration-unitask.md). +As an alternative, it's recommended to use async/await with UniTask for waiting on motions. For information on integrating with UniTask, please refer to [UniTask](integration-unitask.md) Integration. diff --git a/docs/articles/en/basic-concepts.md b/docs/articles/en/basic-concepts.md index beef7c1c..b36941e0 100644 --- a/docs/articles/en/basic-concepts.md +++ b/docs/articles/en/basic-concepts.md @@ -50,25 +50,7 @@ if (handle.IsActive()) } ``` -Additionally, tying cancellation timing to a GameObject is possible using `AddTo()`. - -```cs -LMotion.Create(0f, 10f, 3f) - .Bind(x => value = x) - .AddTo(this.gameObject); -``` - -Use `CompositeMotionHandle` to manage multiple MotionHandles together. - -```cs -var handles = new CompositeMotionHandle(); - -LMotion.Create(0f, 10f, 2f) - .Bind(() => Debug.Log(x)) - .AddTo(handles); -``` - -For further details, refer to [Controlling Motion](controlling-motion.md). +For further details, refer to [Motion Control](motion-control.md). ### MotionScheduler @@ -82,7 +64,7 @@ LMotion.Create(0f, 10f, 2f) Refer to [Motion Configuration](motion-configuration.md) for more information. -### IMotionAdapter +### MotionAdapter The interpolation between two values is described by structures implementing `IMotionAdapter`. Built-in adapters are defined within the `LitMotion.Adapters` namespace. diff --git a/docs/articles/en/binding.md b/docs/articles/en/binding.md index 70518333..b9db4caa 100644 --- a/docs/articles/en/binding.md +++ b/docs/articles/en/binding.md @@ -1,6 +1,6 @@ # Binding -LitMotion requires that a value be bound to the target field/property when the motion is created. The motion values are updated in the Update(LateUpdate, FixedUpdate) function of the MotionDispatcher to reflect the latest values in the bound fields/properties. +In LitMotion, it is required to bind the values to the target fields or properties when creating a motion. The values of the motion are updated within the PlayerLoop specified by the Scheduler, and the latest values are reflected in the bound fields/properties. ```cs var value = 0f; @@ -12,7 +12,8 @@ LMotion.Create(0f, 10f, 2f) Lambda expressions passed to `Bind()` cause allocations due to capturing external variables (known as closures). -For class instances, you can avoid allocations caused by closures by using `BindWithState()` instead of `Bind()`. + +Additionally, by passing the state as an argument to `Bind()`, you can avoid allocations caused by closures. ```cs class FooClass @@ -23,7 +24,7 @@ class FooClass var target = new FooClass(); LMotion.Create(0f, 10f, 2f) - .BindWithState(target, (x, target) => target.Value = x); // Pass the target object as the first argument + .Bind(target, (x, target) => target.Value = x); // Pass the target object as the first argument ``` ### Extension Methods diff --git a/docs/articles/en/controlling-motion.md b/docs/articles/en/controlling-motion.md deleted file mode 100644 index 07ec315c..00000000 --- a/docs/articles/en/controlling-motion.md +++ /dev/null @@ -1,72 +0,0 @@ -# Controlling Motion - -Methods that create motions like `Bind()` or `RunWithoutBinding()` all return a `MotionHandle` structure. - -```cs -var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); -``` - -You can control motions through this structure. - -### Motion Completion/Cancellation - -To complete a motion in progress, call `Complete()`. - -```cs -var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); -handle.Complete(); -``` - -To cancel a motion in progress, call `Cancel()`. - -```cs -var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); -handle.Cancel(); -``` - -### Motion Playback Speed - -You can change the playback speed of a motion using the `MotionHandle.PlaybackSpeed` property. This allows you to perform actions such as slow-motion or pause during the motion playback. - -```cs -var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); -handle.PlaybackSpeed = 2f; -``` - -> [!WARNING] -> PlaybackSpeed does not support values less than 0. Trying to set a negative value to `MotionHandle.PlaybackSpeed` will throw an exception. - -### Motion Existence Check - -The methods and properties mentioned above will throw exceptions if the motion has already ended or if the `MotionHandle` has not been initialized. To check whether the motion pointed to by the `MotionHandle` exists, use `IsActive()`. - -```cs -var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); - -if (handle.IsActive()) handle.Complete(); -``` - -### Linking Cancellation to GameObject - -Using `AddTo()`, you can automatically cancel motions when the GameObject is destroyed. - -```cs -LMotion.Create(0f, 10f, 2f) - .Bind(() => Debug.Log(x)) - .AddTo(this.gameObject); -``` - -### Managing Multiple MotionHandles Together - -For managing multiple `MotionHandle`s, the `CompositeMotionHandle` class is provided. You can associate MotionHandles with it using `AddTo()`. - -```cs -var handles = new CompositeMotionHandle(); - -LMotion.Create(0f, 10f, 2f) - .Bind(() => Debug.Log(x)) - .AddTo(handles); -``` - ---- -If you need further assistance or have more questions, feel free to ask! \ No newline at end of file diff --git a/docs/articles/en/convert-to-disposable.md b/docs/articles/en/convert-to-disposable.md new file mode 100644 index 00000000..d094ff74 --- /dev/null +++ b/docs/articles/en/convert-to-disposable.md @@ -0,0 +1,16 @@ +# Convert to `IDisposable` + +`MotionHandle` can be converted to `IDisposable`. + +```cs +var disposable = handle.ToDisposable(); +``` + +By default, calling `Dispose()` on this `IDisposable` will cancel the motion. This behavior can be changed by specifying a `MotionDisposeBehavior` argument in `ToDisposable()`. + +```cs +var disposable = handle.ToDisposable(MotionDisposeBehavior.Complete); + +// handle.Complete() will be called +disposable.Dispose(); +``` diff --git a/docs/articles/en/custom-animation-component.md b/docs/articles/en/custom-animation-component.md new file mode 100644 index 00000000..d7c3bead --- /dev/null +++ b/docs/articles/en/custom-animation-component.md @@ -0,0 +1,53 @@ +# Custom Animation Components + +By inheriting the `LitMotionAnimationComponent` class, you can create custom Animation Components that can be used in LitMotion Animation. + +```cs +[Serializable] +// The menu name displayed in the dropdown when pressing [Add...] can be specified using the LitMotionAnimationComponentMenu attribute +[LitMotionAnimationComponentMenu("Custom/Custom Animation")] +public class CustomAnimation : LitMotionAnimationComponent +{ + public override MotionHandle Play() + { + // Actions to perform when Play() is called and the animation starts + // Return the created MotionHandle + } + + public override void OnPause() + { + // Actions to perform when Pause() is called + } + + public override void OnResume() + { + // Actions to perform when Play() is called after a pause and the animation resumes + } + + public override void OnStop() + { + // Actions to perform when Stop() is called + } +} +``` + +> [!WARNING] +> When implementing a `LitMotionAnimationComponent`, you need to manually implement the value restoration logic in `OnStop()` when the animation finishes. + +## PropertyAnimationComponent + +To simplify the implementation of `LitMotionAnimationComponent`, a class called `PropertyAnimationComponent` is provided. By inheriting this, you can easily implement an Animation Component without writing code for motion creation or value restoration. + +Additionally, to simplify the generic type arguments, types like `FloatPropertyAnimationComponent`, `Vector3PropertyAnimationComponent`, and others are available. + +The following is an implementation of an Animation Component that animates the `Slider.value`. + +```cs +[Serializable] +[LitMotionAnimationComponentMenu("UI/Slider/Value")] +public sealed class SliderValueAnimation : FloatPropertyAnimationComponent +{ + protected override float GetValue(Slider target) => target.value; + protected override void SetValue(Slider target, in float value) => target.value = value; +} +``` diff --git a/docs/articles/en/custom-binding-extension-method.md b/docs/articles/en/custom-binding-extension-method.md index 99690f4a..052d7d22 100644 --- a/docs/articles/en/custom-binding-extension-method.md +++ b/docs/articles/en/custom-binding-extension-method.md @@ -1,6 +1,6 @@ # Custom Binding Extension Method -Although it is possible to animate properties not provided in `LitMotion.Extensions` using `Bind()` or `BindWithState()`, it can be convenient to define extension methods for frequently used properties. Here, we will demonstrate how to add a custom binding extension method to `MotionBuilder`. +Although it is possible to animate properties not provided in `LitMotion.Extensions` using `Bind()`, it can be convenient to define extension methods for frequently used properties. Here, we will demonstrate how to add a custom binding extension method to `MotionBuilder`. As an example, let's define an extension method to bind a motion to the `Value` property of a `Foo` class like the one below: @@ -20,7 +20,7 @@ public static class FooMotionExtensions where TOptions : unmanaged, IMotionOptions where TAdapter : unmanaged, IMotionAdapter { - return builder.BindWithState(target, (x, target) => + return builder.Bind(target, (x, target) => { target.Value = x; }); @@ -28,7 +28,7 @@ public static class FooMotionExtensions } ``` -By defining it as a generic method, you can bind values of float type regardless of the types of `TOptions` and `TAdapter`. Additionally, when the target is a class, using `BindWithState()` avoids the use of closures, allowing you to create motions with zero allocation. +By defining it as a generic method, you can bind values of float type regardless of the types of `TOptions` and `TAdapter`. Additionally, when the target is a class, using `Bind(TState, Action)` avoids the use of closures, allowing you to create motions with zero allocation. The code to animate a value using this extension method is below. diff --git a/docs/articles/en/design-philosophy.md b/docs/articles/en/design-philosophy.md index aa4a04cb..9b5fd22a 100644 --- a/docs/articles/en/design-philosophy.md +++ b/docs/articles/en/design-philosophy.md @@ -34,7 +34,7 @@ LMotion.Create(0f, 10f, 2f) ### Integration with Coroutines, Rx, async/await -Unlike DOTween or Magic Tween, LitMotion doesn’t support the functionality of a Sequence. Instead, it provides conversion methods to Coroutine, Observable, and UniTask. +In v2, LitMotion now supports Sequence functionality, but compared to DOTween's Sequence, its features are more limited. As an alternative, LitMotion provides methods for converting to coroutines, Observables, and UniTask. While Sequences are easy to use and convenient, they can make the code complex and affect readability when constructing intricate animations. Also, DOTween's Sequence has complex behaviors that may not be fully understood from the code alone. diff --git a/docs/articles/en/faq.md b/docs/articles/en/faq.md new file mode 100644 index 00000000..a4310510 --- /dev/null +++ b/docs/articles/en/faq.md @@ -0,0 +1,22 @@ +# FAQ + +## Is there a feature equivalent to `DelayedCall()`? + +There is no method in LitMotion equivalent to `DelayedCall()`. This is by design. + +In the modern era of async/await, delayed calls using callbacks should be avoided whenever possible. This is because exceptions are not propagated externally, making error handling more difficult. Instead, please use async methods. + +However, if you are migrating from another tweening library and it is difficult to replace, you can use the following code as an alternative: + +```cs +// The value doesn't matter, so any value will work +LMotion.Create(0f, 1f, delay) + .WithOnComplete(action) + .RunWithoutBinding(); +``` + +## Can I add a callback to Sequence? + +In DOTween, the Sequence has `AppendCallback()`, but LitMotion does not implement this method. This is for the same reason that `DelayedCall()` is not implemented. + +LitMotion's Sequence is designed for "combining multiple motions," and it intentionally omits other features. This is to avoid code complexity. (For more details, refer to the [Design Philosophy](./design-philosophy.md) section.) diff --git a/docs/articles/en/integration-r3.md b/docs/articles/en/integration-r3.md index 45fdfc38..f67897f3 100644 --- a/docs/articles/en/integration-r3.md +++ b/docs/articles/en/integration-r3.md @@ -6,7 +6,7 @@ If you have installed R3 via the Package Manager, the following functionality wi ### Creating Motion as an Observable -You can create motion as an `IObservable` using the `ToObservable()` method: +You can create motion as an `Observable` using the `ToObservable()` method: ```cs var observable = LMotion.Create(0f, 5f, 2f).ToObservable(); diff --git a/docs/articles/en/integration-unitask.md b/docs/articles/en/integration-unitask.md index ab0c8a35..fb1bb37e 100644 --- a/docs/articles/en/integration-unitask.md +++ b/docs/articles/en/integration-unitask.md @@ -6,13 +6,7 @@ If you have installed UniTask via the Package Manager, the following functionali ### Waiting for Motion -By integrating UniTask, you can await `MotionHandle`: - -```cs -await LMotion.Create(0f, 10f, 2f).Bind(x => Debug.Log(x)); -``` - -You can also pass a `CancellationToken` using the `ToUniTask()` method: +You can convert a `MotionHandle` to a `UniTask` using the `ToUniTask()` method. ```cs var cts = new CancellationTokenSource(); @@ -20,4 +14,4 @@ await LMotion.Create(0f, 10f, 2f).Bind(x => Debug.Log(x)) .ToUniTask(cts.Token); ``` -Passing a CancellationToken automatically cancels motion playback when asynchronous processing is canceled. +The options that can be specified in the argument are the same as for `ToValueTask()` / `ToAwaitable()`. diff --git a/docs/articles/en/litmotion-animation-installation.md b/docs/articles/en/litmotion-animation-installation.md new file mode 100644 index 00000000..40f1b836 --- /dev/null +++ b/docs/articles/en/litmotion-animation-installation.md @@ -0,0 +1,40 @@ +# Installation + +LitMotion.Animation is distributed independently from the core package. Let's install is in your project to get started using it. + + +### Requirements + +* Unity 2021.3 or later +* LitMotion 2.0.0 or later + +### Install via Package Manager (Recommended) + +You can install LitMotion using the Package Manager. + +1. Open Package Manager by navigating to Window > Package Manager. +2. Click on the "+" button and select "Add package from git URL." +3. Enter the following URL: + +```text +https://github.com/AnnulusGames/LitMotion.git?path=src/LitMotion/Assets/LitMotion.Animation +``` + +![img1](../../images/img-setup-1.png) + +Alternatively, you can open the `Packages/manifest.json` file and add the following line within the `dependencies` block: + +```json +{ + "dependencies": { + "com.annulusgames.lit-motion.animation": "https://github.com/AnnulusGames/LitMotion.git?path=src/LitMotion/Assets/LitMotion.Animation" + } +} +``` + +### Install from unitypackage + +It's also possible to install LitMotion from the provided unitypackage file. + +1. Navigate to the Releases section and download the latest unitypackage file. +2. Open the downloaded file and import it into your project. diff --git a/docs/articles/en/litmotion-animation-overview.md b/docs/articles/en/litmotion-animation-overview.md new file mode 100644 index 00000000..68d320c7 --- /dev/null +++ b/docs/articles/en/litmotion-animation-overview.md @@ -0,0 +1,12 @@ +# LitMotion.Animation Overview + +LitMotion.Animation is a package that provides animation functionality built on top of LitMotion. By integrating this package, you gain access to the LitMotion Animation component, which allows you to build animations directly from the Inspector. + +![img](../../images/img-litmotion-animation.gif) + +## Features + +* High-performance animations implemented with LitMotion +* Create animations directly from the Inspector +* Preview playback available in both Edit Mode and Play Mode +* Create extensions using `LitMotionAnimationComponent` diff --git a/docs/articles/en/litmotion-animation-script.md b/docs/articles/en/litmotion-animation-script.md new file mode 100644 index 00000000..f2388c27 --- /dev/null +++ b/docs/articles/en/litmotion-animation-script.md @@ -0,0 +1,19 @@ +# Control LitMotion Animation from C# + +You can control the created LitMotion Animation from C#. + +```cs +LitMotionAnimation animation; + +// Play (or resume) the animation +animation.Play(); + +// Pause the animation +animation.Pause(); + +// Stop the animation +animation.Stop(); + +// Restart the animation from the beginning +animation.Restart(); +``` diff --git a/docs/articles/en/litmotion-animation.md b/docs/articles/en/litmotion-animation.md new file mode 100644 index 00000000..5ad612c4 --- /dev/null +++ b/docs/articles/en/litmotion-animation.md @@ -0,0 +1,31 @@ +# LitMotion Animation + +![img](../../images/img-litmotion-animation-inspector.png) + +LitMotion Animation is a component for creating animations using LitMotion. + +## Settings + +#### Play On Awake + +When set to true, the animation will automatically play on startup. + +#### Animation Mode + +Specifies how the animations set in the Components will be played. `Parallel` plays all animations simultaneously, while `Sequential` plays the animations in the order they appear. + +## Components + +In LitMotion Animation, you create animations by combining `Animation Components`. + +![img](../../images/img-litmotion-animation-component.png) + +Click the \[Add...\] button to add a new Animation Component. + +Built-in Animation Components are provided for animating major Unity components, and you can also create your own custom Animation Components. + +## Debug + +This panel is used for previewing the animation playback. You can press the \[Play\] button to start the animation. + +It works in both Edit Mode and Play Mode. diff --git a/docs/articles/en/litmotion-debugger.md b/docs/articles/en/litmotion-debugger.md new file mode 100644 index 00000000..27259ddc --- /dev/null +++ b/docs/articles/en/litmotion-debugger.md @@ -0,0 +1,34 @@ +# LitMotion Debugger + +By using the LitMotion Debugger window, you can view information about the motions you've created. + +![img1](../../images/img-litmotion-debugger.png) + +Open the window from `Window > LitMotion Debugger`, and click \[Enable\] to activate the debugger. You can also click \[Stack Trace\] to enable and view the stack trace when the motion is created. + +> [!WARNING] +> Enabling the debugger can significantly impact performance. It is recommended to keep it disabled and only enable it during debugging sessions. + +## Debug Name + +In the debugger, you can search for a specific motion by its name. The default debug name follows this format: + +```cs +$"MotionHandle`{StorageId}({Index}:{Version})" +``` + +This debug name can be changed by passing a custom name using `WithDebugName()` when creating the motion. + +```cs +var handle = LMotion.Create(0f, 1f, 1f) + .WithDebugName("name") + .Bind(x => { }); +``` + +You can also get the debug name using `GetDebugName()`. + +```cs +var name = handle.GetDebugName(); +``` + +This debug name is only preserved in Debug builds and will be removed in Release builds. To use this feature in a Release build, add `LITMOTION_DEBUG` to the Scripting Define Symbols. diff --git a/docs/articles/en/manual-motion-dispatcher.md b/docs/articles/en/manual-motion-dispatcher.md new file mode 100644 index 00000000..722f677e --- /dev/null +++ b/docs/articles/en/manual-motion-dispatcher.md @@ -0,0 +1,41 @@ +# ManualMotionDispatcher + +By using the `ManualMotionDispatcher`, you can manually update multiple motions. + +```cs +var dispatcher = new ManualMotionDispatcher(); +``` + +You can set the motion update process to be handled by the created dispatcher by specifying `dispatcher.Scheduler` in the Scheduler. + +```cs +// Set the Scheduler to the created ManualMotionDispatcher's Scheduler +var handle = LMotion.Create(value, endValue, 2f) + .WithScheduler(dispatcher.Scheduler) + .BindToUnityLogger(); +``` + +You can perform updates using `dispatcher.Update(double deltaTime)`. + +```cs +dispatcher.Update(0.1); +``` + +## ManualMotionDispatcher.Default + +If you need a globally available `ManualMotionDispatcher`, you can use `ManualMotionDispatcher.Default`. + +```cs +ManualMotionDispatcher.Default.Update(0.1); +``` + +`MotionScheduler.Manual` is equivalent to `ManualMotionDispatcher.Default.Scheduler`. + +> [!WARNING] +> When using `ManualMotionDispatcher.Default`, setting Domain Reload to off may cause unexpected behavior, as the motion state is not reset. To avoid this, explicitly initialize it at startup by calling `Reset()`. +> ```cs +> void Awake() +> { +> ManualMotionDispatcher.Default.Reset(); +> } +> ``` diff --git a/docs/articles/en/migrate-from-dotween.md b/docs/articles/en/migrate-from-dotween.md new file mode 100644 index 00000000..0b6844f6 --- /dev/null +++ b/docs/articles/en/migrate-from-dotween.md @@ -0,0 +1,154 @@ +# Migrate from DOTween + +This page provides a simple guide for migrating from DOTween to LitMotion. + +## Position Tweens + +```cs +var endValue = new Vector3(1f, 2f, 3f); +var duration = 1f; + +// DOTween +transform.DOMove(endValue, duration); + +// LitMotion +LMotion.Create(transform.position, endValue, duration) + .BindToPosition(transform); +``` + +## Value Tweens + +```cs +// DOTween +var value = 0f; +DOTween.To(() => value, x => value = x, endValue, duration); + +// LitMotion +LMotion.Create(value, endValue, duration) + .Bind(x => value = x); +``` + +## From + +```cs +// DOTween +transform.DOMoveX(endValue, duration).From(startValue); + +// LitMotion +LMotion.Create(startValue, endValue, duration) + .BindToPositionX(transform); +``` + +## Punch / Shake + +```cs +// DOTween +transform.DOPunchPosition(...); +transform.DOShakePosition(...); + +// LitMotion +LMotion.Punch.Create(...) + .BindToPosition(transform); +LMotion.Shake.Create(...) + .BindToPosition(transform); +``` + +## Tween Settings + +```cs +// DOTween +tween.SetLoops(2, LoopType.Yoyo) + .SetEase(Ease.OutQuad); + +// LitMotion +builder.WithLoops(2, LoopType.Yoyo) + .WithEase(Ease.OutQuad); +``` + +## Tween Control + +```cs +// DOTween +tween.Pause(); +tween.Complete(); +tween.Kill(); + +// LitMotion +handle.PlaybackSpeed = 0f; +handle.Complete(); +handle.Cancel(); +``` + +## Sequence + +```cs +// DOTween +DOTween.Sequence() + .Append(...) + .Join(...) + .Insert(...); + +// LitMotion +LSequence.Create() + .Append(...) + .Join(...) + .Insert(...) + .Schedule(); +``` + +Adding callbacks to Sequences is not supported in LitMotion. This is intentional, as LitMotion encourages the use of async methods for complex animations that require callbacks. For more details, refer to the [Design Philosophy](./design-philosophy.md). + +## Update Timing Changes + +```cs +// DOTween +tween.SetUpdate(UpdateType.Fixed); + +// LitMotion +builder.WithScheduler(MotionScheduler.FixedUpdate); +``` + +## Linking to GameObject + +```cs +// DOTween +tween.SetLink(gameObject); + +// LitMotion +handle.AddTo(gameObject); +``` + +## Coroutines, async/await + +```cs +// DOTween +yield return tween.WaitForCompletion(); +await tween.AsyncWaitForCompletion(); + +// LitMotion +yield return handle.ToYieldInstruction(); +await handle; +``` + +## Safe Mode + +To display exceptions within a tween as warnings, similar to DOTween's Safe Mode, you can configure LitMotion as follows: + +```cs +// Log caught exceptions as warnings in the console +MotionDispatcher.RegisterUnhandledExceptionHandler(ex => Debug.LogWarning(ex)); +``` + +## Unsupported Features + +### DelayedCall + +There is no direct equivalent of `DOTween.DelayedCall()` in LitMotion. For more details, refer to the [FAQ](./faq.md). + +### SetSpeedBased + +LitMotion does not support a `SetSpeedBased()` equivalent. You should calculate the required duration based on the distance between the start and end points. + +### DoPath + +There is no equivalent to `transform.DoPath()` in LitMotion. However, you can achieve similar functionality by combining LitMotion with Unity's [Splines](https://docs.unity3d.com/Packages/com.unity.splines@2.1/manual/index.html) package. diff --git a/docs/articles/en/migrate-from-leantween.md b/docs/articles/en/migrate-from-leantween.md new file mode 100644 index 00000000..da78d3c6 --- /dev/null +++ b/docs/articles/en/migrate-from-leantween.md @@ -0,0 +1,76 @@ +# Migrate from LeanTween + +This page provides a simple guide for migrating from LeanTween to LitMotion. + +## Position Tweens + +```cs +var endValue = new Vector3(1f, 2f, 3f); +var duration = 1f; + +// LeanTween +LeanTween.move(gameObject, endValue, duration); + +// LitMotion +LMotion.Create(transform.position, endValue, duration) + .BindToPosition(transform); +``` + +## Value Tweens + +```cs +// LeanTween +var value = 0f; +LeanTween.value(gameObject, x => value = x, value, endValue, duration); + +// LitMotion +LMotion.Create(value, endValue, duration) + .Bind(x => value = x); +``` + +## From + +```cs +// LeanTween +LeanTween.moveX(gameObject, endValue, duration) + .from(startValue); + +// LitMotion +LMotion.Create(startValue, endValue, duration) + .BindToPositionX(transform); +``` + +## Tween Settings + +```cs +// LeanTween +descr.setRepeat(2) + .setLoopPingPong() + .setEase(LeanTweenType.easeOutQuad); + +// LitMotion +builder.WithLoops(2, LoopType.Flip) + .WithEase(Ease.OutQuad); +``` + +## Tween Control + +```cs +// LeanTween +descr.pause(); +descr.cancel(); + +// LitMotion +handle.PlaybackSpeed = 0f; +handle.Cancel(); +``` + +## Unsupported Features + +### DelayedCall + +There is no equivalent of `LeanTween.DelayedCall()` in LitMotion. For more details, refer to the [FAQ](./faq.md). + +### LTSpline + +LitMotion does not support an equivalent to `LTSpline`. However, you can achieve similar functionality by combining LitMotion with Unity's [Splines](https://docs.unity3d.com/Packages/com.unity.splines@2.1/manual/index.html) package. diff --git a/docs/articles/en/migrate-from-primetween.md b/docs/articles/en/migrate-from-primetween.md new file mode 100644 index 00000000..be70f96e --- /dev/null +++ b/docs/articles/en/migrate-from-primetween.md @@ -0,0 +1,135 @@ +# Migrate from PrimeTween + +This page provides a simple guide for migrating from PrimeTween to LitMotion. + +## Position Tweens + +```cs +var endValue = new Vector3(1f, 2f, 3f); +var duration = 1f; + +// PrimeTween +Tween.Position(transform, endValue, duration); + +// LitMotion +LMotion.Create(transform.position, endValue, duration) + .BindToPosition(transform); +``` + +## Value Tweens + +```cs +// PrimeTween +var value = 0f; +Tween.Custom(value, endValue, duration, x => value = x); + +// LitMotion +LMotion.Create(value, endValue, duration) + .Bind(x => value = x); +``` + +## Punch / Shake + +```cs +// PrimeTween +Tween.ShakePosition(transform, ...); +Tween.PunchPosition(transform, ...); + +// LitMotion +LMotion.Punch.Create(...) + .BindToPosition(transform); +LMotion.Shake.Create(...) + .BindToPosition(transform); +``` + +## Tween Settings + +```cs +// PrimeTween +Tween.Position(transform, endValue: endValue, duration: duration, ease: Ease.InOutSine, cycle: 2, cycleMode: CycleMode.Yoyo); + +// LitMotion +LMotion.Create(transform.position, endValue, duration) + .WithLoops(2, LoopType.Yoyo) + .WithEase(Ease.OutQuad) + .BindToPosition(transform); +``` + +## Tween Control + +```cs +// PrimeTween +tween.isPaused = true; +tween.Complete(); +tween.Kill(); + +// LitMotion +handle.PlaybackSpeed = 0f; +handle.Complate(); +handle.Cancel(); +``` + +## Sequence + +```cs +// PrimeTween +Sequence.Create() + .Chain(...) + .Group(...) + .Insert(...); + +// LitMotion +LSequence.Create() + .Append(...) + .Join(...) + .Insert(...) + .Schedule(); +``` + +Adding callbacks to sequences is not supported in LitMotion. This is intentional, as LitMotion encourages the use of async methods for complex animations that require multiple callbacks. For more details, refer to the [Design Philosophy](./design-philosophy.md). + +## Changing Update Timing + +```cs +// PrimeTween +Tween.PositionX(transform, endValue: 10f, new TweenSettings(duration: 1f, useFixedUpdate: true)); + +// LitMotion +LMotion.Create(transform.position.x, 10f, 1f) + .WithScheduler(MotionScheduler.FixedUpdate) + .BindToPositionX(transform); +``` + +## Inspector + +```cs +// PrimeTween +[SerializeField] TweenSettings settings; +Tween.PositionY(transform, settings); + +// LitMotion +[SerializeField] SerializableMotionSettings settings; +LMotion.Create(settings).BindToPositionY(transform); +``` + +## Coroutine, async/await + +```cs +// PrimeTween +yield return tween.ToYieldInstruction(); +await tween; + +// LitMotion +yield return handle.ToYieldInstruction(); +await handle; +``` + +## Unsupported Features + +### Delay + +There is no equivalent of `Tween.Delay()` in LitMotion. For more details, refer to the [FAQ](faq.md). + +### AtSpeed + +There is no equivalent of `Tween.**AtSpeed()` in LitMotion. You need to calculate the necessary duration based on the distance between the start and end points. diff --git a/docs/articles/en/migrate-from-v1.md b/docs/articles/en/migrate-from-v1.md new file mode 100644 index 00000000..997da114 --- /dev/null +++ b/docs/articles/en/migrate-from-v1.md @@ -0,0 +1,84 @@ +# Migrate from LitMotion v1 to v2 + +In v2, along with the addition of new features, some of the API has been refreshed. As a result, there are several changes you need to account for when migrating from v1. + +## Motion Reuse + +In v1, the `Preserve()` method could be used on the `MotionBuilder`, but this has been deprecated in v2. + +Instead, `MotionHandle.Preserve()` has been added. When `Preserve()` is called on a `MotionHandle`, the motion will not become invalid after completion, allowing you to reuse the same motion. However, you will need to explicitly call `Cancel()` to discard the motion when done. + +Additionally, if you want to reuse the same motion settings, you can use `MotionSettings`. + +## `Bind` Extension Methods Relocated + +The extension methods `BindToUnityLogger()` and `BindToProgress()` have been moved to the `LitMotion.Extensions` namespace. + +To use these extension methods, you'll need to reference `LitMotion.Extensions.asmdef` and include `using LitMotion.Extensions;`. + +## `BindWithState()` -> `Bind()` + +In v1, `BindWithState()` was used to avoid closures. This has now been changed to an overload of `Bind()`, which accepts a struct `State` in v2. While this introduces some allocation overhead, it is more efficient than closures in terms of allocation and call speed. + +```cs +// v1 +LMotion.Create(0f, 1f, 1f) + .BindWithState(state, (x, state) => { }); + +// v2 +LMotion.Create(0f, 1f, 1f) + .Bind(state, (x, state) => { }); +``` + +## `ToYieldInteraction()` -> `ToYieldInstruction()` + +The method used to wait for a `MotionHandle` in a coroutine has changed from `ToYieldInteraction()` to `ToYieldInstruction()`. This was corrected in v2, as the naming in v1 was inaccurate. + +## Behavior of `LoopType.Yoyo` + +In v1, `LoopType.Yoyo` did not behave as expected based on its naming. This has been fixed in v2. If you want to retain the old behavior, use the new `LoopType.Flip` in v2. + +![Image showing LoopType.Yoyo behavior change](#TODO-image) + +## Enum Naming Changes + +In v2, some enums have been renamed to follow American English spelling conventions: + +- `LinkBehaviour` -> `LinkBehavior` +- `CancelBehaviour` -> `CancelBehavior` + +## `WithBindOnSchedule()` -> `WithImmediateBind()` + +In v1, `WithBindOnSchedule()` has been renamed to `WithImmediateBind()`. Additionally, its default value has been changed to `true`, so there's no need to call it explicitly unless you want to change this behavior. + +```cs +// v1 +LMotion.Create(0f, 1f, 1f) + .WithBindOnSchedule() + .BindToPositionX(transform); + +// v2 +LMotion.Create(0f, 1f, 1f) + .WithImmediateBind() // Default is true, so there's no need to call it explicitly. + .BindToPositionX(transform); +``` + +## ManualMotionDispatcher + +In v2, the `ManualMotionDispatcher` class has been changed to a regular class. This allows you to create multiple instances of `ManualMotionDispatcher`. + +When migrating from v1, you can use the `ManualMotionDispatcher.Default` instance, which is globally available. + +```cs +// v1 +ManualMotionDispatcher.Update(0.1); + +// v2 +ManualMotionDispatcher.Default.Update(0.1); +``` + +In v2, you can also retrieve the `IMotionScheduler` from `dispatcher.Scheduler` to schedule motions. `MotionScheduler.Manual` remains available as an alias for `ManualMotionDispatcher.Default.Scheduler`. + +## MotionTracker Window Deprecated + +The `MotionTracker` window that existed in v1 has been deprecated. In v2, a more powerful tool, the [LitMotion Debugger](litmotion-debugger.md), has been added. It is recommended to use the LitMotion Debugger for tracking motion-related information. diff --git a/docs/articles/en/motion-configuration.md b/docs/articles/en/motion-configuration.md index 29d53814..f43368c5 100644 --- a/docs/articles/en/motion-configuration.md +++ b/docs/articles/en/motion-configuration.md @@ -47,8 +47,9 @@ Additionally, you can set the behavior during repetition by specifying `LoopType | LoopType | Behavior | | - | - | | LoopType.Restart | Default behavior. Resets to the start value at the end of each loop. | -| LoopType.Yoyo | Animates the value back and forth between start and end values. | +| LoopType.Flip | Animates the value back and forth between start and end values. | | LoopType.Increment | Value increases with each loop. | +| LoopType.Yoyo | Animates between the start and end values in a back-and-forth (yo-yo) motion. | #### WithOnComplete @@ -57,6 +58,11 @@ Specifies a callback at the end of the playback. #### WithOnCancel Specifies a callback for when the motion is canceled. +Here’s the English translation for the provided text: + +#### WithOnLoopComplete + +Specifies a callback to be called at the end of each loop. This is also called when the motion completes, with the order being `OnLoopComplete` → `OnComplete`. #### WithScheduler @@ -86,16 +92,21 @@ Specifies the Scheduler used for motion playback. | MotionScheduler.TimeUpdate | Updates at the TimeUpdate timing. | | MotionScheduler.TimeUpdateIgnoreTimeScale | Updates at the TimeUpdate timing, ignores the influence of `Time.timeScale`. | | MotionScheduler.TimeUpdateRealtime | Updates at the TimeUpdate timing, ignores the influence of `Time.timeScale`, and calculates time using `Time.realtimeSinceStartup`. | -| MotionScheduler.Manual | Updates manually. For details, see [Updating Motion Manually](updating-motion-manually.md). | +| MotionScheduler.Manual | Updates will be performed using the ManualMotionDispatcher. For more details, please refer to +[ManualMotionDispatcher](./manual-motion-dispatcher.md). | | EditorMotionScheduler.Update (LitMotion.Editor) | Updates at the EditorApplication.update timing. This Scheduler is limited to the editor. | #### WithCancelOnError Cancels the motion when an uncaught exception occurs within the motion's `Bind` function. It is set to false by default. -#### WithBindOnSchedule +#### WithImmediateBind + +Executes the Bind operation at the time of scheduling the motion. By default, it is set to true. + +#### WithDebugName -Execute Bind processing at the timing of scheduling the motion. It is set to false by default. +Sets a name for debugging purposes. For more details, refer to the [LitMotion Debugger](litmotion-debugger.md) section. #### WithRoundingMode (int) diff --git a/docs/articles/en/motion-control.md b/docs/articles/en/motion-control.md new file mode 100644 index 00000000..1a6affe1 --- /dev/null +++ b/docs/articles/en/motion-control.md @@ -0,0 +1,131 @@ +# Motion Control + +Methods for creating motions, such as `Bind()` and `RunWithoutBinding()`, all return a `MotionHandle` struct. + +```cs +var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); +``` + +You can control the motion through this struct. + +### Completing/Canceling Motion + +To complete a running motion, call `Complete()`. + +```cs +var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); +handle.Complete(); +``` + +To cancel a running motion, call `Cancel()`. + +```cs +var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); +handle.Cancel(); +``` + +### Motion Existence Check + +The above methods/properties will throw an exception if the motion has already finished or if the `MotionHandle` is uninitialized. To check if the motion the `MotionHandle` points to exists, use `IsActive()`. + +```cs +var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); + +if (handle.IsActive()) handle.Complete(); +``` + +If you want to call `Complete()` or `Cancel()` only if the motion exists, you can simplify the code using `TryComplete()` / `TryCancel()`. + +```cs +handle.TryComplete(); +handle.TryCancel(); +``` + +### Reusing Motion + +By default, completed motions are automatically discarded, so `MotionHandle` cannot be reused. + +If you want to reuse the same motion, call `Preserve()`. This prevents the motion from being discarded after completion. + +```cs +// Call Preserve() +handle.Preserve(); + +// It can be reused after completion +handle.Complete(); +handle.Time = 0; +``` + +However, motions that have called `Preserve()` will continue to run until `Cancel()` is explicitly called. After use, you should either call `Cancel()` or link the lifetime to a GameObject using `AddTo()`. + +### Adjusting Playback Speed + +You can modify the playback speed of a motion using the `MotionHandle.PlaybackSpeed` property. This allows you to slow down, reverse, or pause the motion. + +```cs +var handle = LMotion.Create(0f, 10f, 2f).RunWithoutBinding(); +handle.PlaybackSpeed = 2f; +``` + +### Manually Controlling Motion + +You can manually control a motion using the `Time` property. + +```cs +// Manually set the elapsed time of the motion +handle.Time = 0.5; +``` + +However, motions that are completed by manually adjusting `Time` are also automatically discarded by default. If you want to manually control a motion, it's recommended to call `Preserve()`. + +### Getting Motion Information + +You can get motion data from the properties of the `MotionHandle`. + +```cs +// Duration per loop +var duration = handle.Duration; + +// Total duration of the motion +var totalDuration = handle.TotalDuration; + +// Delay time +var delay = handle.Delay; + +// Number of loops +var loops = handle.Loops; + +// Number of completed loops +var completedLoops = handle.CompletedLoops; +``` + +To check if a motion is currently playing, use `IsPlaying()`. This is similar to `IsActive()`, but unlike `IsActive()`, which always returns `true` until the motion is discarded, `IsPlaying()` will return `false` once the motion completes (if `Preserve()` was called). + +```cs +if (handle.IsPlaying()) +{ + DoSomething(); +} +``` + +### Linking Cancelation to GameObject + +You can use `AddTo()` to automatically cancel the motion when the GameObject is destroyed. + +```cs +LMotion.Create(0f, 10f, 2f) + .Bind(() => Debug.Log(x)) + .AddTo(this.gameObject); +``` + +### Managing Multiple `MotionHandle` + +To manage multiple `MotionHandle` instances together, the `CompositeMotionHandle` class is provided. You can bind `MotionHandle` instances to this class using `AddTo()`. + +```cs +var handles = new CompositeMotionHandle(); + +LMotion.Create(0f, 10f, 2f) + .Bind(() => Debug.Log(x)) + .AddTo(handles); +``` diff --git a/docs/articles/en/motion-settings.md b/docs/articles/en/motion-settings.md new file mode 100644 index 00000000..ed6adfe1 --- /dev/null +++ b/docs/articles/en/motion-settings.md @@ -0,0 +1,56 @@ +# MotionSettings + +By using `MotionSettings`, you can store motion configuration settings for reuse. + +`MotionSettings` can be created either using object initializers or via the `MotionBuilder`. The type arguments should be the type of the value to animate and the options type (such as `NoOptions`, `IntegerOptions`, `StringOptions`, `PunchOptions`, `ShakeOptions`, etc.). + +```cs +// Created using an object initializer +var settings = new MotionSettings +{ + StartValue = 0f, + EndValue = 10f, + Duration = 2f, + Ease = Ease.OutQuad +}; + +// Created using MotionBuilder +var settings = LMotion.Create(0f, 10f, 2f) + .WithEase(Ease.OutQuad) + .ToMotionSettings(); +``` + +The created `MotionSettings` can be passed as an argument to `LMotion.Create()`. + +```cs +LMotion.Create(settings) + .Bind(x => { }); +``` + +Since `MotionSettings` is a record type, you can also overwrite part of the settings using the `with` expression. + +```cs +var newSettings = settings with +{ + StartValue = 5f +}; +``` + +## SerializableMotionSettings + +Instead of using `MotionSettings`, you can use `SerializableMotionSettings` to make the values editable in the Inspector. + +```cs +public class Example : MonoBehaviour +{ + [SerializeField] SerializableMotionSettings settings; + + void Start() + { + LMotion.Create(settings) + .BindToPositionX(transform); + } +} +``` + +![img](../../images/img-serializable-motion-settings-inspector.png) diff --git a/docs/articles/en/motion-tracker.md b/docs/articles/en/motion-tracker.md deleted file mode 100644 index 51ee0487..00000000 --- a/docs/articles/en/motion-tracker.md +++ /dev/null @@ -1,10 +0,0 @@ -# Motion Tracker - -You can track motions created using the Motion Tracker Window. - -![img1](../../images/motion-tracker-window.png) - -Open the window from `Window > LitMotion > Motion Tracker`, and press [Enable Tracking] to enable tracking. - -> [!WARNING] -> Enabling tracking significantly reduces performance. Therefore, it is recommended to keep it disabled by default and only enable it during debugging. \ No newline at end of file diff --git a/docs/articles/en/package-structure.md b/docs/articles/en/package-structure.md index b90c8266..4d9cc444 100644 --- a/docs/articles/en/package-structure.md +++ b/docs/articles/en/package-structure.md @@ -6,3 +6,4 @@ | LitMotion.Adapters | Includes adapters for Unity-specific types like primitive types and Vector3. | | LitMotion.Editor | Contains functionalities to operate motions within the editor. | | LitMotion.Extensions | Contains extension methods to bind motions to Unity components. These functionalities are separated into a different asmdef file. | +| LitMotion.Animation | A package that provides animation functionality working with LitMotion. The LitMotion Animation component, which allows you to create complex animations directly from the Inspector, becomes available. This is provided as a separate package. | diff --git a/docs/articles/en/playing-in-editor.md b/docs/articles/en/play-motion-in-editor.md similarity index 96% rename from docs/articles/en/playing-in-editor.md rename to docs/articles/en/play-motion-in-editor.md index f4da5f62..60695584 100644 --- a/docs/articles/en/playing-in-editor.md +++ b/docs/articles/en/play-motion-in-editor.md @@ -1,4 +1,4 @@ -# Playing in Unity Editor +# Play Motion in Unity Editor LitMotion supports playback in the Unity Editor. When creating motions in Edit Mode, they are automatically scheduled in the Editor. In this case, the motions are driven on `EditorApplication.update`. diff --git a/docs/articles/en/reusing-builder.md b/docs/articles/en/reusing-builder.md deleted file mode 100644 index a4142b57..00000000 --- a/docs/articles/en/reusing-builder.md +++ /dev/null @@ -1,19 +0,0 @@ -# Reusing MotionBuilder - -MotionBuilder automatically return the buffer to the pool when creating a motion, preventing the creation of multiple motions from the same builder. For example, the following code will throw an exception: - -```cs -var builder = LMotion.Create(0f, 10f, 2f); -builder.BindToUnityLogger(); -builder.BindToUnityLogger(); // Throws an InvalidOperationException -``` - -If you want to create multiple motions using the same builder, you need to call `Preserve()` to retain the internal values. - -Additionally, when using `Preserve()`, the builder won't automatically return the buffer to the pool. Therefore, it's necessary to explicitly call `Dispose()` to properly dispose of the builder (using a `using` statement is recommended to prevent forgetting to call `Dispose()`). - -```cs -using var builder = LMotion.Create(0f, 10f, 2f).Preserve(); -builder.BindToUnityLogger(); -builder.BindToUnityLogger(); -``` diff --git a/docs/articles/en/sequence.md b/docs/articles/en/sequence.md new file mode 100644 index 00000000..038420c9 --- /dev/null +++ b/docs/articles/en/sequence.md @@ -0,0 +1,69 @@ +# Sequence + +Using a `Sequence`, you can combine multiple motions. This is useful when controlling complex animations. + +To create a `Sequence`, you build it with `LSequence.Create()`, add motions, and then call `Schedule()`. + +```cs +LSequence.Create() + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .Join(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .Insert(0f, LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Schedule(); +``` + +The return value of `Schedule()` is a `MotionHandle`, so it can be treated the same as any other motion. + +> [!WARNING] +> You cannot add motions that are already playing or those with infinite loops to a sequence. (An exception will occur.) + +## Append + +`Append()` adds motions sequentially after the previous motion in the sequence. + +```cs +// The x, y, z motions will be played in order +LSequence.Create() + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Schedule(); +``` + +You can also add a delay between motions using `AppendInterval()`. + +```cs +LSequence.Create() + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .AppendInterval(0.5f) + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .AppendInterval(0.5f) + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Schedule(); +``` + +## Join + +`Join()` adds a motion at the start of the last added motion in the sequence, making them play simultaneously. + +```cs +// The x, y, and z motions will play simultaneously +LSequence.Create() + .Join(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .Join(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .Join(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Schedule(); +``` + +## Insert + +`Insert()` inserts a motion at a specified position in the sequence. + +```cs +// Insert the x, y, and z motions at specified positions +LSequence.Create() + .Insert(0.1f, LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .Insert(0.2f, LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .Insert(0.3f, LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Schedule(); +``` diff --git a/docs/articles/en/toc.yml b/docs/articles/en/toc.yml index 37ac7e7a..039444ba 100644 --- a/docs/articles/en/toc.yml +++ b/docs/articles/en/toc.yml @@ -1,6 +1,8 @@ - name: Get Started - name: LitMotion Overview - href: about.md + href: ../../index.md +- name: What's new in v2 + href: whats-new-in-v2.md - name: Installation href: installation.md - name: Quick Start @@ -9,42 +11,62 @@ href: package-structure.md - name: Supported Types href: supported-types.md +- name: FAQ + href: faq.md - name: Essentials - name: Basic Concepts href: basic-concepts.md - name: Binding href: binding.md -- name: Controlling Motion - href: controlling-motion.md +- name: Motion Control + href: motion-control.md - name: Motion Configuration href: motion-configuration.md -- name: Waiting for Motion in Coroutine - href: waiting-for-motion-in-coroutine.md -- name: Waiting for Motion in async/await - href: waiting-for-motion-in-async-await.md +- name: MotionSettings + href: motion-settings.md +- name: Sequence + href: sequence.md - name: Vibration Motion with Punch/Shake href: punch-and-shake.md - name: Text Animation href: text-animation.md - name: TextMesh Pro Character Animation href: textmesh-pro-character-animation.md -- name: Updating Motion Manually - href: updating-motion-manually.md -- name: Reusing MotionBuilder - href: reusing-builder.md -- name: Avoiding Dynamic Memory Allocation - href: avoiding-dynamic-memory-allocation.md +- name: Await Motion in Coroutine + href: await-motion-in-coroutine.md +- name: Await Motion in async/await + href: await-motion-in-async-await.md +- name: Convert to IDisposable + href: convert-to-disposable.md +- name: LitMotion Debugger + href: litmotion-debugger.md + +- name: Advanved +- name: Play Motion in Editor + href: play-motion-in-editor.md - name: Exception Handling href: exception-handling.md -- name: Playing in UnityEditor - href: playing-in-editor.md +- name: ManualMotionDispatcher + href: manual-motion-dispatcher.md +- name: Avoid Dynamic Memory Allocatoin + href: avoid-dynamic-memory-allocation.md - name: Custom Binding Extension Method href: custom-binding-extension-method.md - name: Custom Adapter href: custom-adapter.md -- name: Motion Tracker - href: motion-tracker.md + +- name: LitMotion.Animation +- name: LitMotion.Animation Overview + href: litmotion-animation-overview.md +- name: Installation + href: litmotion-animation-installation.md +- name: LitMotion Animation + href: litmotion-animation.md +- name: Control LitMotion Animation from C# + href: litmotion-animation-script.md +- name: Custom Animation Component + href: custom-animation-component.md - name: Integrations - name: R3 @@ -56,6 +78,16 @@ - name: ZString href: integration-zstring.md +- name: Migrating +- name: Migrate from DOTween + href: migrate-from-dotween.md +- name: Migrate from LeanTween + href: migrate-from-leantween.md +- name: Migrate from PrimeTween + href: migrate-from-primetween.md +- name: Migrate from LitMotion v1 + href: migrate-from-v1.md + - name: Concepts - name: Design Philosophy href: design-philosophy.md diff --git a/docs/articles/en/updating-motion-manually.md b/docs/articles/en/updating-motion-manually.md deleted file mode 100644 index 91ac4fab..00000000 --- a/docs/articles/en/updating-motion-manually.md +++ /dev/null @@ -1,30 +0,0 @@ -# Updating Motion Manually - -You can configure the motion's update process to be manual by specifying `MotionScheduler.Manual` as the scheduler. - -```cs -// Specify MotionScheduler.Manual as the scheduler -var handle = LMotion.Create(value, endValue, 2f) - .WithScheduler(MotionScheduler.Manual) - .BindToUnityLogger(); -``` - -For motions with `MotionScheduler.Manual`, you need to manually update the motion using `ManualMotionDispatcher.Update()`. - -```cs -while (handle.IsActive()) -{ - var deltaTime = 0.1f; - // Update using ManualMotionDispatcher.Update() - ManualMotionDispatcher.Update(deltaTime); -} -``` - -Also, when you have disabled Domain Reload, the motion's state might not initialize, leading to unexpected behavior. To avoid this, explicitly initialize it at startup using `ManualMotionDispatcher.Reset()`. - -```cs -void Awake() -{ - ManualMotionDispatcher.Reset(); -} -``` \ No newline at end of file diff --git a/docs/articles/en/waiting-for-motion-in-async-await.md b/docs/articles/en/waiting-for-motion-in-async-await.md deleted file mode 100644 index a2aaff96..00000000 --- a/docs/articles/en/waiting-for-motion-in-async-await.md +++ /dev/null @@ -1,29 +0,0 @@ -# Waiting for Motion in async/await - -`MotionHandle.ToValueTask()` allows you to convert a motion to a `ValueTask`. This enables you to await the completion of the motion using async/await. - -```cs -async ValueTask ExampleAsync(CancellationToken cancellationToken) -{ - await LMotion.Create(0f, 10f, 1f) - .RunWithoutBinding() - .ToValueTask(cancellationToken); -} -``` - -However, using `ValueTask` in Unity may have performance implications. For optimal performance, it is recommended to use UniTask. Refer to [UniTask](integration-unitask.md) for information on integrating UniTask with LitMotion. - -### Awaitable - -Unity 2023.1 and later versions provide the [Awaitable](https://docs.unity3d.com/2023.1/Documentation/ScriptReference/Awaitable.html) class, which allows for efficient async/await in Unity. - -If you're using Unity 2023.1 or a later version, LitMotion provides an extension method `ToAwaitable()` to convert a `MotionHandle` into an `Awaitable`. This allows you to await the motion using async/await. - -```cs -async Awaitable ExampleAsync(CancellationToken cancellationToken) -{ - await LMotion.Create(0f, 10f, 1f) - .RunWithoutBinding() - .ToAwaitable(cancellationToken); -} -``` \ No newline at end of file diff --git a/docs/articles/en/whats-new-in-v2.md b/docs/articles/en/whats-new-in-v2.md new file mode 100644 index 00000000..6e4529ea --- /dev/null +++ b/docs/articles/en/whats-new-in-v2.md @@ -0,0 +1,69 @@ +# What's new in v2 + +LitMotion v2 introduces significant enhancements to its functionality. In this section, we will introduce the features added in v2. + +For migration from v1, refer to [Migrate from LitMotion v1](./migrate-from-v1.md). + +## LitMotion.Animation Package + +The LitMotion.Animation package has been added, which provides functionality for creating animations directly from the Inspector. This package is separate from the main LitMotion package and, when integrated into your project, it enables the use of the LitMotion Animation component, which allows you to create animations through a visual editor in the Unity Inspector. + +![img](../../images/img-litmotion-animation.gif) + +For more details, see the [LitMotion.Animation](./litmotion-animation-overview.md) section. + +## Sequence + +The Sequence feature has been added to compose multiple motions. You can create a builder with `LSequence.Create()` and add motions to it. + +```cs +LSequence.Create() + .Append(LMotion.Create(-5f, 5f, 0.5f).BindToPositionX(target)) + .Append(LMotion.Create(0f, 5f, 0.5f).BindToPositionY(target)) + .Append(LMotion.Create(-2f, 2f, 1f).BindToPositionZ(target)) + .Schedule(); +``` + +For more details, refer to the [Sequence](./sequence.md) section. + +## MotionHandle + +The following properties and methods have been added to `MotionHandle`: + +```cs +MotionHandle handle; + +// methods +handle.Preserve(); +handle.IsPlaying(); +handle.TryComplete(); +handle.TryCancel(); + +// readonly properties +handle.Duration; +handle.TotalDuration; +handle.Loops; +handle.CompletedLoops; +handle.Delay; + +// properties +handle.Time; +``` + +## WithOnLoopComplete + +A new callback has been added that is triggered upon the completion of each loop. You can add this callback using `WithOnLoopComplete()`. + +```cs +LMotion.Create(...) + .WithOnLoopComplete(completedLoops => { }) + .Bind(x => { }) +``` + +## LitMotion Debugger + +In place of the MotionTracker window from v1, we have added the more powerful LitMotion Debugger. Additionally, new debugging APIs have been introduced. + +![img](../../images/img-litmotion-debugger.png) + +For more details, refer to the [LitMotion Debugger](./litmotion-debugger.md) section. diff --git a/docs/articles/ja/avoiding-dynamic-memory-allocation.md b/docs/articles/ja/avoid-dynamic-memory-allocation.md similarity index 100% rename from docs/articles/ja/avoiding-dynamic-memory-allocation.md rename to docs/articles/ja/avoid-dynamic-memory-allocation.md diff --git a/docs/articles/ja/waiting-for-motion-in-async-await.md b/docs/articles/ja/await-motion-in-async-await.md similarity index 76% rename from docs/articles/ja/waiting-for-motion-in-async-await.md rename to docs/articles/ja/await-motion-in-async-await.md index aac7578d..0e2d6465 100644 --- a/docs/articles/ja/waiting-for-motion-in-async-await.md +++ b/docs/articles/ja/await-motion-in-async-await.md @@ -37,3 +37,13 @@ async Awaitable ExampleAsync(CancellationToken cancellationToken) .ToAwaitable(cancellationToken); } ``` + +### キャンセル時の挙動を変更する + +`ToValueTask()` / `ToAwaitable()`の引数に`CancelBehavior`を指定することで、asyncメソッドがキャンセルされた時の挙動を変更できます。また、`cancelAwaitOnMotionCanceled`を`true`に設定することで、`MotionHandle`はキャンセルされた際にasyncメソッドをキャンセルすることが可能になります。 + +```cs +await LMotion.Create(0f, 10f, 1f) + .RunWithoutBinding() + .ToAwaitable(CancelBehavior.Complete, true, cancellationToken); +``` \ No newline at end of file diff --git a/docs/articles/ja/waiting-for-motion-in-coroutine.md b/docs/articles/ja/await-motion-in-coroutine.md similarity index 100% rename from docs/articles/ja/waiting-for-motion-in-coroutine.md rename to docs/articles/ja/await-motion-in-coroutine.md diff --git a/docs/articles/ja/basic-concepts.md b/docs/articles/ja/basic-concepts.md index dc53d898..87e0157f 100644 --- a/docs/articles/ja/basic-concepts.md +++ b/docs/articles/ja/basic-concepts.md @@ -50,7 +50,7 @@ if (handle.IsActive()) } ``` -詳細は[モーションを制御する](controlling-motion.md)を参照してください。 +詳細は[モーションを制御する](motion-control.md)を参照してください。 ### MotionScheduler diff --git a/docs/articles/ja/litmotion-animation-installation.md b/docs/articles/ja/litmotion-animation-installation.md index fa947c69..d9e6adff 100644 --- a/docs/articles/ja/litmotion-animation-installation.md +++ b/docs/articles/ja/litmotion-animation-installation.md @@ -1,7 +1,6 @@ # インストール -LitMotion.Animationはコアパッケージとは独立して配布されています。 - +LitMotion.Animationはコアパッケージとは独立して配布されています。プロジェクトに追加して使用を開始しましょう。 ### 要件 diff --git a/docs/articles/ja/litmotion-animation-about.md b/docs/articles/ja/litmotion-animation-overview.md similarity index 71% rename from docs/articles/ja/litmotion-animation-about.md rename to docs/articles/ja/litmotion-animation-overview.md index d55792f4..f0c6ce0d 100644 --- a/docs/articles/ja/litmotion-animation-about.md +++ b/docs/articles/ja/litmotion-animation-overview.md @@ -7,5 +7,6 @@ LitMotion.AnimationはLitMotionで構築されたアニメーションの機能 ## 特徴 * LitMotionで実装されたハイパフォーマンスなアニメーション -* Edit Mode / Play Modeの両方でプレビューが可能 -* 容易に拡張を作成可能 +* Inspectorからアニメーションを作成する +* Edit Mode / Play Modeの両方でプレビュー再生が可能 +* `LitMotionAnimationComponent`を実装した拡張機能 diff --git a/docs/articles/ja/litmotion-animation-component.md b/docs/articles/ja/litmotion-animation.md similarity index 96% rename from docs/articles/ja/litmotion-animation-component.md rename to docs/articles/ja/litmotion-animation.md index e14b9564..48818562 100644 --- a/docs/articles/ja/litmotion-animation-component.md +++ b/docs/articles/ja/litmotion-animation.md @@ -1,4 +1,4 @@ -# LitMotion Animationコンポーネント +# LitMotion Animation ![img](../../images/img-litmotion-animation-inspector.png) diff --git a/docs/articles/ja/motion-configuration.md b/docs/articles/ja/motion-configuration.md index a8d7ef29..8f9344bc 100644 --- a/docs/articles/ja/motion-configuration.md +++ b/docs/articles/ja/motion-configuration.md @@ -49,8 +49,9 @@ LMotion.Create(0f, 10f, 2f) | LoopType | 動作 | | - | - | | LoopType.Restart | デフォルトの設定。ループ終了時に開始値にリセットされます。| -| LoopType.Yoyo | 開始値と終了地を往復するように値をアニメーションさせます。| +| LoopType.Flip | 開始値と終了地を往復するように値をアニメーションさせます。| | LoopType.Increment | ループごとに値が増加します。 | +| LoopType.Yoyo | 開始値と終了値をヨーヨーのような動きでアニメーションさせます。| #### WithOnComplete diff --git a/docs/articles/ja/controlling-motion.md b/docs/articles/ja/motion-control.md similarity index 100% rename from docs/articles/ja/controlling-motion.md rename to docs/articles/ja/motion-control.md diff --git a/docs/articles/ja/about.md b/docs/articles/ja/overview.md similarity index 95% rename from docs/articles/ja/about.md rename to docs/articles/ja/overview.md index b8b5eae2..6f87bbf5 100644 --- a/docs/articles/ja/about.md +++ b/docs/articles/ja/overview.md @@ -29,7 +29,7 @@ LitMotionの最大の特徴は非常に優れたパフォーマンスです。Un ### パフォーマンス -LitMotionはモーションの作成/実行の両方においてあらゆるUnity向けのトゥイーンライブラリよりも高速に動作します。ベンチマークの結果を以下に示します。 +LitMotionはモーションの作成/実行の両方において、あらゆるUnity向けのトゥイーンライブラリよりも高速に動作します。ベンチマークの結果を以下に示します。 ![benchmark_1](../../images/benchmark_startup_64000_float.png) diff --git a/docs/articles/ja/playing-in-editor.md b/docs/articles/ja/play-motion-in-editor.md similarity index 94% rename from docs/articles/ja/playing-in-editor.md rename to docs/articles/ja/play-motion-in-editor.md index 746b5458..334dfb0a 100644 --- a/docs/articles/ja/playing-in-editor.md +++ b/docs/articles/ja/play-motion-in-editor.md @@ -1,4 +1,4 @@ -# Unity Editor上で再生する +# Unity Editor上でモーションを再生する LitMotionはエディタ上での再生に対応しています。Edit Mode時にモーションを作成した場合、自動でEditor上にスケジュールされます。この場合、モーションは`EditorApplication.update`上で駆動されます。 diff --git a/docs/articles/ja/toc.yml b/docs/articles/ja/toc.yml index 30d1d648..338558d5 100644 --- a/docs/articles/ja/toc.yml +++ b/docs/articles/ja/toc.yml @@ -1,6 +1,6 @@ - name: Get Started - name: LitMotionとは - href: about.md + href: overview.md - name: v2の新機能 href: whats-new-in-v2.md - name: インストール @@ -20,7 +20,7 @@ - name: 値のバインディング href: binding.md - name: モーションの制御 - href: controlling-motion.md + href: motion-control.md - name: モーションの設定 href: motion-configuration.md - name: MotionSettings @@ -34,23 +34,23 @@ - name: TextMesh Proの文字をアニメーションさせる href: textmesh-pro-character-animation.md - name: コルーチンでモーションを待機する - href: waiting-for-motion-in-coroutine.md + href: await-motion-in-coroutine.md - name: async/awaitでモーションを待機する - href: waiting-for-motion-in-async-await.md + href: await-motion-in-async-await.md - name: IDisposableに変換する href: convert-to-disposable.md - name: LitMotion Debugger href: litmotion-debugger.md - name: Advanved -- name: Unity Editor上で再生する - href: playing-in-editor.md +- name: Unity Editor上でモーションを再生する + href: play-motion-in-editor.md - name: 例外処理 href: exception-handling.md - name: ManualMotionDispatcher href: manual-motion-dispatcher.md - name: 動的なメモリ確保を回避する - href: avoiding-dynamic-memory-allocation.md + href: avoid-dynamic-memory-allocation.md - name: Bind拡張メソッドを作成する href: custom-binding-extension-method.md - name: カスタムAdapterを作成する @@ -58,11 +58,11 @@ - name: LitMotion.Animation - name: LitMotion.Animationとは - href: litmotion-animation-about.md + href: litmotion-animation-overview.md - name: インストール href: litmotion-animation-installation.md -- name: LitMotion Animationコンポーネント - href: litmotion-animation-component.md +- name: LitMotion Animation + href: litmotion-animation.md - name: LitMotion AnimationをC#から操作する href: litmotion-animation-script.md - name: Animation Componentを作成する diff --git a/docs/articles/ja/whats-new-in-v2.md b/docs/articles/ja/whats-new-in-v2.md index 98b9a88f..f56696e5 100644 --- a/docs/articles/ja/whats-new-in-v2.md +++ b/docs/articles/ja/whats-new-in-v2.md @@ -10,7 +10,7 @@ Inspectorからアニメーションを作成するための機能を提供す ![img](../../images/img-litmotion-animation.gif) -詳細は[LitMotion.Animation](./litmotion-animation-about.md)の項目を参照してください。 +詳細は[LitMotion.Animation](./litmotion-animation-overview.md)の項目を参照してください。 ## Sequence @@ -52,7 +52,7 @@ handle.Time; ## WithOnLoopComplete -各ループの完了時に呼び出される新たなコールバックが追加されました。これは`WothOnLoopComplete()`を用いて追加できます。 +各ループの完了時に呼び出される新たなコールバックが追加されました。これは`WithOnLoopComplete()`を用いて追加できます。 ```cs LMotion.Create(...) diff --git a/docs/index.md b/docs/index.md index 18e0b2e1..75f6024b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,11 +1,65 @@ -# LitMotion +# LitMotion Overview ![header](images/header.png) -Lightning-fast and Zero Allocation Tween Library for Unity. +LitMotion is a high-performance tweening library for Unity. It encompasses a rich set of features to animate components like Transform, along with custom fields and properties, allowing for easy creation of animations. -https://github.com/AnnulusGames/LitMotion +The biggest feature of LitMotion is its excellent performance. Designed to take full advantage of Unity's latest technology, "DOTS", including the C# Job System and Burst Compiler, LitMotion runs 2-20 times (or more) faster than other tween libraries in various situations, such as creating and executing tweens. In addition, there are no allocations during tween creation. -### License +Additionally, v2 introduces Sequence for combining multiple motions and the LitMotion.Animation package, which allows you to create tween animations directly from the Inspector. With these additions, LitMotion is now as powerful, if not more, than DOTween Pro or PrimeTween in terms of features. -This library is under the [MIT License](https://github.com/AnnulusGames/LitMotion/LICENSE). \ No newline at end of file +## Features + +* Animate anything in one line of code. +* Achieves zero allocations with the struct-based design +* Extremely high-performance implementation optimized using DOTS (Data-Oriented Technology Stack) +* Works in both runtime and editor +* Supports complex settings like easing and looping +* Waits for completion using callbacks/coroutines +* Zero allocation text animationSupports TextMesh Pro / UI Toolkit +* Special motions like Punch, Shake, etc. +* Conversion to Observable using [UniRx](https://github.com/neuecc/UniRx) / [R3](https://github.com/Cysharp/R3) +* async/await support using [UniTask](https://github.com/Cysharp/UniTask) +* Type extension with `IMotionOptions` and `IMotionAdapter` +* Integration with the Inspector via `SerializableMotionSettings` +* Debugging API and LitMotion Debugger window +* Combine animations using `LSequence` +* Create complex animations directly from the Inspector with the [LitMotion.Animation](articles/en/litmotion-animation-overview.md) package + +### Performance + +LitMotion operates faster than any Unity tweening library in both motion creation and execution. Below are the results of benchmarks. + +![benchmark_1](images/benchmark_startup_64000_float.png) + +--- + +![benchmark_2](images/benchmark_update_64000_float.png) + +--- + +![benchmark_3](images/benchmark_startup_50000_position.png) + +--- + +![benchmark_4](images/benchmark_update_50000_position.png) + +--- + +![benchmark_5](images/benchmark_gc_position.png) + +The project and source code used for the benchmarks can be reviewed in [this repository](https://github.com/AnnulusGames/TweenPerformance). + +### Comparison with DOTween/Magic Tween + +Among other Unity tweening libraries like DOTween and the previously mentioned Magic Tween, LitMotion possesses distinct features in comparison. + +* Excellent Performance + - LitMotion operates about 5 times faster than DOTween. + - It is about 1.5 times faster than the faster Magic Tween. + - Additionally, there are no allocations during motion creation. +* Curated Features + - While LitMotion provides sufficient features, it offers fewer functionalities compared to Magic Tween or DOTween. This approach aligns with the library's concept of being "Simple" (although room for extension is available). +* Simple and Flexible API + - With a natural feel using method chaining, LitMotion enables smooth writing from motion creation to binding. + - Unlike Magic Tween or DOTween, LitMotion does not include extension methods for components. While I acknowledge the advantages of extension methods, they can sometimes lead to confusion in terms of readability. LitMotion prioritizes API simplicity and unifies the entry point into the `LMotion` class. \ No newline at end of file From 4c0e4d6d1f86f643ed959cf2ea018ecbd497de30 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 25 Dec 2024 10:21:26 +0900 Subject: [PATCH 220/224] Change: sequence.Schedule() -> Run() --- docs/articles/en/migrate-from-dotween.md | 2 +- docs/articles/en/migrate-from-primetween.md | 2 +- docs/articles/en/sequence.md | 14 ++++++------ docs/articles/en/whats-new-in-v2.md | 2 +- docs/articles/ja/migrate-from-dotween.md | 2 +- docs/articles/ja/migrate-from-primetween.md | 2 +- docs/articles/ja/sequence.md | 14 ++++++------ docs/articles/ja/whats-new-in-v2.md | 2 +- .../Runtime/MotionSequenceBuilder.cs | 9 ++++---- .../LitMotion/Tests/Runtime/SequenceTest.cs | 22 +++++++++---------- src/LitMotion/Assets/Sandbox/Sandbox.cs | 2 +- 11 files changed, 37 insertions(+), 36 deletions(-) diff --git a/docs/articles/en/migrate-from-dotween.md b/docs/articles/en/migrate-from-dotween.md index 0b6844f6..ff467d34 100644 --- a/docs/articles/en/migrate-from-dotween.md +++ b/docs/articles/en/migrate-from-dotween.md @@ -93,7 +93,7 @@ LSequence.Create() .Append(...) .Join(...) .Insert(...) - .Schedule(); + .Run(); ``` Adding callbacks to Sequences is not supported in LitMotion. This is intentional, as LitMotion encourages the use of async methods for complex animations that require callbacks. For more details, refer to the [Design Philosophy](./design-philosophy.md). diff --git a/docs/articles/en/migrate-from-primetween.md b/docs/articles/en/migrate-from-primetween.md index be70f96e..86b55c62 100644 --- a/docs/articles/en/migrate-from-primetween.md +++ b/docs/articles/en/migrate-from-primetween.md @@ -83,7 +83,7 @@ LSequence.Create() .Append(...) .Join(...) .Insert(...) - .Schedule(); + .Run(); ``` Adding callbacks to sequences is not supported in LitMotion. This is intentional, as LitMotion encourages the use of async methods for complex animations that require multiple callbacks. For more details, refer to the [Design Philosophy](./design-philosophy.md). diff --git a/docs/articles/en/sequence.md b/docs/articles/en/sequence.md index 038420c9..e50af075 100644 --- a/docs/articles/en/sequence.md +++ b/docs/articles/en/sequence.md @@ -2,17 +2,17 @@ Using a `Sequence`, you can combine multiple motions. This is useful when controlling complex animations. -To create a `Sequence`, you build it with `LSequence.Create()`, add motions, and then call `Schedule()`. +To create a `Sequence`, you build it with `LSequence.Create()`, add motions, and then call `Run()`. ```cs LSequence.Create() .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) .Join(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) .Insert(0f, LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) - .Schedule(); + .Run(); ``` -The return value of `Schedule()` is a `MotionHandle`, so it can be treated the same as any other motion. +The return value of `Run()` is a `MotionHandle`, so it can be treated the same as any other motion. > [!WARNING] > You cannot add motions that are already playing or those with infinite loops to a sequence. (An exception will occur.) @@ -27,7 +27,7 @@ LSequence.Create() .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) .Append(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) .Append(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) - .Schedule(); + .Run(); ``` You can also add a delay between motions using `AppendInterval()`. @@ -39,7 +39,7 @@ LSequence.Create() .Append(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) .AppendInterval(0.5f) .Append(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) - .Schedule(); + .Run(); ``` ## Join @@ -52,7 +52,7 @@ LSequence.Create() .Join(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) .Join(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) .Join(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) - .Schedule(); + .Run(); ``` ## Insert @@ -65,5 +65,5 @@ LSequence.Create() .Insert(0.1f, LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) .Insert(0.2f, LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) .Insert(0.3f, LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) - .Schedule(); + .Run(); ``` diff --git a/docs/articles/en/whats-new-in-v2.md b/docs/articles/en/whats-new-in-v2.md index 6e4529ea..0abdab1a 100644 --- a/docs/articles/en/whats-new-in-v2.md +++ b/docs/articles/en/whats-new-in-v2.md @@ -21,7 +21,7 @@ LSequence.Create() .Append(LMotion.Create(-5f, 5f, 0.5f).BindToPositionX(target)) .Append(LMotion.Create(0f, 5f, 0.5f).BindToPositionY(target)) .Append(LMotion.Create(-2f, 2f, 1f).BindToPositionZ(target)) - .Schedule(); + .Run(); ``` For more details, refer to the [Sequence](./sequence.md) section. diff --git a/docs/articles/ja/migrate-from-dotween.md b/docs/articles/ja/migrate-from-dotween.md index c1d2c669..26e84609 100644 --- a/docs/articles/ja/migrate-from-dotween.md +++ b/docs/articles/ja/migrate-from-dotween.md @@ -93,7 +93,7 @@ LSequence.Create() .Append(...) .Join(...) .Insert(...) - .Schedule(); + .Run(); ``` Sequenceに対するコールバックの追加はLitMotionではサポートされていません。これは意図的なもので、LitMotionではコールバックを多用する複雑なアニメーションはasyncメソッドを利用すべきだと考えているためです。詳細は[設計思想](./design-philosophy.md)を参照してください。 diff --git a/docs/articles/ja/migrate-from-primetween.md b/docs/articles/ja/migrate-from-primetween.md index 841fe09e..c4c36339 100644 --- a/docs/articles/ja/migrate-from-primetween.md +++ b/docs/articles/ja/migrate-from-primetween.md @@ -83,7 +83,7 @@ LSequence.Create() .Append(...) .Join(...) .Insert(...) - .Schedule(); + .Run(); ``` Sequenceに対するコールバックの追加はLitMotionではサポートされていません。これは意図的なもので、LitMotionではコールバックを多用する複雑なアニメーションはasyncメソッドを利用すべきだと考えているためです。詳細は[設計思想](./design-philosophy.md)を参照してください。 diff --git a/docs/articles/ja/sequence.md b/docs/articles/ja/sequence.md index bf48fe98..dbe23a6b 100644 --- a/docs/articles/ja/sequence.md +++ b/docs/articles/ja/sequence.md @@ -2,17 +2,17 @@ Sequenceを用いることで、複数のモーションを合成できます。これは複雑なモーションを制御する際に便利です。 -Sequenceを作成するには`LSequence.Create()`でBuilderを作成し、モーションの追加後に`Schedule()`を呼び出します。 +Sequenceを作成するには`LSequence.Create()`でBuilderを作成し、モーションの追加後に`Run()`を呼び出します。 ```cs LSequence.Create() .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) .Join(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) .Insert(0f, LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) - .Schedule(); + .Run(); ``` -`Schedule()`の戻り値は`MotionHandle`であるため、通常のモーションと同じように扱うことが可能です。 +`Run()`の戻り値は`MotionHandle`であるため、通常のモーションと同じように扱うことが可能です。 > [!WARNING] > Sequenceに再生中のモーションや無限ループするモーションを追加することはできません。(例外が発生します) @@ -27,7 +27,7 @@ LSequence.Create() .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) .Append(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) .Append(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) - .Schedule(); + .Run(); ``` `AppendInterval()`で待機時間を追加することも可能です。 @@ -39,7 +39,7 @@ LSequence.Create() .Append(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) .AppendInterval(0.5f) .Append(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) - .Schedule(); + .Run(); ``` ## Join @@ -52,7 +52,7 @@ LSequence.Create() .Join(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) .Join(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) .Join(LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) - .Schedule(); + .Run(); ``` ## Insert @@ -65,5 +65,5 @@ LSequence.Create() .Insert(0.1f, LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) .Insert(0.2f, LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) .Insert(0.3f, LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) - .Schedule(); + .Run(); ``` diff --git a/docs/articles/ja/whats-new-in-v2.md b/docs/articles/ja/whats-new-in-v2.md index f56696e5..8f86ca05 100644 --- a/docs/articles/ja/whats-new-in-v2.md +++ b/docs/articles/ja/whats-new-in-v2.md @@ -21,7 +21,7 @@ LSequence.Create() .Append(LMotion.Create(-5f, 5f, 0.5f).BindToPositionX(target)) .Append(LMotion.Create(0f, 5f, 0.5f).BindToPositionY(target)) .Append(LMotion.Create(-2f, 2f, 1f).BindToPositionZ(target)) - .Schedule(); + .Run(); ``` 詳細は[Sequence](./sequence.md)の項目を参照してください。 diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs index f59ee8de..c4494013 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionSequenceBuilder.cs @@ -1,6 +1,7 @@ using System; using System.Buffers; using System.Runtime.CompilerServices; +using LitMotion.Adapters; using LitMotion.Collections; namespace LitMotion @@ -69,7 +70,7 @@ public void Join(MotionHandle handle) Insert(lastTail, handle); } - public MotionHandle Schedule(Action> configuration) + public MotionHandle Schedule(Action> configuration) { var source = MotionSequenceSource.Rent(); var builder = LMotion.Create(0.0, duration, (float)duration) @@ -148,13 +149,13 @@ public readonly MotionSequenceBuilder Join(MotionHandle handle) } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public MotionHandle Schedule() + public MotionHandle Run() { - return Schedule(null); + return Run(null); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public MotionHandle Schedule(Action> configuration) + public MotionHandle Run(Action> configuration) { CheckIsDisposed(); var handle = source.Schedule(configuration); diff --git a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs index 8fc6baeb..6a629b87 100644 --- a/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs +++ b/src/LitMotion/Assets/LitMotion/Tests/Runtime/SequenceTest.cs @@ -17,7 +17,7 @@ public IEnumerator Test_Append() LSequence.Create() .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => x = v)) .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => y = v)) - .Schedule(); + .Run(); yield return new WaitForSeconds(0.21f); Assert.That(x, Is.EqualTo(1f)); @@ -34,7 +34,7 @@ public IEnumerator Test_Join() LSequence.Create() .Join(LMotion.Create(0f, 1f, 0.2f).Bind(v => x = v)) .Join(LMotion.Create(0f, 1f, 0.2f).Bind(v => y = v)) - .Schedule(); + .Run(); yield return new WaitForSeconds(0.21f); Assert.That(x, Is.EqualTo(1f)); @@ -50,7 +50,7 @@ public IEnumerator Test_Insert() LSequence.Create() .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => x = v)) .Insert(0.1f, LMotion.Create(0f, 1f, 0.2f).Bind(v => y = v)) - .Schedule(); + .Run(); yield return new WaitForSeconds(0.21f); Assert.That(x, Is.EqualTo(1f)); @@ -66,7 +66,7 @@ public IEnumerator Test_AppendInterval() LSequence.Create() .AppendInterval(0.2f) .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => x = v)) - .Schedule(); + .Run(); yield return new WaitForSeconds(0.19f); Assert.That(x, Is.EqualTo(0f)); @@ -83,17 +83,17 @@ public IEnumerator Test_Nested_Sequence() var sequence1 = LSequence.Create() .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => x = v)) .Append(LMotion.Create(1f, 0f, 0.2f).Bind(v => x = v)) - .Schedule(); + .Run(); var sequence2 = LSequence.Create() .Append(LMotion.Create(0f, 1f, 0.2f).Bind(v => y = v)) .Append(LMotion.Create(1f, 0f, 0.2f).Bind(v => y = v)) - .Schedule(); + .Run(); var handle = LSequence.Create() .Append(sequence1) .Append(sequence2) - .Schedule(); + .Run(); yield return new WaitForSeconds(0.2f); Assert.That(x, Is.GreaterThan(0.9f)); @@ -124,7 +124,7 @@ public void Test_Complete() .Append(LMotion.Create(0f, 1f, 1f) .WithOnComplete(() => flag2 = true) .Bind(v => y = v)) - .Schedule(); + .Run(); handle.Complete(); @@ -147,7 +147,7 @@ public void Test_Cancel() .Append(LMotion.Create(0f, 1f, 1f) .WithOnCancel(() => flag2 = true) .RunWithoutBinding()) - .Schedule(); + .Run(); handle.Cancel(); @@ -166,7 +166,7 @@ public IEnumerator Test_Error_AppendRunningMotion() { LSequence.Create() .Append(handle) - .Schedule(); + .Run(); }, "Cannot add a running motion to a sequence."); } @@ -176,7 +176,7 @@ public void Test_Error_UseMotionHandleInSequence() var handle = LMotion.Create(0f, 1f, 10f).RunWithoutBinding(); LSequence.Create() .Append(handle) - .Schedule(); + .Run(); Assert.Throws(() => { diff --git a/src/LitMotion/Assets/Sandbox/Sandbox.cs b/src/LitMotion/Assets/Sandbox/Sandbox.cs index 2d796a6b..98deec2f 100644 --- a/src/LitMotion/Assets/Sandbox/Sandbox.cs +++ b/src/LitMotion/Assets/Sandbox/Sandbox.cs @@ -19,7 +19,7 @@ void Start() .Append(LMotion.Create(5f, 0f, 0.5f).BindToPositionX(target)) .Append(LMotion.Create(5f, 0f, 0.5f).BindToPositionY(target)) .Append(LMotion.Create(2f, 0f, 1f).BindToPositionZ(target)) - .Schedule() + .Run() .Preserve() .AddTo(this); From 9b14018c7dd14552c2c991258d4c2569b05ac452 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 25 Dec 2024 10:23:30 +0900 Subject: [PATCH 221/224] Change: MotionDisposeBehavior -> DisposeBehavior --- docs/articles/en/convert-to-disposable.md | 4 ++-- docs/articles/ja/convert-to-disposable.md | 4 ++-- .../LitMotion/Runtime/MotionHandleExtensions.cs | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/articles/en/convert-to-disposable.md b/docs/articles/en/convert-to-disposable.md index d094ff74..156c05a6 100644 --- a/docs/articles/en/convert-to-disposable.md +++ b/docs/articles/en/convert-to-disposable.md @@ -6,10 +6,10 @@ var disposable = handle.ToDisposable(); ``` -By default, calling `Dispose()` on this `IDisposable` will cancel the motion. This behavior can be changed by specifying a `MotionDisposeBehavior` argument in `ToDisposable()`. +By default, calling `Dispose()` on this `IDisposable` will cancel the motion. This behavior can be changed by specifying a `DisposeBehavior` argument in `ToDisposable()`. ```cs -var disposable = handle.ToDisposable(MotionDisposeBehavior.Complete); +var disposable = handle.ToDisposable(DisposeBehavior.Complete); // handle.Complete() will be called disposable.Dispose(); diff --git a/docs/articles/ja/convert-to-disposable.md b/docs/articles/ja/convert-to-disposable.md index 87142b1f..082382b6 100644 --- a/docs/articles/ja/convert-to-disposable.md +++ b/docs/articles/ja/convert-to-disposable.md @@ -6,10 +6,10 @@ var disposable = handle.ToDisposable(); ``` -デフォルトでは、この`IDisposable`に対して`Dispose()`を呼び出すとモーションがキャンセルされます。この挙動は`ToDisposable()`の引数に`MotionDisposeBehavior`を指定することで変更できます。 +デフォルトでは、この`IDisposable`に対して`Dispose()`を呼び出すとモーションがキャンセルされます。この挙動は`ToDisposable()`の引数に`DisposeBehavior`を指定することで変更できます。 ```cs -var disposable = handle.ToDisposable(MotionDisposeBehavior.Complete); +var disposable = handle.ToDisposable(DisposeBehavior.Complete); // handle.Complate()が呼ばれる disposable.Dispose(); diff --git a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs index b823f87c..6fd8d632 100644 --- a/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs +++ b/src/LitMotion/Assets/LitMotion/Runtime/MotionHandleExtensions.cs @@ -196,7 +196,7 @@ static TComponent GetOrAddComponent(GameObject target) where TCompon /// This motion handle /// Behavior when disposing /// Disposable motion - public static IDisposable ToDisposable(this MotionHandle handle, MotionDisposeBehavior disposeBehavior = MotionDisposeBehavior.Cancel) + public static IDisposable ToDisposable(this MotionHandle handle, DisposeBehavior disposeBehavior = DisposeBehavior.Cancel) { return new MotionHandleDisposable(handle, disposeBehavior); } @@ -307,7 +307,7 @@ public static Awaitable ToAwaitable(this MotionHandle handle, CancelBehavior can /// /// Specifies the behavior when the motion converted to IDisposable is disposed. /// - public enum MotionDisposeBehavior + public enum DisposeBehavior { Cancel, Complete, @@ -315,23 +315,23 @@ public enum MotionDisposeBehavior internal sealed class MotionHandleDisposable : IDisposable { - public MotionHandleDisposable(MotionHandle handle, MotionDisposeBehavior disposeBehavior) + public MotionHandleDisposable(MotionHandle handle, DisposeBehavior disposeBehavior) { this.handle = handle; this.disposeBehavior = disposeBehavior; } public readonly MotionHandle handle; - public readonly MotionDisposeBehavior disposeBehavior; + public readonly DisposeBehavior disposeBehavior; public void Dispose() { switch (disposeBehavior) { - case MotionDisposeBehavior.Cancel: + case DisposeBehavior.Cancel: handle.TryCancel(); break; - case MotionDisposeBehavior.Complete: + case DisposeBehavior.Complete: handle.TryComplete(); break; } From d59a2bcd7433630786198c050b9708b57f7d3b03 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 25 Dec 2024 11:05:06 +0900 Subject: [PATCH 222/224] Update: docs --- docs/articles/ja/overview.md | 2 ++ docs/articles/ja/whats-new-in-v2.md | 2 ++ docs/images/img-v2-available.png | Bin 0 -> 345204 bytes docs/index.md | 2 ++ 4 files changed, 6 insertions(+) create mode 100644 docs/images/img-v2-available.png diff --git a/docs/articles/ja/overview.md b/docs/articles/ja/overview.md index 6f87bbf5..ec7539d0 100644 --- a/docs/articles/ja/overview.md +++ b/docs/articles/ja/overview.md @@ -6,6 +6,8 @@ LitMotionはUnity向けのハイパフォーマンスなトゥイーンライブ LitMotionの最大の特徴は非常に優れたパフォーマンスです。Unityの最新のテクノロジー、DOTSの一部であるC# Job SystemおよびBurst Compilerを全面的に活用した設計となっており、トゥイーンの作成や駆動などあらゆるシチュエーションにおいて、他のトゥイーンライブラリと比較して2倍から20倍以上の圧倒的なパフォーマンスを発揮します。当然、トゥイーン作成時のアロケーションも一切ありません。 +![img](../../images/img-v2-available.png) + また、v2より複数のモーションを合成するためのSequenceと、Inspectorからトゥイーンアニメーションを作成可能なLitMotion.Animationパッケージが追加されました。これにより機能面においてもDOTween ProやPrimeTweenと同等または以上に強力なライブラリとなっています。 ## 特徴 diff --git a/docs/articles/ja/whats-new-in-v2.md b/docs/articles/ja/whats-new-in-v2.md index 8f86ca05..e24f564b 100644 --- a/docs/articles/ja/whats-new-in-v2.md +++ b/docs/articles/ja/whats-new-in-v2.md @@ -1,5 +1,7 @@ # v2の新機能 +![img](../../images/img-v2-available.png) + LitMotion v2では機能面で大幅な強化が行われました。ここではv2で追加された機能について紹介します。 v1からの移行については[LitMotion v1から移行する](./migrate-from-v1.md)を参照してください。 diff --git a/docs/images/img-v2-available.png b/docs/images/img-v2-available.png new file mode 100644 index 0000000000000000000000000000000000000000..6a3f8faa82e87fc95c9a5940071ac5eed8c53ca4 GIT binary patch literal 345204 zcmeFZ_g|9j|2|G-!^(y&M{3@tW|`*BMWuz6sabACEjPGP6ct;h-FJ@6J;1!pt(YPj z?v@JyC#1Ma1q~4s#g+EG=zcxEf5Yd8H;+dT>5}W>yw3Cad>+U1IL^zz@0y#4?3dUN z0)a$s-MoGe1lo%Qfp#C?w+A?~x3c9M@IyH8rab}#I&e(zZwDwlR}46~198v92!x}Y zo&)|PPNIW);3;ek*d(oduPN25Y4IJ%GPc6FYm_Z7)RK zRYmT}2ibdY?>+|M&K>xe)b#2Sfe}7u-DXdUNc9 z#((cXn0?s)oj!Yg@!)?4uPQ$E`rohhjvDOx?``kj|98p%n@iCD1=0VD*`sm}NYeY* zH3DL$RPpxuKvLd?yv=#uqg9Wp^D}8xDl_DOF>96R0bKC6@&l$n=8E%F6fLk(-&$2$ z*1iX?&t#ku%b8~vVfQyQa;}EP9AdqXNyzh2GQtpM~D^WND zUKS=V546Fk8n)&)yV*X_HCP$EKSR;y<_ZN#LW8^HXBybJ3px`~h$q$=Z`QGq3rfZ2 znDbs#EV`@J%jHV=;^f&EKrwQ?ET}YgZh0HwO5EQQc^53ALRuJ4=`Ag(VdJ%pQB#ce zQ&;nJ5k&^uYf~Cmt`z)p>O_c#eE@ML-OTvCkMQ)u`>DhlWzqD2lc`kLQFhdc4Ah;P zZG6?0_30D_SQT^ekPO%t3Y4&eHwD!V{(~j0XA6#+CuTt|bEi2It>sO;u|`tn=%e3T zDIFDur1Y$Ct=k(l`!-j(6KXHu?t{FV_$c$oIY)w=U#=-1He9|-WaApUn@$q*;;%tg zWUfR<6|oeiE!Kdmw_R!d8H+ z>I^^k=+Ww!p!L(xZs+Qa5qdg z-XHQPMqzYPKw5~&g|}u`n}J0L?z?d+Egxfm3chy_wNKGJ_nhxVjKs)%5`O-fq)Tfh zDta#fC+h-ea5Z~-5XlT#V03_k{nZ~WGpZ)6XI*wq)TuNt_h(@A^k_=$*p&CRQ~)|LmkqaHN458%RRgv zuiNYEhnKH3WUDJ_j44D(!$KBcsrT0fh})AN%7?V9GjqJ6qp|SM0LrxmrjGn~_9s?% z?>+y`zg--o)_!RPsLYInB{fnxQemT({y;!UnM^B$NW;L>vhv5xJHN7SF35iLLn5aV zbj%^d2_Qazc-l11c_jf%&4K__F9l~Y*2BPhQH!~jR14)vv|?UQ z=YhgvjlIhRy0hc>3N9=Gx$O0{GiCw({D*y>1$f>4f$rJ6lsa(4vbQdJBSbfnKR?aI zS8>N0SD!xu=HJy$kQ-t|#b`hAk1nx+TPt)6>Euh=?V5Q!q^J@9g!XxSb5u=b4yW0F zQxCY&8c_hN+d2(bVkS{im5%!|EW3oyY_5%pTa%VVF9SKC92aB}0%TokaddIptb7PK z===3jvn)Ts+9U|j9kM_LyM5MR%kmuQMLpWU@g7Ji@M|%m7x=#G#brzX&FQWb59?`s zo?&F2Am>%r>rGXgt#1A3Ru_%NhoXOeIhA3mLVR2C4;dV{wHvr_+tivog-wU_cxD(0e6_8vLxZyyj>fWE*a2NJ@|^MNs2JL zs>9x>QsS}511g1+Va&-aY`@0<1025WA$nAI}E$LxDav3@QHT@g2 zeXBOvPo2Fv_?25Uqu~YhqHrP<}Q28Sa zSV-V_6+AF)QRTs~GRg8nI9BUb>p}xtf#G`2EHHC*^t|Ti9V{cJeV8ep7CG7WgvKaZ z-@?@~u#&3-kf#&&re*Z6Tv!GB*FqCJqCh+E%I3^+Cp%>HJ-21kb9*Z)mKlkj?o2*U zIt&8E=jaL&bK04=vGaneoST=p)<`O2;e3^vX%zVqlqlZ~S+g2>}di*Ms+#!cOAj!RkX%%wD_jfi0h|5NjF4iwg z2eLF213CIfpq^%J6Udeyb?Vt*MlCfIvnBrok&q}hP%{q!13{dl)&XR7yps_tpw-iM zeLXG~!&)b}G?zQ!AN?$-RE@HJa8^{$C1S2ne-CMWRVWU%U?94OBI;bcyecS08>zjz za_(`j->E;D{q`v?^0zNZAs+#bJ1lj|7(6T$~f?01X z?B0pC+)1DiXv+O5+)Zx37nUSj*PPY|J2q8`TMLgWlGtVMr(c^oixC?wa~6?}H3O(5 z2T{G^&s=jJO`*s1Qu++cji$~3%JR^Gy!xa?4iMpa`uof-w}x@YyYle9O0tGjcwufZ z^WFISL%fk3js_mr2%&wm!R*VPkuf5NVnQ!bZ%$Rz&kyK~hr7)UU=1S`HvQ6dNsM_J z9y0Kz(ppOfP-^U?{viLcEcQC|x3?{d8%aq6icADAajQ{5uEJhKIA4J6X1^=V7IV+2 zKM8ax`ZOk#uD_d_9L(^0#yX~G-m}~^H%UM)<}L=OQ*|yr`7Vfe*-6g_{vUgrJQ>N8 zSuT1zmTP1BP`;^j|6>Ld5$sB9efb_acEl7b=f>@p00NGeEq-wv2~`A9!%C8tnD*4T zLsBC(53klaj<=He@MsG`UT7XP25P=m@XwsEw6K=OR>tEP3Vl8-=Nfw8oBzjY`<8P`V%)jv1wgD_p^%z>>z7*XuUWm=kf0+d!@f3 zp*k2{(Te(Hbdz7)GyAhWl`g2KPL%{GNFD3p3GTIa{|-=_M0Y2v z=hLsEdgS4}W3H{6dGjg(t>c{CTf>*nhtg`smFf-4?M?XpQQYhgjEce*$-Re8XX=Ld z*Io?5EVlRwGp%2Rj(PgCgu47#SPHjRX?45~{~1}65YWh}vuPdZ$sccT;<*9oJXPQU zkOG<&^FhlT0L#yQv(_P3T-JWX2S!IPFXyxp7iN9Fdb_>Pc^8^~RrSGA#fL>@+0c(o zbv#IYpJzx=y2to>sK)-f1hqX>KRx-+P3#6g6wjfM%#-qAD9Mg2Oh5!3tcalDtsth3 zw{U*9MykWs8PwmX#v^(Uc#h+B<-aC>dxQ}=j~LML>PKP3MeE%s|MG|ldwth8eQ8+O z#!H+?9FC+({LE5k;FZ}(l6pCZxjEL;u$QXD0b9I~w5R)h9Ibm2?&k;j6n7M$23Mz^ z0$CmC47sQymyx$VzkX!?Z-nYE$B#1yTrigXTS>m#g8;WvjIK<*@{5C*L9jBWEUx_g zHPOmkp(gc5^Blv{UQX1)YYZwfgq#NQ?QZX!h~zfwZ#y%|V@hi|p{a9C1+?!R+Z4Dnc<1-7vSNgIfzSVckq@BG&_-m4jW z-ufLS0hRyNu9|xob0xx`!HQn{%KME?9ud#4>{;EoeO24^jgF~z#K!VmO-d8}zwZmD zcoBi_!1R>gqbm=*>8nmB{fxIS;NJfm(pMK1${)V5Tc9@Z?!hF16fen(oOL3yes6qP z`mh(vPz%8#1r#pwcNb!&nTx_j{g`^LrA68|9YX;)=+~tQuZ#HR;eAu79k@a>F$X!2 zzhrEk2t30+hm#&U7J598!LdfP0uw9tkAPIzy@(Gs_s(t8eT23B_(OclPtKDm=omO zZ{F{jmz9FHz_XPu4qQ&kaGd1T_PP0Ce9ku7=$pN-c8zX6Pg!=t zhFd+PPA*`=$z|={ze>4u;xy52=UrzGTUwh_CU`r@fJ4@N6y>U1QB4FG(% zH?a;Qym)6Rs7qHb{`vGJ89gM9-b+kI734)2tu>kZH~nmv%EMQWBDW3Tf9RcSbO9C< z_D2GGwzjw#i-}zSI|-X(AeMxA%Ci5+ijVL=4KzR9mI0J}^9c274%7C*{$j zr7lGh4%&!}@}Fna2QVI8iRAm17MgvvW25mZo?1nhYRO)uT4l{-wxBzCZ2bqGlQ##F z4r^2`sdv9%d4V0fpI4oaZ!<4IXi#}us}nBB*U1!oVz^=WqU&7E9l!ap#`-_~q~U5$ zmPTQDT~+do}>%eyAFc+$q!7U2J$eFb+O1&v45W>{1yoB-1DwI2-+EjFy|96!*iYH`rAZ zKXrvgy@YoHy`@X+pu$13BO}^9qqCp?K30isjYmMK<>ZD$6KT}j5HYZ(cj~xStrM(HAT@0Yz`<75(l0<>-+{llUhFQZJ+x4K@ zezZ^;y@{=dxL!YZ_8ovMK+3)Q=Z}sULJK`Kn(e7n-<$%p!8m23oX0wBgKs>8#M8R{ zKh|ws(4pcv0Cf*yvOJ*^0(v6t_o%9U`v7o-eS#PS>5)n(9?8iSP?DeOd2h4Xub#ul z4C*mg)&Qmvpf!S`^-cKEQH&YfMV>*uJ=3itk)RTQDh`6l}!OT9#p+6A+xS|%auDyqj0~l`|D(Ircs$Whx?Fm|2{6?F3$!J*WzCiM; zAG3+A0b1v*Ptyjf`St)4mb<0Vpk1Zqo|*G{h?k!498x+JlkfNRSH(odrqJj0v5Mb5 zD2&j6a4sY9D|z3jJ>3M$Xzxl3mY5oTzfPk&BkQv+=u;bk=~Q5=u|4p8 zUF-ENbS;3#sS6r9PywGAFm4?i$e$nXDzGq4Iyc@J7Eu1W2eojqezaz;RX$UuCMIzF z!UqpVFoksY$7PSoV=wBYvT~1pMxC9e*1b%4$&}nsISa z+<63QLY8$!PzGN9nTRvv+W;+nuy~gbMS!EC(fI|A0nLPp8ts`nK`y788BGeM2%n34 z^`^!2$Vg9C(?8jZsFKjJ7>XY$3s^(t3xC2jQ|4FPCn2iv`>J6svN%>KulzLFOK71& z7IyokYJo!3LL`NgDqf|wQAf({dP$3+(xG9{x%;%fWI2-<3UH?--hTt}xrfKBUpUW= z3Tv&G6~;_#C5`_trO|<SuW-(a} z*UJaAM%xmZ?PD_^ZBLv$b8RSOZ8RoVxxL*rSiHXDyz-Rt{3dX&%OBI_k!&;G-bDVW{8-@OrcB z|NNf+_l&M!0oDKt*#N*%uAl~k0lfJm#s6rWNq6inNCG>+1kHMPwOdE`S0JMA&%{dl zpCdShjfKu6>MxuFT@tMIW3A=s6pNNcmSH46^`%Nf36OQt7FV|Z2#N=OV_qErfi?sz z$!?eUP~i8^e+T~w02E1}mOY z2a62>(LSZ)=TwK{O!V$v5NHq>hHGh|fs=#*CQ5nUEDG4fcey|?c6*i zr3~yA>YQSeK@CS;RPGAz=GAP@h%dvZjuo{8?Kb;=2t$$e zTZ2EcoRU}#s&pC%)SEUb{;4k=9-80!7VX~XnMjNw69P6K zHdwhrnp{vbX(@hlp6@~qVI+MzL!OC%-bDpt#^gi%r?azs_V~TMm6D8yTnnRzoCU;AyR=2bNmSmv3Ci7l zQ;%wy3+c?3x_mEMjUftpJd+%m=@87xWQV2sKUTZh5du2t7PjN@?wglTfLfO>>Hq%0 zgM41CX01C){kEovN{=dARW>@})Zr6)0fRl3xidFev7z_zN7ZYpn`~a{Y3QUz1=B}_8o0CFH@1`K5P%E6FHpsDj4C7 zY`JDCk-h`uU0n6pZt-CJll31vPMRzpY&!!)kcO~=t>2*gPLe>yd`GA#NF_KwrwEBB z8}b*4Rn&|`Ip7=j(mg?rY`O50p1XPgd*v!uT|)cGL|I~{0Wft$9!39vYFaNU4f5Pe zrfIGyCw>~>?S;ZuL9qk?eRlp?f@PqoJ0BlA)&+#}bE;&8!|Z71?5mI%G5A{4Twz8! z*n3n6WG9V=<_N4W05O>I;d|cbn9UlT6wV{B|7x-p!AJ_{9hTD5?5<&)a)}C36-gE( z9uT~`%R|HOs_47LUYl!zUIL2gn^Rc>s5|)xxd&`P382~6am046rH)BYo#V$)(3)Zb z>c1OUS%D#7%k>Qh+`IDNUGH{xnEZi}5|x6R0j*nnbsOP9jfY671V2X6u@7P<)qvJb zE-V6QroZ}Y3E=!!ptIi)X7%F{@Exv*r(XX%`GY$oCD9tp0D3}_UIU;$L+bsG86^3& zu;OiqKiefuMU*U&i<2LK^$Wh`^~qtz9l^^TV*E>KgyaX()$G1iA z9I~tnr(z8~1Ty?3);qI$TVx_cvk zIA3_SHKoM75XUgQ_F*P-K1`fKaaRTWMPAsrn{u_^4fF}di3){BA~0SqF@<)q;D`8 z%qA>V&?kZN6bqE6^Bc;aqK2$((-{7Zl|!8*AwN{DPn6Gv0_?FEg@ZDUn(jmC;~&M7 z_2F)|b&u+NXkm~=8rDmHvs28((1ZqssOrdd@G`f}-}0{4nbbWeZULnIKH_jHyg8(e zyfVJLe3i&-oUb7%tlD<>?sUtT8f`F3-t+DtFwa)WeW~c1s=ribDh3vVznrk`fkyZ% z3Nt#S4T}59kXdXM#9kItZ3e`{BYjqVserPUP{B3m|GE#_9$1f6yb2>ciikb}d2=A7v17rt%P(B1pBi#S!Sz}0lkOL4x5MHfS zqir4-MF_29lp=f_PEpHw#ltl&oF^2n&SyUB2H!4`xg7WgF*`cz=G*|*vlL(?C>{e$ z8pRwSZLr%G{UdVrax=`0@Uan(l8jr-cepvgZZ3E3-T+{+M9%~Y3BS-GAa3O(CqC#U z;2yq7iRV`uh6Q(DT9q#-floxm>xSbDN7g4lJS(h=$KrJL!1=t)dZqt;ldGCwfcGM| zCjf7$%t4$6J<~6dgxQ z2)dbj19l{JI<~Qa>X(z#mMyg(xFpa7H^hhUv5P;jAJkKdy!Czb_~4=EIw_VzS{T4k zi?`%V61jdk90z#TeK0twM~4#J{ZnzGxfmM(TbdwKGZzxDR~U&TRffg{@t1F%2SwP- zt*yTI=}%YY@y4yZw+fjCp+BtB%>VLnqQK3=N^b7z zO0#v=9lipm9&4FjBEsJTU9@77y(VM%TbvBG{NCqf?Vk18;pkyx`QVxhLU7N5MrBEZ zE)I|`$&lvxiPlyJFC4fk4cE*cAySSC%o5@X&Cyh*|G^KyBQ1Tc3&WXr46B8_Wtf8_`F*I?ILX#9`!GPdKjLe137tD1;XE?$ ze1UPE{(~DqZ-i7=&If?-#|(D)$|jfrc7apx;h{5jk%=RkSACm$u_^?sPp_IY29DJu z1HlUABc*4!_u&&&P*^TTD?!F5Rr330)}Gf*w$eV{W}i9%3aNFz_LAufy5?otwz*kA zYt-t1?nC=}C^@znqj`U~d-K7e%Q@{lhYyIBO|%fzp36ht`GLq8GN2`d9=EG={J0*I zVtgl{e>JRxIe4b;j`bxg7HwoAZY1B)g_X-0uR>J`^_J7b|6z%su!#vBS-B=1NRjM6 zyH846!1(d(L;Q6L5g8CrGUZ-pO&LRJVnSjU=5rFuKnDSz=iT$7-23F0KV_e>Ms$u6 zZ+$JXkwbhEnOZ85+7KBMbH?`(_}gS!?4c9d8d48opR>o1j0>2Qg(e>5nnWN^T6|{0 zQ;2`$WOIN{0^TQt>$vvA2hXjSDE#-*suyM@Ty2SeIO9Gb_4sJxd54WF0&WHt1 zpjWLK^~}DgxL|ZL!Z=~dRALNnE+T3?<`y#7R-Hy(P-7QZ-l zW**n;M%+_rPj=HMhxrfVey0!hN+Gmc!lZT0i;d}bchuev1HG(n1idR9FpYg~A##C38cD@nB<*JHhZ z%{5E>^ztC4*rT;ay|5x`Cq-pr_Uzrp{yrO+%m9Kju`*JrODlTTR^wE!g~@j^QLfKD z%)>a>!FzN38%iT)2>I@hsH;IQdQlFDC_b9uL^H+hfLp9wN-8p@pO=fjH8^gO=Ek*1j1w10-t)>sWNlzAV}>oE9zX2) z0Z|8+ehK?bUe#v!Sti)qD`xEq6<_5jThy6x+J{d^!ll@o-bct@oQ(#wGTkl7&;}-M zx@a)=z)f6BgsCLMDBQ(7ALd_KN{YyANwlM}2~53@E7QR~M(=Mpm-`maMd6jD<~)Zg z=r=fAU2voSqtY9pd&X`JbUjR~%jg>b;qSvFT_wpcVn$}_HvLbZ{xHTgiY@_*vt*+^-m5`*w(wSB}mxs=R zjQPovGTK|_2MFCfS~iQAv<`!7K3!G&ckl)4lw_GET%`0&Akgy(`b#2i*8oxL!@Wv& zd=Ubkw|Q;ctt2uYGu@cNBbPauoL#ouAFewsmI8m~aWGd0rq@5y@UX<^C6k~`=i?Zy zZ|8FHJsL5fNFt!6-e-uGo3JejOcUTG}OL;mog^XLLE8DEYkRqOG()Y zdyMz+2)h(!Mt(RJ0!zB{>1iExuY&OfmwwGr=KBWUf`*!;!uW}?unB1FtM>U3ULC*G z=T#3?A_1+%LQ$fv@cHi`S@Q}Z<>K>08!gkBwcYf;NP|9w2}RFH2Hy~PvP~(1U6VR& z{^E6L%l;4FYCVs)E~0{fqo!^fm+=)H>rtmNI3v+xtpVl8)-+C<2N``5H1%dsyX_Dx zgR$VYJ>x@=-0HCNY~<^W0OG26PWI;PD}?M2)?(x|HM9~oJ9@Jq`s2}-x4JfGC!y{4 z{vGx-)>JS4;F|{YiuQcpRvaw-5E$6RQ(8)64;>nZHIJW9Li#gzK?%LYz8E83h!uNE zy1;_K(#>OKCQn&IIw}QC#8TCd(dKfMO>!B~k9*9I>Qt6m)%Y$!9fuI6r^+K*(s za3-5?d1`+slfHMiAKj|)TM?Cxtrr?sFNgZWeC4q4q$R11J(Zrlm4isba%nxC{>Oy* zgujeU-TY-dUcgK3DadlV%gUL2h?`5|3IU=-H!y#DHlUJTKK!_{hoA8=)%uF6`#Nhb zHFc7})VeppGoUXV>8}gEXY@%erj9KUd$GSJLlS$Vg#ozZ_Yz7Ai{g0=b}O5e9*6S) zzfS-WJ#U!ju(SB;d}KkdjYplWJvme}Agj$o!FNlP{V&!!>t)bMpX2sJmKta~e*0)t z(&mV>o3PPen=6K^qxTz1LYu94dUMGp(n^HE3J2a-x1=-&8?A8jsUS+k2&yDB_FFNu7$*!fe_jl>g3$&^#J8YT{ zyIKQ5>Up>ExU-AgCz#Iugz6sT&ez#&pgN;Hd|?@?PBZA61+G%$U!88R_bgVUi_}aD z5S+xbx~xQ{eSZVQArv-We&XLDWrqD`cDc<(qW@*h?^xSBFusDI7(T z51sBS`u860i#jamPH_COGknz!c6FLIHOz_Cfuwn05=u2Px{rX$0jRn349NX~ue~O& z)t!)h>mZ~6wU;ew54~5n zSwkT?vGoE^nCR=PM&05BGtke09Wbju%B!&J#8n`Xyg#P;=%&Y4^1i5d1u=n+%OidR zYvdkZLunt)50Ag*r+4}yBib2$Tl{h8neaWCedkjdxUq1xI&}uYM4#2}W=(SRH!iVGtfUJxHnh_YJtqfsaY;*4{Pb)>ywzlLq(8o5{0P&S$r?cY`-ncb`P?b?z*!Vk5* zgx&>Z-h$N8d{5u}G?Sn+ZU-wH?$vDna}$CdB0hO?-L(C*vWTpREYLW!)>2(jv^IGW z`ug^2wIQ$Jyi7%Gt{nbwh{&7R{YEECecqTUCf4FZH9 zaNs?1*VI=?jIkfV46h@i!dG!kOWmg`tA0T>xIxhh`?_9Cf?48u^-t<(vt$XnmKMY; zK!M#%3TvT7W49g-F~b(*+Tc4`_C}c%RR%Qyib58}{UcHfHIHg_RW)bo;1^9ekxy@= z4g2dI7}AEb2)-%4IR=NM4eSKHvh!^>R)c$meEzAzs^m)DcK38EWu=ZSH7I_yuU)Nj&bxX{%V&Z?Q4@950z^57 zo1cs;5B%`NvK(~4-M#@AuU(5E(NbN;F7E`qHoT_`n?Qgng}Nw>*#(J8V!)<^%j?0`Hfhc(S}N3UpEcuSBNdpLw51s@45 zmQ+60@(bFp9493PgPQu!cUI2_8`?BJ(AzXAa>(?8o;}{Z;tzQ_G;Ujy)Dz+C-NGQy z%ruNp;`;S<7x7TX#A=>Us6BJu3mxKG-rPJ}JkXbK9LFpROhG*4Z{AV6+lc>KL!Dz3 z8Cmjja~1o8-c+&Mn*4D(9gApod5zWdXg0cqtmWgvzzGvFzB!YEBwUfq@IBu7NZp}q zkuSjQbAZiy%0PQ|QOjd`*E_;UzQt_@{jy5ojtai!Ui9>H+A%gD_j z5;-+vh}^E~GQJa!K$@h#wyfbf)7_z3^e5=&QEpi>`mzBsQuD!ispfG!|3)Dip&pvS z=4O)sLq$OU-aH4A;37f7>g4db+WBBN`$nB`2~0dPmSYHXriJOA((Mkw#;C85`yZaN z>W2&xtR)NkE{NC?vh`6ND-duUHPY~~o3O}=VHoZ!YRG|3&=0It!b3Ignoio54|vNw$%Ma%fXR3TgUf@W zI>7@Sp=L5t5e?pYGAg`KvY1{xUu#5{HH7PUKZ+j$Hk(m|KLT3W5rbW|R)~;W5^rJ4 z_bSKEX{M_)h_a?xz1hJUV;wj5isi(I;|h^pnVMGzx255l(csIa!@a3~gC-^=sQMxG zw1v?-_-#0xS?*V0vp6~z zbmbhd-sv9w6CXTlIQNo^i>l+T_S&5SB*XM{V2=sexzSAtkAaN!4BI+Z2De^9YMHjK z9L2>GzXcr4M%lpGZVt~vZo|rxh?vcD!`a;1G9KLwZT`?kG?{V9;QF(rCb~0$Utpa( zL1gZujnK={A;5Gym#l9S^y+B`uLBP26&@mkm|`STmElK-mrt>^B%_Ow1bm6%jgRV~ zQ9aFJoXzQqsu3x}heOX;0A{CU2TQp`cE>pk?UX>1y~ZG%;B}Cj0+1S|d=c-29IS`5 z{rhvPqX>(YS7&ruAo`ztVcKu_mVZ?uGog{v>((jn@JZ&nDDp@`3r~njkZj!Wo`kQkF8jNQt-pHXDl#Nja%^0d~g)G z-ox|Pd7{>~2*^f=lHsrPl_Ia?1S8T9V4FmhwCLNAuYxTJkAq62UaOdXn)quv_p8@F zn@s{kd%=rA^M7+^B_6zT6y`M;CP{dTML`fELvIW$-qquH`gEE}+}j&r!KG0DM)v9( zrWN>QMaiJ;#Aq;`Gjl@pfExf|1X>!-{%;7Wdo-gx_u7Pv57-hD|;N zkx^3{`>xsCn8<79*99=%yYLJo*A39NRBvW-#qiaPR|K=E2ji{nQBg`O49^(5I_}*< z69z7&q}sRqaw~!#cfZ&?&7%0TC1qMq^Frz%-x*Mg(J)?FDO&k?vfSX!*EFJ4Dju&fT%48js_6NLx4n> zX?)+mk@h?wW0J^B=qO9`8$Blyh3-+yZm($x=yV0*<7(m2mZUfS%J&b%LphHt{R%ud z`z6o-&vze0FdZuj#icaiQ~ZA+0DC_74pYZIYYl^GX49p8x-#4yRf3N@0bkIr9x^vN z^2`6CTSEp2I;FnyVBBEQSVm}9BwCpiyG!ioKG z%7L_Gi}aCa-`EcUjiI01)DfP(&Im5WLEbXqpLq*1f^Lv5pswv(H`0d}QjYA5wQfB2 z<1gbL)KE+NaOhQ}r^;b5XCCk1MYc*lLI&aF zAw-Zo;a!E~t_x8=dd1r4he&TYIW{KO`91SWc&y1<(`K#alP=ZSD-zPlvwcC1v6RY} z%6O4?StA&ndRj+WsZ{#mP(w>zOW+CpgP;mIK)lO^B~1JD+?P=2iPLMkJ?b|1W9}D) zaL1c>dsihLMG0dEG#+758V{rilJ&9Dr4E~;<4E*i#Bcjgcoq3`EUD(N3UA7_TJeX1 zrf2}aeITw^|Kr?_!B+?u^6g#dTAAfaW;Lpl{dYDu#mDsIgZY{H9WbDk3Au~7{?WkD zAI|TG4yiK$x7Aj)*;%6)@JL+2KCZKFly{nVM@& zIkLCB{M>U_GhemSQPg!^1@cHZbSmP@FUnL#J12Wp%um0p2w__ZXIG~W?>Sk3EMBzU zp9kNIGj_I6ZuoRHp%-wudJ_S7dzLM)!O%`GvMiw`^p~X%x2%pwk_7$+%+z?jvVPp* zvHwQJ+gDc?`HXlE|BCf_hLiqTnT_n)bkxr9e4qpY zPnY#nD%C^Xu3Kq5^rYpK0x4c@=cz9rmLzTH03&Tsn9Jy`s6(cM9dpR|5}@F zMckoyzlhOT=ap%fy*mxlUb+Z#xl`i6L)318>F>?63m?2Eog)|Ra!!=wDZ`(#PIK$- z!zIr-{*oU)g>TO0UES8-yf*N_{RF8*yGGSBuOevMmq8?WY9)J&xFDi#x>g50>Y^G@ zu!fGV1x25RmRmH?xz*f*<$S{6`A~;Ssn=CM3}164+h73HhNRvLC)^IA^atv0jXKy= z_8@^>VKCF#sI|oh@;mZhYi1Wm`IQ|zD4(E?(!90|Y+85T_ixVLo_~eqVD^JVd6Ado z)%@6~))7q`g+b1UWrfe$1PlE?X^0K}Z5W z>NYs*u1i|=a;V(Q26D__Pk#FStJ1%1e5~YNrg3jC;PF)V3GvM!&!ItSqC;biSsqNL zL*1|Myn~h3j)I~cBY>qAG8q55RO_z?v`L~(L2p^w@WO=<^UG-h53A%tM{SJrOW3km z)tW-d3xyZv>(m&t7M^b*(#@T-^a|e%b{Q}LB!bSc@W#-~+)zu68qNNr0a$o^Mat=^ zI`-Fx(X4fWSN%OsCOVu0(H)wt?aN$|mSZ>C6m0i;)Zs_7o+{=MXlPM(KGD2qrR)ug zIMkBvPikV(^8`tnJ*4M)WzLk-V@Qms6mJ^9(sd!}QI3vi8s^PYgCQeO6vxHo@Jh>rR?|@@T#n98bQ6oAzAG>&#XqGXBNl$)gFexeOQ*| zQHv}O&)O!Y%uQGK1phKydA7B=Y9S$SA0V;zqco_w8oFq}{Y4R;(MjK#7iOR18la)| zF+rJ?S*|`k!f$)BE9H#k>@Rr&ZYYORsc%?JGlb-wNUO=6i_fO`8hMR$8hY?^Ms4?F zYzOrAQu)JQ90pT$LFKm>58l1z{}`rqkTdxB9^TUX#8Xz$lQ)NjF}%l>=SbGJdMNjp zu9}JW#Sat{UhnjVIk5JW#}q-6iiz99WqqOP=8-wWzLaSdQa160&i$zdzlwn;cj8`1 z47tEMDV61SJsaoV+=VZ|X(s%vJDdOFcMgo0%Y1~1O6(HI>vwNeTH+ZAnSX}@izoRZ z9z5?h{jxX9Ua(#GuB{P9;8k4T)fNJ(e6XLH0Z&Yjd&#OE*18L%SPrx?)SgzEUeNxF z;+DJfOvjKA#pp9Kzh7((ge0PE-3jyAgHYi3O_=@{h z45Uqsj;nS;GFnqb7*k*WqtGC&0~$Ttp&rL7i#m)r-S90|QbFGJ$+~Z@DN4HZX-!{K zJ_0vf=TL;IO0JWzbdU>g0nF6yOiemUi$?xB)ZjS*h>pO{TT>Bq>M&*9Hn7t`RIl85 z7wD2QkO=a|X$;)Zx!Rr&_+C^s3=rt__Tko}-LMu2@#)4jz<;Wu6VJeJe_9pDUyu1P zA!^R^R35UE;g4cg?!ynyvSVhTR8zMcpqPB>92y={u5TV%m8Xvr>P$H54BgcqYhMgv zC|56z>;?&Hgq2nK@o^hD&;D@x0!!~KlJDxU7z%iFaX-fEZltrD+^b=8|L+1bD^2)~ z#yx$W=}46ie9X8`BJF|p0W6F2svf$x>2wAR70YV01i{$xgFAx6@%|83NV`o zF?f}L<`vqz>vq2kx<2uu_xsVfcizIR9>@VOs6J^y)Ii3sCC{s5R+_7LM zZ{`bbzidFUWfsvtv-se0JC#1e10H&8MF1N+%bs~$9KIq@DS*m9BD6}hacW0c@SjK^ z9t02;;C?CDo3IwHz#f~sU-rxWcjs#Ju&t-azcrN9-_GXZA11=$p3m#+Ql^{I(TenH z{DMB9XsVOjUIP$u^$HL&C$whjfQJX18@kD}?UTfIc6*JsYf(^XQqH30o>BDb*z@7R zLymF&ZI!yB1mtiKk|xxf3>iz^Z3q~ILx*;2O^4^YZ40QmSn){5#~TT+tI!7*f}MIo z&FE*eTPK95yu|+8!jP4wYcA=kj0T?`V6HRH9@Gn-zBy;iCkZM+9iypWD8n9Li&d0L zExnu9$^YCIKD5~o+rzSuf2-or1C>*$3UOaBE#tl2c`aj3E(XIRp@dF;SUvft3VRTb zRvtZ~7+fHD}?r$nPe%% zI2R@NDm7xJd=iLod$8Gid(yv8StDG=Oq9b^<7-Pw0?NdPQga&mwB>Ypc7G?dYD};y zW%kQ`f0tz4_L!$f3>U-VBgVxHbTIM_-RliB?VIndrtto$QxT9Hy?`X!ZuqLT;RPwV zG0AvS4!jv$`D1Hcy`&lws=d=2*wk~^zA~8MQ<5vKcE8;6k3c*8_6}4A5vY}q-}96Y z(;hdE6GE4d9T;!H8x$GO`m*9fdV{Hr@rRFt_kxH96Wyu&_`K{&s9$Ml6Ae0$2nwtSS|&Lyj-51T7K9|``| zCm#B181JwI z>mCFkrXq96*-Il&KdrkbHaa{Qe^u}crUR+Cr@9vUnj4zvLH=2x>s+MPj5=6|aw#Zo zS7h-dq`D-Gksq^c8jZ~}rXD7susMi8L{P&6uYfv1V#0s}Y2Z(9XmL zP=yRoHxFkY6^3ekKuA1?X`WUcD9HjFvowz=PZ`k4-|`bUcb}M&C1;DyDwiuVE+#ym z8^)>!i=Uu-eY#g!dc+Q_rGH85$y_gN50!jwQ3V#_+a0FDYo->M?QJT$Pco>9*J6fA ze?pz3S8J_qou<;Y4welO3G3T~df-82JT$VF_hi>ztE&#jc-T{Qz*C0xC(=zh=T*u> z5-ZWC9j)Z0L9}N8(^1rdoPC?DlH_S+WJ^+4Kik{~RJxTrTpYi1EkDAF?i=5GQ&(D- zzan+jE9T_Xef);;LBoc(?WaEtz$%g?Fg(#aWJ&irPG()_BuZKS7aZE54Ln}zLbK-o zEy1c*7_AIlC>#EUX9m?|?fm;EX&vXeHzTAdQ1x9@dgVW)S1?t$%zanTRX_>uP060A z>#*|F7ZL0VwVnF}sNm;9aA!qAwRSa(BnajBFxM-;U9OB+bkbie zCx9DT%rp8Ze#TtXE`mhbk#_Y~1ZQfhAumrO;kvCEizXp=9S-Ef-jCTB4<}M((#VM$ zu*C1h*zDDa^5c3YoEg8O-8&wGflP?FS3Zi&2!1_~p8r!_Bq__S^03e8_rPX`11p20 zUa$!J1+#cj{ZP`t|gloS69^fI(YYOPDR4qHs zvSWtfpbO|RDwXhY&`PE(XrWBJcLB9yPAKuX%Q{$4}VVDECt0)EFkWT{(1 z8plIF%#f+oKS^hKr&yWX{F~??Vh1rux_>Nq=*L&}&(-gedH$S3x`d~_H?(G{jpJ}9 zDnToK9aF&66hoV3yt|zp%zzq?NYKLxruKAft99x0ie=-#(@E62GWe`)q7CS-GJHIg!r;o_^!sVAY|Ba%tIUbDGJ4`!(X zUTIafNRAfiQb35nD;uz54mrg*B*+q2KN#`OD?NX)vPNY8Kla`$tf{Wu_XhD%QLuoD zbdjzINUuRbL8Ynm4pKsIp#=yi0v4J`Z$U%>r4xFKAkqSffDoxcNp*7*s;P2TJC z*>x9S(HFcH!=AP{8hF7rr0P(#8tVgTO{Cl6K#}7%is2<-X73#UU1^qo zBC__-FgrfxkBrw&|2r~uHhUn83Ne~CTjFUFA3v@aw`_w9%yZt~SVce=kmNnsYe=2y zZKo^`+;63XfH+U$1Qt*#2w~12BM;_0aecfu^ulHC; z>D2X^hFl`Gxqe`0^rl5XV7ke*v`G9w*6?c{q{l$=AZcZlOO8M=S)Lu%E;8;fti)Cv z!K@aSC1gyVtb0VSrMTH~`gi$_*vi4wbBQ*%JXytluwl+){=yZ;u`IxPf#bZ@tnX*7 zw`&mq4NKs%j(I?u_FFkI7j>Y;t1TsGy@k3u{=0&Jm3Qu~Sc3BjWppWm%ndf%Ug z)gojjr+-h`9l((_EhF z2%(-iG`+)O8Q?pt1JqRPmL0P*Ko#oC6}y4v{5@F#>FcEjBQm|}w)|N6CfjdbX~l@% zIwO8mKJ`;UzYVyhh}98so{zGz1HF)m$-rX3gFEZTN^jH$Iy%4d*cFTfUq&{~GvWb# z>$UGU0A1N!8)O8~;7=XbD2GwOW!X7ZQ!IljQZ{3OkBxUs=E{O*-*XReDW>Rue+Hqo zn}~5Yt+}5Pfnk&Zc0~2FxSGcKbVsdqh~da1z-uzK8?h2Pv$EQ#WbA7?ua^GAv1GX0 zF&n4s9xVOP*9hUDh82PZ2dw-6-g*xxWQW;(RUg#NA2~CmU*z!Z>#n@3%DwGNA0<;J zu=3Eh_|EnDW|z^*$qPUk?BIP+Ozneh&PIG@?%p5omfb*GbeJg6WJaL2nW$=xX>G9k zH2#fEYXvcwp8^tk}pF8Xy%A_keoT>H-g)OX zB9(RL-EFV|ZBjD^Q9ULZXkQpF9l=UHW1ZvZs$xGd?APkDKNavUbEi#FQU~Xt_Wc@A zwOz6?GVt$JhCE*aY93<5(gnzfEc6QAC`Yul%ml8cNC1l1c1`Q`laFr?K15C^=0n>& zF+Zc-MdY$zHfp*7R6TIYI` z6iDH78J9f(^_RJu3F*u)v%-cb{XF-dxpS|XFb`vZUJe!_k zSOW)7Wk%nw)3wrOzgd)ghb->gRE)~P9}O@00zz%lapMG#$!ToReiQu#zg%9pOB;@d zmppaXK&3TtdTi)WD#nAywCs919~N5kF>AA}$T2PiJo!M>)VBW2D1ljTxzmCfLMK0F zgar?jLM3@V3I4r?+TFYItmvK^_Vlc(2}>40GKWC(H7NLvU~} zi+OYSo}u^=v{IO4Q}#5uGU+_+-}=tA-iw7!MXVMsVJ3ubtE+W{{5a2~Y(W)>(KsQ& z%lq+2l^Fy*t>7=~Q43Lr#j_0V2~q8gp0#^ns32}e4wIGCzdJCAcsb9Vr%U|xvEZGw>Omq8WoG+IqC&#l@{`m=7HIx*lkLbwIN`H^T9Uwtt^!tG zwY|0^eB%fy7L08!}7O-6T>GhVr-BKIag zCCV<>R+Ug@z(e7c=>`7de>V2~k@EL-x=PfEP;Sl_?}>JkXeh<|cPsyT;VX^r=72A8 zN+zIbT>#}-sYzLNPUmi%pgypbRos{77Km-F=C#Bh$ULvB0O|B8suOeAn)R7x11hNx z1?{ z;giWvan8!GB^##qlzrZW6+Jj5X2lu$xaiJGOJQ(@aL$Sl$|;`L{Xlwb#WZ-zujjMO z@605D!CI#aYMXaUz4m(rlTs&0M;vNQYo5W3_R?Ch>{0JWhs=JM@mGeemNz7N+ZLXb z;Ouy4Gj2G1ak#i>%9m?ugdGI&SxnX-B-<`i_CVYV2a*p4{QKM0@yav*88Sf)1B)M6 zgVYkP5rVxJnge(V4|r}|bno}N;861Ju}$%)`Gd|M8`(17SG9{{#^dXnP0)-@I{Yor zT{1}JtfW;B`wM44t#R$wlSTH|5(xcZSeo&=V?|?p7njk)9RFN--4EpF%J_sPcD+P| z3Z<-AjT*j;y-!EQzpvAjga24*$u%ZFfj1u%y4XZVU#j_ z)i>8cc3i64dio~T%MrK7UePce3#&zZZhnX6V^9T34lJ%E$r6sa{O=c&yT4aQdub)E zSedyAU2|Oi6R^qYvDxeCU%_i7i2KAPNp1FC_K>Tag@T$Qu6c-Wm9xkjZa%>}Yqeo6 zni!=gY*r=m=wQ9NS}DB^4U(hfB+i~@B8EDCaQ2N!3Bw=21F*N(nqqOH-7xLBnYeUK zD^m%dLw5dfL|GPVD@n3T_gwjq&x6ol&!l2~#gg zd|=iMXHTP`wa=By#tI{QAUWf#bvNdxW8!z^{Ob~V@`*s>f8Fwe%z~dwA39CPS1`N3wgdow z62DVC>T~DQA0hPWZk>^E$MrQS;D(&J9Y94-k>q|tB#t`M;GY-aF$3ATBjz|=f&Evy zWc~ug9kc!2TD|E}C2tom&`HJeg)^aMKyh!7wd@yks|NY`j#z?s>F~u5+HoiG{T_&v zwOh(#5@ChEW%$@VY>_Na*_2RLh-4Tqw@l8*U{1Z$f9v-01$3%+O(?E_`%-+{Xn%@F zgL>vbR&z!T6DZu;FFz%-raE#jWIb#bV2BJtrSk~@B*%O|)LXkh(F;BgEw?PjNq`3d zH8H_G_)V1$BqOxJ7^hf|%6oSeEF6 zW|~#3JHK*0AE4hU;B_I{3~nK^WEC_#lHS`bgts}SIqrN?jgh~i%~hv^Dt?8!p>kUf zli#{@{st5mu3;h?T3s~agRVoVJQTnUuBlp}v-hl_<=KSz*0JV6&hyg80)?pUOZ8%i zwr2N12drF~#N!b$^A_VpwQO$lg1@AGnm^EKr>Ff;!f5lu^&70`R3v^q7-_me9hN!y zYdm9Q$-L!hWqLNyu6h1^!?RnnwtI=M;<%DWqu+3Ay_=X6yf^ox5KiX(2Ai>T%32>> z$W#evOk0iOQ6;x?CmGf4Wl)Jo`=qIs7M!#e81`aJHJ1nP#j zXU=!%mHuf`YpRh){rC;lUrv#abYkXvk_@@72AF>=<-z8>ce>Q`BU%{1EauC}DSUCr zut;DK#myJAx72BuHARGNy(w$QFaaJCXt=zc9Twf775ldC)vpH`<1>2ohMnaCiKXNG zWLv9$IO?#$D&i~_aM-lmp4fPWvd-?8<*rN^xOD!}`n+C+-Rt_%y~?lAqkC=UBVW;h z)V1O9o7BY{#FlL8jzrHz!QT+rkZ?HK50v+XF>@NoX2$?+w#WR)FQ*FgdJ2|>X}`2C z=to6a>?W=0HjUfXzn9M!R{Q|{Jg@*DQ~JLe759%Lz`9f?2^N zH5s?Nt1Vmd#EkA}5T4;x_x6@FH6U>dkk?iOu}a@gm|h;Jen$;F@uz~7pk;eO-Z`kn zvj?P!HW@SS?1j#DoaWE9R{VVccTxw_GruIOVoi=^AYT{17Q=69^$}WtlCbV=ly!Z* zas@s!+hfquc@V+_=t(?KEdX(lS9MJeD=A-TR)bNM+%5+Ejj*iM!Ktv(n|?C^``L?d zAxxjxqNQ*RwXx`r0SFhAU%hOcN7M!pZnWondM!~a9^fiP!_hliWnL1=uyvsFgbzHG z`Qu+8sJ*y+A>Z(|VY$b0iWIkxhE-MZkT>4N6g5iLsr-6Yb^VeLJpjK%!Q%9ZA6xEt zRnOfV=x$bTM9PtnU;}B|jc=Fts@r@!3&a2n=_S)yc6O1j4MDn22gqdU%&b`jwNr$U%bF3_@7t*53|hh z|M=1XoZ)}1lK;D4ZAr1UrDNVNm`}sVAWzNWSVIX9CH3{;7+HLgs-_d%UxbXkl}>Hg17F)^U~*Ag4VOufQ(wR|Lp8b ze}EIp0Xz>K8oh*75B)kY~t zE-_DIdKg$LF_(S;Ah`IETee&8{MQ4q>5+$qw5{QETsuD71E9pK?a#itxx4Ke{PzJZ zpT3~JXh-W!O4XnuG}u*`uH<=a5eY8)%BzkoSVsG-!BB-v8rc;5vI3l#m+od-hrWw; zVn7M=?rChY^NVS0Ux;v(@dCJFRd7kM*4fCTVtTFGexZhC`~FXJZr>~6f z4JI)-Yl`}BS3P9J`)aZsi{GlbSd%aAWV0&gy#d>Xv?7xg0TC{ zQ7ox0%v+43ZEesw7)qg#v9gPXaA@se2bk_idA@9$u2z_ zko1~!yKs7oVmeMG%!e}9gh`bI)@oDVnZ?vTgQhh}I251tEseo$>z!FD7D?MVejrks zkccwW%~i?5HZs|ewqU6J^wQSxGj)uw%|G~EERuKj>TO;w+r4IN8YW^Fv1mx&Hay1= zxS(>Kx2JujwEbH+B_ooufRyc(As`IH=h$B@*h)oGP$(>H8mmt`q$26m6pweH1$A5M z1U4N<$;0_cT0D;;kogY2YvtiP7?-@qvJ`Z))bD#!!x^r+VRJRW(CNHRpz&t6HQxA? z`32_nh-HpQH#P;4Lra|&bla!!#Taa=nQaxNgjgA}cx7=89QiT#=rGI6jzGrH9zlx^ z$LcYUUil}G{vZ_eMAgDaa%PMr8)u_PJ&}h!iwzMT7aPD<2^(o4cxZuC~0K>AQ zv=|(@7mWH<)80^ zD)m9=suj+XMzW)!Qtr+Hp49KF=bk)D+%W?HAPZ{Q=XI9vr_CxF`7NkX0N{|px5904 z0s*sHQrs9$~Zy~%n z;HX;p=ct)J0sr;5(Vz z%M7MZ*ik)F7?cv)bN<0Fe_D z{`nHUx`*$UmafwK7mYw76}PRAlMCL=eX{q8|8UmncR)t+2)Q?SxdlmW5zRYIn~bFT zNF5$Y(dMKKG?Pyb0b~mAVF&TNH2>Cw)I6FYeOW^vy{vp%kuXW5z=>G__YYq3@4tNX zx+uUiyQdvS?FSG&iboCk2Ve6;haw4wqtTrJPO~Iv!0>f#czeL}{x>VBm%z&9u+3b5 z4F)T2cfC>5f-O_b^a?R(eKVLrBCh?hM^861mkTQ*ZQ|6&BH5%$?Ht|y2gNTH1YZP` zmJK6Ai-zRw)b;`>osj&g?Zcy~CW6kjNLrJ|qYrKCtKol}ni*}PMv?m*^ykU|+uzA} z4S*IswtKcA`x2}<(~7m4A*DZZ^mFP8>|E5K6X@XpK10Wr)WRvB^RyYc7lz#H#L2(h zav_C6ljPnherYs%F1H@xwrTMCWqe}4j8G$5kaf$<7P=^uIS3(9p?TO=yu6g$2hkGr z!|BuxwCkEDRW4NH7)Ty}nLYt5<~~C28HC(B!X9ojR#9(8_HPgzIbA|(1#1%4UNN5> zeh=S6f!$^hL-F>BJ^Yd3HHl;#^r$s>%#4=12}0(4R78<=BDZx?*p{J#5?KDj4t_oD z12C`9$KEC4z(09IPEg`WE-0|i4C2Ba#u1WiZ;qMMDeLdCkL>d?8Eh360Eu8w0o}g4 zj-#!oI2(vY$4BexM73(eCs|JP*SH)lwgG>oM`%MFas5j}Cod3Xo=c(LV^a18OLoc% zo#9$MAM1IHDgoppM}^HZ164vR&ufUMA)zpU_GptwS!xj%u?vn2s<@Y_97Hg0%ZeTt z@efBU7iIZ>G2P64CkEIq+GHO^jL^WV%2*=}>G+Z%tl=GkCO+D1_i2}p7<4ZR?HxRgX& z5(-$?JuxuwGxO3MvoyP$BI~T1n4#PHz))s4NjqxgWC62+6o4)1Drx7-%OZJKD8X3O8={I`1+AjwmmtI7)}tnm>{8RD@#xRrCiv-7Da1` z+#`w*b2N&d(${?=sh>Sv+0*eyvX-h4QPKSYq;s1K{oxBLFK&xB<*pJ&KQqUFVMH)e zu^)n@5BLKjLxgEeFIaS^Yu&KlfE&RAw0(wfjurVoOCGHABo$8 z*->JB_G9}F(a`C`jlD?vo?+*7+1|;EgP{YV)EztePM^x7_k7Dv$$PHaMc^=}BjFI& zc2SF-@z*l_lEA7=N#0KON)OCVMl-|77SBlX1u&z77K@@(yg?NYh3eT5p6;>@)t&$b z%}KV=Z`$@ml+6$D=CRc?8#*uq_w3*KxyT|#B zlQpoUtL`WIqkEW**~hdye_jZmWlDK3Cm6#$ev0|)h$~!L&cSKK96n@|)gqJR#(Z72 z$GNjFKK$s{YmhMw6-kjw@ygy*bpS^w{`H{UUVKP~bMB-)sT<$mR^?qdLZF|is0gbA zJ$)cbmU6{NWB#lHYOEJ0dRKq{@EmgUT#ECfsvK#>eDEz!&h%tg3sL5d$a%#GN46Va zZjoy^B{mIImc8<-5N0rJQFcMLsLY*RL{YFs(Op|b(YXcp*>Cts8ynlB}Y&QV4pyx4}p zEnfuhX>KI&vdDz0{C(WH9lqPEg6UmZJI%0qqvwa)pzkgz&mxQjMHtrD3=I;IZ3B6hg8xwg8x=!x%V*0rtOC2i+mgq!$!Yl)*(Oql?#;E zl9iK2d_n68KH>91`vXC`Re4pilj4)If)%owiXGl3{+_HCpUjP<=K+o`hqjM%z*en< zk+#nlMhzm}QDfIJ1&a!!Pa~--B84U4WIiRH*_lje4UQU(uH)>;OK#73Wd1(V z@D&Uc2G4Lt5uMeAcnm4aZj>@;Wptgz7;rx>(UL(>tIg@RF1(`qn6OsrG!ee0$e9Iy zx=EQn#@n(z7acIrirl5gKl9eyk}#YRMZtF_LNK_q$-8A<`1SL`6!d1oIT;!mfu)utk3}p*}4Wr2G{eky-V8?R2ShH_9Z+5U&o$EpfE=&t}5NR4It&8=IwcChl2yGZ3UC! zO%q*y2f$Ny-fPo6Gl;YeB0PFfU-X59RuoQwSC*uVfU~<3$O_1uU+R-8`Kn|OLSQl0 zul~WLLshrA5tpGwO&sy{g z;%UBr1&UyBB{5gj-@ru~NHx}vnvp|ts-1IUhP^c18B9AQ1U~{te~<^ZrW6Zg8Bh{} z?(Cb+moeLKKA!X^54=`FsZVCCAH}z^v7+%yZM3Zk+w7^a`Wn*YU5 z+DBSg!V7z6dCWju;RyUli&M?M$AW#GJB6mPX}>}SPwq@CRZl9Z}1~@H{sB; z-ydwzoXCSB=q`_}ftme^?W7{}pJAClliLv(DOyI1K>axJ}|F zCD$;ZY)sAzB&GcU2%?=L>I6p)GkkCSa-tWAZ)KJD!bZ8u z(OMWS8>5M4+G5w(VwXB-ARf&SZy(3Ex)GuTAgyDdm$+9aq~>$;UDYvaagxhDkzlbd zCo9H)@+|$>P$}~VfTHucU#|Vd`NA16)A8O0FS0IW0a4Q9OAXaw*qFt@%EO8pLMOm2 zZz9wyYqjG$Q7F-TxOzyU1O&gLe>Xdp07Qv&7-b9i{2wvcSoI4N)Qg1A%zP^g)a)vo zk52G`ty+mPI^wU+h!qZK>{ch~pTNW)!hpzG5oUWh0}R<|!3;zUjvxfLUz~MmV*69{ zQpNcbyOYT5AjWeN@T`0?B|Pv&Q(_qC;Z~2RbCnUE+S0z-B9d@8I5omqkmEmVGv;<; zr`6VpB1;Sc1q&wZN3QxDmG=P$4Y)*aeG>YPdDt92BjMN?t=P7#pAv|8DtlIW6;!w- z!zQ`vT^Nq{Y-wm+yq%J~&N&DtTH@2uds5D|BNY44%gPKG-JaZm#oP}Q2?5y$S^1Q# zN5ElE9n5juoVO2eAxXC&`3?SP_nX$A9e>yIAaWAzM*P)3;7YHk5vE|ra0j#o|G}@< zA|r2q-{dv00Xn$6Sntd=;dubACqfdU<^yh#eQZ~-s|HZv?5_wJ>zQXg&2($EaVo@b z*i=f8AO7&~e@fdnqz4qo;`4-r1{^K9+8WNn*%`ojF0`2eR*EiiTQ_CXuP{1;8D0rs z=N=UX+WM%Z=B1xnrytnSS3lRfYC9esA?bUf4$hiehv?TDhkyHWyOU%0PX6Kid05}j z<~1C0Bt>6DPStJ)fOIr*sTs860Fwj*yxSCMc~;!N=fdGy;=2cXXHqB7w6u$=FDU_i z%i;L&qG)oKuB>1?hp>R(m`xNubqcLw`1-}6%@{;*^7g9Y%ZFor^;;O)8pc4o$|vXk8P7*EyTAbU!?URL*5es;<@j-i-!;ZQPig_lNWrW5I`>jnGAnca<^jpRt%wN zei#66+9`3M1&L`rF2fyOrDzBF#oXzDAQa^eA=}!hD*Qj|yNkSyvCwoA%w;qMWCJQb zhfULO2oEl*Fjbvp(-f)FyRO80vVQ9)1e0p0PF`IkVo8H*(z=40v6lP;8~VJq zi|Qvs#zA{PPCB24z=@Ij!M)afu!k>NO`6ay(IJ|>@my$fw!LD)U%=haP;e76v>zYH z%lm$3F^7zRdUN$^91JBHaE-FV4UrM#=7f_S6l!!IbDhzgGV0$p7$B8o7a?#Rh+L0D z_Uyyp6PTia;2DTxZ`P#-;DotfLKh7_=KWGe<$OF8jUaJmQ^NSl%Xykfx~pewDH z5Qm43pk~71YND&_s_pZtBB)DQ5Yq=x@J|gp6{P)hZCbMMy9G4W3Cr!RmZHT-7unWTf( z)o0!?PV6=21|SJWMjb*#d1L2y%aFDAMBT6!v{%p$LVLzPaUU3^||iys~y-k?SF_veRAgOa;_yTQv0piNpxG=_EnR` zD7rFeAuffkZUzFn#l(^#Npu*EK=h(e2bb20F8g!1HKK!Z;6N|8kgxaS7Y47ZY=o8c z1tZ4xR4~eiH5qN5&qUM({0Db_c{Uv87T2nOS3y;=-RtgEQH!f`+gd{PFE zwveRPNmv*1G}&E_2yRSw`VqE<^O0EwIYI-cB0Jg4Z@YS{Tb-@o35J zbm)Lc$ug;WO`G|2a-^gds&!04186U(kIkHij^QRZkc{TqlY^5}&IW``P~3n_4`h4} z2?mDDusv^0c}`j2Fi5uxArVjyq^L!t{tTEiWetI}gDdY@ElySBy+X%#4VDx}zvT3i z!<@mLL_?h<{}#!K0tdtaDuk+XPpk$?2{Mm&xfZ+Zo%yX?e=#KXEmE~cBE9~JmshEv{ZN*} zwb=i@iU`kHfp3aXRS1Z-@7)_k@z4`@E~OYlUeLK zo_!zSUXI>f^US-*FUt-Kvy0A+5;Skx5_ZC`J%Gqk-`rvOv3(LP^t)bp;Ah{`n~RgY zi^+op^_;N|nTQ84nEHPY+iN}V+&K*44BXasbBA0gdg76&!EAu9e~@-ah?4d6)R!}+ zCKhj_4#OAl_!r6=)zvlHKEWD|<0=nzef1rgWJ(`DHMe5cE*S5G;+e8y|6%RfX2$%` zd4rKF|5kL(`O5e&T!g-t_}O=c-?6v2Ubb&FJ|8PKZ`irL2HIv)e8ciXn!tef7tc9Y zH~o}4Mpxi)rv}u+ihOmCCn)#!x6;xM;KlLf2_{;bhk$e%4<=Ucz`FGu$~?M%B3x=c zY`D3(S-3$b%xodNbL?#Pw`n3=TwK04h5tE6r=9aKE5C1YB`$%${;EyO*N|BKCV1~P zqP$I7&#K^CHJ|vEfA()ePn$00-Zi@L?S=YUp0xONZQ6|O`*&q4GUu?h#$3|3W%olK zJm2_@{X4f77u#*Qrh0fQXpPP#?40#$4}42Zw2K8axf&#}uTAm6b=e)!pVZ%sgor zrjy$e5c9OdxClLF`228j>57^)dK|VH=84<8GC=L9qZt@XzS)_?B}YQTv>mo*Rgc$8 zu2p8`asmdi4Y2RJ+cD9J?k3|4nByV;*EIrh_}lb)eq-Zh=8PX{ubXvsYbPUL@Rlr7 zQ&W?9bBI91A^b3gs4k#tz;lWQysGab$dPpjT5$d`j+^cl%C{t@9dKM&}-Ck%FE6xGE`! zMgdR#GDt4JJ6H!cVHGP|aLdxYq=Al3vt-hO?>#JqLZ$Jmq$U&9CTzg%R1ycif5 zxW7Gr;ZDSyleH4$>WLFfPv2*}ZVL;Vr}`l8S-3Il{heQpi<4^O`Jo;EqB39OTUW#f z1D+nPYTS;8=?@;J)2vsiISCO=rydfwKg>N}n`vT-qtVWZi}x)(d>*}|7kpm}!fr}{ z--Q_!2Jyu>*yV-s81ClXpq~#4!dhUb(U%%};-llrnXWqXY1-=lv$3MC9a~-DRn{|9 zqb6=U(ja~!Z_3Z2^1guk>rPz9KVNp_m2BZj`9^zl58WgOE-kMJj`6-w3XVLf(kxJ1 z#3PD2w;47O(Zo7^1V}J?9eh2RMK_2`-|~WO7M|#xTPZ{w77X(Y7~*{1V<&!&@yWiL zzk}A``YUNGBLsc?K*01Zq(N@A#Jv5h^CQQ5MlUyiJte7D&R!#(GyL9KnNdKuOlbt2 zj<)Ar!g5F&v;&q}^+WARV43ReeP5A7-Y&54q11N<1&i2JAKR1vxq#&nL*O&;HYk0M z6$RP8X=;u#xfcPdXm*14?G%10+^VFv-?+cbkhd(Tosgb?XI^v`htbe|_XQo!mdGEr zVxiYOd!l@E9ls$NGfrb-bMPTvzyH@a1WNo#L>_*=0_TnSsOCVr++^V3@bc+jXlK_W zU{~lCz%iZbL=+aX+lDThusq}`k8=K4b^F9hK-C^`|m#|I~szRE?`W3j4hL*SMSVsJ5JUv?_(ht*CeCC zG^}-;6|qqloLyR4dKoWu@%esEW!rF(?=+wF+S+2UjU&^$m2WI~j^D;}EBd&{9ST-b z7i3}xaL!x?{?p()xT`5l&lejsH89r)F5Xy=yik6*bKBvSR}v}Vd*o?!bVeH@$nwp; zP{_&t^$!g@;73*o>C|TeN*dD{8^vRHSqsqcYb(4Wc;PwR>Gb)^_*WB9c#uJ(m>i>b zeeB=Po`VNmdV(*Z5eJMVgDW7-YmpwC)-0Q6$1D{3N4bqoINo{sW=M+1Joa0x$~CeS zB#87fp-y`r-9LH3CZ+A`8a(#H{l^C`gIsfe#^(VK0@x#lp8Fx*B69{MMmVdMfZhLp z4Aqa?f6iglb8Bjz3Cv#Y?CCjeB$fN}c8=onJ#?O{ySqEYhRuLZ?q3~F$wL#B%T6y=$V;1S((1MIw@1k8UpPiNB(`AtZhs``g$NRiv-vcX*BM^m)y> zSpnYw-@7_mnp^A`wbCnjDTX2r;~##Ol$Kxlv=svEtvm$<1tA9%4nHDqLzdcU!I-7o z?9j8T*ow57;dv3g`$mVwexnpw?e$GHNtSsg63nCN|KR1tH+g<0UDxm6c!Rs*HBAG>uY&o8#yQ@$Vs>*xB2!*(53dzI zEEm%(%i%9Ny%UQlXMzJKaW9()|FKCG$hcKe+Fc(dSH8LCOpKn{h#>9tz0(x0DpfZA zz*J|E7rke8+D7OBVWm5?sk{#QsOqJ>%ei}DA2UI>#m?`{fkK1mY)po3O@>Kht;;4R z52P=r-6p@fbsH6Z!=mxbot)z>puM)Z$j7JM(eYD#4X@D&#b0-3`v3I+|Bp4m!zSC{ zIq_l~g6|j_x+K-QU9)||wkcdWkq0EErIN#DFKU=4`2akZWEa^Drc=#ZBx1%R$ZZ!c z@vudm0}pl+@((YJj*d|-JG+4J|p zHSH+WrDVYnQu6Cshq??&+vs9=*u8hXLwBmLsX2)SZT#^LP!&!2u-PeV*ta>=_3lgD z))bQds<*_ot9$3(eW%YChmt%p_?7)@FXz4ed5+$VwF|G9_NltqjEkUag@lGWEG*sG z-z}ATB7s(R@bXGf=CC_^TA(xK{n6Bj;q3lUq5n*cu&$Hqw&;T_H(LBSM_|^br?^vi zgex}xk44EAAN|(RN0#cNkWMFoT^0KvU%OU_XIl^@PV=Bs=M8#PpEYE@*HTD6($VKdai(EZy-0LmDU|x5iqXH1bl^VKzHY{27DKYl4`!=8-+m^@RH5IBitZM-uLrNUJ-A-J}n5c&G6pR?85BluokTjRZnYLq5dNkH@qUA}j84rqmd zmwsMb=1v@n_&dy`^0oE5J@;;qWHv-N@ypjHzI3SCDu#(GXT|vmqkm^ZLog%o`9gN9 zx(b_Q|Cx1>9no71*f3Cr10MSS82L{~TWZfPh+-uli-SP1d3r5JyMBtB1<`^78T|V&neFlu3(br)1Lr5gA$8 zYVScV%H+LV4GuHKyv4%j&leP#iIKFe7IXwcMn;<6U^jGqm$)z&-@9~eT}{fz=VWcP zG_Ka6%{0LD{Yav#TBNvMNU)=wUlDM>haYW3PR{?nnNY>IGR(y`G1kuoQ&Ly*LB#GJ zBrnT!iRyV5l(nBCkL-Fp0Dm%lL$DL^I3?LQsr(4zVPmIo>lzM8Q**@O+w%X7f8xII z4HjAcQyLU5G2TuiqNA*Y|F=oMR&@K%JVou}=g-&Z5r37leuUu5;x0;_bS8b;A(1*4 z&1@4Mr4-Hn*u(wo-dPP8BX5mHZGX8nbt~)C2619ksuW zxSpn38?5uL1>&Ff`ZXB}6cNr8*yIbxU42e(Z*#rc348qbU64wQM)6CAlZz8$Qk4>r za&0lQlRFz-@HxF#ZkJEBR28xPMcc~s)I{agv8t`f{T;o0pt_%&Cmu|OAZZzti9d!5f@~nH_ppUBNEUc;Nx6f87 zMs!4Y$xYr!@^y4TiRVHe>4tbYu3j1e4|Fa0&9kI$Z4I3{7#o{5%q{csl+GOcGbQxH zBjushlM$8K@0Njv+dF5vz=9QW<{AEK9_gb~TJEk#_c8X?S3uY9p}l>p#>$&NO@}-5 zX8j{q=Pj=FqLAB`UrvWFhl|^Uv)p;}jBZ7;a-=-4s)|H^Wx@N?g@b1K{A%zI`!7+=1;r`=F| zrhH{{c$$$U;_a>=mvnQ{MD1P@(XVlgvJl)0gIn(NqF?-7lTkWE4HwCz5j%N@ggU9zHC4LkGX0VRZvhk zb>3SK`@NG4WqJEE|A^?w!U@uho!OWcomuj?$jS;i%%@AYlz*DL5gNnN^a(T-vMBK}jQX?8xL? zOfkapbVT5$C(9FbyFRK&%}=H}+cSLjN4>p!>gP*rVg;ly}&Vn1+L(9M7U^ze31g??^{ny^d| z^Yrkz)%76kH+D7smcf~WAHacXJ@tOmD!J}`9QuE|uSiWyWKUGw@J_hf1ISl~X7OD+1M%f%6YLiD3*ymT`+8WJl!MhctLWMxnM zZkT$Ks1PK^zQ>i;1T!zF{Zv;r1Ai*L?dm=GBkRmAvGT~q!sN{H@}>R)TvLcDvgNEo z`SEl9KbMySYf;ZLsV*7C;NWfk_iy?*^d6X3`o3}&>q0a%Bpuq6ie}>RuF+4-s`Z?V zQ#+cg+rs82xV=;PeSCb@x8ITcQ`6k;H@`+4HaeV>{RTS4)Nb?c2?|sNm>i(!uGIv;7_wX^RPlOL2)e)a6YgMw-sE zo|DZqB+w3Wyf0DP&(E}%H@#Ut9IK5!K)WyZjqk=W&{l+|}y)-f@2RYE7mw)QqY3|wwc^C8I+~u1POu5#x>$A_R z29%IuQ*7!d$ejnP3%)^h9#?wECeXqwxnAp+mX=%^jb1^1xyv+EySJ>MDkRfz?Vrjz z&>NwXwVEH5G>m7s3u6TaewI4J515Rxsh_@Sr{Gk3k^G*XYm;JyemBArl5wmFbzv)`$9puJ>Aw{Fnw+d zLZ@9|JJ@|yoRM*O|AEeYOonZ`Lp^tlbfeo3mAs?1nL4A;<>uz*IdmA2qcc!y*-Njf zpf7GOSrp!#&@dJ2QHgwd#=Trqpgbi#^f9gIXet70v$?xTzf!pZ79aWMH)v0O+Z~Tp*ZP6b!RzEdm1}{7NHv#!a z9#>_Bs7@F^DC7yvfJg4(*%3G#PU0D9mIY%v+Ae^^P^$jFT~nwHb%Eap`sfdU1niUz z)14bzSG(@($u%9e&*_!F2s2uc);k*?(~>8s)&;H#7UO%1Ez`B_S3NiK>yn&;qJx+1 zhgQWKHsQyK!p&MpRC%LWUtwcX7=taB64QmQgdeR>1b$gInCiP-`8k0zd%*I+`Ac}8 z5MRpm!?_pd{`we)j0u-Ek2*qK9=2YNW8$5zS(o{XpwB&(Cd9s=>X_r5D!j zH?94|F(y`oxV;FSPT2w@$iz0Xf>554KxCy=8`p?r?%NqZ*u~42qZMah{K7wf zy1Kf)NUE$H3)}A+a{N;djY9|3`%FjKs0Q0FRsFrDhTTx(-Nk5o*yJ}|EOK2jABJ>OKP1``|}2}daM5)9F_3@arKr#aYkFP zXcB@3mmoocySpd2Yp`I!g1dWw!QI{6-QC^Y-5K2Vew=e&y}GxG8h#ALe6wZky?XWP z7NB^0@ITwRD16vFE|1`_LgwM&vAQa)*Ey;=WZJ1q_x#}E>p%SSGX@5RYKxWE;0rfL zL-%CaY;g+6NYvFadYBys<-Qv&`CO{K(5l+DvXY$(FP?p7hjpZLFcvnZzH zF`>?b3))G(LgUC9ICBJo0C-%K1tU{;i?xA41Gy$*txYq=<6Y#ZeD>5zng~Fapm3ir zWx-fMUb-)eO2P_Gr~4=Ya)z?leamA@B9`GzfA3R{Y)Dkli6meKs=d(|h&iB`OnOj6(nXP1rYyry|BPp~VCOba1k} zOX~Z_(9rO(S1OBaSA4C?nt09gj@I1BoOMT7YOVQWXD0xB|HvSdVuPK_&CPvB2HhSn z{1sG{6t%SI?xgX@cI>6_$4E$`4_fpuh$x4mFj)diidD)Y1R4ay#ThTZT%w@jz#+;1 zr7F+Qk6$4-w@p-iyOQM-sf{#s*qIVxtl}H1D94#osW0L4 zk0YZ~LkZfSpa6hTa?R8vC^$IM=JIovuHG(Vls^X^yE|Z83R}5~wC4P++3}P?RRw@S zpinZiHxBUuLp=a6FLmX|SQlpK1)#-5_Qn25$h6zBDZTmrPBj^7%YxqLYl!zG6q`sr zv>3UT9vll}sLp*tBN0y^S!iz3k+wwx;&km$KM8J$A=YR`Ap*iIKK*!qzW{Q+JA3iS z@-IJPgGLz4VJMD9;)y{7>(f^S_&n1W^Gmu1>E*%V!j7{;2^o`BFTlD$khD>kQ?}tt z=W1u4%;|jIZZ#!8B($V$?J*my*TWxiMBLs=g#~L_LYC-wJ5VrtN>3AHEyn%D41SBJ zTQ*0XNUM9Dhl(<0z|$H^=1-r^gN?BBh{%CKev)!o+v-EPJ&UrB30$YxJt8t*wXp~a zQ|x-+I`+w#nGe7%Vee!TBeRy9X$BCIAJ~&y23DPvD59uK=+bQ?j{qxbuPNeILr805>EvjAA}~UF!73Y2NKzL? zZc~l2PA2+I{rYNVXMe1SDmrZn?8{U1Wd(Yw#%!g6)-bI#O!Kv;|M^QT{D%k#C(7Ko|~(RJ`^S{R~U@v576_JRmVkV zllvjHz(Q=%c?DOKkvpZS?)A4@#&Bl8C);EFF?Usk&i|QlECJ){fv*==^!&sO6v&3j z^4TJp+251BIJx2ed$F{2AQTl*?7AZGd?vJK%Cr5m`GAX(=8C$5^1QTsR!7OhJd!wx zV)L&_hlz||HLN(8fGp&hd@GyY3^o;^Wc3lM?sO8*UN&uVe&hjXj>*o6nd$0wd)(md zhqEvpa9v8UO|KI&Q_Q+OtTVwQ4XYj)1J+>;=GXs$E(z5D)@q3Kp1w*U{`a|eI3~Swh89;L)5?xjI?D*1JqORWa;1mO{-!v9% zm(8VdezrXSSHxY#d;grn%$k1o;T9vaM*r$Y_!JzQFNk`bMg5ycJHbs*-8{RAjZf#h z^qAQtMDdV@z!O_|SGocwlhyxsqXMtyon6e+yDY4%o86AbXd z$-*=_&h0-#Yiq#_2&QVdUG$#c-ObBT0|l-i4C)G#St`mO_5NC|E`zc^W4t;QDvhP;Y&Zbvi6T7mQ z-#1VV5>O}xF7jDdeWBkj9`@5s_d^Nz@c|P{h`*yr2H$y}9v(XT`$b>N%F0AsT$^hkOG-+1ZfBM$DJXsz z8yBK?!9J#@rkY#P9KB4niJj!xOx;dRP1Ov`CkhA%>{Ox|7#P^B|99<-JV1OI2e=4w zV>8*9ka7aV}OOv z^3EO55)2RIn$Oz=ZxK%}Z!dR|k&#}Fw);ci60KGoe0+Q?Cj9^nK4xY#zT|_NdK(Py=25^78VqaZS0waGdyN>VId5lmE{qP`>Fa z@l4ER`sm65tjTNirAsG^a#gbt)5dI`B-&N>_laT9{NhYRz1Bu@l9!jK3s{a#K_q_O zHD9hfq~ZV5@j(M{9XB#F>lsVsHbC6B-tHU3odn9z_s8Y!5m8az6BBZjpP~&f0f|WY zU%yCrgX_%}y#ZrpNy}~Ua(y-c9U4CETu2eH>h*<08e}qTkjO>XUjib<{+L=$KV1YB zwT__ioqo8ONAI)JViFM0w-!>`)qisSEt|*$2}t?G_BUFrawYmF4GHRU`aZGkiI2WN zGw@}2{AWb)T*_@3QP5@ zm;)zbn$=*tTa6}(8gTHw%$Fi!^4%f3NXnxgc0lhB!;8*h{+TxZ7}3vKX|pQ< zW*LHz)*3b0Oynt}oM(=;229QZ0s}keO4WC30I6q5ddvUDp1tRPzQ98@VHCnUy zps|mJ?|v+v^k$LVh;u+H~1`cNxX@$l6w8Z{zc!=c8LgM)yiBpk3CTsrXKIH=CCZj+j@ zuzNf1(rZhPYjckeS(G(*hUxBPzJ_qE(*68^A^YKKYGfo~x8MH`P+o%f+0z-r`kD#+ zYGO8r9qx;(7Q*@~AOD}7XnTD)EgDo28XBr#M)ori^p~`R4R$E#ASFE=iJzbU5L=3{ z0(PjJ$9#!}@+ghRS)m!x-H1CTzOkS{teHPa#@p)0kAK3PY0KU%u|OEs(Qw-IRp7{D zSSBPS#Nx6m7_+ep0XCOca&q#uTiz~kjP2UNQOcxE{C_d-<9m#=qfl0!yKHW3gv}Q< zgob3rIIk(SzxGs5OzZ~&0CxO=_Ovm-Bm6X5l?P_}UY;$zXnNsixH!K#zErto^WEUn zBIE^JljKAAv6lA!6na(l<)Eh=d2$jvBD~9T`5m9n ztwH1Oc3s(ar--a|$0#;huD3M++VvH#cNUaz zigZRvqK)zUBZ)p06%3TP>9B)?gEmjU{GbWkkPilx=*zQP9RG=E@YB^gK=4aI>|7gz)cGlhjKTL&tlPPUJ zzETfVWk9<)dBmBoTKWeRLcyq67X>1k%#d3LIqeziHtum+Pcm z;DK`&TQN^662F^-EPCS^5I``!;yYV!CpexjkJl+dLq!ErUUFZ<%M{=;QG4xu3lxAr zuxLBCgUd}B89(9#Gn<-le0_Z{)e)o>1$Dak-=1wLNuouW1BZ4RrJugj8~FlJs^#T& zxd9OALBYTvSqZq}Y2!|{ZId(w-|#5eAkc22c8f9eH7xjyxSe^5S#Bh|H4(96og8tRyyYJ< zA=K1Mi$0in!EpzPLCO#XlNA9|)>GXjZ5IQ#^QhGFJFjUzL)zT7M#s+@S;kYot>v$U zvAqC-A*3=9*I!-fj3+L8=Tui$C6ZIj&I3+)Pb^lFZ0sOU9l`>vuQ2xOutg=W{eBd;{iJPx5Ka2l^Web8t=wr2Q`}!#f;WAj}&vF~R^~nz0 z%q(Cr5RT*ajV$b*97mX2(C3)#2 z8@^Jk(t$C@!UEAs?-%@AnT!u9N(eU`N@}3X$KMQilD`%>MiL)!aPd}l*D+$9DJYp! zyF*VW2EH5KH!OD#u0hS(hfFcDS85F=gAl( zq!VkTvfKzLnG?(G)|@5U)>QkY=eI8S;mx?utZe;8kDJZp-rPU@z>g%|(EZp)W?eE{ zU|F%!VQ6kn8a_KbD-+;U3azfS`tQ0$nLZ(DNr4jQ-lg|@2mMD|dM5GZlan@W@-dani*YSECO*ps>@@R5AcPN-_e;c<2s0DS~z>BtQfef z5gzq@BJ`MMp+cKY2NUKuY1B-buLqms1qYY%KI3X4XE^* zI31I5rJ_PG1s@{+q{F>)|5n$ z0#k*x8%~HLjZlH*=zo*>%zt`2C@U)`4^O(5pEg?_w_OXWe{)@oFz z1=@b;ASb4aZzouLVXs3^VQMU?7p2!=eDbt%xcn)tiS2Ou_SF^f1tdYdsqzBx>3r^q z0M2UxaozKZ)#Luw6it1W^?@7_7lf(xSpK~F9W;WO<^kvGa5gnYz^y}s?{Q*XN@0Cx zUjLo;CMFVG8*4nxQWNf#g{z;CYZH$i-(g24r>UW#$>?;BOxb`2>;44LSPDg9$MrYT zFi^v}bwxV012F4ooe92ydHPHJGKOO_hV)?<;@&iRua-V-8QLS2U|sVRc5U#&9UgpDqycYzmOp2 zD<`ay^J+Ve9r+fML3WQ0LOHP6g{q&u9BVK7xDT#&H|%Wc2779t`Udwybv5ONnBHP; zbRr?D)wH#iveMxZfR4%hzYp~PgabOvwhQUQbvEZT?4WT$93Hzpf1J%%KtE*k(SL1o zS@Q-B(YUTb^}1{v7VClJ&OVE}nkG_f=)C6P^1O{Q0s$a#`TXWgg^19Bj4agc*UZaW z0^chqq0Rip!C>wIJQ-x)#-a!2K}>MQW3EU*u;|d`d0%9$STPM-Gu}6O`q1mpf7zjV z$J~71B|OxVwij{Z`W7-Q>0QZNnCy{xKr@4z&JRveN(>M5Y8MJ16B0fdsE5wD*fFyYJ{?e#QYw+ap*41civ2 zb!B^g5!Bb9gEUY9Hmz$jcF>d{wxP16hPrJ;&-Pz|RUuT>W&+bb*PJ`#7=S-?Go;FD zYNo;;OE>1EJ8i*&?Jm2tnjK2vv;UX%Fqi;Yj|&ODLm1Wp9=xG?D70!!ayWeFK$q=u z#6VUGJ5x!L-cUk*&cVupsy}P8cC>TqHyml#`lV%VF^HVd(Avb(qon@9=tOv%DxNLZ zg8&q+uB)CvG=qCKNK;c&wB>4&={#%My#~IE1ltQzo9jD(a0$AV19K(#TybffQ~5oFS@uFGw!*gm>CM3Mc*VBP6I@gKE*HdsCpaQsTrv*9M8 zvY;0e%rcBv*~@D|=WON8s^m;sz5pBPkuR%}FVEEti=6Zh_922hm%5zm~Fdeuu*R+_#m{U>RpX zfaZ=p?7RP%M}|u^DEud*`F=GZS50&>bwN8NbX8a_VS|9w7qBz@a6)Mk8uZgA@b8z+ z*81dhv;H`Jyq~dw2Onh+@v+!8peVVfnP2aQ`mLwBTE?#E8h_mmx3s#eIXYwvN?xZ7 z8{4fwLmOs0z555&+7tOfhExP+?dXn_=xAcWd}=u?a83@%|L%|>?>QSUDxBWo{sazN zlv@Lot3Od`5tdXx@;B#?SuUaR?Ssd==YhU|g$;)pEw>0*U1-`KpP6UoXFG?7zqM|o z{aL)F!3bWubTmyr5c1x@%xa-lp~LiJQb))53bU;~4vQd02rduAB@#BoS-5D=DP4$g zL`CSL;Mc%vena7xL40gzzB4+Z82KTC@C{}h)YeKb@UOg&*?QmW%$mvEXL0u|39k$z z71MmU`|WFPR!P-QKP8Vp79@QL=OVuzNL9bbH>W$ z=Ws_Z+T*YHW#rr37JT4gp#PNFCS$Yoy2Et1E3K2W+vO808x1e;M zr}~!~8ZArwX5!Kuo0K1@TUf1`2XN?potW@lZrW*V32%gKe z1^F3=l%KpUqY_C zDUId>6sH_JFE$qUifHJvFf1C+=nkUFdsbXLJcEH#FCQp9peF%~!72ke zy;UE^;xN!?hB&8{Gj&!qaWQR|WoDk3^N_@aD02)yz-n%X^yOE;7=O;mR9YrKGh)Z= z7-D#jY?R39tCrWm;NQ&$yGjfqIkOpb!kned7AENBTMr!v=OK9>gNVK>_Vye^Sr2P; z`H4PE3;y1Izgk|D}e;A|J8h8|K>-pI>`-K;$jqt2w;Yuf`E6m}Jhx5?{|fP_0Y^|yK|-dncGz{58HJn3C8#4UgGz;CVr{(e zp{MB~D?T_s?A&all*R&ahUY6&jcR#i%X`{QEX?3YA=pyP4=)v5$<0mkUN zaxSisJa0vX2oLvjVWyzoSrng&YzAqUK?m}KCI{Botu;xiaZ$%zCujV*J<`pt3_h%V zOiJMcd*`IK0b#<6b6cy(PdEAE%W`JA9ezOV*+o<)?xl6BiUpVJl|3PhoQ39>2LZnW z`aAK9^88v~fw`WT*7ln&asGE6Cyo`3PeSc|Rp?*2Z#_a6&c)BIzM$Ogq2qFJwL`4` zOpwXl4{0{|FaCs;hwz^xcxP2AMV%l0#GL!C zB9?)#Uq~vd{VG@{BctF-&}>RaaMUlAQ1-+<44eq5uc}Lc8qiT<%RtV^gEf zc|;}_yADxSmR`=k)Ohlc`({Von<6C_&dlD%!_{vp8mmdB(Q|}iDGhg>{&MQsrW;Fj z_RPw3>Ul3fTh9mf6+33!)D-xz?T)tAspQ@WW!RpzPW%g4cShYABf=`AC_<{>;9#qR zjh|*~6(3!N8bgJ-+yT0d0f!Boa9UcNUt_#RkjKl@@F+gF%V(fC-&04MEU!3i4aJ3; z1`F5P#7Dolp_OY4^w`9R9RCnyPj%k;DcQI%Xd7aas&K#DxWy@T4if?OA}C;_7UQhS z1HmZ*9WqhPJV5;!^Ye{}c4b(8D_T&`OLIO4TCuH+SY%&JXmDIEa`v?EPrklU=(Vl0 z>mvnR%F*cYkGs(3a@Zb&&6jxvI!rOtC{s2oEFHUf1({6xg-I`@YFmx`1$7qpllf~5x`0%-wf;T%Pbo9_7$<3R zVZpsLN2xYcLF3KAV9!`oUha~NJ?KVue@S5hEGYgZw;#vX3jhYNIbA1|B8=+3Z&#qF zflJLdP0vc0(}~h~*#7_?n(RBd8}l=*WV}fPU~X8Qu`~{iq~KW2erv-Kik_y&A+GPm zc~Ucs;`d55548deY-GBMuPXrmQMW)g!R<6ym_Wx-K2IYbutHawzJa&D=)llzf8q7s z*xsP&*%8^9i5cdymfu71;c1Wif!_-)#LLscEQTAL3_mRG-R@mm(Ci<)jk}HM1#~$% zEpZ0%$+98_v<*PX*W)4U))ngInX)X=;}W}d8@O&!)oHHD`7352uF>2!OQbwO@uG~W zY51sT`FAgO_Wp4d--W#2oUzD$QaI9r9DM}W4 zcpc%OcrxG1V6#ZzkVS*YLZLk+MVgEsE-#G%_flE&rcp`T46-?}_+)ijypy78q z2=+B58Mz(=o&J=W<^XyL|p4hy}7Y1+zvk6*Pfu&)+6R~I@64a zt-CGFA5RF(?Do&D$oN1VPu~v$uIt(ZJY=zKwpHR?mvz*@} zUPM?8icstu+&In^|8Azs!DK(9*$zdjTY|^y>%nq4!JeiAq}E&eo9_0b{gVBsPd*Gf zQ~KQk0XM)16!7&53wKpCXgt+7H$(S@q<>IRQSmX*)LaF6Gsr{qND&gQ=-SZPVIb1E z99gjyv-NZtZEuAW-k!?uud~D9=h7&Kr1mK@E%`Y(xsOjgXA&wetIyBcFJ6}|?Nl2q z^S_3-`0a_zu;9SqEY9vW7#xo?t+c*oAfbxK?2n0JO^Z9pt@pox2CR)$`CB~n@jSS4 zssB=rkBw3>s$QKqWwfiF6`lWddOC2){`A=w&s`$`e%fbCzY)DlqlICK{gVoae8}EY zcDX!NbbRP!;%I49mg4XC`rND>$h)&z?$F0fL zFF8L9;Nir@3A{tfM$LsRt?a8}@moGS*WeIS7Tae821g@EP_Zmag*b>xSrr#->*o*N zogSL_OZG!zn;G_&xy2~eYEK+d40N=KVsm!W$Y)#HYh3Aq;3wA6*I!VqS0>st|= zL!L5Qe$O{Qsfs`%=EWqh{{5*FHL_|<3u2@nKc~Y;gPo6C>A8NMKiDm>udVKPYNyCP zj-8*E*j)T2vk%bzuhGo8W+^d!Nd_!^e-O4Iel@q_pN!*c_M|)lH5A_(<-J19GVT}@ zA#WUzEgy3@@=vx`{51UG9-IFpgW~?lGWC!oK|!tWNp!Q&Jy?ELZoLdVbrD-LBS~`3 zy|`rJYiOck8Hf|+>KY#PsU}H2OQxMrm*Umc2;=o@SBXclAcV^r4wFinp*vL26+e9q zf$~nzR%L6jT@Qz=yuUWqiYV~bfZlS?BGWgzpb?Gxx0u zWRFqUaTd9w$ooJh%-Tnu-aw=qG|LcNzj&nbzOE2KuKmH~PFUNXmwl7t@25W<&EJ&0 zmYUTFFPsiH;5aLOr0Wy@eM@K(y=E32<~!mbY(u(2^a*ydDC)hs9IL!xGHa&P(0ta> zD>c@mJv@v2m&joh(P^hmh$}mDtTM^^vNbJh58A&6IW=ks3qy*8;)iZT$bnlv1_oX- z8yx-OxjpB%pChIq8XGQe^V8Zy;hKJei;R7AwWV+SEX#kS)SMAOtf1$I08PBEEn8-`X(_5W1=xyt^V~3s$B;)R zWx>m*$2_LAy4-kU>|TCdZoPYj-ucr{Y!2Fy9$cVlH)bdXDg{e|5|3X=dPbtoh{A3y zHdML(TTKLBR{{DN&+EBjp9!L_}Uhf&#_LXnH)*2-(m;gpoE%QRMKx{U_8R z5hN+m@)v~iYpud+T+a4`_YXM?Qq);j5`-+%7hJGJ3~ECY~z49PARr zr+>=coi2t3`!doBV14X|)nO-Ml5jc0=d$`C!@dy3(5LCzEsaGdWcVn(M)1_bR#a4k zjQW)<)OJiDgH-47Jky7QiYDr5e0VfgixqCOivk-Rm!?%85r2UmAzhEoXJ}|Z*k-8>@S3Gu8l)0fU`>@vk^Sb~58#e`|5#6X^W>m&{u3CSx)Qvz z<{$qdg*q*U+`y*`Q-_g5n44wKtq8GQgFi4BD}2uk{s)hNvvCj>?0OSFKE~TBDv2WS zw%Ew!#_%^_KlqfXcRHlyYql>3Gb@8K&+yokSUV#-c|=Pm;63iTx+`9Ce8DJ7Ko0qq?}sDh=vdi{rqYWg z_2w>!m?p!R`V?DGM2WKBE&~@uH^z4$AvV%V>H>OBRn!a{G0}`{sjHL^urA%rry$IJ z?#d0wpHQaTH=6W|{}LJ7GZGV|3ko)Ls&djAlyqn^+8+Ft(4sketVz}*ENqvDJmDEw zm->i+9;^Rbu0#d~9M&azEss8#$kSPR^$qG#6flnbe6u~`(;!;v z{Q%9rLb-%Rstb(}#D#Ehs4mEn(pA6cXftZ2-E^|x5vf(+N>)=`7m?! zx`B0f--r~B?ff`&(h#9Y%$A)9Jj>f$_me6w57CR0biK@l6zzhMQaN^Akl`lh%J{jdvbG z{Wx{>I|eW3+p<_v$IVXu-a0p^m|8wO@w6(svoCXpv?g zeGY!Th)?(Qqq5erXazfPG&hJ@H_>i3mZY?FunM~Ktawl2Q>+GfGuLv*hpUCA#NFqY7baMAewz7)gV z!6xb^PD1q>bUj+t`&I+B+74oTd}5p*bdP4g5G7|bzLOTIGVOvEN0MdYVb4+aXVF)MW+&CPs4dZ}hF_Ew`3TTkhxWvdidcrKP0|=6y73_)K{o*RQUsH9w+d zBjG~@{lk&{dJGK~^T$(2yQLM3#M}?uT5cYT7uxKLS!@&r1mQfzGf|9}V~CrJ0VNv3 z@Fv4s+PR<^bS{?aA}Ortexij%O`HXc&BU^O-%jf#!~HdIJF$A~oxQBM-*uK^S}JiC zet{*UjADT5@AxuOX-}hhZLZB-%9Dd(2*V*mwn=K$Z$oLH{V|bh{1nL zHcH2Yy7-&Dkn5wG=JJaTpSnctS|!)Qa!03(;gk2 zo7#olt5(3y8QyXMI9QIwpB-vEuAi5^hTs+Xrnr);4~vCkk53+nT9?%MX0G5-j^#r@ z0m@6jljB(b+SbTd%0USi6#f*3j}}?uR!ZewPIdZ)V|A3DS$5>imOk2b#R~s%h*PTm`!}uhW)58S~Y8$ ztMYuB%6(D3pDygGT4{#8<_5+9udB0Jc6q*@DSh?_{TW$cOn6%^9~hp#?x#R!N2tn% zOYT{Jdp*|9^31sya=ah?c*lF5al$^?1c3^zdmJ|^a_9VfZ_V?xgH}*F3s3e1UEqAU zywz)>f&m_%N$56nri&T2e2$H6>pFmM8TxD(c^(eEbB_Rtp9-{Z1(aU8J3D_SALUdP zp1vEHxwZC3fos^Fyur3#zOT8#aEDLPbAKoh}DjJZa zA0?TLptxUIO|qW>9maJ=CPnd2xqPXusmx1)*>1|Ltf8q#si6N6kO77`{yV9F!>=BT zNjyhEKrl*W8~IEQ+k0tsY_R0~S?|cA^gs$74(0AFL{I@a>pYC_wl9=eebi%+cXTP10p*K$~<@yN>p@s0F@93{;s=Ee29Drhl z(OG7lD5P`8xR}6(xlek#R0@ByJr6uPcqisuAWmZ`>2#_gCHX-*RCn8}`sX3TFoXFg!BAjBCk`7;i1JaMlElKKk<*#hYZDU?tR?tw! zE$uS7Ie&I9l{2eg{P7JCZA{|`OI@xvMF_lpS*GWQ)!P}J z>cISl>3`bCN2p9v%#&TX!=HN^=?(4Mt-Rh(!l9@or|Uds4e?R8`_D`x#v=! zg5z7Gd$Z(RVJ@tDh*g9-=a%3Coz9JRGU51fRo<#0&u z`UkysMAfMKROPR3sAGsp6a8#kD?Dy$G1s>;qs5)k>3EZa?o#2uetTeyDYdD`2Ig}A z&i=LHqJu?;gYg}5&okgy!nu8RCwAs{#cbI(J1f}|ogxUF@8{ixyj3r= z>n29$OX-LHc5#^>srr36IDTDI1Kgb2E2Fa=cZqR^N}i_%Hj_^o7dXI}+b~d1qHzU@ zu@iv#_&76kFjLAx9vmHkuA!@ae|J%hX1|fIi-G-76h=`%ZFMF zE+Xz)@|kiX3IPxi7xiw2mn+b08AI4-jGV$JF>qJq_Zu5lV019(6Awj?(eJ#r#;3iw z`p>4b&P!SenHZ_CL)6ll6_(-Hgo>@#>^5oW1^kJnL4O1r%i|63(6U~?FaCw(c1_T5 zY-_MUXX2~swRKNyV3*FdXAn_AqRldN4n-E4jcAaFv=rmHy}pg~c|_lA)Ig+jlZ(6h zWm5$#RTEQFVQp*bJgHPDZdX^(&5?nElU9q77x0#ijZKB+89pUXb3>B^qgrUIPu`pO zO~h|8G72eHgikqMJ^)j7sbaQ=+p;aQy3{buQ~s3rP#<;81+3&_L+L{XD@#b%+-!Q3 zN*auL4B8+=+Jh7TEO}kSRy+jSJpi8UkfXG2ThrP~lXEps{>P7AOlIu7+mAOzHYok zesJ9yVc7Efs%mMSH9JAdXK40X`mE?d(I9pADJoWcRT7WFdD3nc*dI2UgglUSSmm=6 zSrzfvvj0M;x^dId;iBOi^)(!(smqBLA{lvy2b>2=nCL|8p$9tZe`67qH{Eg>4-}Ub zb?t?Io2XB}ND0=rt2Spmk#8_@pEmaJzy|~^a?ejrPDpI$SciCe4f~n4_D;zVl0Wa3 zlIa!VTsl$GPHI?QhE>)wYWV^*a7p6)v8Gv88`quQEwaz2r+r>gxDeeAu??bwiosB> z_uMruE%I2-K^i|M+|5paO&N5KI{vSeDxHj1@rWm-1}`yxsmOl0R{CZtp!_78_}uiO zhqyAiu2}mo+|4S<*oVNAHghL%Dhe%mqJY`*g6cO-P>YuA?k{Y0>7WYHsW;dBZ^77Qm8H%rgb z{KYzFOstf0+z`Mf!YPY>x_s|U)%BzNPxihz;i{Ntc$uT7Ed*{ab!ybv3RaCLJ2yFa zJ#uT2@MlY5qpL`91_kS*P6H(>e69c?F6duLK-=dV=sWN%=#s2*253IHcKjV4|Hv2g zuZSMMm@y755$Y4w@@%+9wB1(2bKdLrwk$8L(3-YyMsi5VwcP{Ii+DXLI!$gatmX$L zoQD3wZ`;t+XgqBpM`z$ZG&Cef_1Q>UTf2cPxh-8RClC4HQI5_8H4S_Mwri=8wmF63 z(P_eIQvsTH`YGw@*-cC<(R1lHfo9fa)pySQ;o$oLM{XWB(!@vUs}*H2Ikna=y}6IW?JJ6-ZiUG6O}r5e*8Cn#Trwktk15igkuhb=jw z46E44!UrYW!u68Rfz?64Y;0_(XZX!SKA`55f{IE2kY_6?HJ2*OPT>kQtT+uMA^xkG ziu$_z2e#!`O`}BygH2e8|%fuHD0(*lfy8pGuO=mm3?FgD+R)DHg*0HUHXSAIIq( zm2fjO7kqttp@j9(_p3GK9)fyo5)c`ofk(AuEaHVA|a}HqP;HxC?r~OE`ww#Tz-3 zTKFyW$Q88&^DkcK(8=~vC)7UGT#;YFnoxsD@AmS7vw{(a4_k^rmSUSZg!AQHy61PG8wk(0)?`98G_qo4=FL*B zrMR?I+M<8vdn(epE9ScUi@hX4BO?5?PDMY^bhXcb-Uyn~nfSow>go!9a(B&OOIlLF zxwmgxeiv#;u!Ve2D0?&FtRm36E<5?Qt<}559@qn&gUDfa4PMBcp_|Ygx&rhK3|1g~ z;LE_U{tFl^#UV;SC&7WL6q5hE6A8O+cT+9b^eDCo?P}dAlSyI6)J?+JMhx=Lk;&U? zMdDU842u3MK-R9uXdQ;oXjyFA!CWs}S&H!Iaub^Nhr#2K#j&-64rD5N>2f0mivx3I zSnj&~$Z0u060O+4^f`U(olAp+>E6CRnVC+!RYWX*n{%qj9|x|o@=$3@^`Esv8Wcn* z6L7JzhZxN$?vK`Q;`kur>Tvh+*y}4b40R9r1_hteo4*e5%p~2gKpb%mUvZS@eYyiD zgga-t8=M;BpbHs`9c-T+1Vy%OHt?8zI9=u>Ft}m;BNJ}KPLODsoNnvWGEK9!jfs!lR87omZu9){Va@r?{r>U6G{4aIc#P>JO77)s zKfN16McZdkk?vjH0KMT*P=LjEJdMKuZq4lmBN1m$<2yICqz6~}oDPFD7%_jn$>NF= zKj^K+yE$#2q)*_KdE^1+hFXk_IhR{p&4}Bi z*NiVNF`;^Oygh54Tfbj1tnoF;kdHI_Hon@gATaHi8Cn%p!LVDrqU7ciX8oE)H}!08 zgsL-C!W*~5n@qGc--EZdIY;lR{(CN}={}DXB|%9a^AJRd)DrGfotJ8)3>DRJz%KP{ z4kzhHlxWd7#s_vD89Z*R$~kviz@NFr%#z6ZQ1o z-ad@rt}mP9Lpxw_s4LKpwijf}i4nSp9#-P#VSyd#9(- z0PR&Mh&zg*jx=6ZyF3Ieh94sGVkX4!o}vOM#Jak=8=ISi!(#YJzdZ5y+*HZ6-9-hS zvah0mjD@obOxm>U~REAlMJ3;I`^h7%)k&BwY-_ z*x8Bx%O-OKkVY1>=`RFgP@`&{7fb{@K)Pc_E5_P{2j^RyzP~U!_VcN1<&Um@Yv}@= zbHst`u2UV1Dj<ONqm-m$W=>R^lSV4$3^=(sw8H5xqtZ&rHTrBLxWM7th?rm+FcSLzc|15kX=QI zzh;7q$1)$%Md6S)Ulg5<99?1tT2Rx!?JdZw-1R`cYxjvvnbx68yElCvol*}H0xaax z9wd34*Z&VqXBig7`@d}kq>)s*yHjc@X`~yZyQFhTr8}g%ySqWUyIZpZ_SXwy6LFy3Uprxo$!P(-KUdXO04It(6nz_mYLbn(3_aL71F zu4Tu>TPJY7`Lvb7HT=K=yj_u0j9*$kO=NSMe7+yym~HEBw)=g#CqBebpK}`5C-4Aa zYc%=`1fdC7T8>O9SEECf=}1S;n?lCR&+lRF6CyPL*@#gXU}TB_C|YBU0b zgSRu5udKH4ys>yQs|pnLRg5ABA^cOyX9oMmRb}Z#Nc<|+wjM!pUsC_6@pbVRbsF|& z?Ha6n|C}$tt9*p7)#F;)!(FNfSvfA0o-9<1OYF9qG5fkl`jp}QE;FKuU_A#_j3=j9 z*M?idQDEj?Z9KMEAfYl>e74;3K*LW!?5>G~MeQXc(?uv_gE_X*$i^J%Ni6d|uqfLB zErB-5!Mz~fTg7}*h$6q@tE=%vG${nc&nO%E=iyE;pzq{ICE2o>`}dM3v<>eYN?orj zYh+0o|H2?@vfLc|oeR=5+WIf$Jiuw(x7uezApM>Kr@6)QtT6E548K5tLO<)))dKv; zR~GMFyrHYP<_z`85w_}}OvKojqM{A*%`ffhnh1xOI4S@Md)V`|7ibyfp{>MsU+pI9 zMSk^z9fHiw&kt+YQG^2I-7TQnDk>qelF0{Vd$>L%kMg=XnmeGAbb7PczI8VLyS32= z{?+m&#=wZxVuxIq;9A7}R*pgY9_I)@9De{94b?-PO;~uC=n8!y9VY^kQj{ni7P zaTk2+%!rR+&L||gy%3mybOu)R+mtpb!?ovVtr@zK=*cgGAkh~p)Z^|JHS`?Gr;5-0 zl6bX(gY=?IrQ-`fY^}qNa|1~RhX~)YA&0X>PB4XZ9J;X-zfms`r-y>1#G6Gcqd6ND z)%5~?*KoLj{iU~~YGYALN|07GMpUAejowR+ePFDo&@b-q)l$@D(o0BBOPg%ed;M(W zS-QzfLV~8Ni}$sqt*uOK@C#P`C)T9-1uirv3QEd82qq4eKM-H)Sy)i-_)Fj9(L~-+ zNtJ1DZy&?*ZZ?Pg03U?E9k_uCB2^)f`tCcYrHi@W-=q+unv0wF6$*o&+9JM>_lmar zUC8+LiSaSY0k;mFC}EZxGAhUAi8eM5OxL*0))H-RCBW9ExvKj<^d1|rzdI}tF?;nl z!9)b(WA1iCtx%C%>9pHbH1!v->E{FRK{zDrPuw3IFsiqcAyVjZ337v?QbGu1n82+m zfP~CAuL(O{!M4ALqc#gRzCOYZn6q3Pc>lBOqMeRhvk=k|*$?LJ z!LSt-9!0)yRhuQ;c=D!nr@LfjXSKYrhPVb4VJ4P=#kCueuT{!=Yv)0hB@H&RV|AnE zTutYyI06@@VMjQQlgiwS^vGRuM3D2R6vPNFsBlyZwuX-U$7(0<2=2(~7Cc=3Uu~|m zgaN$a3^$m3eYIAH4H2gUi>@~HR2T@mjpx+29$6Gxtwbm;xVzX)J~MxLoCSAfNKluR z6yc^WCw~g4la{E>Ha1Al`h+;##B?f`I`QLK2yI+vaW{{5Z4m$nl!at@6B%r4ScHkX zvh;Wqyvb_kxM>^i;47n0ucDxbSF33$;gb&Md}`BnQqSob7&-@-@K{({Ohr5(FgZ7i z;!A3*==9J=E&BN5ZgP|C8-Cx=H z61vvvY6bT-Rsv$(xE2UHYl0Shy6_t{+EDZl2*|E<8yFiL6!I^s1bX-RiCjHt#|j%p z*9TJ&qSw>L4dY1jw@*Be9?(ZWY*<`|S2UiqzPLJMe2olC3yoXHHaOqZi(rx$m&b@7 zENW>d8PoSxb56cCzP+&PH7A8A1nU@SGa=hi`%eP7JdqCas0)OFo0y&*J~n?-HGJ#| z^Npx}dC_(j_w+IbEYw7l0@$1W-h`@-V&UkKa+@!=^P#((JCxfH-4F+2E(GA!8O;@r zuJ8q-egz@Uw!s8+`~`c3=Mob3O$_RL(UkI2R%C&aim3t=!x5M!?PQ)=Vk(mI z)b25e2?)aRZJIwd2uo5aI`ll$mz*B`_NTN_}{EdS`LQK>6D zX@deS34SrB;MzReql<{PRQeqoaG}FAQtz=Z*LxEZ6jVq}1m2?cyxQI0>TAU~J0k+B z8u<<@z1h%k3Ytqi>v78ce55EIz0ofVWVFtVawa$vvXT=j-qs(U2(;}bM&aWSwjW|@ z_$*fCt`WO+s&jW8un-dqTw&_0F=%P(Uf@Z8Y|!1d(rj0`xs;e>EbwF_G_hJ15g4-x zKEIRvOcjd&mZFDd_VrhA2I$34aV^+=^{UfCnSarLN^DVUsK5>feAA7f;G1C=5!ZJn znw23X+9~bbO%Jeem_+1Xi3)b#(t}HoCJmeqbGYp1uQr<8U`Gqsx_{OCed!3m{eqPb zwW5>kaG{`D+GQig($V-SQeHn2`?BmUjkzx*C@dr=Kgy@Lx^;AYd|{Gw20*5O%yFu{pKP$R z^C|szwI(%+AFX!!GmF8FV7&!iQ6vxPS=j7og9xoe^Svd%NV+IK=ODXeLpIisKa8G< zP_l!ZOQBh(J2YrqKp}t&!a#?*?R=)d6qf=6w`Y0LY zo;Js(OsuHLHRA~MA-xMAr{a>O!gjSMaTA^st&uzus_aSqV$G39r%uf6G6mNYnlb1y zJTNW<8|7V7q2A#}-Qx!NU+ALP!kMk&f)IbnrATs&)I=VYNq9w;cEgdXX)7OT@i+P; z6EvwT%+drX4KEO$mRJNSiM8vL;w1^)XU2EIA_9c3mQhXZjbH8y@k#_Z_#Bcv1tE6W z%-RI=#6i-I&M=$Ll$y((7C#lkOEcw+Q3WNiPtS!EscyXS18975+7vtlY48$pjvRr(U)6?Qszi5z)}lejXg)$fP*DM?`|uUk!Sk z87nCT!P6fW7sI2VSR>f;Lu+wb$F2KP+(zOH5-n(Zcon+wMd5rw#H5x@82Gz)7I~`G zIM|UK(Ij8g$!Yx%;LvPInw7=}#vpu8cuYHG8y*_j--Lh}osbcDs?{KQ$wNnnxUk_F z#y6j`{Jl)8_469K>w?gwuIsNS9fh>;lU2XZYeg6Y3T4+QAZg$@Q~Kn z)YR~Jz8t9S({S3Xn%8(!uv!7^5H>8%uUj{fgrFT;_k9Xxi{;3zFXb${vq3yOJkuU6 zLy}lAx;g9LBqgIC)fx(gjy-Re%z(iYy8HQhy8|y+ytS!GKddOobRvWCSf}KX%XXb% z!zqA#nEE-grMNhDO^Y$TK#)GlRAB2Q}ULT+`~?V~%YM8|H&TY#p}rGVxm& zxV*G^F4-|{`oxekQ)r$u*6YX$cf>sK>@Lw}>m8lZzh$?Qk< zsL%hjw+~3lCpHEufJgEg<%?*nO$%v4xvn=?x*-gE8~RZu z>=D3beJwz%7V%efdX8PyYfsDIEoz0BV7xqN|ydfUp_SN3OB_X>pM8&}A=`=BON>d@}blySh z_^Djp-ug=ice4)O^kK3)t$pD29;H@$CCe~9QU6B%iTHQb0bIC4O#*6BLU)(5PdTUB zmnU(vb9Hui z>KW6V`9M=#G%$d)jCWw~?&f~&8)X((aJ^Nq==cxY3ATY#&FyK}T$^Q4-mE2uJ^Wxh zWYfOfPp5&1wtuWrOHEHRw7w~*TSUU*6+m5e8~aDH?>-EXHi6xfroitrZvX9cy)1Xm zT$Qq(hD4$g9~^B(A@%bic!11sp}a@VQusavp_GPo92o(z#oJLtPMs?i>siAktw!66HXWAdt|zq(HKHEj`r_ zs33>;A2Kg7?eozzXpayO3OEJ>U?j{^BX2q=Ht#D(Mc#Iqa&$a_dW``Eb(+{Mx8hOW`?0(1-EI=iz3~8*;sl^iuAY?}iX+x$Bzsr>uKrl1IUZr_x zP}c^>pG5sm%-Xtax9oEuO(GC-^@GjR;okgk3R=5u*ZWp!CJlcPF_1*+8ggYB#5*;x z(){YN^aAX<`HC821jpYAcu8WlKOB{sh%$)32Z^D5OQP^VU+e^63f* zUzUK{xAHEQO2k)RCb8A;o!;$J_Y?xLNwR+0kwpA-$C?<1v`*Z+IR!02-On?gh`2An z`Bds_Goz%aUY$95O-+r0hDI>ymW~E`#$oz%HxhH4aHT^V$E5junPv@g=!MK9A&)~I zR<0D9+B`XH3Tz0bQzYz1f?(#(C#4Q~e7^+JN?Qo8dUtATYwL*JYMkG9+<*K={m8Vz zGdyNEUgmc2{6PSvC@MVZZbn{^R8WxkE#~PcFm)NifLq{~r19k+FhneOo8Q%=1*FLA z`Eec`LAnRz7H@9`3D_syS}O1M5ROv>F0v`K z%>4Vr8H?fR0k}oxMe$J7gq4u$>8rFtqu2XcUC-1uX?LGkG%RKq^JT#h_8p!Vi)po| z-z^I#_WOIpT`%NU`M;7Kj&%jD$o*k{XIZYs(o+^9x^_CggOiURVOggTl7Qiso@!Qn z@}j9HXl$z{{$S!<<=@|bt0RKisL#!7-o}b39UGId#B)D$@O?SdU1aF4H1$qhQ~cRt z2cU|UerVtJu+Q8a=d$e{z79eC@;g*Iy+I%qr&>9o^RO||Js*R8t{6d z*=d!z4hGJ2jjQD=6SlLAeX$8NvH8znh#~|}8T1h7Rv^e-Ek&PF?8sD_DScCGv4-KU z=c;Qpk|W;Ezw2r=vX)&(cx2KL>V6pCQ)=R7^pJW)iC8UfeYBEOF=~BT_hq4f*t&E% zq2WkA6z1~sax5paM*3q*c1KtyT8q@ryq0jXX1;1y^xIF3%!!s-3SQuialsu{bp+Bm zS@`jnj}RDK<7~dQ@b~Y|kD+CK{<##jl&?rf_nalqc=WLkDfuc`Tldf-dGPYq zpVO%!E(P06*w4LU$r2YnL2AdyaWyc*XgMe1UTNy^1{q4Dlh0D8l`r>&CR|7{T8HfN zh`|X4e9+vUKaUqrYd7llWK>3r$@I}U_t>#rkI9fyQTkzvCEHmlsHo+;vF zEW3tkB-N=2)b^Sobe{VCl&1vO<{JUAJwR#g$^SfzU4~&YM%l0 zh3BgUkeLupH62ags|zeIlv*5K?lt(0tNhzC_02j-;Zl9<@NAuJewjiL^Mg zy$?3d;H7J*oC{!oArFwFQ{k&Ww> zh4bv`kGZ4{Tfe4eJ^y+DvIm$Ed`Li;ZoFubQ&y%DNIx6Id%ZI!94!&DXQIhfOTF8A zb%!d{GUc^D9brqPiKjnV(UX_ViKJLdRDA+$@c=5f=8R zp+wIw*ACJ|!tLGU#)~%YQgZV0Vg}y7ZYed0@$%&ov`c0X!)GmCUS6s&#LxNz-D`6v zXs6%6sE6^t<6RYkg$o(jW`7R|uHEfSiA4{nm!Nsm>Q%E&`Hwp&jMU8K$n-g%qVkJP zd<37xCZ>j^x38*;t0p(?(~r8}EY%}7kxZCD;Pdt$N5jd@c3WEDS5Wf2ohb@ee~Lwdj=4lKTY_2~@irp_TlSE5snZCVe;vt0QeI+=eHTvXQ1iYjRX!0P+! zYTINmcBmc^QyI&h4wxfL8Y@QQA1brtId0<1MFmR{m+phAEU!udA~lTTpoh}+cAjMR zksvS>k<8X8cpC-*LGi-3+d25DpuxprV~T_vo6r#kc>#`Tl)B8 zCnRq)S9|Qi869EJJLgrBOH9|MVyYz+CX$7=Mzm{bPV9{NP!t1jvWRuoRmmE$-`t%X zxQAHphq7rPf;aCU?nkOtoH868YGTrpX>YZR9Wqk{fWBtK3NlwI6$y)^w{nvchRK1u zJ2-ZshQ=|nVAMM&(}FQ0m-jMK%uDNod=!fe&dWPt=%7KC6;bzFrl*c;ZMa7E-0EVYl{>Eh=aqFdW=NC>kZ$quac+ZnX zR!yd5IE0DH_S+Qgb6}d)KO9e=pCqTdM!^}YFTd;lZ!@U=hNGTVWn;$spiNQ7Ysn;0 z>Q_39v0-m8`gH2O-s?jm15$kYxK>QbM~|y9F6RmaAlh&}Exp@d0R}{(1~tWc!V4KB zD~JKUh44^)jL*0&69*lhC)EQx&k~#4o%ehA>1hYE0y8A6NBFccif>ckalZ$Qf;4$^ zJ2Wwn0WaLg`Y|V~!7Mv66X(>Cm~8ISl8&APa*M? z9V?I^oT0MEVm3;ZC&>^#bv+e?+>s!(V0JpsrJ$P}gg{Q@UmgJs_546a_oGa4lV^eq zII)ebTF)0gJag=5qryK$_bT%l`_s_D36BIba z6Gd^EGo+i6%F@X%8j1OC=A*?q+Pnu9q$&lM-Q+o0?>PM>clK| z9<70+W88?Oix3DG?klj>BUSg_79rQ_@eH-ZC{jyfAX?o{>&8Dm#5UAW!ElosL99$| zehl3@mz7mZQw{xa^gcGWsHu}e%X?Pi`@kS?O^cT^1+JD<*%zwCZW*32gxUll-8QT- z(npSA>HS>(8>W!Tewf9X0KVG8na?R#q3pinm|{(XWi<@vyt_=c$1hx*8`DR{A(rg<)yj8rJc#o1ao0(vnlX~H**bJw)Q#rGmLvP7)JodK{7eVV2T(*GqHDXZIrI7`KZ|A5 z#RV;5U7vh_gOesr=r&aTXoTk};~a0OLWyb)aif|5VrNnp)aTle7LE_)@;A&OHG5g_ znN{|S;ToeQODkF}1W;1c+G1qC`eD%g;6!kDcvt_EK=>d%9-yHI|=B^gwN%}bNn%_5PpU$(-S0jZjCS;6~V z07aX4T#|idX+dOFu>aNXGm+=T*F#nL^%tj&=)x-$u2mAafJyy;3BlLZKV3iHQsU#- zZ{y~@@T?~v(5+WU-Dvp%HW%C_Yb^t0`3Jtv`{ig;%#DZR)JM}K$Jmr*haao=q`#FG z^o3UYBoFvoMKW3@=Q4E-v$SFG!Qu6q?#pbH5%o!_M8s zH9kmA8=in5pc;p}bk*(7;*?eGG1Md*o!P57pHxc|8CenhM<8(()8Fr2w(`OR-0z0| zx=bVo5NmecaN~vyqV55l^Q7cP)Gov?xU?3jeH#fVF4;7aaqIhb(_{pE4MO6bH5}9& zGZB9mm~!7>puEk2Qf;ab^i)G&Uv`>3aek%FA{I-BwwDvUK^HwK)*MOe!~s_Qtsx_< z(UPnp3%D(S4|&QSiLKmlxwfjw{W~t@=ti25E{>mp-5B&u&CNr$7_o=kE~m?s?M+fo z`Cxzm;sE-OMd~rb`nyU_cN&qxTn_+>E2S0g4$`{=EMdqKF6M%T9!GF01XRkO1hnMM z4V}&+k5QP&vL9t&rCIkm$n6Jc4jMyg}5+1XsGj=q%M>Tqh;vDBz+|&pW}^69Leol}e#r970RLaasI0 z8}%Gm`$h8VZD)U*&?yytTAZOFRcv*6i%lNzzQO}Xv1~cXree>w^wVT!<@x0gDf&4b z3ZBn@k|TX{@M%uRr*D}5EDuAjVMp(!3!3!SUmWrX+9q`Yf3{lSyp191z9YVkf4Fc? zJnOlZa&!`}^N|X}_d0lbwL0<0Y=yapGM(1Xz=Gr3+S+3AdT^puiv45t5hE5T%d|xd zS$!vle4|1&LbUZN@Wl(Dpo%gHr4l!2m{a(-NuBAbJ>>GPm4+Sp9!^{|(x%Wk4iY6VF>IFJ`Sm=JeZVAi7iGD!>yPBc z^$91~nzi?L9?1>au6{G0%xKD?dsy%ecycCZC<5uC|MI$B==+&SaZpy8L+GfoY)=+0uM!=;xuXe;Qtd2bhGzJ-eQ>y zP8?RT?KeHK5C*UgZ9DO2wBlQXb!!hsuL+KhN|r~Tmz1+EW=_%5KJgxf*iN{VE#G@} z=ogbzGW=&IN1lmSz_Edx<@42G8KyW0$HK9IUyekYgBoqt=tLx9gQYi1R($=J0n-FJ zK;~txXutj5i~?aQ(C!Dcxikz6z3O^i`JePAU@#mk9t*mCl-*87m^-yY_v!=@%f04Q z)rTgZfzgpevac@`?padXA1N9&B#4vEVCuu|if!VELWUVe81M|D!;ji+r)X2C(03q5?>(s|lA-*}$pz#tzumHoVR<$7vyV4aKLLkpD1+GN4Uy6(od0EV@+x)rQ3muhz)PR=Z8%!w4C01nnyec!i3Z zTAEq+`7}m?C8U}olP`-gyP@H8rq4_BXrWAYJ*~F0w|B?&$s9A%*O?(BO~!_)jzLh8 zsG)K+i%drL5y65bfHVmJaQ7AgW*9Mv0L;73{>EiUL~AJ%4T2X&g;3DTHDdWfy!6%=LpP{XlOC zr9IE?k|k~13qJj=rb{+sbmsy<`S7tWUM%+Q%EFu2z?UH}vG^Z~{R#yD`7eSNw*fS8 zLPqWXSBEI$1#}1y(qLUDCv8bOQH`EvI?w=b)P9DC9Af2Z0EC6U+t&4BE6-8fsf@AHrOIks<(ap?B#;$~D*-mGc+x`7?jr(1Omn(K zI1VYlue=1{JN(vYtFN8zXL`M(45Wz0d<5rI4?O{Ax6l0e}{ z|JM^hKek_7TpaY=q!3VU>7NM@-DgKx_;0Q4L;ZL8K$*l2TA}~!nn(N}ke;yme?WTs z<>AXRCd`$Yw_}P2RI7vDV$TE^nLtvd>%V=N6(C~IBEuzgs%{#ld%jUzeWtsbW@m=WZ>G#9z`+Zws#LJl68O_k z8~5M5%LXl9`tg`Pa{vEc4Dx?BGG+SXJL~HTE2o#_MsJV7wBA*l&n%cs&Ti1e`fn-D z{L$!HLbeh5?lF201RpEOQ2$^1V1 zmmdq?B^7WB2nXn8jtOv#^SZt}y*z?pNr8}<)TaP$-2}6Fw;9}w;ZyWlM)Z1Iluf4f zgLB+q0DwFN_w5Y_#)}V9JpXuw;MdsB{xN=!BtHk9pO6dNM~2{DzSm#=XRaUIw_$d- zCqg514oM~oeG*tI?O%Cy^%~8WuL?>D>wE5MRpM1XKGz{Bfr`+!17|&ghF2A@*)0WF z$VM&%EDN&0VnB<#`vkZanwpy4?vW2W03TIuNeLoQ`l_loLAd_$$1MFYW)VKuC9ae? z?ervKd_ymeays%vRa?`wyh`y#^Ef~xIMJ~ix^_kX%%Sq4qplt@ zJ8Eri&JmYxCL*e)Wtc0h@xwW$y+?uDYBUUOK$&HveIxQG{1tBhSvM{_QQEGhINqcImBJC$e*> z`f8+%Ib4EQeW;IKVu^1+3k;VJcF+A4^r(yAF7kI($$^o_T8M(6geY8nN0Ke*dw5C< zRoFsfb%U^I7N)NkLB4*mf{JbsH0_$S`Hfw5-yd@T&25>TJ|L~2YIN^R3Drh`hP#6d zw=(~O=F=R?Vxl(F(bfEw3m>={EuE@IclO!uQJ0dR*hkBg+0qgu0aJzXN~Y8P*R&Gf zGX8AScNuYKUPXfs;uGx(zmCU;ZQ~MIWKlLixZ>US^7}_@y_;D`=U2J23r7bL9V2MD zxZT`rO-JwCRZst53$WzUR*NM?Joc7Mwzr5cnl(xav%M}oo@EU6xINhG4(FRGGM?L= zQztFX9w8O#=BW|>g{s4TV>LGHT^G`G;ZTR3jq?Yl^$W@pJYKzv1{gCfkKUHYA+zl` zv|g!bt`GG~9gzUS!m<}|%H99K?OFQ*UrY52w@FG~cPi&_1UtK+?stfD&=x2m`e$K6 zzV0jM@*!nDC7{y9Nl9U_?PHjWM;Gf0jDGh@hXREHVBea~! z4>92rWP>LA-i!BKq?6R|uhgF~RpNB;7IBj=*VZ`AfF z7kjK~Z0s3p+z440uA@?8(D7~DaFYcIQgC3Q3f@uxhV9)AKqT4wXxnLFXjQm>DU<%B zb>4&|H!jERq%ZjLawXrsJ61_dh)FJH2IkuWadYFePS%nzcLTXOlI}UUvxbjKMOK#R zj349n{=R;!5O!BZaL15G%jK zH>-P#5bU;9TLFTzX7wr}CTih8>{`EGwHW5PyC?h{woSgxfBCmB2H2DitVKJT>%Lmw zQChti)^)-bzrO5sT(}WW(ks;m&)|DhKQ@^Nvmjif>R?btE%i;Q?Q1xGv$VUidW_bb z{GQ3I{mkLXm&@w1$R8Y*68h%2b$eL(XFbH9PA1g6ytIu=dUj)fHIppo*JO!@zxyt+ z4_D$sb@(Ic!(8&38W1kSqD7zvPLX=x?Vo5FAq@_Ejc{IF-#h!7xyu9rxn=m%^0(Ed zT?twe%tld^fw(^!8p8ln)Xi;SgIgKa9d3J#^a{B^S@T$IMR!dj2$+((y)FVkLMOp< zmzD&M1F2@$ZU4WPj1OY6V|&MSK*Vho=ZnnC3l*4JPPIY4Hx&Iey*z%8k`1sOdVj2t zv_2prE%Z7`znq$s-r>Jf?4THBEoN;J#{gl>LP#E^xJCrsQnQ|$58T&bPJXSmA=P4E^Q8zLCqljMIH3r!DPXY(UiOmF6R%9!+5koU!Mq zjML}w1{c`V;;?dPPl7b`qn%$MLy4`3E=S`7BgY@;!qzrnb}4|}gkLOq8QgE_EUksO z%@}les=)JQK)*8faX<~A)XYss$-+4o#zSy2j65_8V`;#Ol2G1+uFy~fYm;j<=-tnO zd=U#2_54U|sExF|n1I!{=3^l$!oaDC^_kQmkNgSUu#lz6-H@XUbUSC*V|vAQS+pAu z_Y@8X^YR>a;9^T+c#ylccd1!Tef9Jc z?|XgRRe$SKt@863ch=TVFl0Du;inx>3N=qdeoUExHG>B;XRvU+J%DM{vUX#3wOqmF zz4cH#cYL#|+%YDk=Rn=*tl^N7*5t`lLUlC%0m2-FX?zLt7fRVKWhwguvR-HGX%eJm=S>>g$yr zfZaN@GRimiTnT4kSc#8%!q|2m_({VB^Jw07tA5J(=N#Wb;rkSx5@%)aZ;uwoOS|eG zxVyWa$#o)#{UBY@S8q*zjND~v8kDH3IDDQtqqt*$H5)wDOZjR?HC)C<3dUa{q$*;u}2S7#@KUsvrN}q2=9*@ zIvIP5z5+z#uB0wkvcuW$DyrBnMdj-4-6XwnakD=S`^6R+K;%a{^qh%I7c@b>9@fXX1>MNZDf(B?EsI+M;R*?8&)Q9K#H_0 zbG22{>|Tj|GgdxGd@8cT-L0N)0!GZ9vI@4V|JoWM*slEn? zh572X>HpSLH!JS2%nY}NQS;4LrWSI@|Lydu$sh*DELh7)Lap<)=$Z+ja5qu9H$8dP z)SyY%M&YeRrk9iVqs#^S#l^a=H8cYFTz=uuJFEv($++CDkTHBN!?BWh8XB6(ab`wF zF_E4nTMu3+ys|3$g#n;d8nCIsU@fqg)-R3x{%DL@w<+`GyFN zc=y(S?nB@!N!r3&ms`VYNWCa%;<3_h}p*BDHDIHYHbB{!2Hyb@v(BYuqZ^Z`IsVCiPas&}bREb_DU5A!(P!E&;yiX`cEs?caz zQq=g3h6Wdgr+J@>lp0FPnsz1mwd&8{8{M?qGnYKYq}S|&mk;^~6-rQ474ezttK zy--1MgnP&(ajfOjw)dzWp>?%7k{jDgonq(nzvr1o$~a z@iJnbyZf<{Bd6ZkjE`Xu=_y>SkF7F9=RaxgT#zPWex-O`%5D)nQ;6)rs12IM~dd0`$Q(q#6W>B))VWC=~7?>Bm&JjyyD`ARXGAuB~gut zGnPp^OQL62|91rH4TcYv?rK9Gvx>9q*Q06(o9$h`RgKqWAcUB4odpo-1h9NRCu=4SkVuJ~T39%1V5nXk>kBD7|f3sJ^# zQro$tf&5kmhbzI8A-h>J`rgoiQnM|fik6QopZ_~ZyAxnIP&d*%CxKa+UCNz5)RWY^>i; zt~DM;lg_GIZT%SPVm6zbvxXodDMS`oSO(Q|VAs;jmgFLGqYlLSt9@R*!;V_VjsN_7 zKR7%*job9!&J%DV(RykWrt9d77q zpmDZ&NDH${msgl?a1*+_SZD9oUsO~hw|ezQ5RIS=AzS8{zJK~91p4AUQSZy*NUgj8 zRl}5JUHfh%2<_7+qbdS~o%7DC&!J(XK|6UDo3;Bo;r<=ZXjoVj6OIjTG3$-4%r8J5 z;5SB(=TPnb_@{kSf+K(X+cmC@KPX%qzVD&o5dD6FzJ-QWdF(Si{d;a4oH*7X9UIZz z-ttcz!nza{LWFUEsn2-@Hh@|*Xu?SqX&zSrEGF&1n(9CR1 z-{Rfq=bBM34iP5$-wdE-vcT}RWJ}>pI+l#&4Xk&Mk`J=SM8#$JX>bW@FVUk{pLt(6 zI*FApN;GIBW~2iIseGKQy_a<(^v%8U=hW^aObVBFR^!O=nwy9Sx63~cafje8@G_5q zun-m#{0ZY#*zYP)Kjm92v%h!O(2^MYlX2X}qGdkbC&;_`U$$$2q?t(vzcgAzTd8c@!EUf1368NqdUQ3{z#(!wFqj(W z*h(bslrUDQ3;%&hfI%jr;=s51- zp+wLK;d1HAX%nWq~SPik%YN1R#0!?p!G&LxClI6avfP&g+C?{aC#==NiZ)%Vy zG`u@sUHg|g5Dyd-r2V6Y_@0}coRB_|abUT=bV@&)WX3$(jC~E?s6VoA@e&h#fm)7; z9)(Tj8!u^;<96VU@DnFNIO`7peCx3EN$HP|#PuiURtOz3AuqD-`Z^86-~a#%z3ge+ zAfpCJw|+zzU(oj9f4GtF{q_9lKZq670SF&x1Twv^WBB&yD?7vyZ-aUt&f6||Ay;E} zUmTGl0ks+q0C^SuNn}=iA*0|FaoI!sww-H8PE~v1DPSm7Mg2K_OxVvo12Ae`mhEi= z>SE3Z8w-SAzkW4s2I5~_4iE!A(uNILUMO2dz59Rv{`#9^VhM|a?18k8!AJt5MvXB- z3l!bJ)r26k4^VyWp@LiM?eE{}cs#?ral`;z!Te4z2086-F3rpGqRP4bUp$?Fz!|z#=~*6kmi3tkac(C%_7<9{d{p)nEAa81>m&EWbkR; z<^nCPcW*-n3ua)vA%o=CCVVkJ3BIVBxq%9Cx#|KMf-zT1n2EHu#rSSnKHXuvgG8d{7xV`Q0Rl1{kUWvF%$3W1mGUy$aBF8 zh0`?9iJ!WkIMHD^Qv1|BaDPd2v-8Zla&%@`+ZMDSk;Wc->z3se`15 zOF*z1MX&%*-A8KC(RE?Rkg0N1ObQIU+&wSu=n3wtFDhZjqO?3pQP7;Bx#Dc)uIC(U ze@bVumC3q2XJyQ&Q#rAs3V@H%UHI$6T~9#onyGURg|ToBJ|~$!XRaCa(C(V(Axe}- zp5GIb`+;71I6>>@g^pc7&z8ThY6PhI(qtu7d~QdKG@2OIL1P$?bh}R-|Bt1!42q-e zx^?nEa1R7`cY*|m;O_1oEWqII?(XjH?!hg%Gq}6Ep3eK7;tw@7)pAcy_ny7ix|Xdb zmNp*Sor+I#XG=A!Wz^BZ7d6wha}9G7-uI;x|7)6AL2(V&A8=BND4V#9=fs56kn&jP zReq4VHtvy!y4D4q$CO!M)UGWkfYlH5y^5XiJ)=!=Rtp|G*OXVv!z) zQQp(_IuXksQ}EaHe)Xi>xvmk`;0u&jP(ws@oITHL%3hoGh1z(fy%I!FoBs|8TQygt zl(nCXRMEfE5pTvQNo8Kfa(2h#KNQ0C+#Sk-@cg~jx(iF}4U5>L%LUXL;g>s!Uz-mS z>PN}EDM(0#qSL{egJvX9_pSU=?65!E$~q7IEHRfm7+{K)Ar|WHD_D6Fe`ua^pv&@D zG9RDHGc5LaFPKul^$FU>{on@>lFQ|#xQdCMD}lVtQx z`sSlyW2CqABf>+v^JVLo7 zcWW60w{?5M*!?GZ!?V1eA#@^||1JW>aOgzZ+0M?-`=`(81tQ^hw2RKSCZ=DiB@6bw zIRgHL>e6piqqP<1j7Vs2<6e0ejev0pz}H$r`LW-%zrSsK#J?yA>H3fjBcSFnRDPU; zZ7dcMVG%L>p1&|lB2H8C3AC@z9bt|-&Kbj_y3B`RaOFMe2==FNKN#Xy+tIlDEFGlO z?$j7AD|UQLfSFe!acmfE&N#j9BAZdrSKThSAK=7N9wV?g;pBK;`3pUze)NgTaS8+x&9rl8t) z!3K!FVC122#;%ggq}0^V`EoT<(tP`8b*pK;xf^$B;qs6lhD!P=Q9h@Vv9YmBfEEf5 zPt1x1v84U12@Ja4m3Y0KmHP)eQxib?O2$L$;^r3Cr9!m=f$yJuD0d8A{5RCASWzBjTw; zA4SL;#s>>4=tAHJa6wEC`>eFsjevHro0KITa&4_`%l%+_fkK5W)*q*{RbL~qXc!}X z6wwF*dalOx8SY;z5vh+)!56veG*o{LoK%Z`N%cWt+}68NHjHkzLX z!FlitF*DJ>BqktlIv)R_bhe0;hC3UL)~(R+q#-ZSd|pW}WpgRMS_QjeNatbz@*wxnk3*NeI5RhZrF_k!;Q1tV z>_r^*ZR9x<@_Cu~%8qCn81odq$8uHQ*3R%uLvxh?@m@V5x4tCf1P~(0k6POB#YsI* z0Psju_q2Z^51~Ni7-x+=)Us-w@=Z6(6HoVkV#PfFt+#M<%`+VCuJ%C zLF*+2W(+u^TAonsI**q9{q4Vd6xS^CpFJM)uB<`j^@EnnaZbf~9nwXD3Ph-^6iv;q zo$iaW*jA$BKz^8vbvV=|KDQG>IOc1lA5iuXa6+Fu=} zqm_gYRx|Ma*}0LV3j_jKOecYexzPCH5WCaf>%zg#EweuacQ@Z&?}||r6q)Si%m5~V z@2OA}HakK0$33m=5#nn56Cl&fyLtC?uhqcvrllP%G~<)Jm60&ca-0@X@3aU^>6T+y z)Pvz;U$+aNX8xPu8Qar9pU!SDUZ$eCg(NsM~a{D0f01+jJ8IrG5woC{>6~zCn@+ z-dTP3`N(L(w87KJAIE;mM_JY-;Lr*h!@D4iq%r{UXf7PDCF$sddE=`C(RTorE$FLN z^rf^xDB*hNrC%^QRfmaf6s4IYij8QR{7a+RcqI3!%f=n z>mtxjn-`&G1S8}1FWK(gC0Qrkn2u-CayQOVd+h)&)U+* zu&>6y-(KTCU?GY`=bnJ#;WGQfT?C5`I&Z^A_!g6pIR|I0TRmwsrvo7-_HIXxKUnXl z&(crJ7}8-!HaKrFX)?;qQDzfG)2 zA#r3{uAgT;&Ij)vdUn)=b8{*PCOyo#Xas@j$F-DZAS=5mE=SYue-t)aZy+!^hADe7 zIQ6IQhAVj^J*TD!?~Xo%8s&Ix5?oJXm8@D5Bh?v~&3aUkfHpgq>OlM4`h=!i`)u~^ zldeks35MLmPb1u|!Suk8BA2V>ILcC$0}YQ6`=^mE%;61&CMRaaPmPg~je7j0$1sIX z?`_o2hdnLC(v|O4Y<8^UfWnOP>-4f1dB-{J$e<_p`;=Svdr}i}vvA~}H(Mi=qhopz zdz?o@SXE|Y7xewc0FxpIJakpft=>%z4I9)8ID;o}!kT97y;yCuoTxU%zyW98dp=&D zMNfLibYjiodzz{m)&^b?VraU<-W>A8n3r5QtiGQ5$vjnC$knkcd z@2uwKD1Vj4tMn-D<%UZ3f%%I%8P6ojS)g5(?ozjQ5v#()?BWRb)mn$8BR7 zzOs;K(}760jrqd&Cw9belGu;2ShZfA+czqUVY%Y_(HO;0q#Q`n+ zb>wiL5btLm;ueM$ipUS_gurJLwfSOKz4eo3A6@%xCyl)k8UY`u@JM;K}(;;7PNtLU#A2)~-pvN0R$FaoQ-KFlu;*xvW)+h(CpOCSc~ZM1sgI%xqY zlZOq)mlfJ1h5=&R*9Jb=NisT(?NVi}Vr+C{t9icaqQN4!Id+SFa!ZZini&_}so&ep zIQK41A)l`JIDRiNc>so{>j$<)ZU2kz4_#AixA$z1YYC6*5lTCaYbJ^w8glY4;osbk%WDhdB*W;3e0J|9Y78+JBa;*{ciywshKw!!%%-eRse1` zlYt+)_Yuc!?oJAaZ5~fI*|(WL1aKH#fWkO)PaM>BTvk3+EJsNFJl*7UzG~h;x9jRT zLY_Q)LNqH9aw4+mcWhR4Ah@V`L^;JGu$Y;ZTB=kG#GD;t-kyQgL^*SSEF`JxFg`#Z zju#^^waMr9ZpO7|eKB8-+4Z;$&zTJ+KJ_N)2!UvwV;azZ-e|d)$2--goGstt(w6-% z$N+mnwc$VD#{_^^SP#V1HA9(}L=2r!{!n-uaNz&<`{FY;fIy9l2<3r!xQYVe^a6G*Q@Xq<(^Ps zmqS96Aw>W{e81Gw%s_a-r8HwPUzz;M^Y4`w-64;o z2&qLMO(?=k|C>aweGAiY{HMIX(bld`R0VgVcx$T(WS6grw(@Y3x2N(Pu8o({+d~`J zILOtjIBOk4yQt0;bb3IT>_h7P^weqqOJILu%(rO+BQF3`uewAV#nRm*7}Oo@{2*p3 zuwM0@m|+`2n}-60_8#j&QMZmB8TY<9Xs^xL8nP-2UHXUT>f8Be=X8w?MA3MYgP`H&D|seboRtozORTy#VQz5HY;d}K1F)m>1CDlrQ;tHJY*uqCaG=; z7Zt<241uPYxbCUR>Q*PJf)`4jf)G+b?9;x&TmZfx6Zus$DKRm)nSA#Vjd-POKzQZj zKU)NL5#&UJqMbE}2y6f2_7jp|Gv2y0>W(Tve)gEy0Lh=R;y)Us`k7-++S8%?xmb9p@1x3WM}M?NDQp5mZ>B{cm?tqC`yo7R_A)C5&OGxVWGx|ft5 zSIzkNfZ@X}=Iw~&%&%b)1y#cpH1Q;LIB2ovIiCYrDdm1c6W=R*C?GZ(gx4XBG3^i- zf}?M-8LKJJ{8x0wj#k{Vo=sh8a?=n#%GD|pfWaIH7HJxB?Qtf2Qfh~1Pn==?28-M2 zl!|#~CIE(j_C_QgRp3mZI3~jbjWS+SXj&=Ts2oM}qUFST89FpFlubQ&RD^_9WMm4H zl4|2>`WvbsK7~6#ik{)tG+1r9YWc|Z9^I(!ysksPoS$2mJHA~eAz_^~n+e@nqMwL& zTZgr+aKAqttl1*nJldk}%PtqOW=kKaEe*80w$SXf3q;R4!W)9MH9PsGQ++#_WCTz_ zHWC=MuYzb4XNDcNKauV86wybUsxw8$PPsGAOR&}i95bRNio>h`W`qel)@WgAG;{vP zO$bi$pnzpg`~A&G_Vt)C^;DPjk?`m8>aMtM36G+TN}*t+#5_jWTy(Doz>1diWGFQ8Q;t3>K}I~ zGsRadm(2k70TNly>Xe%RFPo)3lhV5}n)`<9LFNx3jCc^mEZ5`9&g0b%*Bx)@DVf>q z4|E#~KgecmmS5smsR6v#O%y^8Dc_BDpO1Owm65`J-S0&6OHSIlMR)HdX(2#8PPMk( zuUHmNiT9FbB9B(P?O2N)yqw?@n(}XO|i(_1)<&jL8C%=tk9@8wmu#R#~f=5&XRz8 z`|$pF@CG2_M@Yt|rel1c=Ut0(x?*e1zDqy&03hOG-p^F>o9NF)kEecq_;l7CfUagT`!92xB;O!g{TJDoFLa#>2 zTy%JMGh#GZ9KHmNW@|0rf>3O?<5=|7+x=M4X@%#e-i(9RWq+axyF_N%JIS zvr;9V;g~MYz8%r!5quChq!fX1&6K&V8aE`>0bGSI^J*~t_ipR{41(Ikvn7od8i97T z)pq21r7gvNcx#Rk6r(Hx1T`}(4G`9!X`&m^$bW{=CrD{V*1L4=UBRCX04V!Rk=jv~ z*1DqUT|2frneACO-cjY;q>-KGoYU32XSSec7a9xA=tjlYbMqn160R(d`HRuxbMFe* zMhwA*c`R7`N-LAL5EN77ROH9;9{bCsED;K5vs61DX4Rb&#$;8E-|~pY<<}TWym_+h zr4483+uhRSGc;obs!kqZaE|yw2NK!GgIv3+$$jJF0&}57V5CuUX+lqN_4muiU$3dT zxJk>Eg*Jk3DO{wv)`?shmrhe_Hj*N-(zQPqud_WVhC%Bufgx@stYZ8A6w}qU;o!}Q z-uAtWgHX$<1=qY2BWah3QtJ4#U>uwp^;NXz3_(+^RC(=%{jC1bYmfd=)4_5RpI+or z_rLp2d|-fafrhESO<^XLz{gc_C2fxJ1Rpb)&vW}~W~^HO;ao>tPHMn_I4wqCUR_TrC`bhs`*^AbqgP&g zHE1|DK&!H%f*EK1EC7X1+@;8i$@N<*T2_5s9YWFcPZ1izyViLU*uD(M2v?r^;2U!R zKT22;GU?cu)a2w~g?v#7M$Na+tgIJ6-Lvp6vrXg5tB4Mxxq+Twqw#%s=7%_B5m#&g z5d1@9zWI1Koe$KKp@n3=Haua_{q-k(fYL4Al^U^3sds&YF%*lQB< zt&i(5#vy>m3b+621F4JVJik87x*2dj3$!nW55mq>&=Mu&DWYBWx(eTs5Ow9VR0KyL zJ^-YYxyUcHLg35a^L5VDjF$P6z<(@j(UW{H6;7Xs))p6aobk_Fc95_Qd;!bIZy`?v zoERZT^9+~Cd@fnvW3IC1lI(l}vq1;Of5l5f6iSti1+#^w)$dg6zzNsvDjQ~9i672N zLe*AdCF|^Z?q6~Za?PwQl7b|hk)1g$)G^1gl@P9WK?`%nW~uV*=xHap7at1)NfAkF z3Pub11*l4*8E6Z?bOTOK5FM(lQ3i=&I zgv@T~?=r%84ILUGuMI3tbU<#&yx934>>6Ia0(o&M|_o_aWBK}duQ{G(h6mT8Ka^3PwT5bBch=Ds6F4vv9y zt_@Wccd&G-dYEJegYHghUbZvs2r)1)^i%3(wYHhVC(isjEX;o*1X`*d7k0WoNHXf9 zaY*>6b`lDF)1Q<$cSmVQ}bjT@ut%;t?1lVo4MJuE@*@%`RY6<1^HfQ#Il1hvLanDe*h+MFOWV$JS z6F(&~&!wg!75Xma31wtK%!8NMRxY{+xZO#$gl zuiOg%Vf)rJ9$%F^1%3ILfh@~2-(GWm(4-D?wxh8FLPtmErv3%dgUCw^gVjM!w%gi zgH%e!7CwVJSLjHFUj4D5NXkO zLvr9R&t}B&`T3Cb+!j9`A=s@%W#v|7HsxRY0-n=v4+(+67V$a%j>98>ig1`(IJK6< zN7=w5!kJ@LlFJp^Z*@HB*z5oT^jO{Uyb@XCb6HB=p->UiIczuqLk>2;oze|5wrU+~ z8=u0vdX&@GkTe(7Dwo?$UMAhV%%S(gi4g~vjWL%YYW>h9?XD|wT*<)X=y@E9Rufxi zar7@2z5p1^I`3MH=Z9Y(UDclNfk$;wP_#0s7+8D;BY9#0+Sw;GDY2FU)!X+&*c$EG zz;Qo6W{EJbmaiN>8E;UxFnj0+XOY|$>GCzerQgWqcCxauQYR0#PzdgMmg1xwL~UZW0DzhS1~VqF6^LTL~!yYZAG!A^%0)5F!(f`)%j`@ zO)BJQ4fiXhTx>VB4RDL=E@t@|>+*Ky9K!)Z;er?)c?Ha1QqkEUgA_y<7~zfgHz2|T zTk-D^{vtHXukk^`Zb#`9rL!0R&=(13w+9T9qb`!;hz|bLzQGj&23efRlAs{XX@0|K ze|rM^YOg^vsghq2f_@BvqZEDA^Lxi324rc941Jz2_nD1m(CA2M{k8M}`j_!HTGQ~( zLlf9q$es8q4AKE@X^tB9Fok*-B!(L)0aL_0nZ>K+rWF52RCgm#R1u#F!sB+J`TpmS z!C&}{YYnAg2Tv~MW2o7;M?i(rpa5kSgUj3Z{MJZY)grj?Su(^5&R6b%T7=6C{yGov zvY+hLH&`w*xOOX9+mGh1>kezh^zNSsO>(=VFeA*aOF*J2HX$P*>(s7N`XZhaehb5<}@ z(~1TdtKx(_;%W57K}P8T=SfYWa3uNkbeCKh8k0CgW&2d$&5S2-p~@N?RysF`syh3< z#EMc(hGD|(yUy%%V;$%vQ^+XXxjMX_1uqk!GyK2*w8WSe=hMf=U49WvI>_Lk9<{0F zH%)Y?p|34AZDWJ#+0GH~R&v6bmbd|ob!PoJyaVLCOq%J;zd)dRqcC6Ho@-Zfxpsgl zO48apg{8j{b*3Q+ga<9~?XSh@)pxS8F64FaKxbJSfSlpKEe@$@r-%Jmm|letSdRj% zO`?gqx~8VkxE!2jQO$X6H^*3F(9X7(^qf_e)XtWZtX}fqt0gOn`4I%;XjDqFdd0dtWOt4%igEt@l8 zbJjbV_^6t*ovAD0b4wLs=gw1v6GJUpT&t|DsJ|!Wc(iv$5utJaMqc(RYw|WuT0poE zhqh$4Hr-#Ih-4rb3DCk~2Z1-H&oaJcCBA1h`-g|#>>6LW9$SP-%JxihtKP!{9$UcQ z>3c5fA*fgBbKU2>ffF*Z`}B)p*Fj8xKy)Y?Kb{ayqtkKh*XzNDZsJRHRH%TMf|}T* zA8kfv! zkpm~8++u3TJMN1P(oXbwdGQnAKP5N3Ec&g~4r+k9z$m0e6C+=>+h~Kl>nlx&=J)Zq zgIsxugMvcz#c4%OOvu&l;BP8v-~pfKvp7)n@OqZek@3V2%Wl_l;XqYN-Jr`^!EI&6 z#1Ppl67qX#w`ZWOt0P(k_hKxT&(O<*#q)?=>$2e$*i&Zxg|&?Q@z4*ua!k$F+8nti zF-3mXK#~s~xnFb^+Y^pwa4MPVi)l@H%4EF*LakYB1c9gZBb$|^cTd0`Zr_x93z1;$ zL&}`N?eLz?4>-1Mr)O=!iQYT+<==M7!n@G73xcQjX3E10a}!c<7bgG252#^biM@yn zZv;ys3Q?1*nTd|ZupeU8W;A9gL?Bc_!n!}Pt?K|f ze*=VYtNMC76w-4Ek{K^E+h{CWT!8AvCK{y8a$&jZb!Vu}djKyS5aq{NSH`CM*T2KR zusIh8$7OnvMgF~rCl_Bta;$!b4zl430%&s#Ec>WC#zt>O6#(Cf2EMCcLgZJ*7QsWT|yqQBv)&7y?iiHbk3?@-*s~_ z(|hn2WOMs&YR)uFA#XYN2wA2GS9s9o?yg`_*04V5QnCHQ&u1CByN5 zx5}$)exS7uo5rCu6cz~H%&D9nkmGa+v_>m59ggzm8MZGj!;?ZoE&RaKGZL)nR8UKp z>A_6R`?Yf>iolKLilqH|k42h{hpZ{~-ivZ!k(XVqD zX*ZUtbGw-FUeCDqaBkyXlc3a!+nA(tUIDKGf0?P7>=!Sh{Z0w`di>>+!J?E>8QrBj z_xcJ=E@5+A&aKu%{Z38K2>vcb6t{C1(^0iDq#)V$^K0>sn_YI^A&cgEdU2^wMC;H` zE?$2vRK`p7zRxwga<@j@69|SPM_b$6VNc8^1n55VLSb`_6?#&LORxaANUMCUp-}5e zE$i<~jLc=6B)ch>cGs9bhu~Hz(<|1)Vb9Z0%Dw5K?3mbmvBejjy+Z|hQU4HeHPS>@ zX$ze$`4HG9KPMOAfCy}M+3w&MYEn`iO_HnHPBJ=HiEjRky53BcLa}1|{z=TUaZS#Q zHbrsVzPcF))z9`FzF@38iq)<|p2iF!kRTbp#=~z93Lg-+@h}QL5?0l&F9h`Q$d9=n z0k$w@KsRjOuY&hdJNk7Fgdvy0BoGW6Z@@vmVUB9wZu{+Eq7e+%)sfDXw1`~+KHIZ8>N)OH z?f2o$*PF@Ybn7+=Cyg&l| z5;`ULZW!Q7u%Z}Z0Rme6FvI~3%JN9eG(so7QKmD7S9c1A#vdnS98{toYs9uGw?}+R zKh7RY*6XMx#lbot#lf-()ewn?hb%I^;`1p3?|46w-F<7)L@E=sZBm~Q!|UXh)o@F3X-{%Q>?zNAfSZJ)aC!^U(|E_`+V{M>ubQw zG1`XOB6en~(RiTEYEIcKWh+sHhPQ39o0D!bv|e3UH+rYgK!LjSz1`^?WXl?BM2Nev zQ9|%I!D~}yZM@+DKHJ_opj}Q)UGcPgIxQ!o7`){shzS#b}QUyj)3d_lamRSd;~j)5_n>mPjk z!d9+2qOzz>n`>ZTH!!~_o`|N{WVM_(kYW3kV#HNxa&e3pdSZb-z5mJ8JY&aI{G*(l zxT)GJ8)Z>0=r)sHOi_(n+e>Fb!LcJ&Qs0~s`GHq$A8(neRnj;T4km8nKCNItyN1cC z+9j+{q;=o@fSq^n7*q+qnJG}rEUqG+zCQ3(DpXVN*e!Lh9qrX>HOTN9JG04W`c%^ul%AQ3a%g^R}sC`d4~lvbl{-i%B2dA4*@DZ%1Wpdz^z zshQ%(!pFZH*KHq92<;YsbtmsGlg@kd-}|PbDlKuCoBX!*NC3T|PV0`upxiylw!Kry zr3Ix;DHdIwJSsUvOoLf5nV|6%jhy3;7C}ozJ$kar$a;d|m4e~TQ=j2p-uEJb&y;p! zCSwAVK?3ZD(@)y-t-qhM;%4whMtRA`1#-HZ5f0I;-_}NoSM}exgC!i6sK1|!yM-F> zyH7m9#%)7ON*gb>eI{*;voq{ug$7kW9AnXZ?ppt)B!7Wayh_x$5*!v-L=ik+`^)`N zT>u2CKv3QDXP~4F-`k8eVW?c}UK~IpG(ub1TqXRz>9*W>0R}P*{v`P-P~`qMl!1lL zu;@fkb|F+FGoMX47XCLIy4=aUDZ4XFUEVdDi->V?e*UM{)6RIoPoTRjvCtZyE2yq|r-j1OcYEpS9hN3fuUYR|h~=Kh#R3 zVMd2bBi>fp7j0Xk-&`*`9~>Ty@EExoY&$>&+bQ(EIUY}Y$>~D)LUZqj`O(J5bET?d zXDf|T`@jq&ndSPSw+G3Yec}tJd(WLu4+2aiB0Jwt0=t%L`j=8X-^(*9evlQm!EvNV z@p+BW5RyjWb9;;)K`ivA=bakH7AIKZ02H~OTd57|9V!RK-Pw-CApM^yYbLbHLo-tC zNu#uVjI$FHxNQi@v?`P|c(lG{H`Fx@uLnV==uf+c`)()sO4oYsUa>>a8H{HM>aTNu z%=c>&1-iPpkd2*0LObd%lHH#2FHYDL;MJ3`_SGE>ajeaK-dYXjgEftB(6Ke#mBpr` znUzCt6;Lycj~~TMdM4#s5=<*~1pPW5C%rjedAPZy&O7!fs2xgK>K2Y(f&76HKsDQ- z)FM``d%Zh5DXC&o2;_gJin$jR6%7yB^TlY^PnoU7`@X3^?)-N&+gv^2Z~r0WU31Ja zt|)llsHSWE?hd##t}pYwn^uBqMR?@j-(!a=_+E~J33oqqU1YoYoo++^x?bqC?yx(b zm|Q&Gt*ux^-g%z%iYJvoUoGlACA$$Zn)kb!Ki=r4zxKcspGUAiRL5?8$1kWy^C+gg zODYZJEi5P#4Cm`|WO!$j%y_4^%65T+`47dOKuu6A`jX?R+n{^KK%JP0DB3=!EqdDZ zqbC>9Zfd)YUqh9S5P!L%zl>OtNj9NbY%=LLdECx}u()~)q;0iGD-nVLcoMNy9{JYg z*QLYSkyVXCD8hr)qheV<8PR5!m*a*cHsQtq8P9DR5xXOH?tQK1+Q~bb>OqrMw!O3$ z=aG5}udQAADSwBsn{)fmwkASKqu@2_?h1F21MjAx!8ccCQ`@rDAD#XU(eQDL=Vy!} zh4XC{FtFFtnb!j*^Vhe*FL##qF$o}xn2~o1p^Px$n_8a1$A zhy5Xj|8$#kq}p45h2*zo@Bd3ZF@TU@nT(NoYmNYsvxNSjTCw-sP30n5es7zJ9P-2F zHc|4jQhvKE8VMfhz{W1dRD>zvJ7dZHu(zmA)mRF+Jv!;64Po{G0tgY$vQVLTf7sMq z*4k{fG*FT)`^(uOajv`(TzC1@gSlWcL?!TH!=0Q0y^Zx(f?j*$2n zHT3!+7gH;f(&y%O-20*(c)3@`*8@yG=I@Nj_Zx6d0A02mdS2)uxHyCt&OWqpA z=d@@5hNq*)>rZ1w(Z?BoWlTpUSG$KBa4^MORO-{?(DR6-)rjqP=LW4|PR_j=yqeAxt$3Zn3MwCZFW1Z&( zW?Z_nFi<&ijAfpG;*L(hmBm?RJADe$UDB#RMAE?=StKUp3K#`mjlAV~ZE;us<0*0K?}g zh!OhkgKF=$^7)M=%8-_n8kvOg`>2o7;;b@u!vC)OkooB*{?u+SRYED_bLIttz-Izf zO_9bypo5RcA^ux;juv_$V=zPT<>4oY)`-s{D4X=Y>d~%)9#trJISA*<}I54T^*U(7mNcznnb6O2W^f8_Hl)Lh@~A828!<`|6UgJ zT4m*=;asC`aSv&mH;}xlZb^S!AyTqf)DrX$PjaBvrpi|i=HPOHI1v==)wq4Ct-PM- zaYVAG@v`?QMpEExpVdG5hGU5o9g4J#|73n0gjT+pQ2PZNz+>X=)!m|vMX!4PsIGFC zFDrGV5S|}R8@G|N+h#h8!k;=|uJrimxHqAusof~mF^O%S(rB^p_~j86Onw60{M@%W zz0~Mca$Wa0VevF1#V9V|)s?~GScazH-$>fObbqWuYXWG!4hJjG+LB%`*P2%}uFItu z=C|vUMN)o&p}9`wgoaEb@BEK2Z}=7wFD$KF6rw+|U4QdSFdEwJw&`FvS>SLY%H~2k zIa5{5Iwq^Cw58*@;B63hbKsNX{TqDv+Q5C!?M%|^`kH=svxn?CG2Khk|6gBZ^odvQ zvCGh>@H(8y{mNGg$KnK4wP9Y~L8;;?D*P3K&0&z9S8Scoe&O%=hq%uHM`{n1D1>*o z+B3P`-%8^Br1LO)_dhN+f6-fL=LZ~VmO9dGd=&J@sFUAnmnO-;AvD9SSuvtB3P*7- zdQl*k-msE!Y2-o3hJsr$3b}x$4_*s2zOOI-*y6hmY{rhGSO3;qH3p$0LJQ^=MbnUX z7ca#g1{<@xT^v#?K7k=kHc0D?OOx#5Z7Zb$NL?@a&}=5fr5H*LNDB)yTyDKc|8?@o z7v_Wxu1h8La30hevQyz?q&A(JmBG~i`mm2b&Tau7<~%)gu{vm1gjQZ`dmjseYL1u4 z_onr9|2wy*p?dyVqZy+&%M#4t^1Bt`*uB-MQ=nr7u+`gQ5QZn9W0XY+;)LxT1@HQk z;@@s>1d4^>{uwG17XprJ$6-5jmYU}`xCFRA{FIoQ%lmvMiZP2tsY}AcP?dHmC3|}P5^Kj5eh*{S{ zM(sX{HIEHR<}`81HAaE?|J>JWQog)DHWBWvXYH8SwO64X5&mwhI^*4{STnhBxBOid zt9JiRvRsB2AVqkWxaX>wok;Sr^ip5dzB&NdB(%4qN~Ra%@3^Y!tWVr$%1@Lt-K2t^YSt={(Op?t{h^wJo6j_MZgp8t>(sNj^K6-0 zE{Ovz)5?}I?2E`j6Y{l}*8aOS3<7$Oai|G_9ZcUp%IKP-EwaXbFjUj@*Wb`W`Z;hE zS||gb44Th;E%CPYfl4%Ha9ahOu%Lshe;p9oCOH20FZ#^&rDA43eteK6rmEAq!F;J# zO^+jyYAz{iE|!qWfqBp|0;95^s;0StKfcG|YmgANY$ah-P2};t&&?NW)8BpTDC9;OZvcdeyc$`1qarO@w$;)m=VZI)Pv>ayH-BqtE_*GFm>nTVi zoi4ouR;)g@x%t%TV&;}X{D(6U49_h0D}^v=^A!;ZRt4W`07+*`L1DUW77;0Vd;9sR z#x}~x(2)E)wL~xxol@lSZG^+f#NQd>@?#_ZLEHsI!Q#BYM}^9XuY!8GF7ECUKr&s6 zq=JDjLGEvOL5`-2DS^CvnS&p1!fEHibRZX`yg5#$%#HZtrQhKiF#7^M#Lp?Rzl=FN z9s_-XR^4L_&d95oRO;#;q*NUH4BUu21RZ`pYVCd>xO3_t(+h`IK_c)lf)H}>8nYk| zVE<8V647R}@+Ckr0nP48ia3K-`|oh+>EXKnPai4>&>^uH-RcZXDI6;P`Hp-`p2a}n z3nmG7Z-r)2gpo+C=el1ei~=6uhNX1LF8Wyxo@p zXpY@UdJ7-m^J~82w1~*dWNV2YG~DxQ`*eayy7;flCUGkA%lg4mIoZwqC3m%Rp%u)w z7{Wp=J82hp`YA#~UP+8z&zWPynrj0~VrnC_Wiz=$R zAIiuu!?fbDA09ljbwobYEcVbyPKW9JpJL)upsK7E%xR=riMn4lj=$by(^i zMxCYJ$tdgZL&|faA|uZk6k; z3k^qHA~&!g4DpF1Vz_;R`{Nn*j8~9|KBq-!A}$z1jRQA|EZwA!i|Tlt&*W7> zCU@`^snTAzsGNB)^%0?mtEGyk4&mh#p+QW(OQifhpqfT6eC~UuvK8Fi!+jS#1Sk(e z2EqX4cxC!0kPmj2;-XTNFI_QxhNXhUZ9asx$wM6A*zufMdqD-wGA479E8Vna>Y-*R zpHkjl1if6q$?5#)RUqO^x~4cc%s@N6nCxrI+ZwiaXWV)*ecZlM`X;7TE2z`|s1sAx zGwt&!Lr$BquuONPQK_1!fSUr8*Z;(3s4W*&rD572hed&z{Sg-soFd4)k5Moxpi;%C zbMpW-cDK2ykMFi(H$_0DaKz+_XwF zvorHI3le8p@QCoq*VoMSqFQ-<(j+uL9TTGrjifw0I-Zw`b=@aFRWWmTpvA{KY9W}A zuKJmU_niIi&U6h!nIA-~gdfRFkJpitwuS6s|M5dMZiVv1YI7;7xajzz0@s^78*7dK*{FBey}+g!8x4D1x0yvs zvfkuf?m=oaG*Y&EQL8b20{27gXzk8}p6|rU^gQVziMK4DG4@ATXBZg6VC6p^euJ8^ zRk;I6LBEqplkqQh4{mS`)Y?)KA~5D>n_gmXVN(kMD1w^EA4HTYpJFgDuk}$Emk;9l55{aFQDCsf< zb4~nRX0(~?RM$i!h0Sht*#N?4mpcE-j#t9NOn|Qn2&bN*x2Iexnk4w~qQ{GQc?c4mwE`>5 zYh1EutI-%3B6U^|JmyF|jzjHj`0nJY0t#un`}m2OFWs?g(BI64-j<0P+B9e79Vo1@ zg%@3H-c^9-@e^~&gUR*@?r?Zki?HqgIybUTgxW;ldyiaUmPNdW5+gXcSqJ6FOz5s; zotN&fGon|!`FLW!sDdjfC=4iwU;NGg^|3wVf90P#B?ZN^5~63pni~-n& zqYA{F&E^){RzOG5C5HV1(sD|<*XPfcXlvKA+(VVY0qgu=NfI?nvU}I~CUHl{!fzi; zJ&~F^XI^GbcK26%z0kOhmCB3CqhcGYy(bm)v)a*i9?~QM4WEfLiIiz)%!o3f6+=;g z52ZCBIavw_3j3Dj=}GOI1?#c^Yu@J~>j2eg-Nlv9sXY|XfWQOjUxT8%yCga~Jql|I ztbz@LP;Pc6<&Iw`3Qag?k~rftKcXZpwQ?UE0=n;oBZb8+i_2Czd8T(y3#lEUMGk(* z3SpQ^;TcK85ErMeu4+?LQPtqqC87w5kLA|YDHbmx!o%n9JRt~drJ~G;ryaZ8H=LxP zY=?CCDRXL>ow!D6{ReE{y|9&1(uphm--G|xV4@f&Ulyw1gkj7MCkKamI5ubo_22nC zK0b=e%g1<;n?n7&_C&XLnPy6^WR7NxY{@N)|GWn+z(f@yFB>%3%n-(0D#?~(Idij|<@Rmvp zHOc2B{WLprRp_<3e|I6?C>l=Z1nzmMH#jH>@ncp%H&`;bOFxf~%7Rj{K_&=OZ|=04}oh3l3cD_~pN)4Ed_< z8L^X(^MAYPhmd!n2vFaYyi`zYzvrbl{3-~;iQlqq=0x`RBl(l|$u{l3H~t0{*6jj_ z(*NzKU&sZXIDn%+%VvD+Xm@Xql#kELX`xno(Fq)YvW>G~f?$rM?Z^r)$N2qWZDwcE zo^&IN$;bD;eSu3BfYR$0+!B_YoD2ySAYpWQhlsA1{mEQayE5kACGc+pMCcI;qf$9yws35gSBo2Twc$7n_TqpP>r2ed8*JWfhH)7wPWbt+1CR*GL6#Y_%qP zE{O<2BKE(}!W5BhdWQLJu*AEkeH)Czi`oD14F}U5@vQ|Bt4(@QeES z{-dwPP{XSk^>zFixGdEXVn ze_|LIOtnqZr1IRmDHXRjh zwmRotPy?3JK{bG{_Z}mpeSW5tjS4dAx+uQ2dh{s0aJ1F4I3SFrY`K^=Guu-xDJhTL z`?A8OREVs3DnU{14tflv83yAU6r#sq#a=Mhu;_#GLr_`9qv#K@>`^@ODTOyT&7${i zP$f5t2ZN*vKWUla3w<4-FE!~sSO*nwkamqHtiQ&2J6%OpmBoG=o<~YC`@bzfHHtiU zrV5D&rVT`WNwAc!UHYi5FvqCYqC#6*G6ib=$HUF;cc6b88!HW1^~1){qFHOT#vw3N zP@&1aBfL*LOa;5Maj}|IhUGGvWcL-%Up6}hIjd}f>%!kDf%uE|Dpx^F45=0d zL_|VHxxv3f2gA1e&6Ww~#cO`h&P9<5NP=V?O3KRSD|fBmV9ug*KTNAfm(m&w75&F?Ae;=ZAwYxx9<&U4ChH{?YyxgO8ODpxm zV{3t8sM0|i5woCR5o7ef3}@|X>i!3Jw>8{Fmwl;&`E613_fhd-)Ti;tNTc zsFH?y^j=)T(1D`#j#mAna~+RnjT*12>fzF2d)YRMXX~@tqo2kiO0(T)k%c%j>8C_y zqo;s4U4zfd7gPUQg((b)$yY@Jef6>RTN^1=vw{lob}48csqxi#jmZ9?!@fy@*2N@v zRdiPQp_Oz*Wn(aCs391QK#igE?kUpn08-R^rwVm3lT@L2^egmgv$~>FQCf5!>O@f& ziikSgnW|ZKnWibq?K$8C#YqjB5w_Y^xYsyi59A~yithim zp$GD?zx$upnfb#I42cG4@o8@X|Z_sZaiQ9T7$o@IEq|of07qBQtC)gj+p~I_^u|0P`h#q9Nv{U5TuV-NNw`}!6 zXc2 z9Yt#}e;@Bgk}j9atA-V~`AS*_UTvhE>bT}?CC5bSZk2+3u8a8X8Fox1G{fP^2T77# zgi4Wrdv5cFVMSw%>$kWkr#rOCyXTG|j<^;fp7FYebhNaoOu)Ch%9F}=G9K6Jpgc|B zr_b&;q;w+OcjV6#H>7u)J>;JDFymP&Lsq*G)|^Rav1Ht>qMjuY&KDXz(~SeiXceGm_muE*W6RI=TBhQU2&>TjiT+$ZDl8G*m~N~(uK@|FgvHQkf< ztL{H{s2Q+!YJCsu7^gqnP5dU`eWYC zWU2R$BDX7-?+$!wmbCnY9|}swo`i;$SWXA-@X6z`!o&*P=S$**;Egq=SF%&2br|pB z=Oss+Z+Uxa{7>~6*0UB?vw6~pi0u6+wzk<~WgG?YyDljZS#)h(Tc*AWe+i%>3I0`h zoa6D=ow%$HFhg(u*hXw_fxy0ex7FRj7cjmDQrK00UE77wm3}4;L_pqFxQYN2(C8J3 z{np8<4cQ+V={m3FBb0Vh4{3Tgl;jprv}894zY%+!j|+wcD2H8C8YMT?9r=<#6LyKw z$o!B6!5X4g#D!OT|o$}{aD&#OAQ8;SsU53ke zJl|=%lvIDU*-)#5y{BB^Fe^LcmpKO2rrt^6M;qLV5sY+Mfc1=qa zy_n$h)AuRXhDx0q4r%-ETK8^QtRcO`aKJ;$QbTASNt14@YH@t!P9Y!55pKWsAwbRb2DnAM4nkMt{eQCOs zU*vk*2?lfCIo+uuj}fGR>~oTcraH{h^jGWk@(Uf;z5~T!hWIvy-X-3*MYwt)<0~t& z=%|x>z$1A=%p|}8oU}9@2Kth?z%5l(s}MdACrir~F_(Q=1?BrM3W8E;=_x5% z#NW)zkje@L7j%Z;+Aa()J@QeOtw-VG#zfnKhZ$z%`U`uI-{ zD>nILKTpCUFJcj-VyfQv@Hp1aSr+P2eV8G_;e6T)I!@xavkq*T0~yY1^H^8D+2czK zE%8?Q(|Wi3Tlb8AoD^3d}EXoX34D5hquM4hwf5k6)?;c7(=M}u!%bvfa^YBOrHh_b3FV9t#Ch1&AOg5Xk^BTk+zG~d_X6WC*hw`<5G}T5=RZLFH5bwm|yFcYTUnP%_~#d1K%uu?4641_-3*=)(B#>VG%c> zd;Jy;I*5M)8$1G+uUiVD2fnDEHsQgW44#VP5zh}KYwwO+8ka<$ z5g!N$(u)3GG;la#2PL=b+MHj3p*5BL|iv1ZRL9J-{`uHCUyf}<(Qyvy`hb&i+(@z=xbO$76bM7`=PLxSUM)a z)_fO;<@{`>Posq{@V)p(w$Y65h>)~0*vg@PajM4J^LRP0#@xLkK{NASK;Nmo-gN>O zt-1gT&j=5TOhk@IN5{ZU77_cMB4kr?v|1~5(!A}4j)fH2uIP=oaE(#!mp#izS0i}` z^=AHBlWJy}^&*Lc%uT0@hZu|kmmhU{+2Tv?Se3~FcXT0NGus8sWjri%{h+XkKnQ0a z2VtZ=-5}6xr1hiKMI~EQ%5VyrIWRGO%z>>lK+yS=R)1$Nxq*k-MDqIY*JKVhAGaTF zqzvrI99l5(>r^)6Jtra-y1KN?OymHFVLSeen(wQZ&6ghQ^q8AayoJ^bw2{p(+xeqL@W@v8SAx^#@3eLY|J-fV!RiILK_CF1q;^Q|cQf_ML=kfIF z7qybkPb3(!v)O|;*jvdLfc+H|$y$)~7V|hyHnrhTC2?6<&05*n#`%hei4%+BmMmg^ zv3n^R`T&Ry7GK!ObipIhY{PNIx`T$@vTtbe+jC~rH&_WVIPt2_mx@BOR%SyiJ$qZZ zqE<|5Y6QbI-<}grKx45Tzu1YncHDR!U7OW3lD;Z7#KW$;tbO^~wzHe{t zbc^XTkbqnA{=Y^2zt?d*_iMnH%bpot;-f={OhYYgRyr9B(h3;txExUU;3}n~4RYaN zWf%Ya5a`Myx}(nQLIpF-j?U7d6ZZe!pj_NjqBq+Km+7aR3#i4hC-Jc;gk!Q)x~<@n zXD5kCvFIf)d=ExZc#ApDi|;ZdJ9Co+A7>5_V;q3Zc%s+vNZqdCghK15I|eQ($PKHu(&BI0TMOw`tsQ-|kyP#Xj|Vkrh!BtHB3%iX(U#bf;LKUhg07=_Rk zw5RteqW{39`jWHj;nwW)B%8KF(6FKx5m``IC*JDoqfV#(3#lYf#2EjtzkTa=Tu1V% zh?}2z<$#+~O-f2C914XZN43iC4PsvDK)1=Mu*F2hM(?gfMHNGiF)=X{{`{~BwJ|d* zNcccFk6;~s@X3ZibSe#1rW|3Pex+olB;@l^m(D=$JU!#m6nH(3f1TAoI$>8~FS+E7E zVK&|`N9?Xt^^$8Axx|kg@XQe7smkA$BRIle$OuS?B zbNg}9R#&^+zDX%?}@2#le9krcsFi zYa!F5)QU+tj$QIGHM>}UtQM{DLoxyfTK;Xn-p2zIE_U?ePyV#vq*;KyqHv1XqVdWw zBtzLuwU{xFw4TmZggCT@wogcW$cBlww5-Rd83mW0P}z!E@VeF!nX4l87TfTq8rg2~ zRr6F;QZGavH;#fVP_*NoAQ_y{W#XVPzuERm)_G;~;cIqPedI_ov+Gm#la6Y+0YsP@klug_{eR;U|4yLWn`H~c`u-Ee_F1i&FsGNuMg``EW-%_#iv#B zQpXR&d{{HNT({!^v(9A;P6Kyqt85dMO%BK*=g~X@+_QZmeEl7Nl(q}Tu$LqZxS^?& z1{`O~Q0ZdpmTaY=@$q@6wy1HgxTJV-gK9~J+Hu40E}#j>@k-z6{Co=rW0R1n8yy;& zVm0>uNipg7GUWAZ$T0!Mx!rm_Kb&i7j~lq` z4koJO{Ui`4<=+k6OUnsJNz3xiv&%KXOAXqobf8RX=F_4i7EMHmZ}<8!9^SwEMeRkb z<-eQo?;TGc2|pe*nB`kzeS&TF{R)L9Jeg@rKlvJ~c=WkX@5RH%&N&1M^ld4m z<(KIz96$SpA0eHR*gfIVCk1HRozll2_T2ujR#k_Bth?nBRf^~GL89kG$GG?i4ivzX z)gad*8xe`-{KUOs8-yktC-hoRZ2u@DX-2nVpXY~rmBG|Ql(WA3`Oc+)2G;cxiYF!j)B*^%5@TE3_c*2?r>C!|{Nj*Y8H)W6jOFzt0; z!EW|9#imN#DToEF6PWdDwE7|`D*1?TyO!34I&#iPvwPtGS$+E=vM8&oIlQ#r_Lea8 zyAmDk$|hSYFQAZFM?c)5qhoUJ@=FwDbbi#-XCc&gE}6Z)IbNh@6L|h!dWx9NqR>PR z0e3J|FwY-0@%PdCWZW~LjI<4F7Du&?>3CEqZJD~6Cm|IlB7#|nFuhgR zuvnU0rrV~2MFya+t!$QbU)cIGtPBcDN9rA#DMn)>A~4TCgozZoMEyZ;c?WMvb%$9D zbavU&VusE!(NQY!bN>XpVn!wO9w26YwQ1(vi3@u`6OgK!-iyaDfeQ(^8-p8;ikplm zc51;;${3Y0BtoS57f!Y8%r(ya*L9J0`2_U%WnjEb3udAgZG!N>UnVTFiTLZ}>$KrB z_xlr#EAz>rhQ{Qrs3K^&yiIKg`sSKx%F<(p0fj{WqdRS~S|E(2%h}|vQ+W^oWfl+S zrya8$6v!D$yoyuV;_+v6w$VxE7;`CKO5#xG_S_1WDYYFULK~&Pn5+PYB(pg_3SMpc zY1eU-P99K4biSU2Yn8G@HS&^LEkHhVczEP!*$Ec|H2&TspZ z?5Qk8T?N>3iuBfuvcdRW|9%SAf!ICX?jF2Uk4m0hAiO(IUtKV3iikKU9#;QTgX4Ia zc-G2_Nb&J7jkk7~BUC(vb4d2}0m0BpFuA97zbNg+JmCRfh#i6JRrCE7iLj|4I@)_+Hyk5skWrrL+Uwd)7!aUd9pbC$wzN~x;$O0E?l z*51C4y@WN^yYB?FCgL`!B?rpgR|;IF{H}WW4}^YZW0G;}VRJHT*hyfzW+2X`YOH(N z++J%3<79E06lMt7K?r^YO_&D@m(Iz{D#m+ejU`4N&bQDAqiRZ6)O|yGzhzQ+oN9Xd zdf^Q$?U%RbYTEy{Uuq-GtQvN@L80VN@purvp$dII)4R9=XM{d9DLiz7q!PX4=I#t{71 zQ~VI?Co)CX3i5l_dS;js;+%xnMp4C1i2+5C7;Qk=0KaKHD_|Pu>EeE@`*2rJ+(J8f zf`}L=mfl|-6eK%!qwR|&vLEXQ8w?qI9J!p}z@(E4#B0Vm!S%d*YVog6SazKdndubl ze$UC;j-)F1W=r127D;Jk{8O7oC4t7_%k;d#iHq2-drkGlZZR8>F0Uo~QbZ(HhKMt) zn}KdlT1aOE#02SAv-wKY9K zQ^)>(=zgP6tKK-o^>9wVPdrJ`W)Q$V)_vV?nEA~{3&8!rm>`pd1E9~MlDAZkdnFaJRm#UnMw}~h$dU+W{IEggT_IC#1 ztPO~VY<5eFHEHyv_~9pTtPz-Din?MS zS$|SP2}&~~zCOb3YqI%uOO;Tau|+H(8jOWgffIsFj4)|W5l3la@c#z%o zB&moib_Vd_1Smh}+5PhN)^e>O&o}>7^YZf^B`xE6FVB712q5z zj^Sk=(%O37&&b1k~fUhBH5#99D{I`QFDG zz&)yWpov;1BZ=hs!2e5aMM`IJR zk(QI+>19jy3l2N_emmpQ!?NQ7bg~5V*j)a*>YBsyjVsmyaZVzRWC__C0EGUJ%a@!B3d;napHXNtsTpy4 zyq5!5^=GOZG`n0ZEsNy@Vf>|?iI#N6U7r3=ixzd=q}c*1C9;~n*scdl>KG$_GW#bL zOZn0KPlU(+`uHE7V2W8(q0yw1sIM|!R5vw!mE}tk3pD8=LpCF3Kx_`^@55|7UQ2ys z(jWW3PvrDl`h1;DHJ(@9nGM1WzD4S0fDH+(#l7ccFkTfi@}l@eYLls|lE!p$yFm(61EdMbqNAz) z?wL!cz};ffQ~!Av3?lt(4^CT2bT@|EBNu+Z7Y8eaAYDzL)VzBYY!E3chg8n z9#+I47&uwwtKa9hy5OD4(_}kXYHL~X7-qRxnf9-5dCz0-?CfHC5=t?2U9MZ;p0(yY zUEX-e9)@!`4svey;eB>Ff7Pr0@ja^v6VXCm5uU^~q506dJ6rNh96yUV|CGaD0xOFz zHYZ(wo^JJo46d8-)D6%b^d^A^R#fP*X(;- zqZ>$Rzd~Efj%Yqv+3~t`CuIR_cU{Jfp78N@ z<_AnVcPHHUzuLUJ2)jay9zpag;y=mw9n3w=lOA+t2m zQe9t_svW+Df#u9LQ`m}6NH1t&7JXg`k2=w)L^r(e6D1JL;JDxCHh2m~8;zT&H zJ!dhdYgkYudH}Jz?J(%Ldi0un4A*Q}eyvUcgSB1Pa)#cBOLzWE5Rtiklpn7Kn1vMu za9vZ;+KRgV#&=6)G$hDaC|y_7*j+@nxUKrRhjMH*{PKtF=U1vb=9i_AQDpXKkg6YJ z#3}DFWDp3F2Qn|IQjo9Fw7i?T%FaDh(`AuPv`H>@X=iy39^q?PwQj*zOCP}j`O7Uc zVN6{Q3{HJ!IWksDWi^ny}R6tJEx$)L+p2dm?71)Fr~Y z@p)5h>aI{UrRS?fRZXF1HqPI$y3^y5wZI z9}uujr!aH)`*-kAYZ$is&=+>LanO|Y&{cj&vyT&rsG{3;A+H>eNp=Bs%226-e*W7-2>7{aO zaq$lW|ErJMjpmWA@EL9U=3}>mh2~mKjcYwUQ31fR^74sIqE@_1B!!&*)pQ2U#Pc!1E>U07S)C9#5uY_b88Pa=!L zYb^vE5R_m^h^;Mv0i!AjRmgN>6LVDt6@T{&Pi_7F6^>cY>wcDX>rS+eoQzz6{W=k_ z8GiddK2_S6?A`drC~B!|KY52&v^_$^fXpw|%^o}4y0Y7!I>8|-Z4FS>*GevK5r3wK zykFkX8x46DwFE@pFrdlEvqTk99dvvmA|Qw4rf2Z+NJg0^3^*9NtPrPUs2FS7RdHjePA6Kpvv&U=a_I6 z3h7C}zd`oWFGk`Oe^|@>J-O8d1GuokS5IdHd4=p@To!43u!)jCW86Wwd6MZN7H{V< z{Pi|mHE}D>kwXz`(&kIu9g>4#E`ThrL-rC%3G`QH zU_B3~vk(AdCk-u)?z?fW_Bft_eJ0Z?MiZR5e^9hJ zon7^i2^2#*(gpv8he&OrbV~#S?(gu1e%Bf$!2=y7oki5VL^W;~ zw1*g8%N7#E!xWpOTjUX?-Xy@-T}rIFNR+7{{?jlT3MSFY&`iCdzr+>W;hO(B+ ziUe+F#?I(sRK2}?*eI+VH9m%qgbYR>HnW*n;GoQ$FO$Sn1J%%^ zyFa)?q{hBV`rr?`G1onKJF@maJS5Xkp#;ZmhqHI=!7z8M@>yI!hH?S&r@ErLj*dQE z$v%s?44%P4S$9G#jgPS2C4vo>bv;xJJ~_v>7a|YqM0M@Z^09ak9qj=A+@%@@AnrFT z0`r6Q+k=2ac4}<_QhFTFP#)`--4{YSm!3crF_>-BXfH!a zRw%}kr@yOE_Yw0S0!nDe9$M^oSwCMV_6Zf6D((7k-OxAr;7P%LT?BG-l(YQeKQ*jH zrk4u#8fuICal(IDr%oaMvP)j-mr(+n#AVuTG6r|B^-)B#_dIJ@Skz=r3zbaXqZz{v zGEbl!7$~nS*PbDyD0shtdTBwDaNFhr!vXfJv!9i8+LtA zca$4;;$-DFM=mcec0w$&5+7wc=IwN8PaKx&M996jq|x8KtFc~Q+D`O;&`&D9W*0`> zY7KFCo`fX34iS@Hu0#u#-K3Y_?h=A(%(j06Ieq&u$#T6X6@}oZNPxdq4gk|b$9y*f z`*dt1mAzJ6!6fT*#g%aQ&aoUqpuCgoyS06MYAS+O*`Va}e>K~TH^`c;arb-)-$*Xk zueU)NW&3&|xA<1uYYdeQSooH!$_Aw&X(3iu`dG>@M09?=*#E#%g+3at_ZNXtLnFv4 z2h0SV@JNoehFHx}wO*=Qtb@z)ASSGglv?gY7RfDmakH~Lwgy;FZlh@PCHgTVpRy=p zW&Z8Q;V{E6ok`tJ4zOP?1|r#PlODFXDZehi$a&Csx~P@Y z0O|Zr_c-qgfpo9;7x`h?x_U|Ur(|rlxE)Q9MZdw(pHy}`MTJg-T=ZLj$w|UDCxwp# z$g2CxMk)ZR>q>=oy^Ooh@87?Fgkq5$y&K=J`zme`M7G>8cs}!?&0fX1=42xnwWI(g zpbH1|zF{vTCXcpRCqiOPDfp24O-WrPMv#9#y;Q?4sOlYUSd{CI$M3U<))dE}g2YU` zOp5geVa4l?UxYhplDxqWXPGZ!2^?Y6dMwTbI)F5%M?Y_$B7#h+3z|^zrH`5EGDU8k z;0S3ovxrL9zu0k9t6gNQh=J$ply$_NS1D&fRANMS>Rro~b`UfQNVdjzv954(1x0aM#NKH){i6(kRa<}7~fEV|{7SiZg zNs?RpVo3q%7+ABvJuUp1&-hE}34}MuqKYZp^Kd(0&cZMDO5SbC&&y~a1pMBNk&S9k zbOpN-Ut=@#cZWm9E{=NpC(pRp-=p9qP-)M{#T8IY_9oN-G! zuf<>nN!}-Td*T#9hv#3g4IP^b6l!OA4P0c9@fl0Nog{Nzp1bBJ-gqd~%6IBGt>WNQ ze`dWsKG)?%MJgnE+$T?k6c<^&N%Mi03?14wsf5jX=z}&VMfz!IWS*Ev_NpC_S(Oy7ou)kbj#KeDq2o5)U>cbj6o zq0_-qdYCqe9&T1G+;14U(i|tS(5kmftZH*OExG?>r`wdwm8i5@t%~fi^x+Nw?f#6t zVUUW3yP$6pZ#GaRg==Aq7ZemWP><17bf&?rFNG!Z^ut7cG~Cn)@EaO0Z~WcaR0xTbXcZ8cY3l0;clk z28Y##3FYr~V{Im3v0Q+jaiUEF==T@vhK0QjhmQcTI2f~j{cWJgC?o_mE>?KYlBWx{~2QAIC`uK&D8=6{~0=_9z&lJ#X%3D(94=#L-?I zwx)XNy4gEXU_-udMxf%nrJPwvvdaNB=T(y=ArHNKx2Ey)6^>dsBhyUamNKSM?T=&4SP=Wt0r)s5z~8Yl(^_cO;)mL! z(h-rzAGZzYbw$i7!DhKr*$d$A$1(4MNNR$41^W=`Kkxos&zd#S{)k7(dB53YNaB?G zkkFtgmHA7RzqIv7OHiq`&NC(9@MVHoe_N!>uNPP-(8$UlNdMYZ@cNs1`Zuz7%f!Dd zP&BVm+vwmn_{yQ}N?k54m@{WIM87O#&G)3GW%+VmPr~8%SVvV=?5o^=|3t(fr(0h7 zVCsDp1$rPBgrK)%Lo)DWist6R7k)S@cFV7&uqfh?2nx%L0pQRXH1$gKENq)jP4}vp zoZXVxU{jdYZtKDyyDX{2D{5LHdw28MpJPG-Lxwtw9)ok3_m$LgC5VXD2bR#V* z`dvaHR4yquX1&bnvV;9KB)M!>RHIuTUO$y$@6L7!slcudmAz}%bRViB$90wq8*7Oo zQ1)n`QUZPz<@dcf7dp)F{P=MfJbhXfLC!UIa*<>oZjHA2G(whaz)~tDV+eFRX-P}_ zUD*!@|L!(w_<98VwN38ljEI(@xt_}@U^))I6DOa2j&wW0s-f)?`eA>_Efe}R^7_W7 zLfxW+_pQ`sDkZc@C7Gk!TViN3LPg-}ko3#Whx+$Edjp9pcuoXyEps8j3>NpoTTWn6 zREP1ew=Wvq$Y|ZKiOMDRhXI%|&t!UZnXj<6`rf%l&6V2sap`U&+uC5_`HI@56Wv)> zrV&yQmptdb+e& z>)p8G+kXu4)if}$ueLGZ{JBBdymxOWvYg*!pUM5e7qOV^m-=q=eK?UUbfBYH{Mh{WA!>6@s6=D(i?^P~6vccW zkAd{&njd5hLbeq?1up;zU2`=wmmwAz(&+DjlRCC7dup)gIT6uaLnVQEJ07=R!B*CfhID z+S_vCS5hI+7Gw}Jw_P4&v$KWuNJGUgS4i{ktm(|B;rwDP>##t;l2z&Y$?3AuIhHZn z;>%U+H5D#k3-!W~TB7T9Set2#wa^-L(`HdWhAQ956)Q}o>r&~_&*a)k+tE0B`0z7! zB~>4H!`eB`+k*(p?+vaeQ|jbiw?@)(GIOZ!6*EU-z%qv~Lc^q`SwsBYk}3Re4K6O7 zcXN?peJfpdc1}umB`FPQ6@<(D>dpQm@{*ewKZnv|D;3y4cYcMAlLgVcDTH)irH#wZ z^7c7so3JT1Gj(xFzzER0<_|?E?M$n1|Ch-~LPj!rP=$rH(}8k|Z-FF)IAE8D$jC!x zBwY;dUN%_vOkp18v84K(u<{`IBI%ntSn(+)7HrlC(d7x_NMgmJS zooN~#1FrG9VVKFsZ!FaCpgj8ewb5*knY2b0x883Fy`v?yJX4pS?&rF|@9y>ozJP)N zD?-9WpF1c6WdZ+^FPE++nyXItIdsSukTWh`lY;0dDpjkU`R{$LA$k2;WOk@QY|m}} zA-ojLOi0?7k*ZNtoxr}%ZX5+B4+2YAyq&IuUW0vZt~3E?)gpR6t*w`xp?DK=R_b$Q z2IWOnXO3Z!k<%pxl2N1#gd-^>)1Ao1V_NI;$+PRp?iZ6u)_+bLN7wd+hlBC2ZbPMi z{$g17F*6JEeX;n0s%ssMdGaT33Q7k5^1R&hWK}`= z-#?uN1W^n^QMy$hdKx6p5{d;JarL!M3@w6dUuAS;~Y zn7psgZ8alx5z#jgq%brDoi1{t8UD;ZNGnz+8z`V1-PZdyltMX6m7?n?$H++Puc)mr zMdi#Og*G$J`<`n53b)p^-Cg|qZGYzO7JAGxaW{^Hj)X83p5xX<%hpI0uI zcpRm}IN!c3{F-o`44-I;ev=n^=244e31&y*WoO6Pv_ylp|9Ol5re_|DSt9t12?%XAl>^pROj%ei0Q)w?rJi8{GZlr z8~p0CnTr`6IBnHv^k$T~OM#Z}a{MyK%MG;LL9Y?_=`MY`czHv{Vy{@so%J`IBqf0L z+B;I(wu=9v|9z*emHY#fp}R}l1dmqIPvc+kQ;%F{RL{#qS80(+l6BbvnSdSInRL{I zjkGxECUE$84I>OTsQ*TaZum7)1%U`TK$vN^dyhHQ*)f&I6!A#{z+OePFLS_R{ZYtO zEAyB6!6_hdA5%&4?w&Pt6k#FXp!|%Gk{;4RYnMP_D^=%z45rJJ_Z%D^JfOJ0~Me9jOm8oW6P!RCX zZEo)8t1|rJUQ5h1kLSl5v*|*4SK;q*QDEDiI|=K+#&thkEWQB@#s8PvP{96>DIIPu zTq$dIvA=E=s%$>ycLy&*s7tk@Nltjjpr7lTSsSyle129%mw(ND@;BoG@9|ydz|^16 zm}V_*4Pb}-pTp13i_jr3K9@Mqb`8my{s#yLg)Cl7ofK>dj`^BPY8mjvZ49}s?fQd@ z^1xs@&Kh@FW8{2piQn!qt$`mxZ3vPy1}7u%q$99mUVysu9g5f&J@Y3Xnxoo)Fg1eQE8P#q8X_gzAFB3VYlr7a=Pu45txmjVhyL%;Z5HKZ#deEx@)I7b;!KR#F|%Kp#tP==QL<#2pib+$y&b#v^Rqp~HqZIANgCNc$j-MV*T_EGOpZtUKEP+X&q)#z zL+9nc`Xut<(}z_0W#@ALmRJt5U8E`UU;E=J(##a2Z`fgDO+4MKUqz}Q1Z0s4xnE4+ zs0dR&xn9Il112f=?UZ6|IS>jRxk44`PTsawxO#r+yNQ=Ad|I`&d2rqgic4!4Jh&dq zM}?FuU#s6JRaO-G6#ltaMw;tWXDa*UR-@1{-zH}~e7M`{_n!Ucr1z;idw@nDKulsW za;*P|L5bTm>7(_er>h(t87E-=Gg(Jf$~E9+L{VooDyF^2fKyY44fD`e_|naECC(n# z5JoTl2lZrG4ei)}YFlS0S0t|LyXTpKs=(J#E*`GlkAkxGh#~8;Wsd)ZJ(DjwYq*5; z1qEt);a=iIz`T`f^;}SLTP&A+e%I&sVhMPAE=*~3S>?N)X)_h+txiAdceH&pPtQCK zR5VXB=vm6#Ge2Rd$Uan`Hs7ZWFtQ~f<0zZgj{yOH4zycbeev-Z)pKWTDoA!4V{M4+ z=!E>ov71nuxEYz`=HI{dyFaCZWWK(cx>dN14mI#EUF;%vzBx74yS=IR5IrDm6Y$o$Rx-(Ez5w*MKAZV|7CI|P$u9raUYuhGTw-EW9%{0>{N=85r_wLim2>5@Po zvAp<#fv&JClO==b$S;yVjtyzk0lb^yUe9MQkAW#V-r?jW>#a|Y>`nN?su=u+Oj2cFjElDkJt+5bU4vtU{yBOGY-@P9$!Jk zaPm5m*?|0iHapsV&E3%(LZW6aE>xlYeph$6;kY{j>Qd6kxzA+{xMX$^i|(#2I2mG1 zz#g-0~sT_eTL@NP8hgQyu|LIZkKH0-%yGJr>RCdm?hcEmy6 z(1$}#a|ol!T5Ze2`IOIMY4Dqs%4uY6eRB8GWVwzWgX5~)UVQvn5$~M;No)0pH~n0IRk^5k%`P@ z3>8z@q^R^?^aMl0nL)k2vc>o!WC~N9(A@@o_`iIu1_QlJ{9d+ZD9*uZ=aSJUTx090 z*RO8}?z*=M>Q-D?b_g|xYRVU}R)?=03$h?Ch-y57wCwfnMNm@pXsf*#Z{})_h4UZs zGE?arn(6EmN`HsupIR9^AJTeC|AIehx3lQ}9p*pfbjV^?Lr1~CLTtkuN5=$qro2o- z*Jw9$!tQ-VZ5`SoBl!gF9oqt8(c$e}=yC(ESJ*y_m?K-wsD>SyC38WAUf^rVdG^Dq ze;hzm2|P7EGaVH+CMtW`6DMglI|w~OcF(A}wOd$#es58PYX?aCb&qlLN%1=nG@$5O8U>R}2asAJp~F>8@Hf z?yFr#Dm4(OXbqi8>QWmm?_(st4D{0!8fU+7Rw2>EzjhZxM(k3YG9BeN_-RX=pJs8B z2X)cr;1_~aJaYEOfT^P>!krj))V={uBOa(noC4Q zC2qy_vixFD%7x~*2OS;#y}Dgd_)eNlW&9o`GrwG41Vzyj?;75G1qdmfBpVzY!}Xta zvstgs({nyxo(=?OEY?`Xd;Fy!e4x}EX_qlJHrYL=%Su3MQWsVl+H~seHi=#jCvltq zvcJT~O`>Uoq`YA<+a*t^i|5lbXf&B}bZHCf^tgLnQh`>Dm$SbT$OFr8$q)Au3@UyY z<2xOAdPIz7l^e9_kb56-NGm8LA<5j75Q{%EP2+6MJ9t*}V>1m8cd#t8#Tv81ADW+a zn*25b(EjaVxC65*yuz3CqNCQo0w zL%Vhq*rF|Zw#{o+T~j(s(AO0@y#D;;KBzM8lBE0z$C(ttZ9PN(cyqGavU@o$G>@u) z`E=a~J)p;8Yds4z!0Hde*){aNN_?`nZE=B(IU_H4>1guXj}3Oqb(f2`(O`?kDJckX$w*8|I2UZWT}q6J4MpR z1vPVAWYfdyXxo`lLBP=Y{9AiY4IuO98RpEZNrpcPny%M=sSq&?%_JXZ(^`VE7?Y1% zS4gD5D(CGc18xm2h>!1LdM8MXB;SeWCXwpZ$zH}bB*>|135}o!7Sc*dxD>KlhvW=nZv0=*N; zXX$KciOIdVTXXCAsxle({B(yEiV-el<5ChRt0~c>yxR3-MS}c(n;J`Ke0cOK1vyXB z>lgVq^9Y*8)9h~2r}J~Vd>w(6ZKGAkoU#Yc<}%%uzD@24rz$1%1y#0`FJa)??e=v6 z%Wprn+n(F(X!#X0e4UwTjdDLv9ACXunH^zAAO!w1&N>-Z+sEGT|6*pLAfeNsv zyToKCPqH61MPMNqVwZ6950H+KN_j>OK8Nd`1bss>M5~}X=fa@ z5dP@xwc$#(`65W~^TW$}uJ=B!rs1RvgTUK1zH48GZK;)VRh9@M$2?MbeI}&D8rbyk zA6)pFdMiH*j{)J1UaQ-8B>(?$_0?ffb?e)dfKmf0NHZeRpmev=At?<4B2q(l$q73-JL^scYbSl&pE$yzJItbW@hib_R1&j=e`-^PDp-n$&>o`4YuF?RZqmA zi%+3HVrAB4wm`HLn7Os(O`HZlq0ikgz82K@xCu$NwrJbiRA6cG8WgeneYTV1vCLSX z`Deyi81XJygu}qw>&MX?u_V0F_9BS6GGT=zPQ5)KJg<~li1+7>Fh^B&BJc6Z#F5@B zZKg?QpIifZJ)P0kUkZCic#am;+Hzgh*^MYyR43V`0sCdIr^6wgioS^9k z&rX*B?I{p!Fi7vrW7Z(wYx9 z)1~3q3WbBbEP3M0SS43x$3hnKZqjFk!vc&uoDC6UI*_0F*;(0HIE5MZJn4{3Z&3BM!KK$H0 ztHdtTYV7)l)3*=hNxFDtypZX;o0Fxza*mh~7lg0PY)v&)k>xX+DZcXMua<|xc=bF_ zpT5ND1cD#Yr8DmG@yxCU4emx0MHU>+o3HmyPU25bUCTFeD^0;KINbJ4tMR&0ggr`# zlb|B#*u{`y_Ody&yLfo9^Yd>$e)<#zeyJ2v4hhfqfmtc1i0CV$T=)+u@lHEN9|BhF z9pwNf0+{j}QU4Dg7Dse#V^Pr+wjNF8g$wNmUmm2~3=!s`NI7lNHaVNj;U7~&3&AF? z(cZ-s@Kagl8Q$ZsK!aH1rI5dohs%sxMsn@jZnCS(;GNdzVlgex$;?#Y?o?j8^;k!4 z0?wOXM3TYj&?!kEoPOfb7}#=L_)kdK+;t{UEI3FkV|&J5^y{54Kqx<6ej}K%AvPwq zlKq@?)icIa8x z+R1@gZgKnQ;IIPrATSeu?X>P0WmvxYM{U@k(Iilj56q`nwz-&b|1h{%uV~mwF${Gl zN-8uMS!pk-HE=GmKKH6IJpY1k`!Vb&B%><*#bZ&dq;=Sn>%Fb%{biTd^uI+qXqQ#R zoP-}BHOrO7^h@jJyzMpWqZoqN(!(~v(s%c+y3kM>61M^8>DOp791;Smh9t$eu*YPO z*I7x6Sqg%7dfT-tHrf@gk=`h+w(lIfpeg&4H*RXl9>=5(UtUUA9p}ZHU7M%KzS6f5 z?)1tjwxid`+89FYjqx9MbTEZ9=EM@rcu8NM4TRY5r)M^zUW6z;NUQ~l1|9mPGc3~K z6of9%+3*~d1c-9%@Tg_A*EC7dc_%`%MB|*~aC2WR;U%`TRC}lMNmGsQS38S)5G|g2 zy6v#<1FGYRdMpH*5?9Q9zKlmQ4xL|>P1VAjP7TVUQZ&qZrKNe+ti>*6HPIe4EeL5G zUwRMn7BG%JSgsh5rFs*C&c3O~WV>z1nn~w&)S;~wr)60qHx1>@yOsj^@MlgEnO*_t zWDSkmA8_@ztGr;LgQ#~NzNaS1bJdK0?k%TY_NHay&*$=t86#AGG&+Hq-AiKqmhV;h zEGA4@@0~~;T189Sy?Hwxxxfc7>V?xqh~8w6zmqH$jyZFMm|&vG0Uvqslxd7=CUVus`A>h4IZW_pumj39y4 zrJQ%h)5*(*vR2j|c?APv^P%Iy_q_X(dMfwER-?Oy3BDdV0x`=j2!R^`9FD?LP ztiAuu;9OJ(rhQUc;`8k?CX)SB+b-G2O7#m1P{^}2_2Ljyf$y!9ewkCZc>#lUtt$~l zqlqp_8>oqsed`vQ{a(~3=h#Kpph84$(=wfD6t~|k zOTg!ZagU@^`^_ggldB7DgB4J1Xc_9iQ7NYHF?J2uTn~*Nn>_P>J|5S6nnbCuT(a>d z*X)9Lv`ODmG`uivu4x!{hO)or9#rD>l%?_<{q3@8M9zom67vARxEY_z8Ubt_dNsvsS^P(id)U45D z$@3xg$r3mH8@z>7k2Y?S+APY$Ihl2`@e+?3`3+|aQB9jN$1tix_(73V@5*|@Dg9uO z0sd1$fh1i9NHnxye*7u#=(TSrwa?|NN(aPS%(9Fg(b)$R*U`!%{U5e~smq?3nK@C6 zqm|DJW2-%#57`GYrSk6X6*Zy=F{Ga9(d9#C&DHwqFXmGBP%66Adkt=`c6_>L(Obf) zZJi+t4^!Eb2Y317{NLf2b2cr7uvN6ZH&me#pKCs;IUJA|aN+JjubF(L=egHRV%bm1 zX0>@xdws-y*6VYfMr$$c&?|ftMqp!AmYm8eb?h!VAA+9 z?m*vU%-7Nkhz=ZG&}F5>JL%3um*5IK5crLCGWXqROGs8xHlL_bmu&UWw^0CK(qm%d zRw>LC@nqMS7)(B((LUK)R2p7eKX+;94(a;?%l^ShnF@1Q(F?#1P`QNIL#2K)yvoR~ zK!llL*Dx4LT%kQlD^elgvXgdw&vL2{<)g<4ToXKzvZ&$TskYqk==^&<+Ho3r!hkxy zh{nj&9`iHHP~EJn6n_*T3d&@BSY-h93`4V-2HQ7Zt9XaRzjH$ywN41XsE%*!-RBy#H<7;#ZCh*9okhF=^fUD7=`5pb6_JFLrXxi@ z8-Dt)N&Mq@wl1ZJ^E`9Uw#hw0$q3NtMRF6$Q+l{7wR)eJw0tI1ewBq4%g0`e5UII3 zo-B?g`9KdJ2^14~R~7*s^FHjCep^pg{+-(U)R;AQ{^7PMcK+N)`sBVa1C&=J&OeA_*6Fzb1s==B*!V&b#Mo4kS|hV%}IUpy6OA{-C`lyVk(iD5!j$!H+|O*#6gLp`H9tuz zlxO=?Wrd~EXuz-thwTZUX4E8}Gt<4;xY4#>=y#lthi5z{-9jf%wkZ{9Q!U^BA$Ke; zxdY+wxS1Jo*!jM&+_bmgE-=ki^0_^WL2YntZIRpe^=FFY)=v)8Is{79=mE*S(bJGq zeZuvUe1whV@Se@obLstiYKv8NJ_BY7?_h~fxL>!Z19aK77@d|pfwYpIdEUz}Td7ej z4y1#ciqg{pilDr`LygZJDlkb-Wor9d#gcG=RwDWdwC6!hc^Q}Ph?TcIk5x)q__)6P ze%NYej=!Jtq&|h!iY&zaLM3)Z;-Uf#ll12(9-n=@o>Q28Z=IXK{qH>uzO)u*L6s-F z5|l)4`@gZCJg-T?z?70nWg^h|x|^8Rl##e;#Xl{!I9_g2nP@{pv1N&{*0rTJT$`GC zVx_5>$ziuMTHv`Qnx0+tz22!&{i5ZGK-x@uRI%<%fAqs{C}favIy)vV?ma!*R0{;5 zkBY{USPzk9)gOSA+ua!JzC5)-m$rG|>9plnPhRqvWuI2k_2rC(@9sGYe=Mut;G>?m z!5eWG{vN~jKA#i2$81p|A3^^j(gPW+acQ25U_nv{>pM|a`cMv>9NC@1{^|up2V+4d z07gAkGDy-lkdFXCn#v7#qZQ@8O|tH>AlW1bhj@11hg?W-!++9dW-TQto6FWFbDDwN z)==Z@n%$oYIU}*MCaG`xzEn#3bj{5fhQ73LF8rA1fW%Izt<%$CwE;>0T?5%}qwYnT;4_`z@`$*wa z>OzqOspI8AaESe}Z^@Q4>Ey;lNv*0x(MG>O+c*HYEs-SmjrRW1cc8mk#E&0+Q5~J+ zB7;w*|5Vqxw@}om9U!F!9*dWq-ltb;`)l0zgoC3X`TIQ((-Qg^5;DmD9YMw8E7>X| zj-A-s|LN~-iZ1OGcQTeaX9qwb2@^7rqRRzk)-Rd9}glyFOc_CX;<@+(Tq#uq% zulEQ@1ss2WCgYat-Iy%RyCyfT#*^mzul_sYdO}<|N#0*3W&AMq1t6T#8!y=4Bss83 z7I~9eA>)=5{P*pFPXJ`#{2i-VSKt=4jC_*@Nok>(xQbC3zF(M$e(jbQBRl)=(yHof zn0X#+Bo`fV)xp_Ps6F3(i3!YQck`8u`6WfOa4rQWr+})xelE(Vlller$DO(kJ{qDo zPLlH+?A^q@dkd|_%%xg+fFaVuWgJLGoN+EvzkFvETn$MUfB7qOm^7{~kk;?>qxQTHKHnJ4<6Y_Fk%**qo?kq|CvlKySPC}eP%Y&pJ9KW8sW#UZ{`pS3S zGo2wgVIXXgj?XB@+l*$;V~y59V!ISsuZN3%eZgB)70ux64=7uf&zigL|>#L!XVqo=VD;IN1rJ zpZ(nPf+XaX&EIqIb}wtNtK#S9-v>_!5u{1yKfd#rGqI~p&`@1Hy)?+-L@RP7D@=cU)uS4R^CXDIf}UR_2t>y3@06(uT|hP`;%#x&HxgF-}JuqL@-mI zi>=amHehe&J1apO))Y=js5-nOjlhP)m>03bj_3s#G-oJkzOlhEfsB)1N z6BDx~ZD_f;DcWHq@v*UMW;72Pr*R;^Cfh_?6_v(+$AVtUwM@Pt{o=*i zES1t*$u7(>X$9od&r&0INONsFRVKa85Bu}t5bgQZpgMHz!01evk9v&PGth)f!d2H> z*~sX-NI2il7>SFwD6;OSNF?G{)2j**TouX5&s+dK0Q8+T37Sp7cjow7L|kJydw^vZ z4k4cyOQQ%_i3|C;dpWFS_>X<8>)&vY;E!b2K62&oc>2N$urP&|t-rHjLme~dUihf< z5uEY-SupMlPU`-DBG*vX2Y`?`kx-|gZc^o`3U~}FUf#=^5=XsD0!GEs3BA%FjJGj<{wJ7?=t+IZye?ubz^m1JmPM}%SF@BdZ!N{kO6ojStXeBak# zPXYaSa7OcdAVqgE9*Z>coq1vE`TKUEx2=H;bRcnlA)u1U7aug4e{#=$w=@fXwS_O0 zoTzxs8(C98G1miFWk>(jUpd&w_PD;E_H+u&K=v>+1IIk~ZR8;N^+fE~;8afVhZMcHe{(UL0bE*oz{0`;eR1(H;Hg#PZ5_IR%uzp$jcry{(`8P!6B@VctHI@V^M*1*7urBn*JeM$i4 zT-LOpsi(-q?-|Z^EYL>Cyl6V~b?+IQl@C{1={WW>?5JS9i3V{iLERr|0IA)BDa1=G%)D=`R+#XGTgd$o+&x!>=YTbSOTsl;n!m<*e%#Fir zSYuy)SsXCFE$R5$Skw&*xgGlJIKF(8YtlN}F~H3(=e}%{PtOS)+bDMLD#HrLNAx7g z7rd+@DT2qwj7&W-`dHquV?}%eu=a~gtH@lPxOyL2QOQv z!hWqHKZDFekr1ZIds{5`dRcKWMd_`hviBd4Yq_c_2Yo8|`TdUqnwO{9dkJIT1I*J$=c+_{Hx_7)k!vEFB;G!TVZfVr(&6;7M zXj0qQ({Ik6>G7XFtxs5WemBjY zD__>kh@3kp)EJDEDn^7`Osj~h@dX(f`m9mTD7|cTjsq06M{%XnzyfyM;uEhGb$*j% zYD$hMexY}iwKaAU3uyC#0n;@8sMq?lM1r3L_+fF|Nl)cVm7(xM2=_fmU@txi zbwy5~9wxmU6#bkc)_COF1YbvJ;x1f96b3$^6WC#FivTP|MC1^rYdMA7-grnUtd=Ws6^i()-h^9=H-QG(v!X?7mg7+#Qu=1lcD z!HE*nhK{{{7FDRK%I_})=*yexZr=^M7=c=(pPpf^|AlxET>Un%Oh@2;8$ok(bBm;q z(}q@8B(vwg(x(Gby`SU@n#Wb#v1j5Ht}>o9pGZep$aaoBHM~CbeGtElY&fU9Lq(Xi zC1Gdn)-WIPW%BEW?+u*M>Rp-L&IaIg#!4a*5;a~|gj=$>-}9{YjCn-)cv$YVct!bG zvl``;0^{Ob+Y2*@QzT>;CkE?6A+G5=?7$pV&NJ*Yb`%MwAwwyX_yr*Esh*D7?Zddz z(bs1?3kVe3`qR6qp4ZyGS*_!GymvREZ>~%LF>Xg79ZZxV_yk|$YvI~&!6$g}WnT=S6NorD@iZylxh*NDN-hQ6h6sZ%*8jhqL|>T+tC zfBr;)z!f7C(?EGHxqov22INM?FSUHxS zKi@Wb8e=TR3o5Gm0F%9(dRXy!7nO$GYGCCABsq4Q&1}gHOqBE`#L}ECV0JB+kPI`I zPUWHOM@}a>y-XBqW=-i7HAz}l>{>DQ1XsnX&lP;)pAMLoqBHPiTI%gB?wy^TMSc60 zHOs5Xm7ALz2Z*&m`Ce3Ao!CE9W+VLLoO?wY|oo@JBxcuOG`vlRBSahHKD}Gk#X6nsS+I>9pHStU12bg zq~~c*IaiDn{d0FLkWN3^NlHYh>Xi_nrVX&_QY`+erLD%=sZ14RDM%12W-Iy;5USvQ zyX;rY_%U;@6-c>l4}ZJPq6ar)#WDX;oD?u@bC=CjEBXa!9Mt^bG1WAKKr}Jj&^P?_ zJV{QB_`$@XjU;^H_~gV^HQ35TpD#uCv9SALL^QqfdzVs9nmRxbX^G`3*$HGIpw41Jn$ixTVL}2ZH>HTP@sgRU`U@^g@iS-3(V6l9tiLN=iB(zsk|os6||R+$^*3->-vC*ZTNuJyudwbh4o2`v~gYjjj38 zt}ZW|CMR_T99L;lyw5W!gj`jGLL(a|20}x74lVPlHSO)~7Y%RDu(z39F ziHfRT1B03Q9THXE(W@D3QNzJTD8=kBw?^m;KDhBa-ko?66k<>T@pW2cJxfgCfkjt;yb>gh6suS!dZ5DL}Z=C2FiJ&}1mZM4%5)yg_ zRAG}~FWkcjhH2|MtV`tl5xOGTLb}R5(q+NCwlkY?tGF~QjW5jpy6hO7ft+o&gDfTn z#_PMiAi^3+Nc(d21opV`p*8b8+LOhu1kR)Lxv_kc0vJN#z&`MIQe-3)0CHl1MfFY6 z8|%)UcCV9ZdK_XFq|V)1FD5<(gXL)Ma5O5$ex_Q69KcXrdjOQrxgbmVcEv^!!%Z`Z z;p!+5&s%dSblrPXja(k-+~~+CcCrID z_s;l@B^st#yH-kf8WejzT8dS-m81;)A!X64A_H~~4%MKM7M@V+AmA6DU?1VVB28NV z4*J=B{OUsaNERVzTYKdUxbB$cLl$2D0@?a~0J0iQ{8j9Q#lv3>RIdRA90eONRo$ap3h(nZtOs@!8e zDp}k6haqaJL)AiH6#8uuOxfG?f`*Iu z!2=m}^_an>_m-B$tDEggI>oZ%RnMgD2bq8JoVh?;Ruu@is@hIMd=bgX+?H|Itb{KgAZoWzBhNqJuszEw1%L)n!t5Dzic5dg zO6{Y!<4VKj4@d>yA>7Xo*N}oc@FKEjuzP1o&&6<>nw!_$9wblVBWn|yXW3t$16uJ* zPyeIYSA>*5ee&c@kAB?*R|4>6Ow!pJ2TMgYZumCM!a~J*#3UwGNP#JUe_o9{B?Wy< zi4XS#La^|2%r;3!AW zyK)&fjll+^RFkuQY3kwDBLE#~?}%llwjG{Y|_q{+|ZnpHRK7; z{SADLHzyc>fKm zBr@Tm^6C{7aOw<23aPNu7Go|)mY^dSMP|>D>0uYaXiVZ+!GbKk|AzdD0b+S`E~2_s;HLXG@xy zFViS1H%5uqQgNEe)Mg!lTq%A>4Q)vC!-)F=Oa+A&1VeV#<42hyTA;s`M3ad_ET=t@ zjtGdYsOL{C|D|cd1C~_L#&{%{qrtGXif=b#R5jwz0pnf1H6h0j81zoDX&c0y$#(#) zu3P5iFU!BUxF@lf9Xi@k`mE#y@@9s1IYV3psCP3C>ix0I08Yprgxc0?TSLj|0lYK} zKMya%K~2gWMVfn`Nf#JD#%I?TJ5Cuq`wX;>JX39PpstD}xUX&Lv(Tgw5>n*2szMof zkz2VvkU}l$trtcmJh6CHgz=%w+QtI8x#yr=8Sl(gyZ4bK_B@i2R!p@9`eH?|nV95F z8%ItStMf6r-|S)U(rYL8T}cy-OG0=^?&HKr)FJwQt-mE*Mr!(uGY)g7lhW#@{RP2Y zx7eS{y`5R1Fv6pt#uUDCeQ)iXPoJsnO5p)d+m7PBo^+1Zuv8xV(Ec<#Bi=|b0IV&6 z0Zq4gUEp&Udz5FVs(9;M$GD%e+}C7hsP@OU{^062sb5RQD`t#6!T7RK#U z#txA(UYm38Ppv-nq(?3;F1}k~kzk)hi+r#>*@6~ir4qAFzQ(ENp6HMXZ>IZL8qO{f zaqQpPS-)f`Urv;aUac7K22Y9Co9fZ(3CD}2yrZ$dw8t@SsG26?u!9yfhSSOxcK5@9 znzHcEBqhGMcth`TT0}93W+7p|73k!-Fun*p=d`iz$8TCk@MVoNK;rJIM>a6)rntHDokMB7E7&M+b+4byuG_iFp58C zPnRt)FJ>I4ch>2FFDl)$e8J-h?Gbyl6~yb4^@atEm@xNPMz?z98M9(Afsf8r`kvfU=w~1jVo}ypVZh5DpM$p=Kt=0Kkyi`U8 zmYuAtlbjb-^ zxz`)K7K}dXO)|=0N}qlVuLzU$tTt6IO2Pej7~QMdY3lv;!uWaqPG0SG1@X7Y&PVfX z*9NuT)vjp4lRf*C3yBT-xLSoj(S`tqTc z9^eM0#dTH-Fy|W~)DadC&{5{&r2&UK(n2h`H^D8#>o-IUj$@YBG=k2X-%qCkcZnr* z_}uQa($QL$s`ZZ#)(Lw7@Kw<0vBEoR-OY;;rmPOr@vk@0w(*y;Ag{E6)gJuU^ay1r z*Cs)&6DX}BksBL;ZnGVzR;C;9j#-U9_pb39fLg%4Q?y_Tpo$0S>2!yfW$uI(mj95Y zxZK**pt!t^Xp_AA-B6+*2H_R=K}qZ`;U^%BBUPGdng1!^I!TbEuI$LxBNshvd!+$t zx1+vRyt8IBdu&U|7X2b&O(7VW_0ljXmh9qlJD}<^7RyH>+3@WkG<)FVj)vN zRT5dZq^cfek)POp6Bq3vb4+ph%6a?ZB|g=KHcsC*goub9ginqxs)I;mjrU}cj?_7f z`?6SgrBIl@C@X9^aD)~t=3pGY&Mk#_&OHc3U~pi-amG0K%PF}V1QBJ;#m%j15Mg#* z$i=RE%$CG1t?9`gYc|5z^bGgL^hM64^vB+B_DqWfi(+fU>&&OePW;@+H2xw-SAtTy#9zTdR-7DZx9n%XN}(wY||4(T2J z1oo=CL6i^B}58bEO9uqmH7Z#qbqQI~#%Luhb#hxpfMb7IYOo+JYQb(-B z#8ZP}McI3Um|sA$%ZBf9D-M)3`d7%9bLsjLop(+BxtEznru(TW{v8SIJ+2p=9ViykX??m4%nB zEyvSq>xTyigBO_bg=t5Br+s}Ax+0!Rv~u#J*Dc}plYU6g_?^iz8eKV5;pQjF6=X^71qpqajE5km z>{L3*A)Fyg91QGXF4^d^*k1M6!c&12v4rJi+BhSZXG9zd$Vw>TXveie+RUVJtJ=zfBZmgo^e=BJ2- z?&DW7{_7qf9ae!x*@s+^L9j!Hm8Ci1d_VdXD=fB^;9zWFAUlfOPs2-r;lz2Eh*TjJ zh%5fc%#Cw<4K}}*3P?jC-Ty@^`0a`iL{-*L0=cO4;srU`o!^>&lUU;I%mk6YvA{TH zvYqS=rgXKxZ4Nd+xiJXk2n9Y*t<3*Xymd#-3>n$6kS|jm;CCy=|6_Hu!J^`d8#R z7Ey@l!X#`S?x;xVF!jssE#bd3L5rM_$t4!PgM{)*%1&f7ot2aw%ZIn6*{TxHJhcRy z5^10ZOWU>Xb+vNith(A*tE;QaShMPe+`dl2>BU7zJjrBi&Rvi;lqqPXrs57njm4N{pH#ax<6!^eIe!B`fB*T;lo%7GXHts2qfc*&MTl6j~8Gn|iO*9YxokqTDW@D0ERJajagWmx1U(ls$Ae_)- zQnujgOpJmQyVd=X`6fS&qBl9XSR8zx=v1aAJCT+Bk|GKvQ zFL_vISMJ^QcgfY(WAkz!F#pk@#UUeGTe2}zfYS&4)4n%%!Q9vT#b5YVV80$Y1>3o} za5KvtgevC)|4IG~y_&4MYzZDP7w+2nXR2fK2b3l*!2<*DK|>ppeY*Rr0-s7xB6~c_ zg2DNPiRB%w5|f>a+t-JK1S+2JA3_|8q@we`v%va9zF}cdp@FNCi~>Z0EJ#>6A?qOV zR?s$QNZ@qx)z+Mqz0*IF`tdQ-yUw#F{9^nWUG)A0un2D7)||k+dRNGG7XoeKPCV#fV~I^kQB@@$qXlPMZ*O6N;zG5?B1-QJ^G^ND76%Y8KpPhM z5{sLNY?9NleuxN%MoY z;Nhh(*xK3(D}E6Js>T2G#$7}HPVw9y%;tuSH-PybBv9qB?G$oC^6EP4XOD05bed#L z<6B-ceaDI28K@!Px;>OICQbHlCrzk$qMhfbryX55=5i7eAHaOE%qS_*1WxV~PEIwD zk40MiYxTXo%8zMj>3DcF3En@+@dy2n8E@$J)AO*uHOhYTi;WCqz;UWPj6n)W1k1N1 ze_@#~YjQ3U(tQNlE`t*kTil9$?_P|qO}RE$M64OMvD^6Q|6EDN1hjyrJaMyR~j9iodJ*wuHoX%C8Y3fL>xRmx>o;g z@fNnrR6pL;tvSa#S7yj-w*!a9j_bQjzbNH|rYoZ4qqCW(zlR@$t&su6+e1_YY2>Fp z9e{wD?oD5kv~{P{(sTO>iXXeJgdp^MIQiCs{JKDeSjO_#NRNj!U3K->A3tg-ty{-u zk%MQ4KKW_Po+{tJ`ujtJmoC z9sDba%z3qYUzN=N1s~uS{82oL4-+}r9@M?QNV(|%tg?=51SXE;{NHxfmCPq=`O`rk z>D=#;v(*xDfTxkQ><`=PTHUVE(58aNNA?A{`SqO$q0fUS$H#=ggagzpv4T4l^0`&} z_n=LL0Miun;RBkivhqJmYry%(?xyb==i9c3ACgN!JGEMa1X0OxFA)h`zI!U$GU?9J zMMz|bYW`-a%{x~BVZeU?@~&_Q!N5>{vpMUrvifV+FAAWD2d4*^+Y&u&Z@a(J=~p=B zf5jSXiDT70jQRG>GC92JGcX-%kZcjeAR-8o{`0a(KvH{WXY@|Zh0@n=$T}Pl30?x# z{O1>&0au=@KY~n;)`tu1m*k-4Sb%DyGA!A`S1A1(k9AZ`%!Brx9%AMDAOVCd8v+6e z9Y|+&1?u$V>0)}xW}`PK@d2`3>N7q!ULa?8YZa7(SH%$GoA&Hvb=TSJyf5Fjx@wi!SJ&Xr|YGwN0w;jKAmF_m+A$}lRmnNrsGS7lgvKiXx183MrFpEJ8t1(b-E< zDURSOnC<*QLzSFEbKw#-z??UujQjO(X%gUZtIlRd;}7HHPWVdh%Wg|m-eB24aN9erJ5!3xEvY&&VxG_lAa{qp% z^Hvn#_gOnRrHo_KXX2fL`6q&!t%)X6(mN<~E-kj7XNg8@g<<+e{CX#Gqfc`6J>wBZ zElvTJWay&Lo}q`1 zIUzm)Bv6oL%Eawq)S|hKPCKAl4&jY~g(Z(HJa)AWwj0X>OKbJ$uP9_0^6Rv)S0s99 zNd3TljDYW@14u(U01WB^*JLvF*mLuO_lsLz&2@S*6 zGOAr&$*LAxTa+Nq5yMiOBz#m+;|2_`@VN^3Zk16z8mmfUQg|)v^x0StGH2seCs3vY z6V?g5)5;yZakSVT?SAovgM;I+I%p#Xxktl+U3`09-~I{4^6k6p$IH(@j^Kb8W8slK z5xv~?ceas;@ed9;ixZ>pcfH&yon2p=JFnU-=qzGb!47r;3_F7oWFrZpJ~hsv5??rv z3Er?ZS;^C6L$|2lD}lcE-Ol!x&MTksqkni7hG*QKFZ#v(Xq|4MC3NsjDJsT6zDeu* zdZJD-45{n)i-R+@KDEhMLHu#~U3sA+tTLnkt zi<@IepgBO`BVz@Qn`8Y|xJ^b~jocsVNnl)tF4Io#-vdzxDD~``AD#=t&1h%&a?uya zupasPnX%T3&^+MN>xM~~Q19|$hCHeh4n2E>GLUB|dPV7avtf9n1DMip4>62?i`x9t zPvO4LdSO!dR6=724%n)MqrdJT3ctN|QWv(i5O7ToW?_o6F0)=b5B$X}d%JPW87SK0 z@Rj)_pq7h^PyH>t`=d}#I ziis-_u6H1)TDf|ecdQp)Bg5cZXhF{ipoGv;#QW``%xLF!v|vB%h0i8D4U7wwG;$JE zo&Z$}Pb6ilIeo)#HxC~l537CtWgg^;IakDP7NeC9XF)B0WVpz=Oyy6XgKx8|mV0?V zS6Td0!kG8x-2H;B$zM{2Eg=ImmETC%4XlfF`?QMmQ7T(`t366wlo{T8NKmv|5e3$kv^xm%C_xFjDx&d>k;Br1%&aqn}))b=hi zL#WlLXiX3d4_u`nC(jB1!f{X%xyXH&YZnT!ylw9hIL60A%ry(916v#O`3~8 zlR(|AGk;^b1$Gbii_g8NQl(v83X~rn&7#uVd3sj$glynL@_22ge(U$b63E;FZ{1c9)#ij^?4a)wRI(TG!z8d8z=iO#`7-|0}Mb zpiu1u?So$ajT{^y!nOnv>GEp|<0^0*xYYaI%b!5mu$igSeyWuC`(RiCMcNgH?YsQ} z(h4a;%#`5S;gYamI0py3#y76Zw;k)nqV`k~y3^p#u3MtemVgc&h-c9T3=k&Ff3dvm=m=xq6q0XPx%1|?tcah zc($mB0C_pNqO>u>mwblURnEjRU#Sg44J59E5XZ8T)(-~j{+dMtSv zIA@^{2aT3J@UOpvt!NF;D4~4hw>u7dNSj#9TDEPMqa!f0N1h9e24o12+H=>Bs?Bez zqfKq*^S?%8{S`rSuzAtmzrA{;CbLWz5M<8sz{&y}I+o+rXWLqCL7J?{*1;=f!^gl`K zz7u~)_VkL?(5BvLfFdUp}!wKwj@C$2^tsN zD7dCADD2rp%Utl;!HVVH*=X%`F>x|tL|VpOZ!)Z*p7w-)YNYJA(q)GYSU5HMSfUuV zo-33tQ$MDATSSb$xBbz`B1 zZ-O0WeTOgdIq6&?-^LrbZut*07C+|m0eSY}H;?RT8|gMzR_L|0wT}{eTD-?>Cb7A# z*`Ji6N^K#zS!UcfSXrmI;dWC!P5jcWpG+E@78nwFODrqHs@)b3Kh)zwP7rM_O`r}T z@5NFqv(_hO$JIV@f{8jF5;i>skfZqRq8I>&w|yq%Eb0_xWmT+@q9G=BXdaidK1nJX$f14`VB zTu1nCWYGt3mXt_-ixLi_E=AGF82c7H=vT3-|IXK0@`>)zoIk2@x*G_i{ogJ;!Sx_n zm!t&n8T)w-fs)n8o68kZokZFuVl6mwx9-LXSQ)t^d5gOG_m0*>77^kO@}3ov=fLty zT~(l%mnlNJ7w2`~MWr4_0OPXxvG^nZ<%3Hgzot)Q9x8rqGD(WLl|XYFG|pcwWj z2<>_)qJ07nvp@fayq%+Ac{2llB;2;_q z^u!J>!v7bn?msPd_U+^c*(D}s=3)~nd?92ngoE@Haq{!X5s=dUuZ97)7Zo<$Z;iy` zbAA3F1My$2SM>d#Ll0blkDU`b)dMhF=dsA$b@6a+V}luq5CHjyF$X|hg<}Egx z)fa>&z-Zq_ZU3iN;I0&9afDIiKMFvU|ETKIr+e+)-NXEe{B;?~?Cvg%RMfi)I47N9 zl!B%J5oG`C5nwU`9%?&)9R@^<;KG+{ye>Mx6?FXk+6@g2MSXfID&IRlv+95fLL49*z>`@{ga9wQrD96(s`M~h`w0$|)y@u)#Gz$x8@ z<`9-8_VTY#OxuW!{{^RXI}jpHK^Ty8m<9tw{#A+1^q)@ujt)6!4)y;mI!L@PxJlqeEP2&kxZIJ!o6N_UMOAzkO5zxO?#bN*Kb&+g~Cuj^aa3D#2y z#y@bBG(m6cy%Y}gm-l7Tw!V=zyb@D=p-B2NAzUMtA%3wfjtJ=I|Nl-e^>Ax)1Nynv z|6nk!6FR)omm$EVlP+4F&g8$!%BQJR_S%tRVS+0oFiRmEcNeJK5|fi@(ugROsb<(^ zxe|pKMxb^4AW&xO7rcwIk}c$XSA+2$HRCk!P76m8L~dX`Ei-;-M$lK0E6b|c`29|x zdiucPM`6OPDkgrUFJ|VHE(o}>fA_y6Y;L={JgPsf+8WAJb^1V z@zy5*HAw=`a`fIqQB*fOv3MP>B1@}q1sRFkY=d_Y2n=&9hMWU(u>?CTH%oVkk>pqb zNjNFtHov>O``%`0UnhXQ__5t8@UgT{`_AT14?^T(7gOYes_^jeG(olXVQ1g0aL3Go z24gT&g}@I;L6-q@JG_iL^&VO^Um%`{D`MN-kG{5iGlxJwMk}7%PhUrovkw46)IQi$8zor(0Y$D-bJjTGtq)IbV4IRQ>-?$y(5b3e%j}uxd4HRUAfhoOJGU#LW@r&ftpb3 zW58B}0e!F+V#j^4)qWR0Z5moaxXZEp?b(xLWB%alGf$HBw)gy@&)h>KZ{|cR(LvwF z)bw4;;#GDx#<~6*2$l8sS-6|j5d8z~w~3)6RJihHfxBv+lAHXdRqa4mnv-+}v_}Uu zgp{1^wMR3#5tdp)!&FlnZq5?oUnStC2}IDb>quNysw2T>H$+Wx_V+L)Q%#1Gp zQLyoKd@BnktUBWG7YqX1L9c{y+QLiPC8-c2&_5t%B!p6r8!hrrw1E3H%OEj zLXl$92>?y9C2b^08UpfMZ*=J$H#>gwI+Lj8YZ)rn!p7f*Jz=7F%m_uSpq#2SI<*%H)|f~)GxU8m(v&geh(a^O#|E*znB4ooUr5l#zkPjC zx|{%CTNFQGsA7ejwV^_R<(D!{9dS-3f2`OS-Vl9;@Aoz4Li5q1Kg#z|fhtA62^gY} zW4|xGXsNwvIZb0>wJCwxU#QrviM8|U4#%a7zr|8w0MJ+)_p8OqOYr`UgfzX0K4Zc) zeH>{yJ6AJR?OW(WOV9sOGRfVgpWu}y5zR18+nr`Xb~>CaewMUrsqKkp1iQ30wCifw zQ#g}I=ONsey!&G~h-omH=KD2ty<=4=qq!Kfj$4C};FnK%ME&s}lVHe6ik;Qg+_-+k z%|=5LZhQ^3y*SZ!fvX-vX9G%08XAq>IQv`{{9h}zl!rr>#$!;BAmzETI?x1r_dAH2 z<6odLaAY#>M(yu-^Mq20A3qHs-UsK|j z{_I(b`-UMix-U`_R0hn057(zAt)t-4fHPb z*WX{c1%oIy*2IP_Jm0{p%Zr}0K1c^q{4dryr{+`j%coi_G_)tI1NUPHd(|r>_(COZ zc%D!$=q5a-pkU;Rzn^B)UzW?kEv)Xt_lYYq_)^_vgOMFK8+TbzDI(BU)O^GyQPcfd z%-B%kJfvA{tFv~VA8P8XGNdxBCgnnWt+6(2kI}_kYo4}Y!11&11k)q(p5g-MVWFw3 z>1y93o`MSHB<6~~dCk^KR^Iw=xHN4LyP`YL5Wb{Pw^)WfND2unV}`W_vB{sqPTFwo zH0iZjg5}sd(CFPXNrjkiclq6wpG#NNk=HTl;<^>i%WJ&!gO@~3GKa8p)L!5ATPkc* zq!>KK5+jJNjF7{Wz{@qeTb~G}_{J#Xrpe=LodA`YgDZM7Bj8XG;xry1ULzycV=3gNQ*jNvH*jNa~#miCbAnAxNZQ0g)y35jop)?3H|w z=$-iXX5R?Zoz*OW0?`C=>vHAI-~+7|Tsw2&WDl%g!D1mdC7B_Wv*oVlTfwcBSd|dt zAvw!m0o0AAO#7c?G~xNHPdJ<91p|P!L1Wex0eux}L6cW(*@Q1Q9)`e2yxr@On1$G1 zJcjvP!$V)yULarC*=*dzyDcd5lhFPyO^mhlXF~h?=Vu>7x&RHm?AoWm#Yesr0Omn# z@3vsnPagL;A4JZNNQn{(DRK#?CPGVyB{-V-Cj}=DUyX%7E`wMDy|77c-~0FPyB8Sn zgdRetoSG(4mRk=6*}vXBj)Zsk)%!iE52O3)<&RO5s@bLf`J>HO*STxzoWm&(dHq8Y?ePJx7RV$ED|*JS;NgQ?PPx~r{7Su(UXpEo!b|OoGR@?( zT>XyWpL)wR`@JGWk6>i1-A_2ehE6~z$gs=3CCdl|zS1^mI7ce8X8~_m%W!(k^2IWv z$n}`iE{u+~cjs{Tdd}NP0$Nl?HIgg^zI2a*Mnb66Wj5FcX$=W z?UL>rd0)I6hAc(eyd=~p3JbEF&P>eO4h^LjO!p#@AsLtWY35#iLjH{RvaT4`g6 zBzdcVxwo2Rr+UcL7Yx zJ!;gZU%P}7M4&}EIvE8axD~~pDVLD1xywNV0n|#Nnq1uF{PpJ^jHcJ@F)aM_@i>AI z{BQ-gkW6Pmz)hIy$78=H`t+bv`xCG29O4g3?e>|-&{2^`dJ*o*z1lM&M{@SF@U6#Ad{828U>oYzYV$&SvPt1 zZow6$<6`1+5+R_x)QF+`c0(NTpuO6EXHF^iU78^&YkfRXRZ-Dn`O{VQtzeF?LbuSV z2{*2e0tlmY5-)Ot-+$`7S>5H_#s5*R^4p*s+v6uuJm0EXgEL0=mb(rPH}Dt|%H!k?lc}`h!)bKu1SOj&h*4%$UO!3s*=2{w`9l3|7v+bj8LMnfL!)Admt>Zs>>PJhHav0=UmI=te)Rd^fKT zmOhfer-2UsqnY_jzduaLA{ez`c|(q5TBgVMU;wh~(Zxg?3j1l;AG%@}gpYLn#cVmZ zG^I!Dmj*3OQ1M}uw3Vp)uUD< z9moxopAV&Wf4Aa@GUN5iX-(_}$70;oAw`?ME7`U>FnTlk*L=O*_|BeFlz5BZjw&1D~c=Dpgh)s);eZZ?^i#JYN(5 zDQ|I-=52@RTPvgv$P#4V?OoescA{*dpA!@;;j;*eHisF)_n+Q*BF^Mh8BdxNLtyVx zb2no!98q#}DA| zP=xq^vfZ)BqK9GkUCpt1d67i7PY{?I(IgJ2Fa_|mU&HD7Xl$CQH1f^ZZYZN&YuF_l*GZ&4C%1* zH*lB75zvk=lIcCS7iy@L6U5W~PHC&RVkfmCMm?33q4>P2>a0fOV zfi4jq8UI$U(o*twm$ z5gM1ED7AauAcM*ison-J}^>S2>nK& zyhMSdD;7=M;k`*_Jqt|1Q^#EJB9lXD-KzK}k z&_rG{E3iJMWayESNcFB)ELB<)EY4c?E)=#O?hHlo)C;Q6bU{L2BlI69tK*4uCeB_O zz8)X{q{`JPU5pwY8m)-aNItxXkk?`kFEZ@mAi;YnAj>}2O7WtWrN{h~icR2xhxciz zLQN6Gakc5-B)HEU*;ApEQd)9|KiQtnfVw3Aa2MD5x{Z2SD<#_utic}+T@HPrfGHG zlQ}?*^(A*=f`exCm>D)Yz673y*>FoNF9syGg~LlgADRwjyXdb)XmT#aEX&scS3z&o z`wje2+C4>1if^ij7tmPAI|JA&{i?t!UVzS{;e-%-l4XNXvdrN`j$_aSI zvKd4aAC`A{Ri%a87n+~2%A%=9=#)4V2Be6)EYCZ2c-18dK^71}7t09TQ@e%7SczqL zj{NOtPBWeEj3WGCi#hZbIVDu;`gL*Qh1@u^hO?Keo-pd2$59BaD`kY*u^RlaGCS}E zE>eva8WdC@DVt@~OSFv0g>=z$oG_8`*E^G)Su+=Z$&=T)V~uZ(duCl9*m@Qf)PGg0 zA=*YxI)D(|Y_YVs0M62C|18;uzcLE~SKTm{y~(c|XXE1QddH|2gcfQ1kmnWX2tUOH zy8uRMFSq5);4$r{FM)_I*f%}S-i$)BSdn_Sx5|jY7$+XKaS;C5SBv`T2i00fpHoj%~9HRRvd3QNUpRQdeTCL%} zDmOl6IXPn|TH{4lD+I6P9BzksmJHeauzW{0s^nqte3l=L+Ss=~7F&vKF@|Ri=n9pW zEw2#s@8rV?3Nz-E6da~1iZ{@ZVmPsCg4)BDYCix2x&S^wbya;VhRSG+YC(8*U*_y3 z&<#-*)@lgt%ynZR4V&x(kuPJzg-g@>?)2??q{?r;1ejifw0<+skxnV}N6?j@Lq!tOOmmQd^FNZD zs;3k@!l0HYhLuX19wYQ0RxDof*Wd3^hUhZg=ZG=Uov(b4HcRL6i=|!*g`;2H23}u$ zeMAMUSR!Te-rGpezvir}(nan~>O5Pw#Emj@y zL+xrv{GFL~#Oi6YW72Za5Bs_t9sh9lnJRd7Ym{{KEVIoWJaKEHF8@ri&E?PB^3B0YZ8sZ>7RSy<3F#11e(4H^#X( zN{HLc?`lYrUTLp7HKRX?IWEza?vx$2DF&Unt*{gWG4a1X9?os738PX@VCh`rg>wh7 z1hPc4u-sm9M`-H3+vyfYD9@Y~ez{m7$f9OSnW+|1FeKG|h$taOy`=HL*HAIPb}G8y z_*b|ZXTH+1h*1FkI>G|}bdQ+5doT`QLaTK-^?Pzb?+MuDZ%1 zd<1QO141duKs2O-G6vDN%YtHW&?5^@0bQzbjG|L-UdCE*&gD;L%)!H;$9?A`za2+S z4!(8>|1Zm;IYDlG!Kb{*#tGRG`X#|C|uc6pqJ2=87q13U*NWlZi< z5@tg|{+2LJYkY72y(*;ZL3q)M@~zv=I+%!!Oy+^Z-P3Pm0Xo+5L*{FJ=ihYR=cLFl z)W!l~#H|j3Ero!1D$CnKw3!KYZNg4NL=)%BzBPg5=0UW_>9@eLThQLP1c5=~w?vm8 zJ8oBzLdJHa`>VyM8_RY^0(+-5gV93s2twYbOLBx!;?d0K$;jCinN|)w@7RyCcX=j_ zDm}i@m+m}Oe|KosQ^!Pm=Ceh-eqwR>A_V~As+~Ft}Y+{8l zn~2p#!ckN3bn-yI7%#Yl*nNm&!H}I!lVo+#t9lJH@bHAD&5Ar1OIH7PfHieEWQkaB zevxGA8<^zQ*0%FgBw~F+ltpM2brh^FIWGhM7>06e!x?Ca5(IgVt+0C~`KY(eW;7bI zsQq!YfsOIaLO!_W9e~i3yuHn1q<(R#e@El7`d4+RozotwxX-Sqq7Ad#?DapN2kM#W zf1g;917xR0vvonHzv$S`MO~)Gu)HItWTzxKXNH5>G$0-`h5-up#lilX-B$Yl#9Y`i9Ra=ZIF+GKjr=|6 zV*Y#5P-TuN@G(+-OR9jK#oFkWs=EOK@dD&0mI0n;`b{_RYr3KKfdV>}SiDarMPK2oux+fS<3T!(CJ!EJO*f>H)RunUdbLLlNST^t$J{iNF|VN^UF%G zRwfCUZ{xW%1XKa0aN8B6vrv8^{|My38+ESZCEtu=G2?C6JQl!zy7+}WgwLpd!8&%I z6_|`qAe|jSvU-{K#z>`i)=%T|0`IlK7QS%UBct8C?cUEF?HrI>OgMCw=(9{FWrJ0QX-ygR>+H@sW8YDme z?Jy3Uzw;<-c13m<_8s}N%~I_pb;Y{nL}Rut_G^8~LQUyF=!uq_{-T6?B-a%PgqPY0 zz3uHqV2|ElYb>K9kP7*9VPo9I9Y=V%+ydrPYyicvWnwm*7XZ>kq%x}>e7vU(O9z@l z5<1cL^pHzG;MPrQY(rmCa5uaJjm>(`>y3F%;VAWLBG|+|WSNk{z z01bZ{EUG`S@dkAT1^^do21xVEy(FJeQ{T!XAo-1QLSq%DF(3{A%d*s;{wYjFq-O}u zxabZF za7^2>Un5Bw9e@r1NfZ@Rp;dPPivN9AXf{%0T;zmzCo%MXMgY-%W+#)G@17tr3W zpm2Dx2@1>vz;r;`N*D{V1XD+_U#H*Y3A(y})^Q}y-E0)j7y^WCPED^#;+KKEaaGwh zvN7tDH&{}&BEKls8&LD(-=SA^`m4$U=YI79Cd-pk3SId7{s%T@61)qy(iY$^seTf~ zy+Ap)?fD;~yt3RvcW%z(x{LW^^=m=K>j`Hk?#NY6qpw znQKtkdq7Lh;A&fw7g{u1oT&0xU6U-le1AE~+{G@{{dLgsd?Y`ylx1ah64u)XhnoL) zDV+GpQmbj|YlHL9@gXI}9+YNJzZp0rTq$8H4DS83Kpy++CD=e8?ryhiNCldAUqG|G zEN?tZJTmK~}=_zw)^Ze((J!S?huh(#}5Qv$0blizA@g$Rc+5g3)kNDZIr^N%= z8pZ%(PRlt2eC~9V_1!h$f7i%Y%02Ay4oCURc9nwHQ*})>>)+CwP9m7(Vo%hluwT@P z2@UjD{pmUny_iG7G^hv27abH_CcdlvjkP;)GvK%|rozmDLIzkFvo+NzAV)R?=QFKe z>*WTZGgXmMEHl3y4Y+O!nAc4$+a0ppGzYSIaqCv%Nstx&uY8RIRh$FX!hr4AVi}|s zwsGl!L`fqMd~B{WU?ar6*Pn9r1K)a=pIY1A)PK)%9DI#;wAKI69j5g*IU6=1kq0~A z*9#+a{u4Z1mP611iQ((B{ohM*!7B{5=_yYg0faSDji264T$~;G&a#sBrOAv&OdhUj zK|O&V!<$RdcVndIO)Y$8MP$C5yiP8#4uFVhzM?k!sC}S9S%6#Cd?h68t%9_I)TtOa zL?QUR!g;Ky@o;neLvAW)3#1nPwv=F;8v8(om8YNo90`)9KZ6jAX|PDRawGs4nM`8s zYAU3}4|lso`Xn<=|Gk&Z-%&pY-#=Uy6+Z2bN7{5z@$@|XY1py-QlY(S#CcP`Z?bee z-R!`oz(!qs%_6CMb!`SC?cdMz{IGIM%D?^nqn^%Z`93?+w4!O#jfXm^_e}VkGehUj z8(#6`JG40UW$k{Znhfcob^R9e>*Kx2dS6ESnA|_bl>y@8p1F2a)})^IqqfDr-{+EH z8g7iUt9M>QA=I}vJN0X~8g{dlWKK{>rrwgOXTK(oq~nV4|2VXmpo>51Id{xB>&re# z8mfHOK0la=hU-%~g`G z+R@!zc6Eul^05*z8yI+OeuME}B=G|(wx3T6&8F4d-@HCch5bBA-WUm9NWDlq>2I&Cs9>d%j- zEh9{0rr+UcGo_HDph-Oe$(jA|#h8|P%C@b15~4exjs4eXQQ*(-RL@=%>|0zcGGD!n zqT&L#?P7MQ){N5enMl*WUlVk)MJ#pR>%$!p zqAp;yCEQMzlT}nA^EXz;m!#tlS{{A@v6&}@HG6OOQ?cGXI8;po<@w3|-m&lb(p~g* zxnK9&5Ie(2{qMht@p7!Y8}c4kW#>?SI;(x8HKmonR1(XGH17#f81*$>7e^*(Oi`V3 z(n_V>k>(1Y)*zbz$Nj@bwaf$=*a{*IJlqjEpqlvry_2-{P^L;{cEl8*tPdv~3&#PL zobSH4nLrKKf&-0BAMH!5U<|z%+hDy4Xu~ovYmCcaYJiE6@Ir-2hS&m5vUGvH8Lxm? z>*lf?MI7i%#=!VQ41N2d+>_sn;q&P9$1I zh{qki>}5tJ_!1tb8Rfs;lJg&<+L~Tpum0MMP80*%ZE~2BFq4+_q}z9kdS8ia%donN zZUuPvE9@CdRHr@jWE~}RHUFus=36j&pueK zOxi;hPWL-JD_B4sc-Bo_Qhv3x)c}cD?-*svhV=7JnqxCG15H`AC1}#<#GO_>%GLHk z6(0i(U0Sm2i+1P{qcU%nGf1gQ+nEC7rO6CA7+AcRZhBEa+8WLgEx!YoPZ7& z36ui?ptnn@i|g141=|J%R!i0uR%9F;`;EbDUr7(NkbGQkUEiGXiGX>cfnL=Rc$ zE|na|6qPoaQd6X`=8jC8{;J2%N~5$D#pt+s6va7SrFe_PQ>*&&FipE@--#%5tGIC# zeG?)nr=uosa5K6&WIH4xO}D2I@XvRQq2q~e?Gu|b{kF^k-e){3E=W&b z*OFPj)AmF>HX~8$@>Lgw4Znh}f%A|?VQSG0TU`3Gx97pakN?h0SBzcOEKyGSafsn> z@;pEAuyHlZb}7J+pEDav^_ZE7aB-WvT(8o(pi-JPL(g2f?{bZZWdH0kHxc3((;lyz z2(Grsa+WQVSP7QFL!mLf6=Tu_Y~Km4`%ImlARWwgJ+C;aq^s{AOdMu^NsDornt4;i zw0^dj&$C&+uTW-sw_Rad33BNkSGqYd5|o;}ky7tldf`74849VDTk${mrC*NmVX`zp zuG>Gmx0KFZ?1rH_8(PrW$~C3m%ky=Qaw$k-gs85cQEQico;WCV@ut@ZzN$(KqAO1$ zflMq51f-$asA27qmseClsXNWlSz(&mCuhU1E1Yj($$5$etM&Y83}vI|YD?mL_~Rr= z^5h8Z@q=2cEiQ2%)DaHreZL~rQ_qzYJLyoQMjX>fu7SW2quBrmhsq472Wn_~S(qFD ze5GAqx}Pi@$d(;JaV-T#5NVy49-XYi3-)QCHOE>6YeCne9c>dd!(LXxbfyM27WBlPQo zgV5yIr4Z;F3#@2U(2}P%TmY$pnzE}I2w@U;nF1N12R2EjE1fZh4^xi2cdf>(nL$pj z51afX9k8MN`Ki|yq^@cPkg9-UGB|7`hZiVdi&~NXgd7`GPV6tD>)*wfBUeEZQ?=FnaVPc(im15LJusEb_;Zai7M<4`6q zx{{%*lx9adxajI*=<$SDpD=7bef&q7oX`@!qk+uOgZFQ5!0OqqU7F8!ZGL9NN0X;z z>ae_2kl3`{VAL4HZ*If*(xzy69iG*3KyyL{HqMhL`T39V!Y%~Doi(C*UyYuSRmCC$ zs?$?2;x3K~4ZUQ&MqY9xM7^WTr>0c9ie%wQMhvljm3`%jWMpFIc3ojIO| zXWx|q&e3xlTbrDW>{+GM+EVzOa1`~$Q%9qej_KaJyF6t;s8#W@A7 z8U1GUn{RIml#H%~R-a1ec4T6XT*syDO+e5!gu59vjWz(tp6f-X$KB%+N7Ui+4WjX(D3xRX=?MdyuH`?{h- zTU1{a9sPqb-Zug0$qCRnRlQhP9~`B(aM|>scXZEwP1sH9Pb4dj(GM2oJCov}--gbW zdd!l_xXE5N%^x`TA`rG(N6zIMNjk+J&wQ)gnh{k&8|7Y^@%6Lb3DXiAeAL49@)IRf z;!Nigxjs)9Nqx*p`F)m}-2(#u{57d>{LW2gqS~fm@UZywnWK8$M#lJH!A-n=)rtz6 za>ZM&8#A7HA;yQ5d{d<@5hr!|7m5Zl*m4{=P|`R5UDnR{5*;w|l4@GVl|T zb)fc8ua9ezh-sxd9@}=2y7T6Td>%d{7V(f=Js-`HG!4?RjKn|(b0_ny<}uGtJ|zLt zWaZKK#5Ow?M9GxQsei&RUn1YEt?EYDQcF+u zc$Xu3={fpz#I9oTMoqvj%CyWk>NlkKfUG)(aN-d?58VwktS)CC;`ofmSaG@HvgEJG zWT0SITH#q$#%;u^X`Wh)zmg2SeSOMR=C`o!xm4}R;t@Y0%0Y&K;~cp@cQ(gTAl$tL z!I1H$q&lX3o;WPk_NJ>k+COqa5+rH+WPX1`;TFVFH^WpWw*I$n+j?_EAU%%u;**bN z^4}bTo+9eeUZhG}T&3Xgkq>SBQ18Twz1?k-G?J*)!j$Tf$&92xTgO9;N7!GTaL?%~ z{UEIy4;4>>M@6P9Gcztdm%Rdl4|pf3quCi9CCZp@v~|89X(d^o+x=+XIz5uv6yOmg zAH48`QNCmp&aK4)J1zQPsWS!DZM2Ypi;Sz2 z4DAFPV@N5CO#^MB-fkm@33^z!8gg|MQV!yIhlAA1S{CV`UkFdqxD&{VsSDS^_H{{1 zS~90*tIlBngaR-$ipW>ac|!Ckoq8D?P_RE1s{uUprkb0;nB5+vUc@A5@hTwhU0j>E zmGn#(h`#on8ELrGh^Dc`!eu6vKMd9*YDOXFFz>z;k+y&6qpAns0 z$(OMWVgaL^0S;p%BR_rExgM}7vhU%9i3{j_P~1_4$p`LLJesQM*5B$=a1v?tQhpVw z6!^#x<}%PkxB;`g>`E#etHK>`T@efYqB&+=Q${E@^IiY@0Wn_djnD=w( zptIA{6YY1GMt%DxepLh;t(58Homc&sJrh5kOveN}$7J%DN%Zmc3=h`CHdm8dCnT9P zn87PzRkdCcHgnnel)&ElPe*lIa*2FCfmPlSJZ+dW({Jxf-a_&pl@DPBx!%vcfM=mX~BwYq{Z=R_oE)!|+RD3M;G@nFrY)7e zwn4g$WbX0j;$p6>48Fva&XgJS)zmh$UsDT}9VugmalOolD@eBG^4QB2wwyJP12FrPrerX`%@%I&>u9>20?P^w3YLZBL zExf2TcRV~tfT=EBwHC4C0G5LJEs0nO&9tSvrCUe0SYj5#6j|D`X~-OrAnDjZJy?b2 zkhOZZlQa_3O7zwnjIAV5O-_ALhluHf$w)Llb7JZqyJTcn*v?kWEMk0Mp$1!S-?sr~ z!8%RG7m3Xt{f1A@HlF$*l;j^pY(t%TOVu9?s3fe>!c1i%xC7oVSX|glSn+#E;a#jG z*7RZIcp@IEYxbd#%?M4h^g&7qfpYCMI->){ce%`fQtQj1#H*%~!dV;4%O?lAim;SE z_eW-nFx39p=cJX6k20=Dwn>haW{-2W93+Zh(BAXBb;f+b8VZD0p{gHSB&$SuTL7fZ zYCTqrd|+I}@d*FObkX6r>Da16Xy)b48z=JLPafMnavXNYkgsI-iKTDC*cKa&VS7g~ z^=?jPiSDUNd1zW3JTV`-dGPK)dIC@>F^7H5qY6DoX0yI6lC9<jor=@bZQGFHZ0_Y>!b5{@Ex<(i{RXy zse)9()?Y{1!Syf~#PDB-%6VKPF``ytGj;GIbuZ_^ulEZ~2Gt^*DL&D=+IPlq?E_+F z&f^~L8S60TNlMTU=RGalnMpHZ4Ow*tjbz(#z)`5hCRr~@$R_TlE-Z(rB!3Tv@M%Mw zYrgDK9pQ*sB8|u(r7@4U%K5-Gix_T@>%Kv4Vu3|B2lP2)qn7r>*!4SiV}V^3$ypho;cZp`DQdAAKp*)zZMXIH&3 z4Y%iVYEAKE>}FhL_i1=FJBBcdA!;#nt_IznDLc!a#ahJAuOv*eSVK~O){TwNC>b*>v#MtHQd0NX)7iq z>dM(O;uMFu8uWI=naI3UY4WJaXnFzfC1*PQ3BD&aySbN8@5$j`%&8l1g*H+#!ni`I ziw#{8CWR!qHfScB->{iB#MPNKq_nIUw#92=w|lyBItK$Hpi$C;eSI+ztMtMLQU_0S zANrZ-IC;Bs0Oy$v00(E2ZSLdEb^sgn5lVG{RXCZ6#^n;yC8#!4-hp#NiH{#))`pUk& zV5uzWa;R3}+DU?_TQXe{$l3?d9b2IUOm11C2SQF`g6Nos5NBjK^)29oZ^!zfe7nJj z5w#g-t;$;u#Nlc4pNggvuK&xMqcS=W+W4K1%&cf zs;sx~{Ij)^`1vFLC+qHiZk<02^XuV!TFx%oFk6q31)DeJ9^n7p4zOMOnQGDV&3jw3 z=3O@z1@Vwq=Ub*;`^$8`LvznI^xdX7|5Rs*-)r=qjH*@ppL~(7Wz0^D4iemoWl`oE zTv58)u#MKjsB;y2W7bX&wcPY=Z)xra$1XMJ9p1t2QQL{Mb~q|Zsc-*gWsw*1QRk3w zbe2n#3bA&IAi9^dIDLx=TrE_e>mS%3{K%f2y+bH08S0(^gIKcbR^{XT+_Ug&tR z;km60q;g>H<3lO(!W7mAe%R0!^v5l%b&xVSl9+Y@c?O)ERrQEn1`(8?jfF8VOj&UJ z6=&N$L1$n(wVCXcL-h=33hweK%cu7M%VziT^lM0NtxYf{r1|Z;D8?>MBuoF+&W~x1AQvWPL!^(cXBvEd&J|GP< z!z}OKEzaC?vv+({f=;t%Yo8EfDt$ljIqIm9)=c&bN9QuO5NsB$&=qru#Dg` z0n-Gey9Tv$O$^&u$)`F_gbSX71FI%~W&_RZlRtCfYVONWm?i9&{d@L!2F`&_hUOAB zP6JNPWYRJtxPE@|9jnPdkRPH;rC4P3L~x)GntsRR4s&xmotQ&~=5xRRBHwca2B(;? zJi+~NQ?pBL3HhFiyVzCmK6AiZPU^4ty#jZqo|nBOf0M;Eh>PvKg3DQNFF?ZQz3;Ui z)bIt>_0D@36pbzS-WIM*nEI;QHj5D+tW|(5{0ItJp+Edna8N1h-a&c3om}lH|LyzK zt_Sl|?!8L+k9JzS%AN{!ds+eZ&i-&a`jH}MRj+iUb^e9_B?0p8y|xoy8M5+fz0KPu zLThLq_igjz_(vqMfV6mjJxt7O1Z&Hr%=DuH^x*>z9Z@!6l&ED@ZE~E!|2B#V-p~|s z4nG%V(Of|0?j?P{h8NVVv`%-O4%6}e)qYp-#fi-|#}ijf2#Ln#%; zxg4dI-M`DgduQ22kB9wz*YOshgBh_E6V*YP zSh?t1J9|F<) z279MrkAcl?Sqt(zZ!Vucv3lu;=X#%0Il%ILnbDo=XY3zuE3dBI+&49ApdZOO%j(s7 zuynN622JC+hvVG2gC0G)`)EOvS#<9sG$2{jL zb^Z9Q-Etnl`}FYj9|vQ=nM}qpxP4%7cz$~$WuW`bMq5_w)i3?pya07d1A!33bNijM zH8Qm)Qnzl*8AkVWmz5SA&>7tu^N{R{O_g0)&oiFpEYM+{3uu>{u5__FlmDcb1fS|d zi0HC+r(2KDmr7l3AAA}M_?)zK%1E{eYWIsChmqp^$fL<29=oc2`Z%rLx>>pxW!@Oy zZ8Mw2nX5WN)=mi;Jy;7)u~FFnoX4yhB^q1K{kLOwz-+de-kH*9?)tj)` zIe(?ng3y;U+!PB8x^9Xr=fUOsh<>^blHYQ!N1R7VZ}5)}XcjM@pob@&x9|UP$D|S7YM)CQ79ZgHP(V zwl8e>swWYxTR8L8Z)MDf8zYpizROFRUxbT)$VdwQb5AT^Z*pMdOEAIFL|s6{KRw33 zGK#3-&hhLB4Zh=ZVfao}+ z0^HD_pKS0^98VS-7uz;Z{)nXcddb#J{BC?x1GAbLaj{_0JS?ZojJ*nGn(F;=X{gvtjlBvaaaAo1Sm zyFIjZSw}6?cw7)09$q&-j%1d%$akn{|y2I4aZ(M94)LKETS;NIOVKxyiRgvnxU17KnNP<`1nYg!4;dQ zGzZa%5=mu?8Rq7jRzh2MfF16KOhHa+5 zoi9F*Y{|e=wsoc-`|@#LvhIgpdAlnZB*;3?zfmsb-e?Ocft=>fqJPquHEob>BG0HF zmSBA4hWrW^Qo5t8P3l4-gNmJhPY(oJyp$>Sl%?c6i;I#6*q+1l*>0+BSvFha;gg#p zcB7nU<5NeQ8q=+Y`=7k?_0nE%+ejI!55Mq00Sv;?CHU*jJ}LchHMG74iLzIv1p3>qGviQZ>`W_}RJ8F*jWOa!GDZ)^t~$;sMb5b(@IR!<8~&dfsh0w@uX;Xd%hmKzSau%%@tGW^PPMy(<6}7XoMuy@ zyP2=c2~*rm;N+pB5ujf%Q9rbOviFRBq$2HiLCQSJ<%1(tVLz?R=yU(J%o5F?50hKA7`=^LK)Y3}tu|C{sW)4+$_db_RUWuzdBw*ep$&$G4`LMC zr(HFyH$yg0E5&{L)T#BW?PIF8zx%2bVaOx|ywm>=QEwgy<@$&JXNj?tnG_?8H54&J zWgGigDoavP31ctW$=J8SV6ta7LPh6@EQzv?K`2W)S+i@%zVCeR>GS>me*d0RG|xQG z{oMEax~|t%_v0d|l9%JQ54dd^e6t#qr>@RFD1G~Z1v7Y~2LGECcq5L``$t~$H?kTW zDo!~K{2coEkL!Pz?z(Sk@CVo1d{|WAYdFRI;_AN7pet9v?3z=lGIXD5Wn#wCZ2de> z)$$IOy2#7ay_i*qb}iubdEXkUx4a%*s#dKGjWqq#vmv>)=w-3_?>2Qb=$W$rnD2X6 zz*s9_!jj+JwL+0}tMhg?5j`8f{C0YevxK*U7gKlg?WgMKSneEE1Dt`MXZy9_d5CK!%&6ee8v0^ z;$v!$pNv+BVIJE6Q|!+w=ZBoHbHOA1J76=oJhC~3yarH11m&ev?Db2RRaIJ)6rt+OVG z=EMEv)_e*8j+Fd?cR}ht@%+_}E?}W>q9s&B(k?%=2SeZ@=dt=<7>~z2FGGKMbY3n| zllzIG>4gtK;CO-No3m{cO{UEQK+F1+nCy>#?sm?wAwW^QK{~Ptvo<$SR-oLrI_^vB z95ni83jwFH3EoYxnTsAx7Nc-@; z8dE7C{Yw1ahLBGF#}j6&L2=^Pj~8(FEwb@f3SL}YP(%=t+31BbO!F6%JbFf>Jp&Nb$e+LpN&d?F$L8pjT3O6(%y*eCv0k6kTV_U~c zfBM4mlpuqPq}hHA^lL!`mL~AiY_uPx$a3_n0A-yljTYHJy%klP$Y|#R0E#NGLMfNA z8Vl(I^wCowf1OF}fK-;ze00DtvIN{DDqwKpN#4kEtMhKX$bB(YL;B{s7P~%7MMA+DTt_{FCnzpXPiiVCy7!e0xiObdT`hS{3qghy3D$(>@m8kv^;c+9~P3qaAk2 z`?#M1Z(PKWmZIBvVN0j92bq_-Ye!ZH5wjt_~=8SOk&nLcv}sI&`(YKM<0S(n+d)i9xEdaky}>S^(^TlQNSmVttP z?g#jZO+lh3zmDMg_~rKP+7rulG!WT{-kI#1V#4Ef1aalXh@Kk#R5;)W0Qp<>E%rU| z#Xjj*%?((){!xIjn;C&?JepEFYW6i%+b_=lc7gNheHsn}Jm`U4eSEMrFky4ygR2Hq zD}Tg^h_j(xdDLc`iB64-T<8(k`dxc};0DnbQ26EXp?P2bpgO884 zIwVW0i})HvMa9nc1S|Fv=QUIAg3y3*iQd;{#iLL5XL7W!T+Z6`4mQeGu=nJuv!|Uf zB|cl#wys3(L^?!5XIRKq-rtOla|;astZ+RqJD~{o5+HbjDw@d zzK^4XC|kgNCv1%aB5O{Rh_CgafM6WwPi{ITE^}8F@%n(>HFL6@U8~42TQ_8Jfn!-o zV2w0|-N#3~k=FJ|2LzFLNaiR=JTA=w`_^ufu&wQe)@0^6P>VvWde;l-rsB0`i!Mc7?=EV{`KJj@0^ zqfh5rny0_|0{;ewMb5)vY$rYZyI=O(WVpuv1F-pY zZV3$7YZAgHgpy3*L?*1wZR|wT)q4uk>}PNhXB~!L^T%;a3F=TB8SG>UrXPDdDfBj> z>`eJm8Ui-viL+82A`m+BhB@Z9T%6?ExsGR=Rg<00_q5ubY}~Qsj8*KT?B zJdZ6{fJ%N%elrq1ooG%Vs>8k4WJDM_jj^Cuatka{56abNMZ=(_j&QaCapSXVv5|r? z9GvNX8?#t};DfT*(~0`Cx!Gf8$y(K2?ka)@&t%uHvl(Y5tVm&MUcD!~N5Ge7=q{Jv zueVQP5n^SI6hdDiS7fbPHzMzzMFv>{)Vi11AxsRafp>n*w_qdr4T> zkn;&&_n(y`=zC}n*lA9-p7B)?=jggXmZR>jcdPk~Znfi|b*wXz9j+|I_Kf1OX)Di7d*Y#OSfMf+yB~zNVLBSGvj1~3(S_Tid~DHR1qS7T_0fH~5B~2t zl^g%Nou#k;06{bmwh=yOb<6$@TCPyV0P$?Pgr6bG@P5hg0kw;BzYpSv7cqrNM-G% zz#_kaN_jDN+}np9tG)xwW7@Gh)6SFf9=j6;Q(9#a+wIo|xtL7461VMbGG;Tn4t}e= zE9ji<6mW{Hg%&cj{tKW7iUsm=J1CD%=p{_A)qyw$nRl1wy5`>E?w0TftY0Cs8R|_b zAynuXdt;n*Ha4T3A{&1Dm+}gDN6ho=OG^9`1-)=;yS)~gS(7^z#37-t@vOmK; z5n0uB$j1rI$R;pfnW&yq9?^=p9;qutFJmpZKXG2~7_*?Q&T7d~6Rf-NQmR%$0O5o4 z)=m2t=~mjk1(lPoT_Kw{xPM)UYR??ujGYcKYZ>S;Gf3YA$tIb%q*&s&RZ?HTa6hK; zN7IfLBmnOqCMfQo&)prKJ!N)CQk`!@CMtdTudAYy(+HiIM18VUHu^CCh8;E+t!q5$nV9$iZ-5p+$;s&O7u&mD%=0G`O(F5Q??@NNJ&0a>|*9Lo?!{|HVtt z6Ydh%;hzq73NWd;9>5@RPsz9!GM1wIyXr@vhr)AaF-23uWv- z)fAGuPia0x2z`(N5E`FSqZ$H^a%k@E8CdQt;HUh6IE_dODq)Fj50Cz5`q%HHTn7#@ z9XA)>Yd5*{b;f-oum97F%n-JKyCk9mc8=WeVYW@8P%#Fd_=5|b`b73i&UnO0tWRZqw>F zK933^l4TN{&h=|j#PKr#xmZ*G#hb}hzeEfEsYZ3uAd@xx6SRe{_oPPr{wE})66{T% zab8~g-0IeFlaX%^wwUX$D(2=99Ho$c>33Jo{GLc)r+>Xi_ma?4nS8lzFR9K$!R;3# zSwOk|t(q1nmO9=U1fS9MrDk90f^QSQx@^P1a;Tm4{G3ZhS$3K7NIk|+ z<6)kwj**nr85SEz_v(g2VnBM2M(~9jCpp({zldYkP#zuVf|I8`W_-BpGGf4FUiZ!y zs%x=n&^+*PNt}jDLeKi1;#c~?(nbQ6_BG4~h}w5-FRpr?;bm+1(be;tigU$l(`TpETb=VV?(L=L%b7Da)0fB zw%YVj$TBo_H)jm#5@n)`9ApW7U@V7uTmS-$Tdv1ju1kJrBEkMC=kU-as0SPjwTrj% z>9>a`R1=;;6Km3J)lALZBVw~TySnF9l4_2B*C)*E>Wk(djMu|T6(~9!+j#va8$H_@ z$o502M9+b$;6(AP{lEx2!_(*}S}1AB+&{hrWZp*qyUOX8e3F{8A0&JS-{R1vVuPOg zSbL$5x3%1}Tcuy+vmfDhSkB9rUiA61NHN(ZVWq;`J2Sh4_9NAf42Q-LI+q6XT)adl zc)kc8+8T(Sc1SxoR|~_qq|Im1Db_HO_xvd`Ja)yp71HJde@A8#W#>4WINQuTY}M)o zrx;N3+*E}GG^HL*n4vmWCaYJ>e`DAFGqwCyA!RMcB=l3G@^xGQzi>)KokqYcAjm+P z;TbzQGcne$9CEQ!bffcdxL$cKp#<8}8jI z+ttr*jFBB9w?R(RO;Aq=;dzQ9mX&y{e~XpvzInl{C*%>Lwx~MNeen|r4g6BlcZ{ij z*3!v;i82?-l8$2@1GsnTO7tY6|E$<8!A98kq1clfu%&_(QJo@ek^t#DF7FIaBn$V5 zr--cJ&vU;Kr?K(-S8LM;#gaML!uDlzxuQHGmJju&G;Qh8RT&`!K@FZ7dyivo4o0v1 zb?C`xmKZ6cKYU`O@iMB$tk~_-Laj9o4l0xwWdgJ@e zM_GCNVhmy&f!m+Qys2?uQQxi9CEYyQ4nFS3_-XNenlJghkTrJjrh-jSos*nHH5f|P zQ$_E~ElnDCVfZbuvwfI51@YY6*>u%M3F6tP^vVZ8#5YFk_X*`hkpJwsLJR*6g7D;P z7y`r6jww+fn!&rt6%MG|HUakbmvs~|1GDe_4k9&(&;a-!Xg+H4wIuH7j9Bc{s-|pY z6Rsu&Y3*@;chbWAz zq^)|j^+kDxH-4>o3Z^!cgqYCYSYOB-YmUSX2Dk$v_`tp2V%4klAw$zVa3gz%g+hhh z;Z#^JG@TGMQS&>~DVuJ+Q>K9!(DosIp2=7VnpLyq890&IdX-~h0q~$bI%QWcskz@I ze5cP}1)WSj{T%5bp}3C2)7y5yt>;y;QlU>7M?43Y>G|U+LMP3{n&mZ7_i9zjADmLN zw~HDYY_cGY8);_xnOE9>J@hnc9m9+x76FadXaDr}T`RSe7j8TF7ODjwHf&9>*dLYC zO;|=OF<;yVtx&(bQ=Ka~)K)3Yfk$dbs~qxl$uj|8JpM@C*L3ua+V>Wt6Jph&j$P1% zbqk}7ME|XaiNJ(-jxz`vSrhet9MtwRc*nG##_N0)0?pO3uC&?ih8MqikvL8iPSz|Z!hHIkkWmr)k`aN=ppUcg6L}GzgZw&rf$s{F6uSXjWTkQi`-yIunei^M`=E>6 zl6?gK`=%}uy{6t4u0#@qkFRJ7_Dijd6GEA6M48Zk(%eSi)VJL1DWerUQ-U0aPZ^fs zf70IjsxEU4WAE*G_dlXCT4|`v|Ak z3UAt-GHV`n)y$Tjbycmc%54e;ndU)owOus{l!?8@fglijSDX^vX2wYgH-c%jWPdsF zc)C_Qq0#I)uEjgniEaCY{w?63f1j1zdKfNW#cDh>VX+MkLeGRH7yHNhTEh0tEP9P? zMg!Ij#D`Yb@?CZ;vi$Wl-~Da_z+4gQXTm+=gJRn=W%;ab@ogAbRrKum$NA;WkbRZf zkIimlN5EB3vwsILaQ{2GiJv{a+94Qoy8E_1B<5~uHaCT88+E0vkJJv)=h`Ayh;6=L zC*X-%Zx?j+Z@+9v4vJolb*k6n2NhF=yNL_yhiMH5Eq>ce{4mn$vs7>@WdK=xi9X62 zPP&*1zAJ)lcr^j`mCDUTJPU8e?QB>}2)g<8?t(0Tg=*lQLhsoEF4FsuiG^?uRkvYn zB4s$tEvUGeK}zRLu0WhK!1!{o*xxVoEV7S#JV}X`4p7+r7gYt0XVPcRvx$hbsvtI? z&roNLnQ@Xg0b^1d>OLgQWyIhtp?lBDhcctF9npVJt#) zrFQ56WO})D8%Ekyj01X)Kc3Z9v}G3Go7m2PuJ%}1dj`E=Ak1`kNMX|Rli?FszToW~ z$#YE^t2s`p{S0gB!aBZ*G4mPR-&ZlY#u6dS* zQJdVo!jqSyZJn|)Ksbd36H+mZZvpw@ujqkUIb9viMTl{|L>v;lv!csvcjtn^O&9w` z{DvB#R>|}&-LgFK+l!3pzZW%~a(;A?7CZuFRYhJA6DDF0qV^4srW6V)WWiHu(#}r-+*L$-=YY>tSe@ zYkT8Wp3t=R!3&$ko$JuW7=O*2sUMTwt~xrAH+`U|I4?!VotYn*T7fMej92#j%{k`f z1BD!VZf%!${>7NmUvq-ybYzsDK-V45bZuV-29ZV8)ZUw5q@;J20@ZAnLuqfDyp4#K zuC0!`d=V;gJ+X=LLeAI^&BO2UvqnGsuTPkWISSu>vPw-mdKKM07oq9QX8cCsZsS;3 z0_~myKZwAg!(XeNK4XO2!TE|sNH~pO4*mE9j6kzjX}?F}5~TaXlm9#{${?nnN?tL^ zJTM-+z~fF&cXs(i;5x5zIm<{+Gxul1ch&c`k>qP?r4{qQ}HJuLe@iCYl#nik*X6 z*NCbN9o9#OgzxA(dV|XsGC-UycGQ}S`ume3HgTy@|JO(G_hMZ*WqtoTn|=Ot&+g^n z@%A_eWtqeWDZ0vsv=PSx5gL(0kI|mg1!z_nzn7jb9+a1t1IhztZJ_dTa`aO`d3yZ6 zi%wXhffBxF-kJ7F1s5uRL1RaDO$v}dKB-q<>lwI!SIFT5B@VZ0F4j=Nr%8nCC;TSG zm)#Q;s1>bA6XRQ-3t7Jj#xwe{z%$88-SL_+6FWvuRGqU|zPht6`JIDy0=*a`ENV(v zH-!jwa5)cGT?PL*?o>dxK$Ks7#v)`W4mUyVT{trdonT}r2J1tZMiC%bWC0?Mks`^2 zv0rAb`5H)+Q<{Z5RYt(^O}WARruGv-X5?-#C~h}G{%Y0hPn)1;+sS;=*9(CV=&U;He-7@GsgoUA`}N5?tNm` zr_(1Wxs8W#GQr-nayAtxxCITCsx@R}WQg5v265mKCxB)KRFeOhg(@Y*&h-RehkmU{tR$nl3q^VQY=|B*~Izw#-?2v_}+p-SS? z1v?3e$50QTHA(f>csgu@Tfz9s*>7*A)dR$+9@q2NA6E75UiQ61os0PU(GNV7xKoyC z*bO~ZeCDNpC-d|!>zg?ayw7`aRiT9G)cJHkTsW60@9F{=8ae)}7T{0Pz7n*DE=>5H z#Eqh-z6$>jHzT16g8h}CgtGTZf61ci`cbqv={sSjkiTAa0>9fQ0OpA> z$n=;)ssaqRUitk-jg~KhyHtCvBW8N4dl@iRY<^Z8t2ChU-v4;_us`#f^AkWeaCeSG z{{UzVRO0#Bn*iSuy{|k`k^HMW9Y0d-Zj-j0#n%FE&Ym5aj+5Z^rzd&iGk1lD9-HxZ z%DnqTgC?PmgCiR~y;qw7{*4}yCg9@>KT`KkeE)F`zB?1W@VmoD$xSk^gBkf#EmRSMY4xYpOPOLUs}!$+!}nv(hb(aavHDU^RvYT zKuZ4n&a8}#d16KG1hHXj8n4wLTLIO*46299Kn>#nC^~&{cA^Gcs-;XY6E_{MaERv= zht(agr8Nuy=9PhHF6e#vglp!+-p z%`O1HQ~Sl0kW|Tnq1sNLX}g^x8-Dg(Y38g78Vo4lRn?PdCruvH!asid2 z3NS-nX}dMW9_GhNdn`srvlCD0->R8Tx;X-G620_D8FOC;e8$Jx`H1c{1uo6(peuVc zFr&Gwf4%Eiy$jR+WJ|08;X6AM+a*tLN(eCj7a9YNfM8ES z!ps};!4T;~mY@d26+^`4;LJyljs7|B-ro+_G`%H40N^>&0&n`0Tk$wK>J$3 zvsWhNlG)G3Def+eHH_7f-GVZvo8YuE#|PzBd=5#hqu*$U-u*aK*3n;~mo~$(_`eF& zKNsVoDh~J~poQGeRW+xXw0`WYPW{q)w^k8t8`4_=fS1zKv!H`3{oh9@Cjo}5a{Gk_ zS*gpF}9_6%%2U~EiD6W6ME4BEblqkO%MR=v@w^t z#K(-)pL2lwb}7wErJ0;6hzB=eIfJHbzfy?_UaiEWFm68x&>6P?Zkc-KUCpRDkPZ?@ zrXe>7=#!ysSM!miXvh$@nn^ALiPm64(Ya@xm26zbwRk*_(+23Cg-oZCG8#&#MpF)y zQ~Yq2m-5)0@9*Z92~&Ri5ZVMn`j3Isbno^$OKh0$_Aj4B-m#rXPKe@18sLXBuTVe3 zx;<=bAM~;GMr?v?`67jAlGQkpY2eU{>5zHL?_2o0_g^Qddd8niT7RnURhXXy{od*q0mP}>;~ zUpmjIKRKC+G3++Wn;kSPHvb9fPf4DK4~uR~2|diX)$$4%VoHe4?k*x!UPa zN&6R;u#Vx=vw;AQGGZHI+k|N}Bkc=sx>RC|>W>oYIihLX&3* z&s%Kxsn!daGcywgr&TMlUL~rH>5;vsn=P>8O{Z))NGICAypF`mrmn_E9ozB*B^h_E zFbNBu%b{|9G^#lTA0DvkV_LM z)$u2Y0S7I8Q8w0-OiYT5PHWD>ar>JJOdaM4Fy=BkW0IYsVbxo=N$}?1s~!(y6V5MT zwowVojdD8E&l>!#$v>gC7_%hUAU1hw_ezZp?65gj5x=TaJahgYlqL*lUelCY4xQ%@ z(;RTx1AV*Cwxxh_iWXn4p(1=59%S>)nolX{pr0JpiMBP`N|!t~@7rD+cF3O=JeGI1 z1~o$^ry|$sVmBh)!#r=?$pf&9K7$h%CH!v53MxT+&!y{$+~$~)O+@12SS?L&(@imU z-#5>~-4i)uQtko7zX!B2`UB&Xk*+nxvzpn6?{*s+PlX!J(6@%2WD_0}u^s<4?kOET z+57q?x40W@5BU^>VQ-#o`|3fo-_=mKgb~-|N?K|PCw(Qp+eSB=3 zx+^XsZPvxntm-9K*$MFFxjy*zO60xt+d%vb9Ej)LxGr$dj9^RlmQvz&@T#{(>lYMw z3d+(#JRc0khbStV1H3P;Wf%44Ix%q?`$~`Rkw3fxDSwym|1_9x4BJ|ob4OP-RWSDJ zEP4B$JGa$tD=QY7D079q-*D;Cf6O-#OV_I{$!sKlQO$bE7lwnO?b#T(dODxHi+O#` zP%PUN1EOssxLmb zLQa7{ad!PZH`^Z$>>wZ?3R0EXpThlig4*Kvms}Oj@-&oL?4UhV1Bx`OLd|$212W_h z6d?Ky~Fe;?jUs|qfH=q zgy#m!dh1tzbkOQcu+z<1x3zC=u;eHbLHj|AV97xHG_$tdBw18$n_Bp`{I~1Vu>VM$ zzK^3I!l6UktOprHK0*ESTz=Gz8omjMjcHQNJ|>>C+=NeyeCDS&m`x4gzC$ zQiOjpm}QRq0L(m^g^N#98fnnT`O6R4Y-j%$J=#-1kfG@+FImKlP_Y^ zqgSKGP_io|?^=oIqFUVQBw;qp-I0uE>5>T56%=M3g#nDP)y%i7p;#L@tS%9{{AD&u zpG;4Dln9kxhLb&*V1T|NoN0Vq90eyD^MxzWpKEoiR zX^Qb@`~J=_gfnzeX**PX9QpyxH&XQtPv51cqmD+=VcAgZO}rD&y+u7PaFD;(foZp) zd5c_{s?L7iVoz22LdX~5%j*yGj=v)mg0n@2VAz7W&vUGiY#1v>YxX7LT`UK32pt%< zJbUv8opZu79?4oTpoWFZGkH<4LkiyQIBJC09$%|#l|h4McHGGsKakrJL3FF)udVRs z>GNCgw^JN~H309ujJbUENA>qBD=NuZgpR2`12==oeZaI1R^#KZ zX&GZ?=)Y3(E}-?_YeY4snefZ^aU|^8F!1rsij{b%X@Bt?Y6mSB1_aE+ZUl>@{@2!u z2d@xI`+>oB^v3_>+pm6Y^1SDzgkqc>cKLkSTJBQ!Ts~${$B0og<;kV#b@`u?4c_2r zRC7mf+*RqhI^+%ng;$ATaz81f&VHQ`36H|vI)UIqA_YBUJNZjB5LVD^)LCpgJ(_Ko z#QdB_!{doT>bwvyvP3l2Hl0VM`9Y|)%{H7<=M`6rOc*sN5=3X5dAU@+XQcykr`1lY zV4E))f^oFq*rz;<7=z7`5joL~L9n0DPjnMW?F{&S2E?U|*M|F6YJ|+j-8N)|xEK{N zk!)VmzD0ozTHR@#-EU$Rs2+(TBmpa1OU=u}UWe5i)|w2-YJfW8-G49NQ@D^5E(P!s zi)eg%v;M%|dv5u|h_rY}NMh`Dz5wnn=Wf^D33Z+}v&b2qedN#gs)53_F2aJhiA$F6s-L?+&`cMrhjGKjh}5yoQsi6rzw}rmocp^F|u+sVP0|@hI=gc z_8VK1{;h8uOOI+SrY_Gjuf@K%*Ng+Jg_;f~${i@+O_QFPl&v;-Ep|FyZ-=*}kTBIA>&IxHc0MJ&zYV z6LgcGWixz`3CA7*T@nbkgPV49w;aoS;sUp|R{Z|_3bkmsfNbJ6-T%|bmL~qu5^lIeS7`0>x4W-g{MoqTz&j`J@fP@gN-=y z^g}yM&VDsb5zouhLoFDSCEbE%ueR`+Y74hOA^uLV>SoXT+x%wQ(C({#7cYCPE01UO&RaV zcv(z%zFt$5tg<~am4Cd0y2Os?QT>&mhd?t-KpU%Ln@=SBl6wl>FX`!c$&$1)HUbtu z^nbd(IRJTo;gR=$cb9xm?&EK}fp402wm3(VAn?EI@m%w}qeG;{RKg9$|CtL}j zwoK=T^uU60Emh~rS(&b3%*ZYxzip(NL%78jPA#;M!_c7dIbKXz0eA$xWZi|;&Y3e+}%csyIpB5I&AJSf{k0q zoxbIRpukyYMrN_#@%uU|<8L=;3?gA}KxS{QZpYVzS=~&ch>}PV@`QuzH-@S$wm z4oMDi(?}8VpzK9IFmHoi4$RnH=ofKj3w(Zv>`ip`t464;G%`E`<}+muhv3|sd#u8j zqLV@$G?!k0ljhveEx0g(&ROalFpGUI>PF_z_ViD^cDpFOVYB2~bNrm-#uEn-OJcV9 z*GJZB&G-uObMKVD@x=WZu2LkM_UOdSm|5yqHV1!38x=FL|8pT z=~U4)p>Xq!aP%0~b|YUf?;WbkIO>OhH`h(Py~>)QHRGD1#H#9bv6L6(J=X?|20H0v zWGM28d%p3g6p!(Dnmfiv<WXIEu@>Q(>5SQdIC$AN4{kEF)=$K83=hYdUFEU9!UP4Du^ z%|3aP3p>ZZXfJ0$}5~DHnr?;*)Yi5g0ALp_$JW-HI9wY6&Czs{exD-yuJkKmygsUpIYP1hg+Bi z)tOOWzhv$(Yem;LkB5shL>3|mkMMe0cM87-G0D+i4HHw$y{KGKeD2!2S&EYD#4?$B z+3)@_FEvKhF#T#ROKoU%EnZdTpN}e=_snn0BE=f7zWl?LTdWQAzdnR?5PR4bYjt&bdn| zefJ@WsubSm*1qa#_AB%lQTA9vcn~Cwi;D!~Sbf$yd_smHm6~^wt~2U|?Y%2`E-KUJ zn}|Bxo-7-}SayN#k%b`T9k(Au<|-g8>cK5FjiQ8niaF+@k+bvB4S43(scdJVKYJO+ z5JSkIYMbQde4Xs7^l5)b;T%kNhcY6JKOSZ-vMOX$x6=42pYUuSfwaoeC+$_unSn* zf>rvvJDwXp&@Q_ed8-{yFOtdDUBtSQmf1jTNtB}yY(oC0A{}C>c9vIi>|XImc`xMu-fH)u=of7@z$pjJy?8y9=-)W58E$+-e&pKaZ!6GPc{!n~0#7>6uP37i^Q~}> zMs4WMlTGf|$Nxw5Mc}XJKSpWXBj5eAl7DXVQ4+{c@a*^P8mI(W)6FI8Io!MbUJY0g z)hdF0r`|9H2l2?EPKU!U`c{(o8vP^Uy_XDxTb zb1U*{pxOj4aes~1{d;dg22vj+fRO)_X~2%$7*a65{v0^k^i*(4ox_SMV7@|mES{QT zk{2>#1NcpZ>Etm&a!CQlZyh8an45lv=0&&Ud08U{Otr9e|dB zX28XC6b__GpwT8~u={_1fEM^!&kg@4b^`rT7)&j^OTT{A*X}-}NjSq8?;vc*ry4L& z_m63*i?GVA5HFz{*=994Y~`z_-U*Vcvq`}@JwX^R)|*#!Vsps=+!4|Kx6 zG72UFKmfS9Zxg!5aHVFQ;Qy?>O=uj$SWax-;GK?~>n(`-uhdel+m$9QG@QE-{1pVW z-hrXUy*t%;OCUWZsRi%2pS{=`c8GKmc<|B1nTBP!^BpMVp8@N2k>-H%9|Qj_-Fu|M z!ALm=S&+J}VAU9cA65qhLYu1BWIi@3>6yGW1wxx|-YvRSIjXe_nhIw$jbB`KtoUJ+ zEM~BF@Dm7AG;b~d-dA1$*8+7eO+_ z)9$;~QXmbYcc1G;ME`edsPUHnx2ydFAj`6T5J|TK#@{-cnomJw?CF;Tp~P-*OTH%( z*(EQ*~YQOvVpc~IPf^Ci*1ZJyD@r6EqpAl@dde-jfc0IKV zHAyv)|1~{im5+TTO@j)u(pjG*d*5IGQVl$Ji%B=7%Rnk^;E~U-nLRx7>Kw^`$=!Je z6n$0z1ryc1hc2pe9UG0laindzZp{_8x!rIaC~kcUfmV1!xN|=5-R+-_WeM(5QuZu~ z5dD1Y2&>VT6MN*lrjP8v{z^l0IIm$Z+Q7U&UEwa^#YCU^cYB!Zn-?2_3Jsy12ibG z=`CH#aT7<-_z}GjGtbzMvA;Zcur{2W!Ep)CP&($a0c4-1$==`qU(KAVQV!bpJBu+q zC>}u5>$NJIhp(Q;H(hfc8UX1s=g!p2(i9G1ZXLg$mY<)!a~`c7qfV-SuGhORd-aGV}S9_xz^@P%s{| zz&UY(Lyz%fN0I=1cQuR#sh`Fr(Rs%u@_{bON&GRe32O)Go&fXFZjoG6t;uN+<`w$L z;r5h|jb4SySfDbjgPD#fst(+LX4)ndi)?Z)1rplj<&WPwkL#_P=szwwmDbsVMbWbp zlv#fDZJ+`E8*Oa1E?YS885L(#XFF_Z)m#LR-0+CIkegsp7fEH97N+^Q00awXnwynV zg;oOEFAYn*sO)@tg5-Ql70+rxlX!=x_JKL?%6F2&@()hu@M|5*De+TpTrM&X+YTQr zZ0V!O-&cY3n9<>#lwA z!}@@ld6`PdAtvt|`&0#TzoMd{xaKC|YWE!mz{V(JoTQ3l-g;Sd0*O*Vd-{ z74{iWJG$0rGtT2`aA0_GEnd7;e<|(v*9;p?EILTrw(nNkKNNsX#6}6va-*BERpiurs-z-Crt4s)+*zcdY~Y?;Fr}5yVbaT zP%EANrE^znsEAbN20+NF8c*u)-5k$w-EB}AG~$sG zdgv=8^0fHX^PV_`Zb&zunx=#`YnTAS<0+Nq3w4Gzkz>OM34|hABdya|_RXzWw|H@Z zFtz=eft7#W1i>CcpNIqeZjf$mlT*6)%86Gcxwy&bzEqRw>kJz*GGQJ>2$fISE}v-O z_WH7rg0E{Qt|v{A*&+Y{kxI4d3k-Tl-!*XdQnW6u*vUrUcvYhf?%K(@zRC+?{UCp0 zwW_ih;|;GU;v5obKrI~}Z8!K#oozsA(4%r$gf~ioaMFtzY&IhAfbMe3i z>j2w>S7U-?*(zBCDz4Y^u^Lg=LP6*3Aqc{amnajph|BsZ*q_D^`-Nk_jdDq zUd==Rb`x3ibU%IT7_H>yx&iSQ09SeKPe0I9d_14>V)ey!ablLL{?#eLT$_kuos{2x z5huQ?kipU3nbueIxr7pC^V`o7x*@qIjkKuvHhUJ>GhI?P z=6d-{&IO};W1Qr?Hr>AT;GApz-AfaQZ2uc17BZ(!O`DCd#FQb9oGKB#GVxdPWzTUx&ix6)6@b(`}w}uGR|BDblpfJLqj_>0nsQQ*+nX zw_S1Tg0tCwO`jM#qvOi>%PZ7l>RUS{(e1~Hm&a3=4OMzAA-YC~Jxi!RHjUJSsgoV< zQwGu1n*{=gUoPva6*!N>;sm>uD%EOV!FII=!&JK!3*(XYejIkK4l-ytRgb!t?~qj< zmp_BF^e-I6AMMF=)6rxi+T8qMjhG4m#JfmM`^64?73H?d;!rzyFUer>L*HYCEZ2V- zUxb`s5v$Z5lBJinX${=|MJ*9(Oy8ne2^N#x2GSlq%its_>I^AylHek%!f`Kt(i_=| zy>gQ|VIEs8PY_3ovvQUOykZfV6ZFUBn6#=Uq;U!J<9L$hJB)7(;upjj-{ z!SjBBcCzZTt(9D}b+NidO1n*!U-J(%+4Iovo%2S*@q6R&V5?ZudZ*<29ktGoAG z@SXjH#%zvJkvG0Z4u2%h{}Di)U^qi1I*Zb4vS^+nUkxKNyYq{@9^I5c$}o?* zoE1_;JN>65sfpW9xf8Dj1mcdo z)KxJ3u-wPXs!wt0W{6lUv_(Mx8-6vJ32L%xn;+b3#M!?5C=&;2pv+b8Q)-bG7~9({ zocz#2ICsd=xVVboWFIivwrmsPRP}4SFR}%^F^VZ?nSvu8LTVr%R9Qo!oCN!|)vDHb z597EGWfAz=)A14J+_0noRhtsapb?w>iEFLf7B9E(o|h`n$!*Z8$JB|V&Z7g>!KmCH z&3k+W0wRH!1V{M4u$t&gC!S`psJBGa-@Wz4s`YIc+I%y67O-?L=JXC_*PZTgH`r za7O)Tt=lfG!gfC8%zt%}2s+0K?kMT!Ho>*cjB7KX<12R{{-oA3ACRKwrVpcqI(a8l zYB^$kc6qW;UfR3^C=wku6O}q~GLlZ^!9nzgNB9$#pbR>G>mODbUakke0$hAaEMbam z;n2vuZtC>wAXpPpA@U@S@gZ@ZU_bFm+jeEt8f$hfAUpf>0S1O=WVDc(-Zw9dX6x`#fyngGU) zy6ZT*w6j0hS|7?h@fG?(tr5GTusJn+&H3UG+fX4w7+PV?VZvLN=9J(!ncuAj20XEjY8AGS0+&D zsu=_aZku~%(5?QygH}6^eg~N~+zNrIgbs5on0b=^bYObI8VTo|jS@j$+Yjg{ds!E? zACfC^m(SYZpNp(d!^>1ix|L8nmZiiw>Iiq=Hjin#qu$Q3<>4RGnp7Grc%<$XH;G3s zy|V34jMO=@jv94uXh}zTOn(7zfc@28Mf(9{=WZhrI8lt1|_6LIwdVYQ0Z=jp*y9A2BlL#1*N+? zC5G_+`|$bx*8g5>mJf6}1M{wP_I~Z_g1L1}y_3aY6kxS>y#&K^3(4ltL%y&7 ztt|goFha=1H>^Ex<4X~{;l)!+3^IiUE$waGz9-H5Q$EMx`dZ^@A-+*Z(}{Y{iweyd z?xjm|@tD6k11dUomO!=)$WoIXIc;Pd$*RZ#1-c(rP+piJ%=68v9}%9sfbGk6))3w(<3nkdgGP%Mfrd%) zMY7H-oGjb``ZkRzLIq*Mg=vXkAF*sADK^YDie^v)M`wt=PIvq9K-!<1sXMZDaFPf^ z%7?(SB!nTc6zOtu7N{~3z*|Odt2KkWoX-m&QXjW5jainK{na_)(N)r(jDvXuZ~AQ2 zb)Dl+L{5ib4M@TDAJ#q&DA|e}2Raeu(6Ydvh^uw)SN;r;_@N~?{8-{t$AiY}X;%)z z;Ib=^-`5RrkJq(_Jjb+Ea(*ta>lGp}FX^2_q+lla4d2D z^#&sfhZ%lt`Rd4!6KujG6e~oz=^Y^^{ZP`+6y+A8r*FDcncaA36>>#cIdqJtX(4G< zwBoglw6cy;(CmU!Pv&18l#AqKtbE4&llD=A${6hU5rzx1qO_qASy0&N&M3d|Yv{M& zE8=}3Z^={S%y7wjAqcjeen;7RDW*!?Rf6xcgxPNbPJqB?qOm4%wP|3H%pvow2Wb}v zntZ~MY&6xJ?YE`??B_n7ASmgK3>Nzsc<^j%F%C}Pdmf-2MSTh#nkx@I_4|jj<+jKQ z>Rvw|xr^lzacWhU$+x0P5S;Q`O_r6RWMonJ#l{#r%0sD9IaeKj&>q6%d_NfiUZVpS0T@K`P-on@V2fY7Y zV5yVW5j{G5DPuriku^y6UPyQwLq@EP_d+bkv5y%AMX-(6&|ln|&X^_}b0L*{Tv!c8 ze0I1TLRV+EM1Gd1op5&H#)c|fel*nHPFze>)n41q1I2t()6`aye%~8T=R+f&U?_f3 zLMP38x25dc>xe6{RvzNGf~1nj07AhUk4s(( z5f5DrjO(!KqT_@39}sEx^eIwhi=`>UaAtpTme?K>UJ5)$c$v8`c3}}g=>wAjTN4D9 zWOTosTunCLI%kNqyzafl=8ek5+&cl=S0^JbJxK!b(+{zYM@dp&V=3&D9D8c9;O6%* zroQPg`=mvlnag8U?uOg}`hL6j|*ZC1>woCH(lH6`%~M~-22*Fx;pbK9tx=p4bx~lPooh6$OiDGM9Ib-dQXK!{Ib2` z4d3y@e3--=>C(Q&*i3ss6r8NFDs$BgI3%&WY;~L=lHFlrOWh(}3Pp0e-;X~u9sbPP zEbX=pH#HO%Lyl+tmSHFv*@Ls$}?J+f5abX@LX)fpvBNoL)=;y~`n`YbQ_ztN2# zlHkN%eb+#E?(-N2NxOV19uWfVpX0Xo-7e1BjrPQE78lE{jW$|*{9+Vy+8SI#&^b^c z{zXcQX679~ds1LtykMDJzg-T=2T(R^8L9EG_(J17jEN?tsvaNv6C0P^HSDYL1|;B} zjWP%oLKQ0iI$N*(@WrDI%okOLNB^G7EZ(FJ=9&B6?A7uGJ=-zUW>O=kA2!hp9}sZ7 zb!3)(6Z<*}zPWDf&9z56NNxdkZ0oN#cR((E65DzqFI)&N&dB?LL4xsbkmCvp3R7)^ zSDuo?fO|Ak#1hsRc_+`OAaM@fAx~6d430nrvtDECE-X5MB-8~p@;?uZC0A%^sp9a8 zu>%cpX+dSVx01`Kh?^joV?yrKM7$_h&!lZ>UG6<1pcFSYYEM{j>VFp;MQ2jNLSA8_u_7`DVK-NM0i~t7Rr2RUcRsgsLb7OZ$?Sm z&gAM>+zw%#F}*%*hE;wJBTW_|1#|*#jK^-u&b{4LZE%`p^3oW{<*NCe;ZZ_W*l>KE z*_GSb2V~qph*tMW)FqTOWC`S$pl*U?$_++a`hiWIQoBg)PkF{2beAbe7yQKZsy5-3 zh7g(dQOq`CyhEF?brLAOd~>&P%4&4c-N>UZhbUg^u1v>wnb`wFv`J{MsDA8kmZvGe zFySfA-rCuX!LuCA7e|3jQmF?1_z-{R$Jo&vBRH4&NSoi8JhYcqiMCd>MS>A<9Z`zr zb`*AEy_$t{`*Tpswp$!EBQ!dsG~+O##)pUEhu2=;YvO8=r`_<3K2J$%o1BOniRUP* zS!71RX8c4Xbx`D z{#MZaSMnnF<w-7v4|H%_LWru?@JvztUIV3mX>rJS)I$? zwk+HY2@MK*V=l{WRDY@|DbGMpMw+?8IMHZW(6BF&Eqm(lUu$hE0zmhI2_?im5M@<+ zGw1{x-PXfx=v6-RGl4d$sV^aB=_0OGUil2zzt#!>E#0U

    )RCepv=Qe$#+@3+V**xJ|cK26oM2b$LE3)y60q3Hv$Vyfp1Y z?v=>qX_bDf{2On``DLv93kmydhH;4X{C_e+zaMevndN{+t(jOC$yu(2=ZYJSu&Ja` zI2P0pDAJpSxDO7?xQJOqD}EU(Eo!w_$L=k2TC7@{D)+zan^$5dE^7RO$Fk`dq1nAc zRYL`Qi1GgG1nEL%S5cjaPkDNO-U5$@jB}M}UU^3w#AVB_38z%?#*6l$Ofjj*JPy7s_FTisZ)L7>dMH8;#``Lf>Ru9g% zcPZeV7DH(^-#U+|N2i+}qbZH-#)1h}2)8#;#NoXXtefL=DJqxbxa~+V?IblOvi2QY z<)E6cX(R?bu7FC(g}OE$QQz!6krcr-<~|?0iRK#Qy-$n(ui9)8POm=0C)Yldhv$O8 z{deKn67z^9D0JsCsKpdyb_p(&F2^7S34I77@)RnOd_&c4S|wiipuc~c4Hl(l5k)T@_!I9N5ZG~n{o68ZMO zOFsyc*9}Z(a1}z8Z~UhE#KQ)=aTQT!$uhb_znb%@d?rlyUc(&8Jba{J)bbDY>hadQ z6*;dZ&opW<1-h2qalU>SC;^(5yI@fmP4P$eKC6<=@t;-aw(~2aH_3+=240nhDA^qNr6oxZao}`v`WddxW0FCR?ja7I!G-spDz7bdicwS zURs?X>Ski8noGBChTHdclyM#F?R&FO&h<~l*OfJIGT<8Y0(S*);r*Kp8BISS?N&g? zElY|2I}=?OS!(9jbCuhfxqd8FM2q#~j@qH|tlwf=;y~PG${neOPy6i!DnqUFz$N1F zht)2NW7lk;;=Am(TCMwAVslNyK0mI!&ex8h=5~>9!1psY?e?)6BBdaV3BX|N%TyV_+=FHn|utoPmyuR2=N3-88*T#7_n_WICI z`I1Z!psm83DW_#ni_21T8w_>`OhVdbpIDm%HtZ zc5`?!Jh5IY3*RQmM{{=3ofFwnDgJZAlvlpUan7Th?*8RdKAG5u3HyU`gl*{!W;oZm z&FsaQ#I*oU_Q%v=qG5{d2}>K!R7B-7_C-Mk)mMy0mESP`3ol_YJi?KF0Rqo@(j!a@ zj3R?cyiAjU4Pfw7SacAWdX{8O&@3C0LY)$^eriyNIOXYr6)#ttVvc-d0g%Yw4{U>a z&#-3+MLIy#ay{w?^MT}!o^jE84BvdgJT2GdeUo;sYRadf;o!g1+7ungF0k781dF(v z&;1*3XYvy&x%*&3ImIWNklCWfN*ukMt~AI&#h6x{dAv35Th^tmlV(adxy@`BRx~m1`-MqU|uKxz7)=Z_~LR{m) zk{j*qtp46;Gz+@mr9vUtTOb1HZl+TBZI{JbLL!AmC9c+t*~LQ962#--S8rQ|Yk#;; z_Q37%H+kIXY$eMUZ<}^;uH5<_i5jx(6-YJQSklW+V#_Y&Ya^>lcQ&R|Q1#(OV&!i_ zpkGBG-C9@8a^I~7ZgpWft|qJah{Z-&xya|g(?Ca4`fpZ!_Vz>1R$VI+F0i+|a3Jc_ zaqHSDd-Y`!gDgdai4bCIJv(UgWmb^TE`Rnj5KYpN`s$ij42X*2I%J=Oeq`CZ;4j|; zgnV5Kn_ds|?pH3J^cGC4zQui5SO0d8NC^_$T}O?sc18vvJ6YZnPp39$XfURn3$JQ; z)^_2ECkxSI`ic4`>Q(#6w&^!zNOvWt z=+EXE&jA3v@_FUl6){T`DO-OP%kD3o9FNApiRoJN_;ew64h!vRV#+8wNo!98)O~Q|UcxK90(?9W z;8TW?M5R*immYV1x1y=P=apLnR-4VudS7CF!~XJXKj;#el&b>RulgIeWq07ui@iSl ziaZ6Ir~M9ihPbB)73KPUQ_ay`v|OC}O#@uuFeB}t_atq>?$!w(WH#c=pNi$Om7Bpz zSne(?p30u}Q|N2uOj6D^FCvY{BzGpt6>OG;YyK6gPLnPSo6?zKvbSFjg@#j`^`iXnk6r%lcG?y^AQZ^1S!_&8FM zwo=Qx$B&Hbc)OAFj)>F$IJoGcaRe?E5N(9w|=vVY2p8xqN%R4yI-ebXsYMMI1=)D3AJ z5wz~BLTBz3Bw6v|`jWR-5>q%d^M5C!NtyNZ3*@7ZG0>175$Eq^B?C7#w!jK(DWGPj znPjT61=y^l}pt4vO*`5tvhk_x5zTZOx0e@4iW*}k-XHuy(EMgMLZMG1y@0! zW+0wVMDyjpWSV!Z2k0jo@C)zpUJ@=iKJ6q}!8#J42W7@%4uUZ{TvXcHHODSg z@*dCY{=dmeFC#nsRu!x_iq71dGD*B#PuCt)H@XP>|ILN$UG8%WC*^b+CN)6fi8JzR z4=4E@Z-R4=n~W7WbG|qy=2HxAG0m@wMg#I+f-9o=R>0^>!S zBmXf2ru12Y%#{%!YOfr=$)Mffno69(Mpm052)rjSrfI$Y0d1#hL?x9*ZXF)v z)d!5huNZ~?>*cd&xwC2;*bv~1G;4Ae;Aa(VbF55@S^gDk+)XfjTB{7~R!6L$X(Yyb z@hJlNIQ{>!SDnA|GO`QQsY?lFNuxjo9!d=cP}#YgJBdr>rqPz&0r}uwSn=N_&oEch z^@t$who{gv?Q*Ru^?@Op>G9ZD5x`Zvw4pwNp*2N+U}!=fO>nw9!U67@>A2}_{PS9$ zeC_HC?wUPZo0jb9X4~dIvh+vGwGK-7>#MDiKHW;`j&#NkXlL}WiXUU`$K6=?UHm@z zZf!KmKq#GK76Ylk%r~hR-CEm_S#E|JV{sh@5p~!R zOpZLN@}R^b{G7IDlr;Rz{#f!mna9qucLGUVme#L1nJI9ypMK_d7(p(XZGQzl)M*Wx z-Zvl#aM^3KKIo_NsdG`%4plcVbPU|u6&W338%b>Q5QD=Xrf-+b|L>~7V(8dHOH~be zgx-m9A0~Z1#PAY7mrPZ8gfNl)X_WBYCkeA#wLIc0lOz`@~>huR7H8qKq)x185u&=e^wNhcwYZ zIPO%O?eId$TcX?}SiIRR!D?q%uW#9IHV1Y2B9vrQH_uu+#5F(B8<(peF^p=D)Q%Gg zmn-ECu1g4eYG3Cda-Zn`-%2WWpOE4))!@-;w_}hd@K(oqK&jivbwHYscq^bNVLcE7 zk7`DIv3?Q*mvUFOUsu$%u4K;e72v0g{>4NoT>Uit9oJ=lYB@@ncDDL}H9JqQ1b(uZ zs91W2iF{HL+18p7l_r#N@FEZy1sK$Xt%BW$92rE=^2KCc7?dDTqnqX<`1BuAOf>$>~l7B`wt9p^wFl6YM`>UHYiSGOgI6NmJ z?c{pj-gudA1}Ey2sh3HIn0)Y?`v4I*ULz#?sctSSO)=(Z8OGpR|4EzirsUsPfo8dZ z!dsQUF(41WIi4SVMkmzMcxQBMjyRX3Ed^1#jmH@Ww+L~UJv>3pFaOx><7DH|j!&;o z6(lRh^VPJD-*gOeUu(B!)qd{;8tLh1^JZf?zmgeWt>Zs8&Rg(_0y7$`&wTCfc>1G% ztN9C6CST-FRMdkdUM7r!&e2;e`viv}Wr2)T$6K2kCXktvhzL0N`B zf*qxuZOK1XbZ2LP`ke)u1PJgJxU}O5PTf=RJrQ2wy!Y5>7XZJRLM0G0koyHfN$xPq zYpcxksJwKHE|?fF9* z7o0wSMOi|nt~4sY#1l6Yr5^xb&pm&?H}1TjHv`NP7agcdR?u)i`sfR$vqOk8kOzwg zmy3Xrj+%}w)Fz-{C&#*a{G?RO}9DwX5A@lUvP4TVGtL(!$1VKDD+gi%~9B} zW$D#E26p?%$7o42DnXl`^7ob7{2V0IB1zvfg{FMx^QikiRO__$+XY|jI3oX&G;-1kmkr|6{UiOeJ#I+^?T&;fPhhY=QlxYaZ;MB(nTnA7 zV(o1hjycDFxR&AAgX^O!Q{E>*lbCd6TOjYgKX-C_Phq;E;k{?tD5VV&h|ymn4{Y<* zi>tuBNUllYb@b;AJ5Pf%=nbf0&t>rV}4M3Hu z6#>|{Wa89JkL^D?-jFU0a8%*DPKwu6mQ2hTnHGB|6sdgUZ0emZ2%wlYXC|mTb~H1}tN6 zBN~^@b?;{>xL7_F#2D-Fhfk~2+HcPm-%aX29maEC4>OHLwkxCoN|#q`-`D9wB(fKCS91gzpEABHHyf}%+1M?`XL!WR%;De=*^yHTW+0S$T8+tgOLXg9U@|1D zV$yhey;#uu!Gd}{UUo+ykFgPNsi!Rd)WS#UR|#foig4Ykn71{%j+qpqDkciG>j$Bc zU?1x^$%H1{8)X+t9|ea4;L4l>H4AN2T=;5aVmPhe6`++nw~2M%PtJFc9EP=nVQuSs zg$y9uK!pShS{`^V2a(Nr2J%Lg-{Z!ngygv&I7S_gY=AHxa6wo3+<4RjR?qwa^qaLW zAbYin%M*)&qT-x8BktwZLGytuiR?0vP}E*7H2~N2gnJPn*b*7+%~b9qWu>GPs5?K3 zC*+FleRT<>hi=}2gms-ocVS@MI?+~^xng?Bw5`the5?7F(Gt1CRWjhEYklu9ClFWc%< zJWO6liM*mS*U4_Q+b74-1CKhW`8mkvr{xL`3AQ-_o37&Z52a0(Q_mS}=hmkrm&6di zQa@fBu(@LHrH#;c6CsZMZv|L;gaQR6dWK_#kLbPFpa$XO%Z?_!>@2uo4MEL$g7T6Z z_oL+Xk#fQ3sE4z$9n+rLs7GK@);fA%**vO3+oryKrUGI<;D3WpAuzXpn`m3F84z0H zH9gXEb$2~ISg3#ZaH4*YqE;`N;UN2u{(Jn0f~z@uJ&y|#m)2*A8lx?&>Y_YpI-1ja4|*+?w$9W> zi(4=I_jd$lFkV`iD*l};l^?g#4iUlIt#Uz~)1P{bHFPEIo<{T&z6--26=5xppI<0y zuEYzpM(7F>W^r3D3^XmSzpp;<^NaChl*_20v(dEa4uE{0yqNfbd+$w5_lptp?!K(q zX{Z*~?(fkx{~REazp=e5*vJjlHaAQtxTfa;gF++)zQx)FYLV~RITR^f$`OUZ^+;`3 zj#8R>wWk$&pv7Nk6>~7>ZZ*5>=T9!aLlqni^)4Vx^RIMd`=u+6=^Ypa z7;D@Pf6JoLfItSZBp7^>W+65Dq0k`xe#2Ah{1t8|y?rN%ddOw$}1ko*raKF%%=!A8HOJ_3AwY9@GEm4c_V z+qxKW9d*{2vYwQetOeXPAx8&m=Y7u=n0KZ)GW!icD^tuyV$Qf@qHUaz2$9ZI(S+C9 zs&*2Du{UVwXd9p+C(@eU)FXWIol-Nn?sV@trP$O(B=*zc4})V5v-2}|la%bZlKWdt zP%bfUunE+pq|6v`yStKPJ&*U|c+T%9-iZ+u@J*KY6Avz#nlG@3WCLDz%05vMF(`;5 zOC)3*cRNx7Ql=5GCOaKrk4=0HW-4`*l7zie3iYc62oqO9UPd*7r7av6d4sI#kd$-A=+FSX2Qt}R)nsv4M!;!vS3xlPB7FKd{L7rQd z$FRM2gtR2z3Kew`MYjOIB(STC7Gn7d%;80;~g;9B)I5O&u=j`)Z}{5JX_WB z;omJ!**J_hyNICoe1Fz@5so^%lO(8WKUztXf{VWmKDgKZ9A=v{P19 z+61Idf&N98(0rZQjg-zn(N5wdtcoAg5$8L5Syk=a5YXq@(Y6qrHn+LZh;NGh*!lFw z>@0uG4)r#RxO+De4~H?Ua)4%?&C~1*cjr@eRwXt<27eQnCQHF{Q}iL3?RHpeU5GMm zbx4ADtkt|pnaP2gwx>a&bKd+ArTU=F=qTu_6?nDfG}js$(nq)|{(x<){VC^3tsbbZ zO#Q7LGQm`6AHW5oy5fkVG0BcyckD%HQn|4vUe zvNRylf{J_GSih}2Ob3}6C-f|Qdr}qjWxQx@G!brjrhfX{|3*!2uv0ktU;ubISLa5#LbT(^!Bn@BzWK`TwC(8%VcWAw z-lA1#enGgDth+FCkuNl&J%qrunSoTrr@?_}@9+ilnBB`U)V}-buF_D>+*iV_#>(&L z(%jji&QXWq)iq>?L~=(M3h&SSS-L|)UYtcPog-##>yd7os&r%JWH>~OekZTRm$I;_ z$=cZAPi#MIKT#17i4eR{Bx0G?6I%0lMSuPuDa_`^9i#W1uqEGDBo74Ya2}GkS+W_& zcKI;e10@QeQj|@%V?3ldesTs)zA`yG!v%2AWa3y$(WZG-vkt9>eIjyUJ)hO4h<^_% z{8%#FvRlL^|8#ifhb+(0SBz}r$QeoS{b8V-A!&P|cXo=jun0H>Xa>RodKyFAqu7Us zVJy}{Lu63gCC6^QEp%=VgR)2PX$6!Y#j8iXYsAc1OZ)?9PnchbU2f*oRo}OgIcj`K z{(EqllFjeMGZ3aU(6G+X2M(WQVbYb@F5GbLOx1?t@DAWaVRm)?@iY7~kn-7Ob)Z_l z>T@7U4dMK7@SBKaZt=Uc@jT7G&;@dA?AJ9Hwx9m0@?Q3 z`TCW?p6)Kx)3$UrdbH5ykH=$zS%2v?j+1Hdt9UuUc42*+XqZF@0p#+tj`_`H%8p|B z?ftWj)1aZEfGCU#C{zFe1>GI1XeO=k5veJkFXOn0p2DAZ@uLhkV0cPy2(J=L%O<1g z)>Va*!ty-@#B`t421eVZ`bCwBgRd{|iJ{d*Uha57tfhCIt`*61wMR`?A$yV~{F#qG zmGock?XK`PSN@KytG87vy6Gn^PBI7`X&Q&V_MNJ9EiBZ#3&K`mXl*`%D&gJ_pnDQ( z6MjFkkt6>}uq?j)Do=U{2k9wW>)-KOdLC#mCXGd*9kiK}6Z%(PckAK{VTM^`t&~}h z&)?N(7gg)kAa=?)4@f8%1Q*7zUN0XQ1qE!l5$O;Wv^zg}_wyYFmI;uyNf0d_0R1FV zT$*V`oY7KfkSm*_S#FU#a8Q$+PGG9NN+S^xc;c*Za@@yV-|Plem4GQQmUyFyH>|a1 zjpp>dqROV0`1BG(V_U+jpd$WI{PQ_A&$8d*qhnck!xc{-?TqNo#fx*qg@i2T?ap>4C{ena&emhGE^r$8r2U-5#iUEw;5mT+=Qp(XHPhnf$d6zv5z z-y)sp)3_Iu^$s%zmOlwzZw!i`wbV#^p2if<1t7(jcaneF*Uj8##{b)oGmM~uCSyk~ zopKqv9}#iRQZGs0$+gn!9sS!~7PZQ^pJ!7m1qToA+d1)liJHia#scG9C0M=tRTYG* z`Y1aHr{K-#Zvm?=To&qrL2Sn@ci%R*)bHQvgf9hKHod`=t<`G+D#48b%kb92ElJ8XF()Veo~`9Nn$>}_H(L$Usjz1?XU@$ zCwE6g9*VD@4C=b=3HTXA64|TocRIrJ z5_8|a>x&5m>F+%knsnF~v7-K4F7EfEiH&fVn6JuaL10kga^-HfAy%^d%jX@9#r;X` z9WzwO)^@0X@%~4bO}qVDO^~vo;$5nr_%ko8)~FRlcKbV7;C3|=U4FSktpE8ZtcXp; zCVVn6+aoKN>kbuS)66!vmt>!*Vcfwob)K&r6`!qf(RS(dc}bWMOg?RhBzo8w6U6dN zI)X)QiY`#3!(4Ce8)9eqjiwF;0qw4s#t}wv{eE43i!-5_w>#kup@{azdnp_lO>D!6 zNkJ51f0Bhdy{YwbvV0*M?oYwZ+_-^gU8t3yWVPQ|Y%I$wmUh&SaE?smYA)9g{L-Pr zj8kGO%hxetQ5qZS>h`8wOq$c^*#VJXJ7a1H^;E?}7~O~960A(DIMf5f4s!zMw-%7? zbmJUc=&uT4M5k-unf%lVeI2(}1?w>d?|ArVL9~K6?e4{^o50cJ^OL9;O8iAyytBX_ zWpc-bMKD`d)PNou)s)c=K@FRc5UbFH@pi9>rxT3}<5%_ByZa@1SL5xUS%?y5485X4 zfuYlLtOE7Y!-Q2YHv&UM>#-~?{hFJI49##gRp7`l53T#F6i?Gj3d5zFj+DbPtYcZs zA5ljm;J0nOAB+6o)ztxNT9l;>JU%v1hD#3~SuU=YACXzk+hm#b>Mv7KWwtib2s4MR z8BEL%!!R@Y98p(Id<=TD9+Q7a42;Oj02iFLVatPB9u{j8MuQ>UN{1j%(~smA&pfA@ z6i{CoO=~A;kAxnu*RT;b<8cak7+1p*Kd zvYKO8$s11={chYpM+-fh4X2+X%Y})NSCbXH2@?7c%qC??Rz%bl>cG}p&$L9jHzKvo z;95;GsVWosJMpp3g4P+9w%%@;G-7e*7c8=_C(P4^uL$V=mC5yu&c5b)oLfRW5b7aB z#`4m&&Tr`r?Wg0X-|t@H`r{c!VrRZjnz;|%Z6f+ ze)_P>ST(LY@0`E04=0`fT|_b&%qk#D^yfJgZ>tfBpCyA8Bh@B2hz);{+^=Z!E%jF7 zdOteVGdE4x(QH2%c}FU%k-9-ah#*vKG{Qw8Wh?z77lHK#?HS_)Kr=t9rZ-}2JCc+p zBud@i)RH8OB*Y7ilb^E&BhYms6QmMMkCHuxPT+%ypqZFrVW&#WB&NzuZvTiOGX)6tK$AOeO zJ6+(nPETd(>0^sxj)PNHeZj7e0;ppftWWxZ^n>Pg~R z9`}IH7UsmjdpBl&(Vf^!YQIF6X{Y0{9<%FuCM&;}GpLvS0EY!RiYfP;oS08{6%$unA%-+}S-EONle*>Xy!KKsJ zl$JPu7DC$;;<)f*Hqv(zPkN3R^JZ_2-+ySP=*B7HhS3>GAla!2Hf_5Yktjv=0ES>H zbQhM*`u|=(+R9a>|3x`D2!!A9eYc4F_I7*viDvZ$`?RY;y3-fI_gVt`+{5r~Zu7MQ z<7;tF%xLTQPIk$d_#Nh89pV}3r#?Z)mX-s8*6D26$-mFk!uZ@ZM{9*bVNhmhf~@&* z#!NF5B2bpdYN0Kda6ou6Q(Q>Opg;306DStFgN?`GhiG_NY=xG+x;bQ0hq@Yw?O+ePom`y7zK6TilwgG$y5` z;q_`Hp{143iQwLH4dHhp2hAuKdU8gK$3(pj4GMAVZjeih%ZK*dEc6}>8Xh?V7gWPZ z60&GAhgB=L$VFeLb$`w)bI zlLeZ_O-w7~v9rofzZd7XlI-1>bOntH&~q^u?JY4^X#MNwNq0tRJ0v@NW^UVXxRX|^ zHOw)nX*3XEtBq3-E%Y|klFr!gwJD>HFh+-db`wQ&nj?FULlXs@G|;Xo$97XNJ0B9c z3Fz4a5#BJ-D_2o$4Iv+@^?nU{#&kp}T~|mozK4qe74%1h=ZNp9gsPu5Il(E7cZ>bU z?=yNiSmXOv19+1mqVsiEo-jXGuP5?Cwh=0q84?Q>TV51Ty2=WX5dm1pM`@HsMn?TN z54uS_IeCIwJmGzAcRNg*L{>T0NDf@B|UDsO@E8!J8nQ2dhNaH8U znP2L^#CNF{S(_^S)Z4*=u{>h|-d4WaO@B-p)C&p7~)2;w@Ul-kHF zj5`s;1JnnlN|0r={5A6XI+oum-%9!rS%t@9}0F z40Zc_jIUi!rSOop#9rfptetDR8Ti>7zT(o^wA13hp7XTRIb#2~94t)Qd?3L0-Y{U7 zV%cB#*Q`4mpPh9ZTet(+{$uiIBwZg3U3XRQf7f4!OX-<)t)Q7nMK;+P2N@ks~iQc&KTGKy~UGfcMO#hjt(QWK&yWLE^!TT(2{dl>A?Q(7j;#v z>hxh*Q>BfO+A6R-n-yK=552DyTE+i=t69TGGuN}Xw^s#t^8bDa%x!`15BCA^sp}y$ zW#H}bj|$eep)BPZ%^&oVAu=jYo;9T5E#J*GNKc3S|L+oqMwtHQNGnSk{lE7hD|>H8 zF!2IY4#%13LmckfQxq+x3=+A2bPiO*yK+ov|Mx|Luk)D@ly;2b^Zjp6w%@3=Si6}; zG#K{HuV4j>Pg@@RyYD{;niK2nhyQ(H|L@PZf+486+&>kFd8D1%lV5f*bo}Z3C|dWQ z4qkEBKXhsxRGYlq7Y_jVg*{g({ROui8?LOJ+?(k#({=EqGxNH96=u_Q3Z6rXk*fFq zi)}yeuz*!K>ZmW&ppZ4}8{e@imPG2n9mz8mS$X*svb@p{|9ktR9MIBvVLipewBau7 ze*E*kYggv5{#GTfO$rW6{{<8f$3Rw&;oW5kY!-7KJB2TR!ZTUiv+Di^|JGh1=>8{H zG)LAkJ{MsR`!;Ez2tQQ){hnfLqA(RaX+OIhETr$>JD=Zx{*VbMvpE3V==1j7Xjo=5FES0>J8NiPCJh=i%FQC5GBaaH6a&%0QQTsUeNJFFC~@=x&&o3i z2|aL!XYxes#)4ADJH1w3TymZka$NI)lxKKU0&zfR{(Hwbs#(2Q?-&q7-YGG>Wfp96 z0lpT+MZ(e&w<9BAw?l)3os#R@n=8JEUtkO`(2E0{H5+1wcL|)@_YUZ9adA&Z>h_Jz z(s=OA`;!bW>uRLpUW1bMFPFWUGQ)NZ$Mo8qx1g=XHjpZq2n-wlKs(r<*0VE=WWWWe zR4Ih?=Lj~hK!-26$$T~o;r*)Z%mK6#db8!iUsP0svUZu*g@drmZqgd*Wl+;Sz(SVo zmj2XfbLbWLg!tu*-{7ESdVz!}#l~+oHnuY3ZhUY^q@A29fD1-&)SPf5QB3=V^8Lvc z_wDP1o7$5?a5cRplC}~F!Nf&P)c2`%0=TVqSMs^yMue8JY)=??V~XW&>C2Z@=^qJ8 zJ%O{jLs^iV4~$zpU;g@Dwvwp{-|Ppux@d`R}19iG%ns%Ut=~r(!)_(4eFv9j2%u z4Fh`aHCi9f{hC#LikB8K7xVX*!|RD6U3MH&j@QUGwwQ}5sx-vCPDii*&uj19pbO!X z2MMhg!`vy98kwfRUd>oqTAIze{Pki7^l)s`!a4gt?|FScf;yU*ohT3;5GX?v=f@)WO91w)2Cm)A4rE5RMLMa(~ZE9RVOaQ-6bF-ApCU>lMgfSYKaM+ zO8YD;uqWLk+haU!7pg>^ABmqS>D#nrm8~X3_O<4AR9O-|K|!khb&rVbBMlj*Zbd4q z@xP`~(LG`?yxAOrDSYp@bdElowzMXjER4Fs&E#5B67W#t&ZIZZ-j`ds4|52O10F}37*I3Dlq*L3#408Kd7frrDH<$%!11xx!E}@^RRHqhM$wb7e@nDOt7=bT@)U11 zWi@*d8o|vf4rv8)8!X;pi}NYI->Z4TPx6LDfEx|5ZE3t zy66oGe*1!`0|iq_kyhnfo7!~%Am&qhBq}S)B<47WsOi~|`V@(di2-{yiLz1``DC@h zao#SH7hg#4g+xigo_Q0z^K5N_b_Zo=+LIPZO0B`eb(mqHiS&589OB73iFL;wmi+{s zt9I@2YJ~+&@A*Iq*qsn17yC zr0Qn}oI#F=Q4q|4^%o{{$6|-|zrNmhaj+pASId!{)sXB-o+ws)NNvA4#K3pw5N*Fi z0j=d)O*hBf*f)7N)8OuCK!NByL2=YeFumRML4ef+w%}a7-Ip`RN9BhAeAF9<8)f=- zSe_{({_$(2RkZsjOPoJbwJTTTR~Xg`uMt)DPxOZbrQ?q}h8jIxYxnDRB3goyf>=9I zMgRCF(;Eww(5{m=^Kd-qD!i9rHJFPt&rXEX$jCJN+(dkBcWq^SdDBuN03d+IPukt& zf3mDlNHfZZ-j5f%l@MdUiDTVEljz>;vMPN>9sU4WS+E@KyajA zvQ>cYX`~Q$OVe&2tt8Qvz_*Z-C_`)ow5WK<1L>Em0X{zuHmPRNsJj7m+IYbj%UC~4 zULTIG^AY+>ZK#{I`=ae!zMfFz0+(m3lw%KZd;!l)bvoOBG9Q6TYX|9djqtOc)$0zT z>0+O3j_fz5CafILz-W^BS*(&1OkoZ^jSyavXmOU)pEhP*$+Qn8#z0aSi1E1i*`Ex_ z5F}eA4%X5+6r!xgA9dWFvah}qpA09(;`o`O4(?&NJa9vsRi9e8M*niM=jx}k>gJn) z20}#A)l`J+^>1G86~UdwyW8sPn*-lO5VK2le__h@z*y+yO<9Wx{XD*Q2fEN?UaL$_h#Fl{ zDDb)@Ejn(PTW8j$1|3*p4x$N>e|duk7CV&GvF-xSk^%Ll&tMf1@<%fNJJlF7_-2Ez zeC7U8F}_XYZRdFQ%)4=V*O$p7jGKd!bF85?YRCC4P<>if8#{Iuple26sq); zOS&Ar)f5EO<$q$(o)U#?V#<&iC5b{P4airsGR_VKx>>*eka@~5oY&HRJM!yYq?Ak` zGX{1CUxW@cVn0u_gGqalBBuioB_rv3T|&h=N?NL>xFM~mw9EDYIw>zD{Tg(>DjNX5 z@VCoL3}AJ0W0diwe@|q31?X-mH%ust0AeQ}^T_p-MWtdF^}y>A;g17oS{GPfPappA z2edJh%kb5Xnl@g8q~)|mkis$(r&aYp>{`O;;87>WIpRcHMANrdi+3ppN9PK-0uQo)DuHk)v6XZkdXoL9IBfbde+g^JVoW;P?(^%mV)8Kd`{pvHl83-R_0D@PC%L8$3B z^RvH3zGt2nLQ?L7F_1%)h|M_y>rc3u#u1r9_SqMyR;^K(MX!+VEOiSwM*PT>t@IEfIM1uspH3T-GBPmfNc!!F#d~VsqsD1E~Gm;K{>e7ALf$1fO`Ov zhC3gn+#hsG3W5S7A}uje0@7UqLzjefcXvuj58WW$ zCEeX!gLHQc-JNIizTf%IS&QX=tmR@q``LH=uIpmia^psDJ8nlJ_lYzBVlz&GI4-=% z#ARXNA{*)k^52BcQtK(!W8ip*Mq72h1TO1F9@pf3zfBX{nUCnKv9|Q7gpDvdKg)-o*`8u%z|vzLzHy zEPYhQ77+kN_`K~;EF@va`HK+;;sgDl=XM9O?7fZ{6i8C*{AjyUib#nt?v;B>jK)pC z8_KJ*c#ZUE5lb_Kw=Ca++HKNS~!8`3bb(OnK2lH z{?m!A>r2c58f*hc+ABPLWoS8Ym#>o1FWu{q$77{ z{mlCp&c?k<)}aZ}!_F0*exrdGljb1!%5(m+g{`u8VtW3@nId zWUM0;N9&z4pAQByIRTu!Lxl>(K3`7lmx2Z5oiy3N`J&mT!mbI`SB!o)v2c+bwE(VU zqKz>)@0sTc?WWsOy0jB~Qi`*xf#1;W%F}kc?~`m0c232OCq45kP9A97guT%D7w_O;6CbT6VE2mRI=NcDiNDnd6Oh8WJ`0FCt|O zkcBu`+p)kCV(@MjA7J=6}|=pZ)c^yYU2_!g z_$9?Zr;MrWTrJSW@~=HwOqF3*If91wV}68(SnQef9zaT@F6j}i`Uvv4rB6<+WxAiJ zO=h$C`y0R?R_PJQiF@6Wx4dI@rCepQ^xRRCEvzU**A3~fn=`u*!cu4gIx+2D9vv+J zb}ObH6bUlXUeINUiuE57(>&81v;Vk6I%b3Fy)rjmFO?54A)L`te`3n(E(i{K2n;iFB=IUi0DH2WIhFAHBp^dGI6M3glA2=dW$1b4P&b4y=@v2oc(4i*%nqb z6SVpUfnvUYNW1gTv%Tno3p~YZg#I2wN~Y>P+}jv0M6?P4f#TpxGuJu_0;MipLHAYZ>EWP%xbah>J&!v^E#SY4jneu5;Ms3C>TvDYgZ{m_i!cqxv@*FIel#~V>7fe4 zOn5u0{*wm+ww-RzPqZb|sOlfqy;7*LJ+I*Q!zk^`i z_*kjI7zjXL&2`w&EBWi`3#6hZoUAS25Vausy zPkS3h!})SeX`O>>PgHboq7Z}n>EM?}+#ng}t78OIUWPThI_EM2tNIGZ!Sv-kcHOJ} zYpK)eSgpa;jjAL!^;witw`nsnR_O8lbrju3Ax{D-zF%Nn{^^!MffBExIG4AjDM(aM zDjTphLKwOOzvVJG9a7dIyk_rsvom3Nk6?x2>rXFvnU*-J4CvMxr#a(wXH<0D;xf% zJ$S->y*Hd~z6w-5K_Pq&+4r?-xgpmcIz_QQY`uAZj#oF6YEddxEd1r$g|bN_3#2T> zRU?TP@FZfMLawTM>lM0QMwM@oO*tq(5{5Sp4TXeZ(Doy|)MZ|yOD&)oaRuf+O=(O< z(lvfY#Gz+EC;E*Dh}LLW7qSQZmD3l1$w{s!#(ZF3_Hee~bFi#bqJ3kL6mG!Ti#=^o zh<+~=O7dnzb?nu;f!W=l>*sB?F0R|Svp$!tdjxOVi>xQ0$TwntGq({&BfP!ghUupl zjuiRF9tI)6Z0EAu8u}iCV38Yoju5$BWd-Q2c6Q&5Pb2r5M>7P!9Qe#MpJ@T1v|9*~ zpVNE)7jjdkRl~ng5sK!7Uv@no#&C*JIq;SxGQAnBmmh@EeTz_IlW3u9w4YXL}Gwe&z;S2v-l&E2cAM)DcwnYQ}iIkZ6m* zqs8iE7svjuKbwJ9#iR3xfiCAdtM$A1+b_zYMiMa6Qk3l~dG!vlez%(zBL9!jF_di^toq)?ik{8Mm1vkDDxF}VA5#&mYP=D^ARBGL#lOLF>EqO6$c3zBr$LV z9DdwFj)9cVkI+vL!(2xYUV+z&)hIjbeCP+2U%;9lKKCL{ok$pj{n%MTBi;wssItRq zmp$g4xL<_5gbuR~*RfrEhI>DLcQ(+fS*l!ocE=~m7Ym~_yBl|3n$10Mf*AMI`-zhD zklbY)Im@Um>ZN*+B=*U~2;JBEYwohy?3*LO-_2prG~4B4j1D^DpoZ{YIj<`NM7YIV zfb!O734(yy8p7#7*CFk)o_zB=%0h(=KM)LcIuW5*?T`?NTB=J^Tht4vGn!xOuru} zO%zdRQMZO;dp~@ZI4G&mli98oi|vr`n6Uq50{UkO ztlEbkYLyVXl{X)Tyn$$FBuj=t4>`M&C~wy3l~eey>Mt-)9_F?+U=OugYC8y|#t+u0vD$t%YHZvDi1-v3`%O25 z0av#ObDzzNu&@~Sh+54ij&4u(=vwV?1}^VwN%4Abf92dsHGvSXCcNS3KzP} zT_dExvS%7@ZwH{GNsxpnE*O^huhTDA za>G2;QCoq!d3bqf+}gW(HdA1>^m&EliwS()*#WHXopTwX4ErIDvjEeF7+NJ*5w=Qh zNH#lWToF*f8LxCBz6O7YCgg@>4aBivx{F4c!~{ldZwGx?HK(4Pl}?l$^Bn8k zSmJ8u+u~-{*K+11nm4*FRCm!SaXeLs`to^XUUa!Q5I)Xuz-hz$FR?lAgZ|lx54@$H zI}>k}^RK;c3^gHDPBKzj%*00#h=XQ<3cgJ=LAwLI{y~+MoFGEw1b?G*saDJfn zPB=0+EX|=NHc`h@v#Gksr#99i&bH>4B8+`LhX)Ism0eURb$i>DFy3QAOr4p0264BV z>pw}gpW<5Hs$zy0@RQ%##Nvw=?^+DsNzJ!1Iiyq$7G!5JI-TI#UKq##H8jdt)hZbY z>Ik=TJRLT?imk&Oex9&qW=~_XlP4JJJSFmjjIRBdUwk7IrDxdNyB=E>?e%-vb_gLb z6b2s029|!|4e;pK?+96`sFQU%NhQ#6C7{Pumtb+iS}181*hv+(;s>p8oPZIHao zuZ~`#!MNchvL`CQxA;cJG(J3%+O#&N<7pQ!QGnJTdc1V)fHGN?&SC&x7}2hQ>lAl za9_iYS{9(nP4|&)$=z3_Wx6anTf9tfDBiTqlaV8^xxT4h9%PNLKynE8-AkW_Bk|B2D*_FnTc zO*Gs}brQ@fWqYTm9R$fy+)ds(gCFZpc=?Duo)59OM|y`H2+_-UJCscuSNC_UMuV&V{Pgj(vDcFf37tT+ z*0OlcAzKd)+j_8iI?k>#p8R^O;bQcV7;{-3!*evh$T!*%> zj2Am~$0Fo7B-Mmjr#hKL;Io*}$UGe2!f{N~o{r5`&+Pz>YmU>h#0KBUy++H^Ay>bY z6x@2eOgEW(cGY%Aj!e&&P2j|Da(6J+L3L2@jN%XS?!GNM$FNV-#GC`)VMt5 z>2A>na|Z^%u1rPYc5SU(=&atAIfnJdCYWjxw-d&sfJLNe^4VfWHblhv(n>HVhy|e_ zdJVlOGFhO?_P)J(EL*@TFo=c@1d@%4in{S}_B;KVBa#;>jX&ml$H~Gaeii1_7jl&P zfz0!*BQ~IX`_Jz2zq|hb`8VcX*bh#M-0?A!Y3=yDKz^g`@nNjl2z_U)Iw^)$P0?SS zO`#=;M~$^ehKOMfz9zBJfN#l|c{U0b(eGaqs<3(ZRiM_|a=yDLqN}HuBfFlxkI*59G22Z@ynyHMhGMm=SR$v!eI*XFJLD}47YxN{0=CoR>k~Ne}G8}WW8(M5| zV(Yl0Ban3i;&Lj?;L_8qC~;=HweO*@q;R6BdZd~}WA#kKyGe6$sjR}p=?B_xQF)3( z$cZf+IKy9mvOJ}6Bz+Z$mJzSRQEl~6Ux&hw`|hH{27zWZ_km?lDT=>ZP2$29D@Q9d zmod`@8@F=D4TVN7l8(Jj@Rx!aWhmijb1``48&?z8Vhui5heMK`_i;sMqrR)|t?D0% z6rgkF^;9eT$vcO9J?oYDZlKbt_eb{wCFPK**eyh<< zAJ?U7vRl}mJm=a}bBzfj^C04$6{d zK4p+xRG%d|0Gd3%*qg^0f~SRPd^C-YId5~cq|?6gJ#DU&d;ggmZoa#eqTrVAT#p*O zP5L;VUH5pW^++S}DW&v|^JH9RLu;g&n1O-8RwrDO{Pk6a&!fO(Do^9)Xu#(f!GN)r zwEG*#%|oFV(#J5}`DzR?}1J zJ}2ScFR_oXaDwINDw&&Hh9>E2VR#Qxi>J}qE0>bJYPnW{BA1`GT|%S|f?i^_XX29^ zx3>qw%OWyqF&A&|$Os^DK@q^~pLpAso%gu8CRTCZm)dqU?o=FE-fYRx%T_0yWZ%K$ z)}ZGHO4TDc!M0hX=0?w796+9%(0Mc+`E}NsRLeTdM29LnE#rVgJZtcG9L86A&G=*d zX8mAr;~`l1Pu1#yu9?K*Y59&^bZx!@5AnCBGSA@qZd`MNU@qScBZt}# zdFxX&P5yrrN}ouLDA|5$MjaTY#@zeZA`}!9>|V=v{aCGs3Sw6;nkpj!vnVoLdes^Kgt>dIJ zt*Z-DHzzqJMj_$8`%C=-Xpdtnu2@w<=kIwCJE~ZLk$!LBd1Uk3yyy+Do3uX)QxML| z5F$W({G&Ja6A$TFc2>*44b5#b4o5dg1)a>GRl15OO#Lfe$z3~gFH$t7!DRWh{c7fF-tIMUY+mo>%fNu=CCcmiy;+*plKmCRP8bza0Tx_aqDGpC1IDbE^5jC`2O4+i~qP{zT92Se*_aVeDJM^a%hPHl@HSAjzX@E1k`G` z8Q)Csto?5Qy zQAXf;H(wPbxq7m*no&NA?&)&K_8j3&6YgB%6?Il zj5$CUcI`(}i|>mZr`XH}>!*tGnC*ho;)do`OYF1nv&M;+kG6BHE-hoG*GiL#kQ0j+`9Gg(NuX-;&ycNVR>(dtLk+V^6i%=zY*y@%CM)0+ssSg&+) zw*OPbta6aCWUc(!g+?05!4Ne{B@-CO>clWHSMjm2DSm$KjSOHrb{|eG;jBuK%=}~Q z(tbvV0|J5I@ea1W`{arvJIdQZzv2s9$by02y>iiVP z7v(0Gd!$KyWU28*EFmNz8Dr-jIpWvt=^QP=3A?Z^>0oYB3>z24=e$UpWcNy|tc9t% zLQqj@{EcowT@zK*+Sm*fz4OHD*&wqO3 zrOccK+xdeYsOt~|bmR}~&l<~FT~b}z_{&!HZ`)Hm2jP`MDyhfh1z2Lz;!#)2gw%JJ zN2m=`&dh5` z_#aT}dgfQrqg^Te=|Hd?T%B_d*LAADAg06MT8hJ|84??2-*p9jw;Ue|WrkBzM@5f^ zY~&<89=Ujdt!L3=JB8A|(`U@{8gtwrbc(9?@) ztwC4{JjMK(6$LEeqN(I_MeA@F^`SIsHImOX;4`vDqf!9@099HSp~=5LH-QXIhKEp` z!E!W$KXHDq`7zq904IbB!(luVz((QxU|vbn^TDB?3UI#>rDm!4Vnl{$ybKQKCM9w^ z_5xT}mSY#d?{j0KK%UWRsfng`G+!2MM*xjSK7jTBBl))lX}C(yS+)-^0lSoV06HH4 zCaPq7^#DLZ)}J6^GZY7;EXV+Xu-|~}y?C)`axo8U02)m+!}K9KNMJFG+n=qZSY%AD zoVRQohK@W>f^R~~C#%hrD!;9xy>tPB2XiM-sx0Oeztye0s?_i`f{g&C4#Q6BcIx`;Dvt>C|zpKv5oyoKCqo8^Yn9TWLSB+)@0le?gyv; z0Nu|(Zpvf*7DJ0~pt;(KHScst3;HS%PZI}tI*D(6kY4r4-?Un1OTq>ocm&MmV#CRT zE>;+8Jv$scq)3NP>ncMS?Y%XYI2^Jq8FOY8FCFKH#3W39l|LogAoh?xzalv_(+tc0 z1h4a-FatNrWE0|>lu;b1()xv31e$&E*(XQwRD6g!U|e!wywmc&FHS}R1tP0=aYJ;S zvgvg3G7}pW5C?m^x^Pb3kD_AK0xYiy#2ljA0-%S9pi&yv%=l#iCwU+YUl6uK%khBcsec1WWeD)tz1DVk={$8rle`jHo z-Kbcp63Eqi6HHHO4)4q%oOh$?I$39)F(_%sjdpioZFhj<-C*YH9q{1apM~Fm=@6=k z+LU!rJ9ejT;tvdUc3vA82L2|FqZy}vFL3s9?mqjNV2W59so`|`T)dC5@$Ez__7`7F zOwoT@y{Ir<#18vWr*!Jg7}j2Id7~U?4cY4Kr`Y&0=7PXc?F}cKAx9;U#a`v;F;S}T zYpRct*Z7OY5?`5F0xs(ajM1Nsbe?d+mGevM^-S&t);&a57LjIqweh*5lgUay&u)OW z&)^QY_hx2n?<10VlfD{=$Fg1&Oq1`ULN_l6Np3HDu=O#h?%8e41HjNPTZ>|C(!BlHjbqk3_||z<3epNQQ^?GGt`tlk5Og6?qnU6q-G) z<=K3bx=fuJ9RE$jw5Aiz<+vX~E|rLLVgooRoer}t`%YMTG(K~);LOuT=i?Rr1YY+B zjyS+EVglzBNN3i8h-5PThuu{Ni1^Ta|CLavv5*nnWb(3pW=8RgTL1@7y7a@pjfMW4 z3ssg-IQhe%H{_K45{?7Pv3d2KQlDdL)icu^osd%>aeffUw1ZAT`;jXlxSoK<0Qa)@ zlAZMyNhitUt&lSrXM%@N{&~kE2Yf%;Lnz|@u<v*dmo!I|N2N0cc^bnQH1gxq>PW6w7`**;WmK9C_aPnA`gnAiP z7`s5|wpEut>O)U;59jx;2S8nA*5x#|=6N}5v_vqcLc~<|QTa|-i zhCt!JgBGgK+vcUdWkybk<;7Kc`sULuf(?PZJ;Tx(4dT79l#x=59))?=t3xyhxyIBJ z3gAp{vceStS94F{b%psM)#`mATv%jZoR7n)O%*6s9|fka3-2Esm;5?V~%UmLHB zP}y21q8qr~Q>-V?llOwn6;Hxpqib*D#_5u01nV$TfA=C$>|x5GV@QpQ{7g$Kc!k%q zz52Ark8OZxUc<7>fDMauP&8=i8rWB-p>P3I?#(`?V4^NkeT4aHFV16Fr0l!wmT+F3yvZw@c__uVIU5# z3~Njo+Y6(8s6}+gf}b+)peQ)KuLh$`1wAs(SOy{o5t#^>$4i;mZ4QnaQx7b}9cCpq!ry9wtzti8=_igC0VHHK6w zM>y}4iq&_Z2M3{bkG)TK!9!_x(F~e3PKej3*cYt5p>6bo42p)rmHzSBca0v!-@;Za zn!tbWf?FoOJi0dyzVc+_z^+!CGnpooYUp>km``X0sc30FWtoe!<0v~W7p&XT@Aw89 zx6}#CyA;e{Fdnrza{Ri@R&czWZ4}ls!HOp5F6C@s(}38sb9j)e#C={OTP$R?_Jtds zHh`f-;^LANhQ+*ibfxSE0h=O@gDbx*a=gKPK+r;(7(?@}a+BRqPEH}XZ)qYuD~5_t zRlNB9TO@ryJM)yUdANh=~=> zEM~OoPl_V^+shISv+z&2${R_JnZzd#XtG>?S*IN7OGI8{kpq%eJ+@)xkW$>BWZ7B69fx;thgAsJH!e>+3E)&Fon6+t>??zaa5q zQK^p%J4vAKFai$UIc*`P%cCW7@1)Qf2($3Lzy^d{u&JuR&xB64)jZr-y2dMA!k&4a z{1wnBzYUGp@?$Nd%hcx(PO3|;(Xgt4HkMJG5IT8 zsI^d4wMjbAjvFlg6Pe0r3(AF%+m&#{tMF%2%l1Gt=I2^JL3Ckxi%)>eYRCw}G#-9f zwf6~z0Ecy)%v7yGI{@P~CimZVFFW#;L^lcSxY=oD>;yD)$0RGYv_odLwR_k*n7rB6 z-;bsoVJI(BH8A;{>4p0N+?KV6Pv3|QW154AHl~fGkbWtBSf8X;!>a0K?sXT)%flVW zG#y$t4>!XHrR~4er*8v&&#D4?>Hq!l&g!sxtK+8!y)*4$#w1fO{^d}=S;I9n=zW4l z(jX82_Q5iYh>QFv%tg)Pp^;BCS+A}{qqgK-fvfw! zSXv713=k>bX}7dQYW~1rY3IRwa5^OI!4=RRBHJL>}kpO zeV1d6YOry-oWSw&>4>Fr)7~^_d;{N4R6xE@;cmumlRv;}kxfpqVcIpr+-oenLd0#47b$wP80aVhw zLP8r6jbCR0B0LcE3;)I~WFA&CDwH#*+gx!R{li^L24Az*dpj@?phLvFt z3B@Y=Zz2sCkvB3>VrILi28Gy#2s{A;R>ld2H%^ERQZLa6;v0La@0wq)M!LMo z%)ug?eIsC=|Bt*&ZA`NftO=@K%p`y4YB44Xd&N%c+--{J?)1y-%0=7#mX9fb`?CLX zv4h$IY9G63%|%O`I`>FAmT)47XEn#KYSndEL_A!r6$-!iKWhu-eOx^9Fd~h@#fR+J z(Li@Yz_$^U7BGeb@~8y?E$0z@*-?GO@AftBy~-qVkAVI9`;bC_I>7CHLGTU*l^`$e zj1orSx0*~Pgf7m1tmcLA?uy}1B!r0|qV6d&amg@dt=4-PnU5mr#|m5Ivc#TSw1)Zo zHKEOu^vZR2jo|Q)HY=V4a9y1B*TI4;ESTE8;>tvf;)k!EZ3%(Pf@}mLl$&2Z<`9?J z{rt~s6Z1oRiO6&%Q;r=NStHxbF!<7GHFPCpr^P;;;1a3r zgu~B>fQICyy-?%$tSAk?s#aS-%QaX*V%!r9RnrpKhL>%Rf;lp*5(^)mTy3*!;|i z(X;2?B3QTV{lj<>ELLH@GxlzjUh@-;tH^*zHy%IzEGVTFKpV5O-&pO9ZpZ^WZM1$A z$QHOC_jQY3*!Jz2Ut0ggdrnai5&N((8fuVqBPbydqUoSt+SF=MzArkYeCC{YHrpY{ zMYd{x=+~KWg0FwouV?#naVmGpHk(4%(Id`o~Sx9Qu+W>7m3Uv9pbG^O;r5*HRF-_aJE+N6AcmdfBB%V z{cXW%QJgHC1EMPRdL-ja!>G%($O3%Sf3fdQ<5!7UojZ8k+S{tfbz z4!H{18uB=YHxH@34V*~eH-$%nMH2HJ@Kr*Ty_NZW8HlxQ3HGDcNu{_tN(d1q%xg?K zX(6+7eP)QLw~IlqJ@kTaP%NDCBDUNqJKo=A@-%H10;1%AFWg3c?#S<^XO25?Hj-!0 z%!R&DlY$S&OPesXa0J<-i8&dB*}5dA|-S4|cbe0)J!_#_|(g9}S%T@%{lqNc*T!(=Ky};ZddXu%T);eTC zsZQiLl?Hnuud=~uluv&)o#yq`$3xtEa+~FTnQM0uH%HX11-feH-*U>Ub8;st&)>wD zAN_@r&EiWLzyk7>SBw(<<+;S2Q1Isx{&0%@(q8fFy*__$z}F63tSQBuqdcpPAL1Y{c|zQa{Q3^sQ|jyhJP!G z#$3)&UT3=TEww1{&esd*4#qH92&>E3Lo`(-O%G*i=tgY0CI^4UXinlMTup>&M)~D8 z?e|&cwem$JpI-fBVtRNCcu*Un{&=DjSoH(4$-FMq?V?jlfAaR+n|^e-R^uw8OYtw}@%>zbU6|zkDFa7r3~`2BrLbDB zamr=D;B3xEdtjIs-BbL|hT`vIC*D2||W8#)19+b*lp{aiAj;PJ9R zF0&Xbd)hbRLv{22BleMIjba%y!O{<{2YKxfm`qqf-jeRJ3&UcilF%R((VPV3crWz; z+0&NYEwGuiKV7J|8?W|bo(E{uMwe@W8KFNpsdkF=mKgdRMo=*19fE8VvP8&5@_z=f zs(sJ1)<8~j(x*kIWfpJBYS`0N>(izYFT<*sVUv2uDj(6R|4*{(;RQ-uP(56-U>3(VK z)5`5iYR_$x5mC_yPx$6_=q48+3A6%Dg9htUe9R3|lOc6iwyid$g7bw61-f1PKN!RQ z1>C=BBn(uTkpG`bI42$WoFjH1TmUxt*~D!THWMzye2Im~AwyqMh8z!ZCI~w>%hf0H zxm|YiT{hVuAJW9BR13zSL%b0&XA?yarmXSektY7BJFZi>?agKK42g9)VpK?_A1$L``mJWf10cz55<0I5V&|ZC>&cr8JlUA%%n*e zPiEFL7>=sRAbT^LVHt`BzfAcmp}48urc^;RN&rBap~h%*xm~_sH(lNblPB=Pj3~)O+fN zu8`9;1%c=|*~)CbP1l;>?}lbVb_5d#4tXd>YOLL?z0eg&H4v0RVSbx3WUGb;YJ_vF z@`)d2nWiVaZ9q8J&!GG=cEsY`B7dfa^w-!GwBVe?V)MG_5A1PaR1Xpj#&{9AfSg<; z^F)j>GdJmGwt}p)sc~^d6St zdT$-JKf|AH;L0vToUST@>g&p7**qi4OIOt`%t@*}4>bx4H}iLAJPiDMC9wzif5VYa zq4UTW1kv-dZM0?op7xhLgr8PuMhlhb!0A$n%>C+Yzw7jR6N(#$*?R+hFYS2QYxkoc ziTFI++H`zQM(SSG7~S=0XmRnC?YJHMsc?XMeO!lFsTv_88YasCAqYJ3*!Tf2sedr_ zKy|C9ZGho*NETvmha(P`2kfi($s0H#b;PUb*QCs8BzWlftV7Tdw{T31Cp)68)FCVI z^qXm1G@@eFYR0`Yt{{xT>h0Gc91*-4AND~9qJamWJKTi#b)|QUgVywGnj??1-z*Hx z?POLGS5tL7r|aL;9j%I1IqWH(@m)zCMysnK@2jIjyVb$0v`>JL*W}iBlf$uuHY{nG zJ?tgLHv+jCE5Q3)()F4UQ2bDuwAn5MmjF&3XQ^g!HT9MHh@JY;1HI= z*El%$ys&XWvU4JkXITTxWdM~TV*l3~x`2)LQ$n~|rTtTR}?B{aRGG?nJFt?)>zwWd6YJSCtH%h=uZ;JWati5h%P~c;hpBajv zJ-tqBOwFgH0bKeQNNOX5DnX<8;M(qorM0Cu^FlOd!M2V^L<>EpNsqIOnynY?nq5p* zw+ioQ4xxrlbJne_cV5V@(;7~={8(AySZAkGH9Ie{n2Y1Qsr!Rw3jtgwMuRoL>PO` zGn9tGp)e#^hL%2Crd}CqL+R_IM~h;;rFFL#P~O9n??I>5Z5)6Er?f&ntbDzt#%ukO z6ZFDee8ZJqnNIna+ZBT<2|h+vF|o!!;u$+jP#Ea0PP6W67WtKf5O7K$5$}Hm2lt%$pz|6N{Jz#$@jO(6<|6mCISX_d4ACFr@Im|3 z@!2`({c+S5h^$|=+YI1GN;VtE8E_o7vI`TFua`w*u``m4p#lCj5Q0XXBz@Pm8|X>M z+51+k39G!}`!_C?2FJKCL!3J2lhjR{-RD7~&B}@uftj`BYOVJk)NBB+yDk@F-X?6V z#aA?xeZ&E>3{sKuESIYAj97eilDPRN-1oyrEausc|ULh#RiO40$?X0maY?!ZJ{RPPRrU>uP&}##?S^K*X zG2XKdBV<^!>lLe~o#$5N4_~7_N{9)P_ zDX?91}&E%WrT=Re78cl&J zArCxD*j5^~MYzEH&M-z%Yb*WM+Y?AY$URkBMJy5ZBqVK7E@|?UdzWAx?=m3M(U7{hq$q)MBFKMac}+Gu9) zPv7wO`+oeF9b2;!^Lv$oiz*o;Cq@)n_AYz1hALw*qWzUm6rmHap^}8(W1wXBk^fDb z8~C&fi^lB~kTUGyp=uW+(*%GM`(^OgAC)fsQDk20`#|){%3WO@JLZY-0AISyeZ>b7 z(@G8e*ml>sC@j{~B!&5jaq?nq%Xj97HKU*IYEdYF|7=F*(Mvm$W~Z+J>BQ&Ao01@( zCwC3FiRB=JOwF~VYX}lH}3Mq>7C~VwpQ?I+Mm_(De=M$a!RYRZ&cM z^x1CdB)}OZMuk}5*G6BYVNp5nlUk8H0vg(co}r}N<8RfWnjSa6_$I`f%j5p~oy9p` zdj5%YqFJMcuho>u_uhg`AXMeqQ0$B_azTFx2k>hG72`e?4W7*EAto~_r#-1G8y2=j z`Z(m%@&E{heXmaz(lpjib%AWS^Fu#Hnm)Vbywj!CZ9u;5oK)PaickNDCVu5wHBFZ< z#w}lr)OcJJY9)O5XdbS*2>A=%$Hev6pJ7N~Hi`OQ0^(UP6DuIf?yDDysqisJn-Xi| zXkp5EDiOB&a+HIW^%*Whp@#C$zCJ;H8F;RznNJj)FN~OrpGhZ{u?V0-;Hd82UZfT< znG@hED#c70nP!>sgK7x_Br#En^%KO23%++G?O_bV;81~uada&MAWHUp7?#s4?0jc@ z_=rw`l1@&v@_kQwF;-}FSDnpz$o0@;L7+J}HSl(^(n!X?rsBORSL2=(xFgDzi<6V{ zc=p+qsz%~(3t$@bZPB5^@jw+E2L2#liTRQs0F@1&)to+Z;=B`RaS*B#X8BCYKv{wR zho`fQit_v3z5*f&3Iif7F@PZ5-6JI-h$t!D-AGA@LydF}AT83}@CE6V?k?%>dd~R! zuV*b^xRx)RHTT^6?6dcEeJ(#}aH0!(i_kpvi(yyPiYyoR@p0N!BF)tF3#M_hej05b zeos4{Qpx~R+d5|cun8IakKtHkhWNYvJY@sjRg8+pYBTZ+CxcvFSjPMw5n|Aryov|Kcg!Gfo5@_0JdLyFOjb{o`E-t zL0(ScD|nT{38*#xhx}{NiJRPG&4Kiz{!xjljRS%Nn=-{Sf%JC_CnhnG9e}FEvKVkY z!Y`@~GL29iLV%|Vk-OP00rHcicH9;qql0q{|Sz%hCC2O2_sSC`M^$X5 zc+JBkZ@&tp019y&U$!5PXyxn*rN zA4Y(K_-WgPg&NZ`76Q)TGf4*;s((nvul_UA;@|KO@*#f~{YisIj4~@T$t>Q2TkkCF z!RMx)$LWlmZ$2dvx^sz%nHDeiQ|$H(JrNI6QO_rT2 zkRdk@|IKCEAC3I4<{TK++3v39?}oBoHG(EPj6qJT%x{@$=Y^jz0t2=Orb(n??Kr0Z_k*{hSd+8A>fe7k+ru8YtzOUjx7viYU(Y6qx zkbht81Kgvx(}s^%>FSz_*6NJ1v;goQRs_sg?+?x8xMUr>UbVhJsF{r!bh_h*ewt$WH)Hd% zFsjO8ohidMAua#V)8cv$flB4NdPo}3it)5G)HUI?7eugf!OydFUsBPQ;#ve7z?*{CGtl4!!$Z?X{Z1aAykd#6#whf zV-7aH@{k><({v|kdk>rU0X7#sKYc7UJ`ip0Mwq6!w==&X+xRrq>me$IG|_^s4#^x7 zr9wB4lF9nfuN-AQl~EMmtcEq3e#-9L!Bk;N?7%inH%`ACs_ ze?6vbJ7^6BM?%qvzd`ozF2|b^NlO5>xZoO0{-OZ6tHl$Qcug#WMY93&uuWp=B)gKR ze}Gw9JA2>f&?iV?fU##r=`%N?9=>oBzr8(cBI~#paC;vevlB2oB@1QpP^X&woL~4% z?z@*!9Nz?T` zw?(d%^$$vjn+caA!UF%Z`?6sATAJ$cSqa_&PD$8^*Sz;t0k`ek49t_}T7QA&7n(%q z9=uw-Q*uHQ%Sb0wUEPVU1r1UOKA4FPjfLDNipS*_KsUwfM`ge}n1CX_K}f&hkQhwK z24K=q`Mr#&!SXIYLv1t+pb-@6PN$MahdQpa#)y#PNthSSl7_7FUnR$0*D}+A{z@XT zo8TXoZ5=$8V_?NnNu!FNdkB22!?0AmE`#B4C>s7nSP9-D!Ec(5Knc6S^w%ctVh~Rh zUJVCuEh+^H^D$mysNqP%2W;yPqyzT^syxR_jo(0j8f0Ey9}R>ZJQ~C=i9bLiUq{VG zaAM(!$0Qw{{6G4RdG=l^#Oomlf4_wE!@i20%{UHaE0Qfo>p`mp;!yJ0tq3%Hf2L)9 z(4wz-Tn3c9PWl;z1$Jm2cp%jH8FbBjalQ8t!=VbJQ@77h6 zvM7h))5Qcw@yuYw969=X0X{g>R`33u!G0Zr+MEyXtp)bhB)pp%_;P`dFn8V@Iq2i| z$C6bi`!6lr{qYf&Zf{0{7zdl7_cuG)Kw2=c_7uL1rgfxE%80|jvU$q`H)e86`Xl}%i71?V1;BwQxMQqQ+& z%%Fmr>~0$DZV|hrB{++O`uO+B^q-c5IejT=x~=7CEzz0kEQu5)w*CKx20m@m}yy?+@$d>)}**fBAg&WxJhhbe=WA;2(G&RyHh!ii$=T z-#U!_9B4>M@5df5BB5-VX7r!Q(qd$_0z5*4u#OUZ7lQG6iK!9;ITqGXLhPsa?tpPx zAu0EP>@$%ThIJhM;V0|9hAT+)^?1Q9(D@cZE^TW!=*vX=(K3VA$PJ#gVFjy<%arK-c>Kb4!lABH9{{~FJirvkgf}v^wsTI+ z555gwKtkKu(%Ex|K!Yp=EiDuFW9#_Bb$=X#=b6-3m(owzO3$zR){)TArpiWsudf^l zd-)mP9&o%km~Z*a54|@|7@_(c$z=C@--PrZ<2h@A$|2hQUcYbeja~UlRqDkrGFul? zv3QwMk+sC@0VKjbv=6P7JnjPXX*kvZzx3($wp(u{?JX_b@SD2gtTc0WD9}1MKI-&BrJL5+>Fy{cEbL*8$SeWjt$mI@VJL z;tJ)t2nb%#X)&Z29;Gg9SclaEZ>=|D3&cwo2s(tBW%a=@q4l4e7urkozia^}^AB9S zZvRIE0$*>X*ro4f74i-)!3W_nx_I~nj`vhru^PqI_JMMr6mCUVdk!K(m8)3SeUE~F zcHaG0^2bNx(SUeU7ztN+cI#uL+4RRy{u(l`!<<=Z**a2_l~=`*;iZTX+$8 z#D(kzlN{@q=+CW96{Z~h;=Apk!ss-O6l^_lY`Cx;hyD#NnhJYnyBxOx92!Kye($+G z_5jS3s}ZhSx$b+qpmtB&5MFyMVwmXNY-c&F8Hfh*!E`HgH#eZJq#jg{rzlR09;tuA zMd#{RBpTgOk|_FjJ~T@vTCd#$OV@d`HLl*GoBi0k;&Ar|9fE61z2ga5Tw=`{gDvD> zUUtN=#@Sn!U}@QH)b<3?CfwovhUfmk`_O^6>ocgkVwtYU!4hL+M;MVO2S zH|cF*OxHH(HB51#4`QeFHvrkFB*}h_P#>2xv!(E|&=3z4NAstOjF;wrveHH@(ofS( z1u*MaA(Xs_!(sFG=RxVG)$GL@vSH-CW^r0(LIzyvbnS^mx^C1`&v>gdF!(W(=*c0& zEYB|~2zqET%elx zi7r>HpSzk%$KUH%n%kd8jKWW0BT?x{EH?xblPuQ@=F((q0{6Y=J{wSv6u75}&+)@$ z!rwM7ZQ3v=vir6r8tD9YyW97^6f3VZ&AWUYlXf5eURe zcJ~#aTkgX)3^Y|pqR~awaCx*WaLY&b(xlwzdiT5v##aIhBbwiZ-a5OD=IO_c3)H!q zS@wa(-7#S?yA*qobvEa)UE<4#k^C`Dc{EeUeIIpK_J#~XVPfRv>5io;`E>N;^H5D< ze0H<@=~RP*Hq>K9>YSJyv5qp8_y^`0E{^DosW}P>G+_T8*_+72lsRGzx5IKJp4zrA zHyfn+4cNAlb6^&r@XN$PCW=)!XQP~JdA#YiLhb{W`neSC3D*<`y2{L$4<=dG4kibY zKki^BIYAK+Ne4z7Og&NQg}3jPuftwJS+)MYv;5c+FLzuf^q#AQzNb3*vDGu)@K?!> zUm`|Wit8j6+B)T@%&;qBtVf(o@MfhlQFXzxpM$Z^5qmxKR1c?e|AjvJV5}(BtK{+p zZAB7H9nTCJF*rGEtO`cV#>ZFbq4(jgK>(}>!<^m8w^Pic@ zukPRJ84=zuSiyw}pf8p3`Q86Lf?`r{uBg5v_J5Wd@rxAiYPV+n1vHe}LIZDB*25Ec zK@yI;GHImW((c&XP|tGF2>6jo(lgG~SA1*GqlH?WEqgq&WJ6yG$`9dpw+_S zB|4-A$>!P`LTN=touan=yfWm=QzS0Ua4Mi+AMyE#NS=dRz3Z@2Xc9laU7;0=rFgv* zJFR@evprOY-MbE3=bXc{$-UbNbc$@c*|9|*oEbT%r*KpMBRb^dD7t|@)PUYXwVoh* zg%lS<&E&I1>eG8kE-S54lrujlon{1)-)_AqWO zQR=TGvdT+AtfU_pp!z0c+}iOJ?+(Rya(qb#I3CeWtz?OQuS}dZG$CSKQ@p9Jv z#LJ?;Mb;_r&cE$d=uxAijVsvbZ)-G*aeb5?j(qNIS6+OwKD$uf8sEh_Gi`slZ{oGz zQqe9FKTi&xH#SdF0vShNeyA&%Q_dk1kNqoA9 zUR3Lj`Gw(KsQ$ z;Z?*Hc*uJYr`zibU+#X-Z}EX{eqYuCpH0ABi2H(cD>edr8A@1nYU67Hg}Mn3uqFD( z^rW$*$)SQoCHTJ+r{4z3wpMO81|=HT5%Ydb{rMzzJsyvcBlP~X0fh%SZ2fR)!i=lk zJ2q>U_+a}p@jTpH>TS;KqAZ_6vR*ng$g{#u6l6;nhH}ADrWlMcSUf!8>agOePPJAX z(Tuy98-ECdI%TS5WT!p6^MINGt%YqJ?>VbBv8;WV>=|fF$n@u)EI&w_ND5B;`H{x6 zAPQ}Im8%_cv#I3x1pXIxOO2sAFzKZWDFGK0JopgZt7+?f+EPrFzyX1~@~+3fVAnJ+ z%5>TboN@Gor!-e8=K;X%VLPc;r+Wp27+3WC2Z@ijc@-opi1~0#EV}{u&_kCWv(lP^ zYbLi!AP%-hb6xtvYbWlx2-9DgN~zB-9>UKtOxrmOW9FQ^<*8h|Dh5VuLqh}dxfOWpNC`mflW0zcGiOfp#tqgsCEA?i8glSQ$ZiDsx;br zNh_iR$7o>sVUDh>~kg)Q7_t{Q?Mfo0rdb`}oZkCjKKf5Izty z{O*B!hUt2WRmkFPOX5F6z~7<$eQfdDQGfNKZdbJ-`I1`8#9CFbN2WElVZuCbJIk_S z7iG2d>?$7rCnV)=iH0$)zQX>Me}=AptBJ;=hu7@^k@lFypBA=TwcC;(WM#IvbzA9n z?cG0nT*cCPn|&mNpMQH>LfE5m~5VRdV>V z8C;R$@W~fV?($uJ7g$C4$YQ%)avqE5ge`|zu8!v1sI5<+ALtV3mGL*0TXK)ODyulD zX;y!p-%Hegl*X^ZBmm&%A$ZPYBXOIEgNR3;zy1wY)n<7At6a?`^n#o$FmEW!t(t+Z zBqmQ*QMp01$Nhf3owR62OaT?(kr-PhcdJY)3nhHu{`v8>?hdcorn;;T*LRoJ&fAK_ zH}j-nt4&*tarRoz->BqB11Jo|JFdTHkgQV5n3#93V9^mABHsk8f6-FfXuTT9Ph`B1 zJNd9aRaHYjjn6|9hSlbNr5R^!<4fbTK6VCnm8pDR<1CgbcG_I<+jMG;BXy_<(Y zV#VrDU(C_A`P#ka_PAqZpw<$=O^+8+q>Os6`#eCD5B?QKc)5r$kpAQ359vv2B*R-^ zCT5+rw)Zh@hVLQX(#uavTh!Uh=%BZI@qr^>9>ZU|*ab>!#7F4Npm+RQO>#TS7LO3F zdg5o_AstP1T9-iwd0g-j{-cXmE;Y>8bbq1wzW&%_z2^Z+OcvD=c=jRRpRZ|qOXi2+ zyV#Bk>CRBaQ>7aRo(XHPt4%UIvc-5BsMU1yIb*W{fzPWs|HORJKkGh@Iy$L;{xm}f zI|cLMi@`zQJZwLY)i4rkH*4yYxBcu<=mp~zBbGvj=&ffIH#_^9eapZ(!$b6WH3s3V z$FqN?*`Gzt)DePIIF19*9pN7PJ`R_2Wawj~hYNGuPJiEWotf0Z5%A#5%Z|6-puB6NT-6PoNNvkJgY5rFtn9$u(qws|@ILFs;qdf>e!=m`_YGWja^c?Uk zeKCv%U^%k2oH=)M1~&?-nP|NRsTG0=9>;3)vhqD(CjJoU^1)^ncO%pVIol78z89Tp&?3Vr*ZnZK=P(r zx~V+);(j{$l81yJ5xYUS7L{5sCV$4;$M^2XGx!9UVHkqE4s^*>#T$g#z&fwNptLyp zQxdFTtN~b}H!yzr!rft?1Eg_|nEmxaqtMtmaV9=brir%_`_XQ!aGV>?ysVuX!&n!D zxjl8&^r7=y5dQDR@29vf0P*wXT9Xj*KYbhPchpfs$Mvmk=Z|j&?o&wULz;AZPCW__ zwoGaI<>#i)$;m)fo?fC&1C+JYiBK7%hs`y8%F+MFqZrBnSN40zlk2^+8x4&*lQ8$1 zuba|giL#a*)!Gvhp(l?^0T+U^<;YxS0{C2@E?bv$U>ne&n`D+gvQMv^Ey`Uh$CX^#*kaP9y&JS|BXsso#T&0Be!O zZOH&LrF4sy*9^`HN2KYR4JtG8gZE3^ug?$GKwAz%v{q}@Q@C0Rg(w);CwH_Ll$>{! z+~q&Zs_NE>mHF{7%Fjx>!X#SP-!>2W!zaXUHk3C+tFF3V-TYEzuO1$@N6Z+0b1H`q zgyJ@qDWStEj*`C~DPeFU9*!u!6ci=qCw-SR8}=zo9ktyL%=e6b{-4GcnAdf_b%8OG zEI75GSvRno1qv&M(GTHL9iW*09wLYkl`;Q(PzsV{!WcWK; z_kE;LM+Wgiz+h~)TE79=nfa6~F#Gcf8H!qzY0{_Z@P|W_C0^`r0&Qr>8+b!oyq;4ac+S9aN%q5E1g;vN#esY+cMN-n3wxn%Y`I3_C# z8aT#C$yBFA9#PS8+Vyn(PEC25Og*3GeRuX~m?W(dmTGFX?$>VB0__K7x0i+wSJdP+ z`~HjV_a1JoDC6|LI{fmNd0q6%VLUlVN(@IMCt8cQH|we4c#$C)@AqsPmj!- zJb9kXM#sjVAq`tA92#ro&U?85ILpjK8jXrpiU3FI7RRKsrv1y^v_7_gA$e)jXrf~+ zK+0kJI2R{1E?d;;f_UR&P34hKekOlM(=Z8T9`bhD@i5-#b%SPdmX(?&OX&Nprtr)a z5B!#HBMUmZF=>lrFTehTC#PIUUJsHOnDWxyxKldRn7cu=DzzCCa|& z{(#3Z=tTu%d+v0f$L7aKRf_uqkNt=hAThHWgEv&hoaVdM-7ahU`90Xw5!QH5`sSUJ z*U_JfwdE+d-5+1Xi`1_kKT$omUE{)4v*eX3( z9L(SKQ}*)N6*V=73>{M*J|#D!iIqzT8~h98iHcRWRn>|sN8o}@Ml8lJj7N>iW}63? zC|jSaBnCP%@2m42gTmi;uSCIzUcu$Rw%c13@HfT(AH60k7fL?wekPl%lVejmFkYm^ zbmx7!SL(bKi?g-QK3}Qxu%^eo({{ShD==sX_y|_~&*oxsKPhzMng6*9zR$UIT0RnQ z+sLa~Sa(1l<w|r4gZX(M=ikIFa$quFI1<_;VWdQO z47@C*j)z5g#Xp;4x2m4`yG=Pb`vfx*=fL?UL2TA zA#vb&6{R}Rd2Zda67xh%aB1J2y2>@I{m^a8d+jD<%R8Kpudk=ry1ivy@M$#S{U*QU z_9K$p-yZil;x9)`uKERDGoLuLYTPEXV3SK!#gfYk+O&>EM}x#xjyLjG-4!do&l^_! zsxkY|);mZT+la_#sP8my!mJczQ`3J%Kn=cc*q1@x^YPC+hvk`yip4lc>&~*vV2)a| zu)KQDmr5sSa1O;5dqZTcGXTkzacyeGnjmmt=JUH;sI|`0ZoQbEDI}0twasgc6}YOB zuMV=iJkG|XSVd&dW=c=~b(&9>m5Uv4$>(1G%~C5PBi-dwixaVF%$5Cpedg%!u%|7` zXl?GvhNz(sZslK=@iAM|O<0{kc(mE2Er6;-l8i1VCfq5f%0=$fIleflbY2&hlXJ%T zj)3b{spo``1r?~t6mFjJ-F&Uj-EHpIL=x69$l}KQE7JATcfKHYx?(m&Z}1^ zTc$8snvak)xfqtkuQ3greeFXFhcv%aRjb3#@ zX6x5chvdz1q)Yrv>@V2Q7i7DLsn8NknbMcVF8@NyL=BB5iuJQuMI!c5vZ+ifnNWJp zL|Ic+)A2$bq2f;gCKe%V8l|nF<`(0)l%g{uZtWbtq$`v@*Cld0;B^2|luw#`dado? zr3j6Gwf=Y6LqSZXzL}7ibpOW#uklzbw*bjBqQA{$rBk0k;4Ncqq?#SQ1dC>6fk(9_yPDT)VLyt*m6#ycP3-KKdvb4 zJCgBN;TWieG<~Z-N z*_)iycSfmmQE?X7BnDTobU zSmZ8mqa%bQ>1kXpIyt4EH56N*L-FQ0*3l=OISobn;yG7)c|ikcvuV&F=p!~%T2+>8 zl;CPtSN^?#j*ucP#!$O<;oZF1)@_9*F~_OwA>%(!bTBg$A+jmx$E{3G-YTMovU4rK zA74qDe|?Fl;4+b6JpNUH0*k{d$KA1-f>&g4uz_zA@GxiEW0r*%y>9ej$NOE5CPah*8#QklZ3 zbsZ`5HAgW0s4Gf_w${KoSB;~*GwbhTo=oY{Bc6LuwaO-#bq|fn?+!2z#7bLFv&V0La3#%KgaX9p6-c0fdEPpp;LVWM!5@_C?6 z0h5Vi50Z6(NL)Z_krNPS)Kdz(6+7)rjq<-_kF|Qn<3k|w9iTV*s#k^D@vVRKR|o%7 zA4%X75*n|)n$W|}*a2CdS^SdX`WiCdmTJ`gQM)iC+}eLHXW-7o4TzGkb>Ji9fDF%g z#2;5Kqg^qxv=~T%0w!TIJ`lV)J-u>vw#piY>L)hQZoT?f70fwOFzU$hQ}7;jSbM&yLMQZ>(=1!%%^uYr+lgtKVlDWGnWs$LBz$+dKFcqPu!RlYm@Ex zJk~EMvhuh`({TyU#)_vQj_W(~)aaY#?779$?+fXAaQEb@`h1-=lkP~cN35R`h4$4Y zx$vcPnQqs4C9O2DgaG1ThV++)oQaq?S@++HgH~an+7V5e8RyY)kXGp*5P3>62hj<0^c28r+RA371y}$GoykM*~&6 zE_P3)i8|jgHE}L|=Kr}$&ene)-oHg~+Vf`1I~t%$yGcy1GG*>8JA8+@YkvjlrKmNe zU01WQ94?=47`Yov9*e8FxXakxG(G)5d~hRUdSkCN@2;^X$1&G4nL?NhKr>M}u|ABJ z-*@6<*R{1j7WfK}UE-T>lixKc%?||6GaN_^*~my|8q@FtHw{v*EBWDG?n;KVTV-xt z*^=9mchpp!XHB`L4`cr=?u*G+7eQA~-^E)9KfF@t5^#G%Pe=DJJR~chN$4#D724q; zy1hGyiy;x62OJ}J4ZJYxTAQXO7WkLU#WiDUQqt-s{M_yy?3T2z>%MGF*F*I)RDwQ- zT`$w0G4r!2Cvdja`}zJ+sC8n)8U%u;3U~L#>!tIBhX~veC1QB4hWYd?+xmG!c)SqtlWJ`0692<7$e z!o}PHbph7?%q9P?*lS%vwhiW|32wrJke}y&}J#c~cK-RLf)Y$ee9WYgJwX5n<~y%?mwC%^mG@^IU>$ zlcB;G-?Q-%%eY-3n#7{~+3xyz*Ujo)k!r=32YwE5j*O*pSvMdtC23^JgQ6r#vk#un zTT6OhuqB7}>0ndR_nc8PT?Yo1&wf}-G2hM-&9>UsMWI=|5d+@Ew{Nz5!kuN#64Yk5 zzVAfcY4J)Ska>GEf|Y?~-sjggpVciHI3iYQ1$bW1O>xg-?bge{J~?vh-mV>^`@F;T z5HE=JJ%M}bes+t4s@ifDUG&!!=T^&M+laX~Db>RCF)n&6vtK`UL@E~{8S|2FsDG9< z?NRt%jh>h*QDweu`XS$-fM}7fO|@t4s3BN+_pWUH#)Dfw2cW54OWm)|N`a>rX!@Ns z>dX^YUS@gDnV$NX6uqsC7_LM~u7RHJ89&iN?~jw%|4${1)-!7bblPuwjeT#4+?NBN z&NF30a)s1z#E1L50SdMbuMRj|u9)|MR z@Yzn8ZN^i_cC@x9nxwE8Eq)C$jWkNji!CueNTWbhyZHveZM1VWYxnRxzUR=&Il(jt zo&bkv8M>c|qv>RJ%&)|=vL(LGgW<)H>pTr!LA-{#UI_dwRWN1oqxVG9>%g%+s#SRz z`HG*x8$+Jxm<1z_hS2cHsf*r5*Kt|a_uW3BR{SpFF0?P?&PYyv@zIk}UvuJ&-yC?Ehe@BTZ zqXwbmrRSJscT8VVnL$(v4)rHVz9X(V$N@;o4UOD=i3Ee~K@JXJGJPV$BhW;i`j7#v zKt;XxQgBis7glLDrCQlRK|vKy;{319LO#6B9^*bqAI2V7tVx4O$8y}I%E@u?6dD>1 zW8112XDBo!xCr@qByg_Zu`<7%o{-+GrPg%!SkjLIDqpQGfQOyxcXlxR{S==R%QWX$p5NjfKECJf0{}7n}35ur8|QF3yZ5jPBJ8`C2qf2 zTKAo8jq|FeYK|lb_UqxNx!Q0%NrZfPBXsptCegOgk!H@fd=BtkI*S#w)gA~e3qOkq zf`|X*R7p2dbjgS|J8u1Um^o+Xdo zH?lrD-9M#(27XYCP4gbv2Wv4KtFO`axOp;EHJ_Cr%}vIcApUi2l8Cu+&nj?WsQ$rC z>`|1N1LlLjGIOp?&t5BhzX;H`74Vjo?jb?u$LuMnE{W0GaKD_ewnrFI(cEag*;o)1$LMP9dfy&frgtD(EW%N?>R zRTC(`_WPYWPs;C-o8DVoV;#C{pxlzeCm`tSc@i}VWVAh?QCdCT*q-GB1>bNeT(yYv zrCzJvJn`x5ReNp-C-F!p4iU)AZjT5fx}x=CVau49kO3V=?-hvOPV`=KGnWA^jv^+$ z2P^*^<`dG)Jc%To33|5y+n;(0zjPaFx2LPvK1{b!hwt2*?#}fmyXiosL)KsIoMyp7 zSTEo$_B5V1IE>MqtGkA}oNSIOUqJ^B73=bTm{cI=?*vSL*E+ZB5r-<0@nP`DK9{!R zl$C!pH+Rx;nnc>Av%Hz`VfpVb)hfyS5r#OEkICCugQnafZ$GBp9v(tH6uegT@zz@zyvh?(!7cKoMEP~5S(WC>-STYv7`BT|T zj^`3awIEvC2!uEt0uW#J|5%teC*wWXZ1v$;ogn;L1iWJrr~uKXtJ57OApZ{soC7%} zJsK~dk?jH`I2Mpxj_o-IWOU|3nL(a_UWU(FSbr$5QSVlguTwWxPR0>`A)%`R0>I5d z%6l(TU>IJB6^P;ij^t|$3oB6B-0uIzMP-(oPnG8a-@?leEnHsh$ZyNtkB}iKVWsH# z0=h=it!H4k&1`ML1)6o=%Yf9EO40Gc{a2&KzcgxIF_gkIe_uzmnJj zb$9N{%c{B0c^u^jKTO@h*ftDr8t4y;5nbDU!~@Q~=V@U{e73Owb&#}YS8C)rsB}qT z`gCeDj^`(c_%W$R^4qsuhb?yk;%}eFr6*V|m|TTED%=4Ar*pvvC=EaO(}ug|`(Hh0 zkN6Al=F(Z&4YZM@h(EA;rJLi1GFCZ0TJ*D-Rs3asZqe@KegftQ8MdDxr*l`7;bh9Dk9vZE`L4nud1#Mo`X3NfgN^~1LEtBA=N=P%$ThF8^im6`JwgQ zQMbK15t&IJfN>8sHFwEq8NV7mzYQwPHB#kJh3#f4!j z9VGve`Y>aKmlN1W8?KPM53}2QZu=WcDiZeai`SEje0I{KXgXFpX6z7;t|z43XhI<_ zK_KKy04roqg&cT+A4Ctxkv3?@UZL2!DizKm6g`0MEv0951-WpyGE%|ko}9aWN_7s zF3_q<`~c<>ij)Ad)~;>I@3g?Z4=n!16H0)2Xbf(00NYvXlsfzYc>iK;n{LMV&HkjG z&HFTwq#~LAodeIZ&VM5#YpVX;$}VtuIb}!h)zW-@JU|x!K!1sH_(XrN_7Htkf>KUS zbdM<4jS~Y5*F)=wJt?61AKoJDL$f(bI7GMBUog?WZK{#iejlOzcz}>xg*98%8ijC> zA#fqQg!gNB@O2LI=FnCu2yA@H`>Mto#VZF6`64U%edVwOH+q(I#!{z%)|kF{QF!9e z-MIdj@}Fut>g1D5XZ=?nRcQ+-m9mf#!=?kW0_$U{vl`>dnR)7`p09eAbE0V3erojl zFpmoo?Re4i(EVA<$9kP7YER#1r!2B#mg95y#*IG9ZAqZHIvvB%g(JB#&>fXRe|ox+;;~s)$}!;?)lzMn=n&0 z0Z3t)#rNO=cXS$t4fh~3*iST7V`zKr>m|^Sk@#ZY$MucCQcHgY>{6XE};V&sFPy8j{=k8H?m* zz$1cQThthf5HHu9&tUb#CokhhXk-$DDU+HDt<<(K>Dq49E$4QZTa{YNV?KCm`jI}Crv@*%%NrAoUgHQ^^C?uEeRTbUSZflPbH z>B>MLKn6iF7}E$m=bvR;m?ZgcE(c{Ojn5I4c!LUc@ut-D%1Hh}co)#urS+zYeFBN2 z_#adLTGCjO@OkoqeWT+Hyth2UzN5xS3miv$>vlljd&*=phC?oo zWA>VollvFO>tADc@M{j6-h^5gtC-AKS&SCad7K&9FwfTU6+AVFHvD2eTbRtO%`P^3 z=Dal;qk?6+{((MbRJ}{gPDu-t?$h2;2G(>n3G^wa+qj_w_C#n{CYQnbCR$84l z8gt3|M41F!V|hz>vP>?BCp`{5pQ$?;MQf`yl(_r60-z(=?j-ocSP2jLfq>?caxxL( zXVVO4_F9cgYA3g%d+Ao)=T*bix2kKBhadrP?e15TT%yL$Aw{=oZpYe_NR?Fg{VVVO^!bFT04IPgBCammX@M~m{^sayY6uY2`;Ty~)FEa7b1wR`)e z(R6=JT&86%K2J0;lX!X)QK0^rYhNFgG^8#b9<5wK94H6$T zhXX9ELTho|Zf%dJauQxQ;P%)~NsSzVnrV%}iNV$S4mJqj)?^Y<+(X;LPqwsCY&6)* zH&}k;9TFof(^xOzOE7|Y5JaCHw*9@)zUskWT!bY^PNUy^PJN2feWS5J@{jLJa`jNN z4p-^Q(kWdvU96FDyR18g5S{nh^HN<$LPo+ZIZo=M9rf-+J0?6}|2CS~9-ReM^NeLC-Yi{Razn)` zh9vIuH~0zE?=zZItd|2%hDJF!e;4`O1=RDIgc{l@+6uQ)x&77CiCPLZZH zp=Gm(AB}rzn%s9wQbJ*HMD>mMk*>)!EQUZs@%Tifk2U&!g(j)tL8(-o-!9SMt?Z#3 zRPD?jb_c+O-J&wRuAdM+-?w?aaQQJjt86oHa;G(433c#;jIVc99#Spd1Q*&>2Km>u z&SI!wPg;TXo7ukREhLI&hOfLG_cxd))443qsI7LOjIad9xLYmUhGLg}FG~5P;CKfz ze2fXmfw;~8e0cRSR7WN&(WndK0!Yd{$h$Y9XITfp0f`_Wy-ntj4h zWD=fMn}la#g>bXKm`|OFVtV&p0 zcuu-@+^9#LfXM>QIY(gNRA`NlpJ|_D9jSH*pCHFJWPgU2YfU*^cnvaQKfrgMx4I#k z$-ef@^AgtXNMU=CFn8Z=)i#BV!Hv2t@9A7w&f3Io6Nj-THqw3VG5?51`>PQ8Qd(9+efZWf%{GC(z z;t`3LTkNuc6zV2_h+UBwjrY7iiAku^HtO;Tsr(%irtB84HHCy*69UuK+k-3_sj%M1G> zT(9yHYKA}fhL*cmta=tERkx@RI$JNE`2Lp(O@7g@Vfo83Gv*+K8QHQ`o+m6Z?dAt` z2r;)GwL*B6yz@!3EWzoQwhVqhtz4MHApH|wq=Ep;o?u5@LijfZ?;_~Z7?>Ui^52}w zSEX&FH$uGc>OBJ$W*geC!>~lgCg~+TqWt5bvr;g|onFVZwr2_y z=TGu0BIvfCn$HG2IyoMJ8*lK&lg<+$tN2 zwmVgzF6?wSMztIJRJCKyU|6;o&!g#(`vj++!r`Ix0w7SdVlK|1IcBKbwr;ALtDHYzXPu1u%3Ix$IZd_oLJM}dr0qNL{cT?j-77IB(Yxy-VKVeIac<$k z-skNiftuu;GwfB%GY;N=3C{Q{okwp%M|TaEYg-^+j#?{Te;Tejt(9yY=$}CS{-4o# zP_0DxK71*7HWPD!f;IvH znY2WTByDmY3SrI!5wr_UD?|W}`WxpCDvbdSG%fah)=#x+bM9M;lN-cvF2m(Y+pN#p zZ%oraj=?T$=0%hvBc+rHlb4>e914i=<)#+wU$^zYPhfrXj5D_yiu9%!D~{sMCw@7q z%m_8Qi~@jl2jd-e)rOgiN~o+@gF|+{NNmkd_iKgHYlFe{!zA9DehR5* zSgfG!A2F?04aD&Ot~X8z5e$@!zmr9whY6$;>s4{Ij<{BFA9$}BJhXE=ZqA)L9CB4F z{eoQRb=+XN$4g@x-*MbW1Rk;#-8Gjd$U2@<5IKv=N0RyYm*qKRNUXGkx;kd zocq2ZOf7FnVXCseT|49`E-V858=uK%9o6xRbnF-5{np>IDj4AC`T@t}_!DY=+IJE>IDQII+2g0Jy^1aAt=Rt~h1-R) z*@&8^1QTFPuho|bM|>DFlZ_UNxO{NGBW9QZY{R18E_(kmzlmwNcSPr1#}eK9L;EqE zbo?}7;1FdqF_@k#h>Q=TSchxyXi1e|qFxVsHP4IHxIW>zCysnq+ptG3Z0VC{>_AXR z;(AVgfaw&G{EzRb``o{jV7z&6t~cr_Z%%5=4ckZH2MGPE0p)9@^ln(!pdrbyJ}X$g z@mhamv!1GmGeP)9{$0C4KwOdy-LxAlvPPUjEkcNx+0ip>ZeAfs_soYalw8+?2Oz;51tXhe#Ra#UAxnm6Q1)L67RM2Xfd=F{Wv2*dXG z7l;a0OneQ`v-(abmT9D=_MitK!FKqjuXXRY{jyO%t{8vEtR$&mpbY(O9Xa|ANQdpa zomG)){#bo2lJm(`PJ30_VP!%|hCGR8GQxjtd!FY1G4&QeQNHgRuL2TMyVBAP(%mIX zcSuM#(ji?U-Q6V!0xI1t-AgFlxpa4)cfY^?Idf)qn1Nv!X7_oY=YH<{x;_^*%+D@( z$*sRScH7tOG45=wo|ca1s$D}s1*VjI+RKxbdHs(UOKW2W({xK_AyshLAq7Y#Q`)pM z-$fO0dZ#u`e~=b~hN9T=Rf3y)-2vTd32ihcg&hw2dr{hf* zGrCbQ)PeB3B=>Ue-I~8>V^*bNIj0g9aW!$UXtBN9mp{9nNGhVkk9OSQKqZ#D?m1$n-3q&u~u{@1I6Bn-vqAADqj_1)~7XYq>M{N#2HskF=G--RW5uC$uPWq@oGYqua9iC)XA?AIz ze*`&RV7-RpInT+}#XqXeOE0NsWi^jDlu(M;{A0io391~vDS*0ZIf<4Y+W&1|Fr$mi zJ?5tu2)tM-O!nQ*u!^pX{T9=i^7&L>==r8!?2N`VlY1ZD_9jAsr2P%kCl}A-GK}!< z8weAB1Xu&WRQhi9tv3+;6y1phiWQ|1zT8-xY;)wl=BM`O#uQAQ}+X~Q5zuSy~)%KJ)(VK0&X^DhmhN5*S1j$^X zOD*O$Ksl!?otSgXOmsJw7{MYSU2pwc#KumFwjm?XgXcYe$`$d+gn{jhM$pz5ZKWz62lh5s=!c=3IY%4y%+o+CQ9eTQ*=k6s% zf07FV0jXDb4m9o-swgbTQD3H;;>FD*J(B1D(AnC0FxR%w`Y_vK73cMe`qZ<4nQOwx zKT-K@u}WS--LIMSv^1r;)+%E{qm&qK4#inMA=55PatTV!#6%qPtvk6y4cY!yp(tx@ zzN}awoYsvdm95zdEw0kftn2CA(81DtFC8jPDqJi4jBFx^B%5#}_2w2ht!sV%=)|~&D9)6!pS4HKPPX`pqd;z(JxHm2+q%_jD-=`D zQUF`gs_^<1w%p;{!{~1#w!_doPSi2yDnM#i?1K=n5zpbZ?P$Id=tg-QcL&AXE0nVR z@gq02$X3klY0SVp``G{e!^-_~oRbWwvO+n|hY|E9#Cezk8xAxTq&Tsw0UY-~@y z6Y*`!Czv~x_HOzI6~wNl?%PZ7Tzyz=@IP*#CqqpnjqVd&J5?WcoPJ{Vdp!Vyv^MHF z;-Zk0P_)Fyj@pgmfwJ8S#<3L%H;sK`0)TBq5_V1 zFF)PCH7~}=f`VAEP%{fK+NCI4h*Y4 zPqgvk(R}6V`v#yzpmyDurXsMf9Kq~ERfzYVz_}I;l79w`8jrE`kJb|=WqTm$EYLwT z8gR%rrs^Z=alGPYAE83WNKhg_eCCf|Z9ApyTJm!UO#@|J>U;fnt^r!YY&JdQ)MLeu zkLJ6h^6D)AGb)T*$aYmO{GHvr+Bmoj<5~t)z1o%4%>y%+S?~u zo_&mX`JvI$BgI6B{10b#eK$bPSBGxwq=4`W+;kj|$y9vedr~a+IH<1?O`02%A++&Z zftL;4EWwNt2V@UR*MR}dB3XLP=R?N;F04fYgU<YJp#EvPB=57eTid^~ zsR<7O_1U}>O{=+-YL_L5Zkux?wY#~BK1I+Aw%I0+h=bW0)w7_HBiUC5e+6dSlTW_N z!thJk>6$cdDUX`hOo*Iku`v*MN2_9j>rX&O+A`2K$7tPO`mtvImkpry#V*#b4MyG) z6$H2M;v_R$${bpAiwKEZ`=ef>ug$NEPOG-ffW0D=$$$W~UE*M|j;Brr%fA_auN|uJ zyT9>Znf~scJ?jM`ZYPp9lF@-(Um~WEV%Iu< zz*kOa3VEU}Si#tpAcQS^r-r}oT(7zn^={d;r!`OQEtePaL5BS=i=)z)RgcEW;2+r{Mrl3 z)N@5GTA>-3@0$4+GsZEqXp26+jYQ|68Y)*O5>MwJfH2=dp=z~K9G|j2ihabDL-)mi za>zi;&L|i5I>!v2{o`s7_Q*N@n1?>KZ)|tzeN#-;s7ozT*z4G}Oxtpfev)!jd%$|n zCtR@+ALmNgVQ=VZ+3zJ?6Nx9L>8a%+>)yM0pr!PoOCo9K=Oi8P=y&V6gr(}o8!%8E z^QU|s0Vj#^fyXECehp3pM<+PlW7{Xrh>@%df9_E@+szi??t#ptrbqrG_dqI(`Af5_ zxug5iMbd#Pw{6o6sa9H;srMDq0^oU6??U@3uzXYaURqolqhVq^|I2AGs&++5meKg~ z*H~dn`Ec%7AI?F$@9=qYq`HoH<*Q(33R{eGiR$v%u@@7u0#p-){#y>=m0d)W(q>JV z>xIbDp3{j01@K{%xL zkQ+&M$hSfa^w@~nxNxUGUMa_HO`C7<4ZXPTl9|U!#T0-oU_= zq33_#aDmu;+l_> zqJ*Wu6X1|0O1j`27lX%drGO-D^V@{lu>80N7FX}4n<4G~M3q4x7q3VkVqR`z%Ct+_ zE6gS)8{@ZgVmXM}vXM3nGZNXhW0G<|95%2i85yv3<_FNvA3kd(uNr$&;#Ie_ySrDG z=A%b;sXAgys!Ci1{%>b>7dMw)?KV~tzzk;J4*qB69uyvxM9C&Li(L9kjw4z&>Lhe$ zm=}!n(o8@%bl_*umr!eI?sou%?nS@imBf%;uvM_oo{R?aKonoin^j?1AAaefUE^^X z8hXKb%-#4;Er}lSx`U}_FSlopaHss)9hM5X*y%tPfON&21UVeRd|`Txip_Yj(vL|{ z&&gjLmA;I3HCrO9jW(6A8xgv%hG z+OhlgOgm@p#R&}F(4)1}4-$|va2h9-+94uooMuRKC zDG|8RJ?$5h3W&oL)s(_G;7A6$UcHV<9)XvqS=>FSWA67PDkXKSWmU`4ai@Glfe%P3 zJO?nA!pO_l4FZ9vmV53RG9<+aJqG}%o%mEh9}C;isdYeUA)*o{=wd|z;BB0{k4d52 z{LKK2Ut~13Up0~*==e0zB;Sa}II%K7`S~un$~DD$bCMXFe%XG)1zvSF0aNL~=5^qG_g^i9a~IEjLV}Vbp}kp?1q_r4y4l8B6(iF?PkPWt z{?)CJP7Ex2dE#sx`ojY_^>AqkS@i0Y0rAn$R+^E+Wa<(CxpV=FoUHle5HQs+91)>Z z1y?O?hQn1fnLzj`>)AOVc%t(=#?#hMaF_!?(rR!%-^vO}K>+xZbGXajRxj5i?*(+V z!H4?kpC5)%zplCG7KAzgH1U!4Qnv`_W%Pa}5nBa7!B7OqGUy7jw!o|4&4mU>M~EGI zY2tCqu_(@mGF*SB_l*E41t9=OPLZ1jRt02XClbV;;h)ZmIJ~IJ;-0V16)1Ia9&u{G zmem-$GbeKjstFb96H6T)q!ce*l=Xw2=RUn-%E8kL&+Bi-doF zC~<*xAmY@JB)SWL?#b&`dxIg#i+#;3sfn(}=nM7Hn~D2p@Zi5B zrJki$S&!&SB|Y{&9L#N${^)c3j$eh+KiX=C+a3z#k~Xgv9Me$9ea9gp=Lsp zuwvy;Apk%$%v@XXfB3;TCuus{7`T41s8UiyyvGcp*JGqdohXY3F~o=>d=T_FVg@L` zv2ZaUeCNZ6AbiWwuF>(vjAw$|4x5?^`5y4;Oc3&Baep!mHcjoniOUCbWN5CS_QDZ+ z9Q=u~$!>GV3sm+yfKEcGhbYvA$`n-1VK|93DRU<9>HTf2pDE;cJU{63{`4r}FqlM# zY{LS`OpZ>dwVSKnz6Vfds=dJfmu%VtaP1T$P5k?r>qR*_Uil*|0MWNGh`1ecg|pk& z@hegdpn3q5bAE3j@rRVlGTPa4oo@>W8RhPXvO`oG#Z=aLNc9e>Q~h@M0JYRIBa+BU z!@GGfUa8GkG4n?eyFcJ^RRrjXmx16cdv3nE3h+~xT7b?Vs_VCZAo<0rXrU#6jZU_8 z$J6y*OI>xN4aEU3vxj)goO6fHmq8^@fJkX3I>ZIy*R>1FpY}dINw3ONaQvEOj3bMS=}(F1h#LOpqCQNIo4B1!T9$>+rf6 zYw+FjScT2c$WdUOVl?5!)%5|az)1CU02hu#cNa0hUSP~#px4cfY=yK2Y|B~UW_%E7 zvyytXUc$P-5(0>Au$4HjG^j6L1@|MsBHsEQC&~%tMnu8lo)|ocOI|s^emVDg7 z@&G-HR3QI^?u2j73Emm`?@bNgq)~D&r8oxO<+HR!h@LNpfC9@G}`V4`6__}CxbOt{wMz(V+1 z7a!d<&&n9(lKaT1x)?$!WFF&}HlLe*{VOg`62Yf$;Jhf*8XVE0(g$C>2q zSUolDo2GB^zi|Fy)&w9|N89C!BSG-v5SPt`I@Pk?q4N0m&cQ2*^bu0He20p%Lu4&@ zK;4GzyZ~Bb^wEheA2Rb%^E1>Z-SHN!)-YYDDa7!2#eu&+-;OWYf^#8`To-Mp-fv{< zed)wd-B#>Bc#}vT8916L6aVsy#drenxMRkhOz6jrrk%hN=TV*+!Z-(FQWHv>c3jdg1X> z#x!@y;bC8cQFYZhUEA2p7emVcc~;iH$wI7)D8qFU9OvO%%K20VY$hkFNKUMXHEPF`(aAS(DeNS;1qcS z?5a{|d?RX%`+xLTELTto942}y=%1kT?M74KJpyd*03yH=d`!cm)$BOZ= ziKw?9*Md>evyNgIWb{y2**dMSZee-E6+RFv2=!hlrMZhT$ou6>mIf*zzX9hh-1#61 zudNhq%UM?GF4bw7#tmQp(_RAUM)TG=hVkDNk50hnh!~LM&0lj7<@M@4%{}ec>Gm%S zQ%-S!7B>hL{Qe)l<;d!d#0AR?>sM}NglMk2N$i5)(tX*?_XWXWn8f(uCsKvI0ztNK z!%)=~Tv^eX_+u!p&N|A-WzD(zgDRt{GI!RE*$u&d93ZMm*8r!PP7J(YpPqnh3s6|Z z=O3xHq)fFj?rH?_wrKqzDE9EVz_n2}^J2m@{*fBITk4E#O#Tn|pDZi9uwq;D*n_*K z;U6KT6txwKf438s**yS;bQmwu>BLB_F_lAk#O{?ZZmMh__ZeL$k6LJkUSlxz`b7xB4DcMq$Pqa0gUCGF-8;yB$0$b z{%A0z-8DN{p44W3x+ApEtMCFp)&U0`N8l5SFsQR(PG++?*; z(&e`f4SwU65N+x#!e&XIpCoP20 zi1^=Cfxsq=)kV~ly~2~zw%IQ#|1SJ(cn5@qI`oApnQ4^J9l^_261LkT8G--m;Am8E z3&<2CY3FT(WP?NqAu8YiSHTsjNmRF?#18R%%bwk+e314xFJ*CG4TDM}Uf{nDPlmk4 zi5TPn70LCm-`6F~11BZl*WGY1^=93SAy>f!yjedjQzF4|8HH?VP#_H6fXAIr;!?YG zJU`u=R17MvT<=VD10hO%!m{z}1R%qRaER*rcv60+ZvrymCbig|q-qIft*3p&N;WQc zDaRn|wk|HUifn8M)8y|J;LmT9gi`%TyaFXe`T6{1qRKS@82y2==93N7&6HY`{k}&> ze0{IppFG!ike#UG!Bzrx0LC}OJIxRYsSve*ySKcjB;v4wE|sP|LM_QyF}f|t6y=lr z2UX2N4+-yt*b76yF%Q-nXl_f3$My2kf@iz$Rrk`8#`egFfDiOx`&zhG0Dz^! zAIiQ;I(sK-8$T?A#yG_5Y1`r+!(>>%0ZB8~3Z5oGIs{pH?*xf1T4EH!w*5!#mjycK z|9YEcZ!TqrW$be_cLEK+ydZ`K$_jvXpHb_zbY9(2C8>e72A%CH(8cd5VqId*=^D`U zizBc=HZG`n&POg-r+jR8=zecH-(DvRxsr6|K82j8+Y+xWv*h_*WeB*}ciw%Mj^WHZ z=evA@Ph#w=Md((>Vb;{`#VZSFSQm!?dwMiEs2S#ZCp@DK^(imD5|%uG-RPqbn)1Mq z7A*akRN;GjWC6|VT#?4-4S&#Dh7~Q7H2jAVfmRB+m|mw31n=IZCVEXw4{7yiWXk?p z8DrD@bq}C^dlDuDa&aOep%Je-v1e#v)sV2eTHk09oI=0eM2ZL91X>S>BbKWpfr3Sl z-USeH^r$TQga@LUq5f*j2ba$hP(UjKAju03Eu+3F=^v4KL2s5w98o!^Il>vFkIaw= zkcC0k;1O_)PMY5--&PCIQXg>#2cXV8PU|^lY*ZE$lOw$gJ_LZwa|h($Jpjnl28PZ# z3a@#Bq8U)u8BAHc44nZqKSiOzZ{tu6LN$U@T$7>K9jKO18|!OG*BlG=P@}~aJH#|M zd5Uk8T^iEw`!#)(o zWHgHV=@io=nxO7$VVIu<<0&bmyt4@QxFhuo6b-ux!x5TS9r9Rm(_VFiJYGPHqa;)1 z$ni;VFFsJAHBzL`JIy9Qtp2DSZyzDw31ip(<8TWywy7$3XX@9enocAkZy~|pexJ{z zdLNf3=t{5M__bUNR@lONxgMa>)Ri(Cxq9UPNg=?8Q@1N_DXrt+zfX}NBKZFE5n_{e zq{plq{Mg~v_aTB+eOgcc4eTBAgzI2IJy&5S`PP9Ht~h}hXf7sJL?&19HDY#gJc*c> zDy#YAo)Z?25?vd~sC?ho^vE3vYa0l54>Lpv9iiGtT!LRwu2S+q5~-#O&lC-zcAv8^ zALD>rt-l%FD=r9VaDN@Q?sd9~am6d^e;nd?1zJU?1Q-$)9z~nD> zf7Gw51Q{~4J7F+o4Co9sV-!6f+nF%oz9Qh!w%VeUe4k|d<~Mat^?GV8#hd#ODnmP}@xGwN`pd(&rR{UP>m`_F zn8}@(_g0eqhzL1{dYhR?3k?;{p&O|6x0xCUe74e|^V^g-lq>Ha$FUz^`EDc9h_Fzx z3IXg|yEOmz&zo%_g60J>tvS#Cdu!#l!|uh8mCOw{x^KW1@%WKsQj%38O{J@Fd!S(%l) zz*)GMhVJ>zx}#tA$P)$o+G@{Z}oV9T*so&!ifg; zF(&*G04LA2VyAUa8$|rv7MfV!cW1u1s(MJ+6->igRvS)M!=zY93yevs4R? z3{~Jj9O7cg9liI<%c!i7<5I3~?E+#2rT_CF;?mxmgka-||JQ2a6p$K}F5K#)PgG&g z)Gl$ulagcM&uFRlk#!&y)_ObB_VH|!b=41l{$*PCeXC8c*5q|{zz~n$N@8NK?Ldfh ztmXsx@RVW&&~oaMqaJ!=xqyfEQUaIqr%Imawn!J9DV0g}%T9FX*Zt+_@97;jfeZRu z54xssv@v^0>f%>J=2mmmWH{0Sw4i@zEQ*9y`>a@7^L-IfB}%iFsoh&X@Mux?rEp*1 zW{UnhOxBLH?cp#qE*2SS2Dnb7+s~d%90UpXPP~U&F19pglo~De`8(CWp=tw!Jko{c z2!AR~x)Fw{kp7A?O86vdFSuzYF=afaF{pK2WHp~RBZv$18!8!b78-8d0v|!9B6acF z06`bJ?RXbiX1iAiILy${qk3;4q)T9nMHQC-soPhE{2Td%c8M9u z8VQblcQC>pKN+k7zW3|z=)e-&FN)awb`^~7CbhZQX!rADVa$-**LZ~%zj*sb8v*au zeESkP6&K5LYxJ=3&6*}emQg-BZc>FpLaE6%D2DBGU)|?v^IgAdE-UE8dq140k(c!T{ zjWCNrY;uK|cZWrgs-Nm*>P$^XLkXM?ch7?=LilfNwbi4<+$9Rm8La3yIg4u&{Z~cn zZ{H6RMSZdBRyps$^Kfpa5?%qus(r8I8cnlM@LtA`4>ZP#0WQHBrG2f(%_Nm*3I%`t z#SD0)*q_0u#{K4xU>-2S9DVG^jt#v2YRo)EPxCHXfGP7`TD4Eamb8O;V_S-rgll14 z>d6SAdL~L;o^U?PI($0&Fi0YEyxbPEs<;$CMqtHJK)OyM5Hm*>K>epi1tLZ)C=3L+ zD#mUTJ2ZBN&oz1svWz+kv+ZLQ>pNK64B5q{xo=Pg558cQG5EYQ-su}AG&N04#U79( zloj#fcRxCa%0AYTV7`kymW1O?;L>)xMFGOsQ@FR$9ZYAB<+zs!nnF#5^F0~KA4A-o zB>gokv-|(C?X&4Oj{7S6Q5679ptc`|J3{r?@!iB6_drjPuYZh}A?pya+$_7k?szxo z-!0JXHQDp|FQIlXZbSUyDu|!>T{gw#rv;KzVwix%d%GX8JM^ef)cbJQMChN`5O|s{ z5J(VM9Ze=8s4MH_gY{xvY@Hhixg_ayqd#l#MV!c0dTB8*;^uc!1|g7j-ZpeRmU)c{ z*2elr#AYhRa*(gTEIITgnzc zv=}Jv3)k$~64i0I@_#ym4N+hJ+oeGK#hcJdsbBvK>oBoDRWTJaLzZC-b!d}~`MVIn zr92CEcM+-eEKppjk~V#*eZG}Lme%KnLdapV0PW@6+JC0^xhjikH0*rnEmAsPDDn!j zZ9}>Bb-5W}CF0tGqXw`GXy~&`j-JW{ayR<->VDCF?@Z7I;vU48&1fGbvZZOVd2Ca` z+8f~N^wti3J2YF&#xKBCiwcO$F#NY5jtj>Ja?ylwK=(7atbPb0dA9BVb93-VNwhKf zJG1VFzZFd?<$#CT%Q5E!Ue*Oi$d=axM+oZsgjcS|b*+W@Fw;eG$gy#~H&5{F6roKT zDhNbVE%cG-G6xk%3;YR20Ks#~&+ zZXl5)h(uX+pykWv2*Mg(Y>ohnj|v(39kXM3wmOZ+)1T}9F=T8KGC|S+dR3c&wa0s< zLtf5WZ`bpuoeYiY=YJdm`#g?w4n1S zu?=y7rT7YH1bpgk(r?gGIse}1b8JI&7}4J!SIitrBIGP?Ir><^SK|C}o|~9X>UCPu z70VGj6jozZ^GxCP(N*w%eUGOk8Nu^mwb&u6bQ?ZG!QB2eZx=D0O zk)^E>FZ!o}Qu}}Wi~oBNBNMeWJ)!Hk%$f|KpSuHV)XOhyKCfG}KirObH=S=L)D){^ zNsQ6VC|S#eR3fz!W}C<32mY2#=t|@>5*6^d$|ezV*Hq5Dq#hRHPeS#HXYybbaC;-; zdh^iG7{}`{3%Z!A;ucJNjsK3})foZ%QSOGJR~%V{$g=}C$u*L=AuE5_TDErBy)tQ% z2t5_KLhdCr4oN{Nc zJW&tcgENN=omlsGJ7p?6j={%fjK7c7DH<9Kp~99v|EAC!4Q4V(BC-tyUc;1s+V0(K zHvR1@Itn{H6a*g(t@u%0`u+SI@ln0moaOv_UWv;bb~Fow=VE(zR(lAqHDzp$YN*<1 z9)jvlvV%lZI|@A>49U;yUAGmtook9^{CBNM#@-1s$!`bUzah2}`XzB>_usNiMn^07 zXFVb5!sUV{>Z$H1(G^8_;q?T_~gIo_9r zb{W-lzc&(lqc+LSkVjkrX# z#f(5b+qy*L-r?ct?L)i{)|i>*4DZ5?z+sB^fB)Vy{*2ruB5IvDng!Y zdXU;a_TXiXf8`VKy6KVFrapd~mT4GGMb*!Jih0g!J^r>;J+NRqpl7EDrJi07`_!wq zGe^BaM^|MNY5`fpX;+25YI~X+S>UxORj+JJhH4MsIH(Lxo1s`t#(v;*oe>ludq2?D zYD&7RTUAaX=%#O|Bcg|_X-{(~;+%Df?U`rK->fa|Xh^4kWp^IDGw%1pGZ(?-Q&Z+- z)1s7mo2ndRHhtcKh?izPsTf0^gD#!xwF6oUE0x=$>6V3YO5gJHRv}~=!DTP4ruzKG zWaBQk_E1K^Q_vY&>teB|5cohlvO-+%OI>PlUtZ*LF>A=ESy}t<_q@m>8MxOeJ!lz(KQ5I_{mhk4)4k#R6{J~%H>p;lIe|sD4JpdTM zM+&t5^Q}|8W?D)jkAO{09f*}W?j1J`OyKT%f32un^Q5#^tsZ8a^WDI^{N!)K1w>CwGY4)_PzlS9=~)qBM8{ zn2sXJVuh`hXU~uA8JBhDbT$Nx)Hy@{lJla-QktcP2@_`3mvO>~JrOOjmO>Bs)pqIvhh!Fp&_z0FB(SG7KLWU*~Id7;CBM}=WK9Zkq^ z0_S&DS_$q=x!qHjOO-Y@Y3uQGlS`=LV&)>IK5GEDsn|hg_d~veD(eYnu9HE7weGHd zeQNaWrwj}ufxinLl{e7}tpQuoXR43Tz9LMm=--;((zTyc6z86rO`GW<r?+IC;cnR+XRUCf!cS|LtW|rH}JzYLhNQ zaNjYJC?X6|ut@Rhf1mmP?<)it=jnoi86j3ZYm7;vX?fQN30n3Gvgi0Lv_|c|lgB?_ za_;}CFb90068mngwKe)YPL<#sY%+d|C<2ybH`{61qIVw(4Z>p8f9r6R8h%g3xIZL4 z8xeb2L;H{~`IcJnc)m`5Zq;f##d(AVmM4^Dsl9*R-hsJDF06`;i zIaH+<boIk_J*g`lHOhw=~QT)Qq`*AW)I zI?k?pzg&iPlWy<1dbeNZyiWJ{gGnmehf7pk?&VxRKjuYVD&|`Btf1_BB$&90z79T< z4qo1j7$m@BWl2kIk&WCM%wrDt+`>5(vx5;lDe88lsAxgez)_)!Q8KAhegU!SvOE^> zg0#=q8S;|M(Qg4~wkY17Tn135MA5%6(*E8QtwSz2LvJDd+0faz*tg2Hj2`ug%AnN@ zIKNxb0{wi-c+Yxcd8CmVKxA3=>U`n@`*UKBi7YbMvSnRGt(UeLC#yj}c@ucT{8K0N zQjrg946CZooPx@wldW2C8p@NmP&{MYe^CpY-lG0ggJ^k79-@PJ4dEmr?R@Kk;eVUP(2r69C`(4=T?Y+6m4uCK zGUEKBP_9Yqf93W6Dx1Mfc4_ZF#0nywC*R~gl$84cosOQQmA_fzsetLlZ1T@LT@?E= z=AkFQ`^`?D<5c^F#Nf$K8gzqg*uv%{J(~_kKgXuxNwde69^H7Il#`qsI@vG>j-#OlUjjLvIZZzXbg!~Y|z z3imE;4p6d1zKVK#eLnfv5sFZuUYV}{k(W{I>}n%yvlP#0puvY1x!qB(x%r`3N(|?1 zHm85Ry@hJ{N#|5%rVFKu*kgCvk64zC2G+Eh1&oBg+}V|KMV``Kw7Gq(XXew;?2#|y zKCGCgZ2Ng40d||VP&ZL44;n1;IYwJvXgqRV1-mJiK<v`heSlFzr&5d_gy0K+OA{*hIp;0`O@pN$t*v-7U4fOZwb@+; zRx`X&Oz^rtmXxcD%aY>AgL|d~I8RJD`hMfkkGRS#w|W(6mZ}$+lLCce0R?~qBl5h- zJG-@-EbHIuo6xWOc=>H>EJui*y#2b|7YGX=5%v_7CX@;1ssdPrHt|?M)|*4Ct!d5Z8S&5&w*gv=P_9 zobrSAT}J$5T~sm_>e$IvIgg7`TP&UL=N0+O(Q0?&aMjryD0(e$8I1k)WpA+P>|xKb z$U66-`ud;R?b>+xx8s0|s|M>8txp=wnP@FBOm}vuCP|>h@4T!SF5DaQPuAzA)WS7} zw+~W1m&|EUBb|3X>s-DyRzdXoju`XX*TBBuTt-1UwAy(d%_lwLe~m&JU4s=*jvk$xanD|L0W!ayVy%YLk}@1%^q z_7VPMPZE>;0Z2CvM-AAdg65DV03QJ%py3^OhT>*{#@WJrmxvDDGBE ztbDjcE`t*2YnAIH*coI`HI~@UwCk)Zb-tIwnoOcs892r1FH)Rat#>czVg{-Hej#O`Q&cS{ooskh>v{aCX^lzie8>tw(Nm^1(>Ree#%O!F!zGn9$L>E zRf@a=N&50Uzg{%)%R2<;J$YYOVC^jmxXPQT1iMRhw$aCBK7-@VJy-HXvh+Pgw@GKV zzYi`6X2p@AJ{Sl)I+3%jqwO^T%;&9pk6__3bu2uX|1;>v%c@M+i*_+@?p=RWiF6nW**2K)7RZ6@@Hko|+AP@CHQyRa znXE7p)2+2m@Pd8;^blE>0Z+FxgI>SKYC`TagmnG{>$ZpvpH?5+>pHt0&(+9CK{0}1 z!$6~Ps4u2NS^o0^kZlDB{DG#L-EURVCMju@i6sg% z-=*iJ60H&4Y1x24xjwnrHKXoU$8$8N$W=`ir9bJ$Ttg6~Xak_DbKkbw#{6kN`{kY9 zon;s$UYE+Q6}t*1F(`))>OTIhLIh8%yhAVF=KF}PeC20CuV2@~M(YY6+zONYAc&!pG(iOp=WHWl*Md9v&s#Zz=SJ zZ&;6q#4L+A6s^GJJzftra4gc3vGWmsA)gtzy769%l;->1o>}U_@o5*q?yJ7e`N|;1 zPYu8*T~7La4xEFA`h5Z5sNKbKPM4^42TKe7p+o$eZgD}eeBP-}A9&$W0s)`;{h!}(_W zMEjR}Qwqxg&yU|8Cy(@#N{AOw-tsvx!-vFUuNw0zn)lw-VEE#cGn1)>lh$IBh*{9!9u4%90+7W91@Rm%kbI3Z5Or87U05zAF55TBy2n z?!QbGrrfV>{KxsBC2CI+TkA9nzwaj_Od6x&jiBQ=rSK>Q) z9~O&4l!A+q-QQ3cI!;frZAF_Fe6*e+;A%PU5zc~2Hzs_p7}=!mOw7p;H;aI3jLH`- z0AD8I?}6qDCsom_8L9;`KyuU*Rc_Fd>C_NBAqC163up%~;Jl*3>6!%0gbt7&R8o=Y zyyAuLAKDM9hs}Yb^$genh!RQxeBP%wx%<;)w)LaVMaV~_p_s&UaAD+c!$;f9csiv_ zLbZb|$96eqVpM0py9`MiyEG)WSrS+n3jfM_%0?nUqzfJ6Jya^edptkQ9rczalZ zILpa;+Zkoi#|w=?hLR*b$F`||Xb3xS4HZxf1|Gws0~gyb=;=OC=!d>}0_%gV!6|5n zhp)41JB!i`ZRq?ifZ@MBm#0OlkMtegO#aH#RYSG;;2WIw%t5vjz_OSr+UE(PgIe(Ixi3rWe9K^0S8Z)#tBR!M$0v67dulzyQ6FgkS*()pO$3GUO`1{ z!q+R`T4()ZNkmPNC#uou$8rdO*|ZED%qir84R72e@7yaoBwJLoZ<{&3s<>7p^3 zn)r907@*LkrcICVLhU@9uBJbhAqf27`u=d>I=K9cYb;xUQ8xy@zyxyH^g%)(I}m7TKL8LGN9&EfQbT@;oL27U zy|&s-WN(ldUTWljYZ0%J;ioe(Jn9uG+ilhOvPru6NO$@ahJ}8q+X$*BL0@S2S{{X2 z1;^igi5hiS$>|*PS&T=GJyn#D$Z$W9jr8Jz^?$PrxibO1<8z(W)ZUh0n{CuczK zLRrV_!l%jS>_Y1}8)A~!zghSyxJ3vWIB+Dp z^Z>+MLnUh8qX$rcM?M7*q75jpwVB_cAI7!dtL3_Akdx3a$P{+$6htY?n#B@HIF4rW zNc2mtn0YlkSF(tHCkgkgH7ObIwd2aHFT$cz&L(tu10*dG0h2~O0_WWJPRPq1tsZSi zz+UuI&*}3vUkAsb<9%L;Yopis_8DOK>#s$F0XYMYTT|LbJpEAj0Skqt8f>IxV5HMo z>t^}I|8|f*k1#(~j*A4nf53{Q!EdhKk`u+0d)OuC8|E&TejGm?o!smI%9Gn81r_!D zU*v-oOjwLi_Mw6AY3~oRQXgoNb!Q;7DbS464hey_3K-8w?9Eg-KK)?H2p1QMCgkYy z?OVAZFE<08RrIW3c+U3!UQJGFYqtpbz+E?Sg_yz$gHo9wkrk(~$dSZ+ik;u_f5 z`A1$jXB}KZ1SMdtgn9$ z4pql|9qXpx^wjW+ywO*OiEP>qUL}TBrG|}#gWbZuTiPz`c9UPstyEMkjlyfI$b)Y!2EDC*@o5t#Q_%3avZ<4As&5Q7^sy`<=Ea1+f8tLpb~XOaRWd^y${*m<( zzTx1jRSspkSpEa&1*Pv|xq#6v3eOmhi#1RC_5y%vy2PyDGtrMK1+WIliSpy0B2Y(87vT(t zMsVpaO5^9_q&s(;=l4i#STs`8z<%lJ(fLo;yPP`f4r&ySHd7O1+MGp z+AEJ`uVQZ7Y37WU^zhf&3Ky8EQr~_U9uy|&NTxZrS7E`dhf`UUa%No9g6@y1Lx7<(T0a?_Rgg^bO-4>EVg=Dtq*D0JId+rTmZj4s_iTnfSqYl40xx z9vz-Rl3BbCiK_mcKc{{Q{R$a7C1KLbaY_Vs z;-rxF__WPb)(_2}xwBqlgzFM$$OnDvhhkH0UqS+1mRHM+JT2MlEz6=t>aj=#cczqX zI%kBv&J;G95ewCuepFjMf4nuhL=yOHUTkhTO}@;eAOfz_jgX(L|LivCBf4@{OZsc; zW^Vi_MWjDzkJ$*is9xuUmT~TSB5so58&c$#@s=)tt0`7Rs41NZkJ;f#%>63);WKwF zPRU2gnZq|?GY=*ziuAwvDBJh(nCNjD9zmd_(cD(ibC~p!;+#s35Rz9`*_HkEEeC=V7}F3|AVi_*^XOtu6$K z2;l-PPr7U-2WccR^fm86C7Tc&{U(fet5;P27^tucYS3p$-s5fvnhPvHKV5h5A=F~7 zMU6+sn;InZn}f%6{^Qu)S5okQOu((WglDsCAq8tA^MOWgL?m%3eEEl$+!ySnXD!Er z*h~36=GfLR&EiDxQ8(-)Drx%PtgE5NzoL+^#mWnb~_W1~!HUthf4gbZdU~!ly15?slQ1W9XHXU9ixpBdZwaLL8 zOp*=2e`HcGM=p+3h^gxcm*pAUneH+ica%6TJnPK7t|CISxW<;IE_C_5x_u>0*eh`) zjZ!%dTWTHU4dC<3Gjo@WMvOIv?2dE+uuVmQC8yboQq}8$#p}syr#08Id@O+{CnuF4 z9a5~Tz*)r((>#Y*`}sgu7;r=8JqCjxa75B&yP9G)G6i8Dt%rjK#%`5w{Dc^T{kuI{Bv)hEKDC~7`xyo$4GfGJZoZ6v%VUe&KAb0(cX5S$5rxM@ zHdXI_c=uuFa0(U~9%NE!zH7>5-M1^nlJ0a z7i^|B@pqTkI7*FL;`HbDL_bYkXdO#)o{wFSx6m>kTR-VHA)3^SMS=bws{T4E%JvHz zhUt)+0qL#*q`P|v5lKbq4n@|x&p1iu|z3?`t8&{Rn`J1&>+aLX^c}l!Nt8vX&Gpo3x z&^vjWLw9#{M^XHW{KxGxf3+&IRTPdR2Nu7IsDQyt5NPnK8B}qU8gcKA?AH_iTWgF{&2Jh$eD_rlY^s};>H@XD6hle3ZA8L01HH%oSB^V(^< zX4Y~1?BVF|~+ z`Es`r`}*m9OHK1OI4MkeI2Vqwc-H5w44^|hj+u36J5rPTlxdjk%m_YUEp3s%yPA>x zLmqEp^_*|ijkAF5vZ`+qsoEP(NMVvu)>mi&OF9#Bs<$I_NY-j7MKTGp*#s z)K=T(vdFXPPw&0c7$*b*c_kAdez>CDUpAD( zMcNZ%zGdfh;$R?S$@))YWKP6uU1oAAYVmt?O49DCfJB^|*)NJ_&pbKm88@(>yeH2) zDvou{ET35Kad1aHM*ZckUU9LR#iGqJV(#_pyeGlasMN4)7lj7h=TrhaghSLlTNaGl zvi@S4GugGiZ=0&Dl`Fl^m}l5bYX*+s>p=#e{7C8x4^BjU53&3V9ldu%1oySS~<1S5?qW^XCpVU=`aM1O<#7M&yqDn@bMll#dNEzt?u z_m%!W{1SYXoMul=Q`tF0Su6Mn+{A};XHX=wMGvT#i+=<@JHl_=io6$p+o*S0yXrGr zU>SJwSo5P(lak+(xcA>j{#OTG_CI52dr}F#wLM#!co->KjYnnKQso6;WS!&}am!sH zF?x{+^a4wF0>ecPRIbz#swjy0h~pakBW6WR@tq1U*;;Hb6K5h8FUC@M3}aZ3VOj3| zXwR9QEOG=f*}G-wW-HJ3*Or|OyYrAubBLt*LGpc0Vk~ljS<1iWb$CLHs96CD{&boU zsi96>Y8dnRP<;%78x!GK_>dOfg}bM7kF`@Vka;*YNZ1;MBWfMiz&a{}y*)~M9o=qF z>o&4SXgY+*c6Z+;pA5M*C%AvJ+qjn*xcI7O(4)8QWZ;wwnUpnX zOIUa^eqR3U=8YI^#%*6t=`P(uP-3?_T3E8I-X@WL`~$&rS=NRSEPqF5@(+c$R4))6 z4u<5T7f7or8sY0ih}8#ay~m}=MNjft3^JRdBxmd_sPMud1z8f#yJf4T0 zC6|94?D6;SyS@1qD!DNA_4l8UJ;?y&1M~wRrvI&292u@#i!LS!sPddlOxOGU{ssu?z<1`xUbW?f$`s$NJJa?_d8o zKqO3A?wAN(%PG^qTr4T?hE5ITk8rJ=czYFU->Cd9^iwO{AuMSM1)*6g7EhPu3mK;v zkN>6R{(7Lf*T*|5oL{&1IpCR|;FRy*bi&!$;+Nu4k_;oJTWeaYSU(DFC+Q6Cxv|nd z6|W0UXnl2f%DlQf(4(4HE>&lkYbyUB$kzj(CtLO_@!=TbifQoWf$HJMB12RJPoz9o zT=!?^^=@_&f#fBBBF*N4o(_*)1rLtx3!=36q)(Iri3Mu+w7MPyacRWu9(FF@&;6F< zIrn4f$EWUh@;Chdjwr?VsBiZZxg0do425-bLk((1zwWl$fBvb?SRf1SRFyJ{tRm+p zmRVd;d2<+P;II&-Tue9TMi9zga94$ZjYH@cLTJ@joh^Z7dqG`&1wMhYmVI^Xbe|XT z&0dM*BcBZk>0F9Z=TC8@Q^ZD;RV2|A^K*Jf`cMdp4#k7*jMn;L`)?CbM^WZa;)U_O z?wUt7EHV`3xAkb&LyAgd@ra?1pqFJ~vYe1_kVWVSM#vo5nN(e;v_xFmvJ-%=ln})( zQW5UbU-|1wp-CPJ)2AO@JP@7?#B$`HaxU!i5VQ^$BN03w14Icu1dXW^1AcgQ~Yjfo2rd{QQi*w|zI#y`DJtcbfmA1>CPDnauE0n0sAdSdDGK zG0Dxkmt=}})3=j0IPnFh4*MX9rxi9EUss=!FjgbcI&57aFf_!m^I50&g&-TR_mFgd zh2GieRo6h={?Ez`!oMi*xkh)sV?&~@Wr4SblQ!nR1&(J^P}`#2%y(oC18doSe695?wyW|eK%-HA(#6OdGV&PxZ1bj?FdI}4D z7F(Wy$l8!g&QxWyHOWEBxAz56i0{DT<9E~gTp5689LT9RIWZ!=YF%enm~YP`{fFfF zp6S+cp=HF})J)nh-3{Z=Bo0sz!D0pZeeV5AHBU0Fa*}+b57*^Q+fCr%kI_$85v+|rp66+9?@Z6yr^0P)&VmEP5iD{R_v=ivP`L3FYuMU z^>eS)mdf+>>pDnL9SN*;{Lu66^~y1iw8w5tA(csm&T!$cUj$#5Yl|6-yuNdBD^~g? zRr44=2DC1oq9e*wv$=@VJQ>!kxZPx0+40_`>*-{|2`)M1(~QTKv>x@}xdfhY>%s4= z^e#tDa@mh02Ez6{S3`f;pY^a8Gv}R3R~qGg{jlt)6ELk6)W71vRO=n?!Mfak8usn_ zqkVEw4p)%xey1bDcwIKxE1QeKWevNZ<=;i7KaW>gBhJVq_){NS(7FeV3z(Romr#yP zBD)IyqX^2pIv0ER@I+|e>yhE>-!c|HR4L9zB5Ufm0{#51k z?*c|R5Am953RRT8W3f)dm|-Yt6j1>Uw)xm5-97lXRD* zu_M@1gFtVv=Jhw-n}EWFi*I7NIJcWsqqWd=LhyRP@`(@QnJ8-I_j)POmH-!y+|Je- zA?aiMpcnp-tDcbS?W!R{xf zQFt=KovT`E5QZ0#;jUyp;wVMEF+D1MVl|!6q8n#@+FoNE>GKEDft~=9DugnUvKwaJ z)|VP-#{cKOv6sG~ahGBjS{Lk4kQp98kh;u-qRg#lwhc{fcC%)L6?y2!@4ry>@e;I3 zTMV8lmuQIeT!ik_z5Q>*e89ycxn3bkWjK0S8iBZW02wJPTzpXq3eQ{ z$U(TW=V|cijIs1C$?pgv{0xGmQ}Z_2Qx1(k_uYg8ii;|oAGw6`PAnXMKc4AZ zyyjgv@kYHibm)a#H?aNlTuYs?_$Mv-^j2Hu)Ub19jifxWe23}Iioe2g)UM^=O{9l# z<6V9;W!I()RW!lPVvUnw} z47An7*OrS<(neEbGTg?gf%@~v*cz8TV8}voZ-OM4<3WnxY3`HT&=m2L0ulD zZ4+Pf{C0Z=x&iy{1lGfTz(pwf<-Rx<9ThK?e4RXvRt_Hp+yGg5RtlLm%jK5kE#1rb zA8z~<()E@sUvT73Cv4T<=gRqe>iu(9_tMq$KW}>c*~r0wUPX+8`d_ookOx2K^Sr0cII^;eRf@{iBwusykGFZjRt{vTK6=5r11JPukkTI4bBJ9gfN2(avWMqrn?b zow%H+Yu3MJ_r~8+xBA`2<=i(n^(v-G`&Zvdob<6S`0Fm!^?t}zQ*iUkx)p&^g9Gxt zNRd215f)lG1e6Kg-o`-pw|q|zTKG)G)pc?d=tdNHQ(a!%D0-b%^BMn(Dx@Bk$^76g z_4$Kw6cwKO?0yx2yDOaROxEiCb3g@PtzC^MIEj3!Y6sUoUUtoE*W~@AQu3|x=1|yg zGunX)N0Yi$b8x}D1XC`!{`wLd@9FGLqrdC*B_Zz8Ju*UKj-`cF3q&NoihiWY*jk-> zzYngsiH8RJI3(7>w7)=f3bxqAyM{$_vwT5Wz1WQv{oi3=imT#4n*Jm4Ml3clrGoE)5_I#g}zg3JZlO@ zSjL4nqc+uT{envK#a_7TiRy#8qlf5KN=iTenHaHxC{IGv-K)Lm!L}-lGi|u02O(!P z`-`Kdhn+0D@lkaho+~X}zG8{ab@N=F+NVO_|Hp$ZB%#c$;^(oKjO7^So(#XL_k8eG z>%Me*{u``a(cg6qpQ+~~Oq=|H6BV4p|WaHR;;;x2fXQB07CHvVf?t!7hcX}!u9zL$5 zGw=PA%2uDOg86W^VhRysR7nLAhm#+guG2teMx|dJj#_6No-F_5%rWr{2wdqNo~_*3 z=E-Q?HrH*se;brEmOU6Wiur|`8jqNRd`ak0(3(@5c(#*qYe~+~D z&hT@jx(fG>ag_tE0v8EEsf0Uhx|>(=_NuC9SPp36m7bG#E&*4JzQ(;4`s!J*tnMyQ zdyAE*^WuVZV6D9-#?m6CV=&jNQ*ntn0O(B|Z#6kA5Na;c5Lm)bxZRYxzY7p>*oA8#E^WsHWI^BMj{i`ky5HMU-TrL@h zr1E~h#Df^jQ=bVZX` zXVo6+&1pVfT3tpE*KEgRz|H}#jQ_Kr z1Z7m+!%Ngeuj(^Uj?`;RwVprV+L?>dT~JeKp4)WT+#6u?wI-tS2josY&Hb=@O*!S7RIkBNp>wxk%>!0zwVQ zSXF^|>N$fM6<#me4=5@e(APBqSLGp-w(qxAK$iHaCIR?R?^i)=o716960ax&h<=w; z!LZhUSJrVdZYk)0xI);J2R7biCf~KtJK9whTwhsq;4i1`0`23k9mYi9rXVR76f$8o z{_g{jfe%pHd{F{aMd0suBCz-k3X$45GJjS+Bb>}F1rQWpK=Pe`x^K8+=W3Q~1COR3 zEYcwikHijCGia@G!^>yVug|}68^1*#01%Z3@!MOw{}|Y`4aP7lT7cXl!RV#P`+hU* zi|)Q$muMAERHU=u_yV9wMJIWqU*1BR>D4V-)|Aq(VS=y)pqkbg8=!Bi&tQ2j7pXHC z-sO}g7&NVUkqA~XxPfsAG3R~Quio8zyaK|tlE7oZMXbtr|JB@?`o0P%eK1`I?rxX+ z0{zebeCh%AUIUJR<}bE%1jMWTmmu@Kp0OUd2~eM?)~U z8wd_v0j|@Dqkx#MS``mG#`F!av9&rPNJLrRnx8!Y+x=C*o-NKX#8UnOsA9#star#$ z)AfD^0XCD|Bk;(334(vM1O}8ottfa65~q`L%|Kq9LABHH`ymT}Ua~u}QT=wHC0y@Q zqc*pjasr>R(tFG3NZN*X@%<(~G7FsiH1IkQGe3c@Gba6cetZznE3fT|*!ODAw*)?9 zR^z?~&Z>q@0(MkR9{{r`U1a3!9I#xr3;~g=5Rk;yWXolNoXcNH)5qGsJQ)Bwq{zfH zGta2f2ZMqa+$S9p<6lf2%Q=r{0eb@1KTa(u@sqp|N!&yf`z-vtXeG4FZ ztO8&1*uQf6OAi1uVc;LiUsskK7I?Zn`QN=qEh4pp6zRA{4mF_*bZ18$ae){3x8kEd zRI1_Yd=H*`$$ef%+esuRL0+WY-%_yoXQ^*iXZ@ocKWMSuzAyDBAv@@+A6BOHTDw>Ooa7abH9%-&EhEl+`K?fbiz%)6^Ar!I zqch;;C!i~Tk^+@I=i^^!(Iz^E&b%kc0;!6`QvzfP!)3RZ^S5&ZL2j+rHO3zuhjKkT zNF=+#4Eb*90@;lAuWJH(jJ4}fT%vwN)N!%HKxQ%Vje8?9@?bZ)B6PvH+)UaZw4M)5 zXZ@CAVQ`SVLP6*Li!Euy0r9rD6@+*TP5J=8#CvF&KK9;@72A^dPJDO6%S{8(D2&9+ zQ@b&5hma_eY{^v6;AT*>Y?!p?L_xG|lsO!*aMufR(v=y9$MRXa_Rwz1S8~jeX+vj z3aPT5D@cz9;8xi6g3OmyXPJuMgeHVMQqsIu{;OHile+TcrOOf81x%VQl4OOvda_qoQ$Iagnw~0v_hS z@r)Qa#`$)X0>}%f4~QL$m}``;e;G+hxilBz1QwuKh61V~3q3v_5tX;-@Yx{`Zo^>o zq`n80L+iZj0oNn;LzYAxa3PIVO|!Ma3Zr}tA%Nz1NLd0G4+r@v65**a>TBpa&rVEt zWE%;xrm>GFg+$Mzcm@i-}9%rJHN`?q+d_F)Y9gQjrxe(!8rk`q8vouNzC5zRg07D zWZN$2BrVcWx8BV-P+cwwURHQBA@TRk8F8+d7t8L)^ zg|faoAqafPZQU8Hh&<+tWO*oM`ImF_AQEdaeZM__rg>EI8k?2=fZDfgNB0;vSjsgn zGqKIm`KcZ61qEj#;mR z0r3^*f`c^{`iziWm${hP{_)26=m8JDQy6;%EA+9Cr%5%5h8<`2?A3Vf(b6yL!g#9y+J|W1Sz3>!<4?{5v7~ri! z^RIR_fSU^nZTBR_1BF1H+)Jh))o9MHfC>)PX}gtTA1lG4keBjZ8-G&=xG6%lH?kwa z{d--FzwT4>nKGn1LHUZmS~U*Bv{zfe3~s52^p~;+K@=xS0#D(-o!a!NvK9;5Y8V|w z(b(BLBc%DKs?F>iSc9I34S}k}YSQaXV3Hs{-r%wP6Ia18@YL;S*6SvGiWEyhAHxZ|+*jg-T%MsTPB84b zJA?Ky3r?`f2o-llSXLgPklEG-^>LzmGU5Lk%dmB|AZAeT0F7Qw&h{^SqAaS$B$bu! zt0hN0rwLlV!MRh&K|F2$yCGilmRC!R<=&F3db(;gigq(1YE^!TimeP+n4^f^5(TR= ze?p-0ZPAMeOzMIVt1t8kfx;Vm5uxgLEB`%#E<&C|lc9c)_A=Xa7h~bXoe58N*f&MV zyI<*b{-A0m1a@CgpPergV(|+0#s~aMHFYKIeeCSjFRmSX#B9|!)0LE@9N$) zdT&v^yh3cpQNd^zEHoIrewe@?PRA+HS1BT-rXm{b$lnmz`-Dr^UTGV=cT>9~+Fvsn zDLWY=vf^u2=b9nq&?s-V&49hwvU!O-sC#I*1o*>;80M*tir*?nE=7o<+TJ@v|shfGaVr2**BcV2Z?tomrn{ zudNG*L)@@pIN|&G#k%+u)olB8q)JX*s8FbUG99u+DR0TF0!se0%L036g#`9z;Wv;c zfbUt)o_6aBP4~`V;T_5xQ9RgJp$dd1HSwX4a!4Bb6q;>JTs8hwW0V}`N5KB1nnjHjsuyRi%bPCLjvNxf_u-E*I zNriiv1iPO9Xmk(OAkvXR@cqs4_ISibx0HRnK0%7FBD!nMTRf>ZD)54+OU#Bke>mjV zNCkoEDDKhiKo?Irwa$3SeGqnhCbxpkC>gsFS-bda_A=P@ z>C)8nxsWcXnx1pbC<&hWbxLw33*&-_x1l^=Q$MuWJ`NS}Y>5c<>Xn%fv90dv@qnnc zs~cz%Ug(q%V7_M3$?nW>%?~DDlD}&P81b1LT5Bw+LH`-zQDeLoPXV~Z`D6tGeW3d%H?%;=Z0W`0WS3FjO4G&2wpgrF1X zOLb4xNFDIJRq9halqRQ*6r6UcPYlQ>>;$z1mij)3^krsyB=yT2*DoJ z)5Ef^&wxiyS^P%SuP7_k*`+Hx_vov>Q3~k@j{tI+>4@$KfRWI*XX|ZAO+(8zeYLTy zj}PAr`H!qtRV7#r#ECxrd=-S$ZTXlclnpOi$Gr z6sVxizj`{c&c@&m2R~(8ps*g(w=7XgM98mWC&-a^*&h%|_Qge8xn_+%U!Zm6KrlkV zL_a)wrvdR+4Fad>NQ@d8Z77B^n=ev_y!HI1>zR9@X3fww_UC@LNhb(OX&PCG8YD^idE=orBlXY)$rr{j(qDO)Z8)*m%AYahA^mEy z6IG5Q!i0v9ehfr55;h9b6<V zZ`@;4CtN#lpLlb3iMY6hJ3BB=?;pL^2{@cvQ~jB-J@k%&th>}@2-j>6&D3J)m!iPg z&_MXsEPVSI>*r)&Nr)XeN_`T#(C^uM=AO*%v5bz9=E z4sfU6%;nAb1?@Z;Sq!Zl_nui&6@X=taJ{n#9%TZ6Xj;y{KBs#w8&L6T=XsA4NOu5Y34M)9Za@e~@_-iu(AG8a*4M zTDIN{61dy5|8$$F(@%-%lBvp=2z7G%KvyR{^WQRnqJO4c9wz9qQ)>7zt{$cq8o*be zqMa?JFT!4!fux=>RNrc{Mv<3lBk!OPWkie@$q!WvxQ#Ib$|>44(G@gU=&{h^tO9Ri zLNsYIoLd#nF?<1rQ<98OohUMy$Gm+BNnL_Tb|4lbsilyEVcPy`3-RhJsiRsC)4~c` zfJ0jnn|ApQp9~d3(VLBbhe^T)n&a=pO7_LOr&v;IP*le3E}1oP1O=wj|G~!o8>oJV z-WkeBttRNo{Pzg_W}F&#ZZB_7Dc=6iUPYYc*t;pG8D6IB1hW(lm0+#2^{8H6VjJ~V zSDsjdBi_g1{*B#V{NH=Yz=Tnf(u%-y{nu!dwb-i+YhD=t>tMctcw{ij`gFJ6Uc2d6 zG7n@)rU42x4$9rj?I8yzo80hj)ZdOmq%{`L(9?q$mNt)XE|M;Z==0hM;I@p^r_F(X z(Pqlmn$FzYPN`922W8;&noY1UP0!32lb{mOoI3DhOwBg&`gm9)R+TQdgPuN!7EZot677dsd z>*U;1ygvT#*4BCsK&p`>gM_J+F-rYmFz>??*?Vt4OyW7|{6F?^Xnf5mnvxd=V!Xj9 zzaJ3|3wui;JkelqziP?XD;1chmGw!S)2Awoy@px&c$@$gtInFaQ z_yPIs&hS@sVDtYbV-&#q?9LpCUe!YVHB+NB}pvbfQ3x0xL^4XbEkAY`9)T6a9WgiNe zwMoBG+}(IfFa+SDB#^6y$L~9=Mvcb&&ggTFfd=>gX*2 z>Wj2yEVhh=bngF!&QplqqSK{AVj*2mdIf|&q(wEvf5w-(R-eWcUD~}(HljvH092&|H)o8i7 za0Vp$x5jBbq&2rszL@+$jw1(;AJjxT4Yq7-9ZO!YuZMyPY_gDv>dg2VOCM<-u_s;~ zd)zp#0D=aI8D=Zy$4tuKouFpl1%CsbqlcL*hK1v6UOs)B&a9W$Z-65%oH( zfQfAeK}dns$GT9#u$03q$9}h=-UYha?f>@a`KY1peG?^?&ZyXP?a4RSRe`~|7G~qi zUGb9Gr*A|l&+aW96+g_1IY%Z_RqQA0DhP*i?lan~wS{0m_8YX?_`q*cod8}ioT!2a2^^jCHCMM0e0;wbH(Soak4c1-;vJH;iruJ~-AD~SA zAdr4D@p?%9j0XQZWp2p+6uWv1fhWyUg9V6Y>@gg?a2_jzf-_dF)NqF_Qb-?MJ~APr zG;MoKt!`I%7lv5e#>|wtq9o6HHW{9qf~)R;T_gSM*}y?roWp-l1^sL|sk#FnFxjgR zH$p5jsafS|XVfS7pOj~#!9V3b)@?SFxZ9juw{pz;NFgUyyUKx#?6KFi$U$UGN)JjH z0(%Yi49b0M0w%+gDs^rQpZMbUW7;%xEoO!#xW4mq`M-L1yc*40PH@Lfr#0-qEzUFE zsTlW7qnCJ{_7;d3-*9WQJ|n+50A3Rg=aL_P)m6L}+Yr47<2`=L9TxHZ@m)@NB`eqo z#xT<-AR8`^)Xrv`!WxHD=2U?^8%Mf=lhYrn=>YV(PhTOGYuNk${pFYzraHy725o^5 zzx*?;J90_sH1cM}D_Fp>rVB$Fdu_}(+XN&j+o)JeJ|FF_Yl6^wgceaDoNLx2o7%N5 zLQDD)1n2uPUc|}H^pra^9%F!ZX4puB7N|@HoQ#7S6-^M-7b^+m-bsb7c*^+m5<3M5}JXFqkT=o0;?9cYj6S2zvWypQSzGd-XkIDLz=ovaEA`GNX@-E`I~{61Q!1p?RU8!e@Yqs zYB|5M^nf41-}!FIZQiM!R*BZV@uE; zJ%RFz@3?fbxl6;>N#Rb0Rr{+T^5U9A$= z1zHN<8_iYt(Q`kptS~$m7 zOR=wdTj0{*h_Ea;S4>UQ?0q8EjN*yHVU1GG0}CG5WjVm7LFKPar`_ZkF1$~H=3^|# zhw@+2CX=&bU`Ajw zfTG*;7=N^x-}HI@VE1O4iPKvkQ=XK&ThF4zrl*eHRwEt|t%7&3z{AJwexr*YY74)XPAJw)mEpU^haa zD0BDt9Xj788ykHwD~I9Xw%8hU0=sZ$*mEJ{@YebubpI2bFM}{X6|9ozYK51wiIOMlBENn6^1J9k79qmbZ>74;N_G{NB2w=7#J!s3 zzq&&5-*^fEBPN4r)ymlfPk)A=8!}NIFY_x7(!;DO~cc;4p9o z0HaoI)#oaXpO3()IcEJLoum508_6kFTfl*Z_u=_yiM2{WJ*he#!IjW?m>)7A)i|@w z3WBXq;7*LgAm!e+^2MX}2L`nb>sDRh+8JjUJH!kV{vRn&@B+*hlLVPz)d3Ch(+ge~w627b9CzmQOr8GXKc#tyG@g&kxz->qEJ`~|f`8J-iGqP+ zRB(MCy%-XA9upgM9J6NmRj%PAgyWlP_+KsX*w5OHH$pX2u~yc%vf6P`NYvvm%-yLV z70w8dKV-!|Gex=~_}9WOQ!WKzRGzmhYhHM{MCUtPD8eNl&=vHrw8tx4XfENN@n~bL zPKItMqzsdFp{@zetO(Y%lRlWO5Y>d8yzXiibv3H#X(okwJ|*?=>O?{d?1<&aek-~) z?nqE1Is&%zS`b66D1}UYSK$DLr0BID8V1Xj7=mcOT#>KW4Oz#@CENDm-hVL(@NK)H z$~G^Y>oiB13z@T<8~3Bdg=||(c;}%81?Z}x@adGdQA+3rL2It18nFgyMU-GEVeIt- zq&H`0C9oFU#6<~Wabimo3t%qpLMF@{IY1tEc|)%h43g=)Jz=e~#CmbS7-n8q2-QIc z`Qq^4@U^g4i(xTiiDKK7MGE;Z$4X{m;-A`fTm_ylM(V%Ix}F0;Vh-+viL@0N?LzQz z-mgu+Qz8>WjflCn>Gx=n9h2JszR0rOWq1HGDF)t9VlxxJ5$dLN^P5AI^9U(PC!5vV$O&t(0PIZHoEAJf%EoyDLzFE&wSL#M^n>@ZMzt4_k=1 z_**QP-=`?3`LI6TVn*#Oy|-?Qta-otOam{J=GgZA2<3}SYGS{oLx=Z?BKi&&l=k^~ zF?8a++mSv>+^t{}G|)yt$}knC(CG=Vorg+N#rz&gBYDQT3hhK)IM=I_j(Os%w(ik2 zMSH^Ooo|XrZqxoO0P-LGtL%pNy6$GgEA`e>&zS#mKPqv#VBT?13&h)$8ZUK*F$lS@ zyS_aNX}5s|!h0*yEZj+jLViZz7PSh8uo^r)7`5Sg<32OWg`GiM_~|VyKzZ7;d68k+ zY(cVvMA~^#X5il%%8m@&1%B;-b$SvxZ;f!Y!eVC=f!fr4U7w4*yqEo`JY6>U=CzlL z?O}Rsbw^+aVA`f=$Jl1gI12N`Uh3?M*HN2&vkK`X$|ac~D_;j05i%dq4Xnk zOfCZy`4ic@vbEaIbO0Tm437-x)WT84!-a$g9c9haIEFFu+5UP$syPK-#fOx*71i-2c0#}(=Jj8lMK`9C%5Au*1MPj z_>2REvY65Y>X&G~*<$R)$?hh+<9(vu&y`9?gJUNY|4MnKc#f8vi1KH`vJFNora0;e zg-`afof3{U&J$j24uZY^)UJnwm=uH%A9OZGNpDo$Z{T5K=W5)m97x_v3I+uS#B7Ca zS7r?gb_i&=jL1$>K51O5u&-zm;UWX)9)8hspf}Vr|xl-+6CB45l(& zlGbA(!_};-YIP33qA|5El*RPE8WlP!^)(=W6XEDe4vB^JrOYcn?U(*b_EjfKZ$4X6 zn`ys8DR+Lyjte`1KJ&Vv{$tta+#%5pZ5OkHYWeFd+ZDNw^FmP8DY=zlCHh}v8(YLF zm4fBe$CiNkLT2V%4?Al7;Raa*3eu~iH@tng9+~&a_=xg5(f!?Mn|yxG)3vVVF`=I5 z03{2v)^s~+(%sK~2aWbzd=a7Z{<~H68kH0pwyR)kDRBl!fb%mWp106@TJik&XE_8T zGoOX-i$5x)+r`f)DYaubh9YbvBc+5YQiZ0peOL@ADeCJ!z6PI+y45Ccrj#+0SUfpXwk(WS?(Y!S-OA(zTLi z+D1eu+1TG`xkWM;`VIXRB*Lc59myGW5PaMPz|BpK=L`cC5YR?T=e&!-$fr0+!uMh- zp`AF8<@BHM4d+4F&fp|k$rAHDU5vzp;jPo!eM41|Bo45UV^fTU^xx3H?@;=XL9l5E zRB=?UlponHw3j>okb(=x5r)Jp+nzSf7JGYNSSOGO6IOuK42KS-E($y%XtKu(wiQt& zR2!jm&y|pq4gNGYKDM}0AV`aB#9Zg0ATZOXhV*a0kIKLcX^{?aF0{ddbBZW|GvtcH@u0T)I90Z58k%dfGW z?YL>34TRI_>9|Sd)w@n&s=*u=kibi7eIVe1Xq?2<^#XgG0T_lKF;J+;2BL0a-#;`J z)qKuQ;?Be>=1H=g-Fa<)87@DRuGw*RYSN(qK^ezo&zMn2gK&-hYnR43$N`2HZ~unSy1&hfQ*VT$n;vprn>M^5G+f?KXOABcqBEgwfD~m z@rat?u)^>T4?C`(X<3)~8xfr}t)Y&Jaxm6ZMmcY93V71O?}y)9t)rVhacpw%Yss^*^;yR)h(#S%23Q9BU}=$v_V}qqgElq?c?)K?qUT^Bc z#H#b$z157NKl$_HqH1iU;YO0wo_t|ZqoM+yI5Y^eX^pD_&Pzwj*FRYxE^BM{cntWv zj=L9Q;S{C82aMO<@0DKkIAhE?$}A}A z1^toyx+ojBAkL%g#TQ-P8_#9fKS&9Th30rP8?9 zA4<;Jp`xZB*>z7nrYF8#kCNF4g(YcsTH9a+v!7D@rii3j=S>#hkTv5i<@MBB`lS5Q zp)%S#pW^T(3PJdjvkwlb>G__j0OueuyUG+5@_3y0Wn9fa!EjhY?&LZGV*xsES7>C5zp+YB-=eSaBfW`Oh zrkK=YiH*kaYf4`#wQwx8H$h5Hh&AlqFO3pG*ei^kcF%0;4AxdJ4ypC)-CI2&%rL!P zg!{^jE#wLvY$_0(y*l=6u>PkvCX`NpF5H>?I+Fm8U=R@rN7e*JD=0N!wS3rHJTwsD zGV3E0cUzQOZX%>y4ReOJW?iWZm3{zLI_Pof-J;~6qP0-2`>dS^b8Gk&EaJgqW!f16 zZS=YF%>Mwbs$}}>rz1JK2u{`*=NHlqy(h8&bg>gN^0P}|OpI#xqKCzXum;#Z$X!Eo zLGN#RBL9=v}B7)S%~KgzO<8 z@Ci>hqB9MJ4XA5peX=}^mr7!({=PkA`D^$U`G~;k1^vNq#u%@y$V1awo`0k6%OrGS z-6_<=Q0lTDWB6>mU2p-H)DJCX=MOfXbxJUd2hA|Fq=Ya$Lps&C32}FW*GSMcnm5oB z!>v_k()+UknVLc`Jmmf7NOE;4ATDF3-%6D-+07gD`ytB}mueIAGA~O?B|D$fA5JsR z4G-8N-8CEanQ)x5C^GjO7@lySRRsu~SFEyHN?c!sQ(FkJad=1jMU@OyBnJH2OO3%F z<@A1Y9{x=`_#5_5Z8l}6by=m?>NKkp(4A-0y=uW92JuN5oZv=-k7sryUa$ryQ)Iv1 zJZ78<56YaZxaQ}S3X&|q42&XV)i$sW%)(+J&+agzcDYgfI~Z|*H;6kOnO;p1%TjJf zd~+AGI!jUh%__i7Nv{UPPsb&W~Qt!x!DB_3*2cpzh1j1oq)- zIFbk{UY{T^Ltrk(E5AhjX6t7yt8*2~uCBX;_*)&W^kC{km8lYO@oAUhvZ`p?$07tA zl$a~1+wt{ZY)@3Ev%F;W{YLo%`lQD>#x}WtEB1w};`xAxme4fDL3z*vSUh zoPj9?Izfiz4`_)4K0I90>e*=KC^lU_{ zedL<~A8Ay;5D*iS~Q}aO_S6EXRx;w%<#I-?7M6t4>s}DGq1W(u;%8HdhmZ z-j3rPByPA$je({Xc#nFP-==rV_@J;Z3EnZ2&Um$l2U&TwE^>UF*K>%Y_T}AjH$$g- zs=yuJw-BCaUssYnQ7R&1=bjdt;&Z;F4y#Y;Yx$__5obu2GC4~+y=v0lNi@|?sV~Ya z!6AWaqJ+*yz8qKE18xpVC{NM)aEaCI8l8Pj_d(-CTFAXw$i}Y1%i>pS5%YNTwAdRI z+CTRrr#=Q|l>PXJ5|34A^Y7>cI4gkUQ?~J117@7PZu|Ev%Mx?Z-PLG&dN^b9lC)uu z3?Re10@eh>b9yus%VnhDRZY5HZE4gISn%@6Ah%m zooN}T#wNVAe5Vr3x>sxV){FsWD|$a4$LXodlUvY^^Pd0Ef$Ik&t?&{jbh)kHEt5Q! z2+p~f9wM`kzl)c3ji7kGp=bm-ZG0llR7=9=8XU7GzmKu5DDa>}=G&?VuHUpp_2(V3 zYTp9263vqb*OMDK0@WF}eyS(_M1cZ;(?@^oh)_KA6&*%2uu2Mcsg(qG+R+!t->pk2 z6-5n?L;yEPl8f9|wgERs;e`C~K&vE@adK4Gh$MyhqSAc^sd0~6iuTYTfV0t$w2WO3 z;tJAIR{{RbK+mSW*ypF=p?q>$zscOBhfMN=(gD3qR?A~TI zd!|2<#};sBL_THsl~@Da4Q{UF=?(8f)3#$J=Mwxvy(qgdrEO^;|39YAIx6Zf?Dh&s zNX>vqcMFoz-AIQD2ofSC-Q5EWof6WZ0*XipgLFuzAl=>FdC&NJ?|tuDEdPQ9&YU^l zbDq8TXVYZ}F21hh3Xrwjwv;Ad4*DHQ9QG(^m~az!LHuJEs?sW2SsK^*u|*yy*F*@* z!+>)Y-HZNA5oIv1Q}M4D!m@dN4?E^1lg07Y*uXJ1(~EI97JN@7h{i{V_5?~|J96)q z3FFxoH%XIFxb|$Q=UJE)9#NHE7X{>Hp!GU1;AgX6OF-{qil~$LUP2SeF)!4OOr%i~ z{qn+n{&_<5pn08;2e37C0o*v`Ge|IXz12DVi%_Q*h&nE1K3|K;lopo%6Z)_Vyb8$< zI?cK;8^*2jfAaN{mtWtta5+yUYSQI{m+0B};0=s(O)9-~A|P%H|8It-LCT z6C{?AaOnAS9Pn@@IRI$DmY+!P5fxx~oi5C!T-AUVCXb~ouqjbX(HadOO*RrYayRsQ zHBBCfQMagEl zGxxRLtA9U{fcpBs)XO3*g*6g~O&8B;B+d$Cp9}A+(;cVPUef$5uqEo+ZlTFfXZH0#MB8;`W0% zfiFr7^pKMJ!P};Q`{i$cKh&%D`e^_fF~3Y>wuA>AB5`@!z`8DGK3E3ijX%J;!>U*Q zso0=K3n+6;$jsHV_almc+sTHs!hcEzv5uaN;ex(fEt%cvnw2c?-FWc3^+DQ%`Wz&n zPR(nNR{NA4$sb@pPBN_bN;?&C-ArQFE0=A!K2)yoQ=%D3dGhkfAQRFa4{AeHXT7$b zK37N5M?stf_i`IK9!tdJs97es0LckPu|kk{0DFQuvONfdBocv4{XpmoI6eqF@BXO< z0wyz(So=DAVu(UHo=z@Ee9d60#<>6p^DOJmlh$DBS#H{a_doB&e@i0|Xq^b?z%*DH zEC-DFpxWndj4d-^h(`JY$D2t^3y>fH0Wz&3Ek;m~pfh-g83_M8S`;}y4Wb+L-KuFk za{XCiY}B9*K10-#rk@N$E@NOJgtDF7JRDgJ1BnJ zV73)_dNP)>lXzTXIW3Rbn{)=0SgGt`s^j$IfN(6Z{P^eu2pNHCg9Vs@^P?z){`mL< z;iMZ7XqQ{@C6WODH|@+P4AV9@%Ti%#peP+VM8h08?g3gXV<~$_ZySz#OW^5`$gD;ZkB9M@NC0L%?k_kAemAh>G zDeUe$1iNSg(ujWs1mJjJ9U(Enm5M3XDbo6l*@J}il$g&8Ld98$JIFaC@a*9^713@7BiWHkQZ)m#my_wYR+*y|?x1c^l@vrI z9zi}MFL`Jyz@?%L%!#TJ>Egb>E@Do+K?rg5pLmzb-3q^DmGT#N+fIG=2;Mb9n8(`@ zia7_OoX!;RUDc1z;sKCgVAXzl5Z(nO4wX@RAv|nC%JW&_?wtci!$G$>|GRptt6n_U zd9@b{6cO#3_G2NIDLNb!=b7`>po7|*se99Po)yp)c4RidQ306S3*=ugxbV=?=9c=OFJRC!>6bxsA?WRfX>~d?6cwy{)<~A zW6w-_US3f_5&>dI(et8y*BPBBc{1<`r6q^{l3lD|RCp`syaQ|+qmZ#9$`vVlrLj_0$9)|`0S z8XnmhGp^KFE>u2&(a|QpVFVu;c`#_iLTpmMVZ?61ECKmSrkM=+Q&~23MlY2))d0T| zuQwq;qbqZ@99D1;)TYjegs;64H6x9QFAoj&>wg!dvG51F9quvjo?`I|VSWR!w(&@f zw9X-jm$f;19D+x2BUnrHJH+~rz5kUyVP@dm_b9=&|L@rx`Ea0!DZ!p=gzb+o*d#ZU zpW&_R8V=cL16LhF%`uzKW$~8&xPna(z}$1%fYT!q63Ip+z(|+pN=zl>#9&zqug83g znXv5Nei0#QEBD-3WSLh!W7$8sdS0o1tE3i%(}_zTVlf9=10_A|$oZ#}iJ^pnX?M`& zb3Dfgr^V5BZk2P3v73$L^cBa!@|mC3V;`4fb0P$giLKmN=uafPHPM+ID)eZC)6Trj z0?f})=t~zM=H>SY?_Zk?-yfpXe4N7D0UXF&3iHwEXzH@IXin}Z_h>d3qi!||vQ;vd zBEH}c;R$x!+@L^wF8YJ+sW&c;JJ9IgC&l2P`#Kj7{O1@~Z?o$l9YxsKi~PWyYw0{m zZR24h>&G^#(8@PvK)4<$*fC7rz2$B&98-z0>)~%yH5U^691|fZvl7UpbUz-YJZOp( zlIr-`iK8Cq4_{Q%ngU99Tgo(>W?1nAsVhn+%;U`)x*KY2FFq|EY|IKl6GuAw z-9;w1qfDN`nEXGud=c=Cha9;X{)l{N_8SYftqFraR`)wtJ-z3^N#|lcKUP{e1+btI zD^etK?~Ymz=-PlYrsME*%D$&Fo?aDU&bIz5sMdR$73(0EX1l^wa2T&@cScwli=y79 zbvHY1+7B{R=-!g)tWpOtc0^IYUXd=8eb#PklbZ=WVTV~&5#l*y5MEBL4n2s8E}cQl zJROb3!TeiUuoIkn`M4t(p_poiZB|-SPTzbhz-7j9qR$L47rqs&)RB2!yd?j|4B_L+(FY9?QH~jD5oNxfHr0?JMMUlPN14Du1 zg_IZ9KY+l3{Xo{hAP&yzcgBoDlw17+oC_00NUK>;kKlp<>mi7xfs|fJv7R_(q{_>` z;0?u)34c=-#1&O4?+NKPxX(j@Acyuq$)Ks7tUIe^Rr{o_0ZVBVzu)|F;YQ(>rf!)9 zR=fAN77iPe)<5`a90KdgmmfqwXtUYG7|Q0s1*d0tK}oO>qr)mK1Hs1()AGesY&tI5 zzgUsc0ih0}0OuW`5#IU(oK9GGvAOXNCWwqNyHw!TF_}`*lM|so>$Rm$zv-otTT>``K{jt$@DVj_T4S1`%oJjNGaDQmtk@csD5}>m6Q6AhwOmM3 zyXH%>OkglMBKpls1S)@$=e+@MT>ZRw;#|2$f&2Vx3vIZp5+DeUlJdM$jOcN^J3Ss& z$M93Gxm)%OT0_BZ?6@s_I;{Y;qRStqaEQHaLdBOgKwqc^N5)mbyVL5%E~DE+V$aQ@ zf_H;CQc{U-rh!)-8hIj#5;s%J4cT3;xlCFAru+$I>xA!A&Rbu0ko|g{*#UGI#`>^G zsWAgKxrfBb;6c&(DV#7k1Fm$uthjQw0Dq)5efxtYEfbt(Ql(sB&!q?G5aauKJ{Fm6 zuyi?N`MO2#>88`yvRQA@%XfxVUXfmw)@!PfHL*{kcWu`%Kai`*CeoKX4u(+dwA~CioP2&SsS8)9?;y^5 za#W(@Hx1=VK@8+^V7cDflc`1TbW?9Iz%+l;G`3JAE#Vpx1Kl#hgDqhveD9-6S%wbEm%_8%=Q>>zu0B>WzuI zs!tTgY9vy;4XnBXE{jh{P_tmcjS%NkMAAi!a}XA;ENbamp+2?SANY<0N9BE6XbDw0 znTlfWo$kRzUtgc6YUVFITBeU&+<{eJ`V9`^y9885jkO-2_R30WlrtL$%yjX^AN~dR za0W6aX-CyX_l!A?vst014%B^O!d6V@H*1E>udn0d=mK@$FJxtgJ5AH;LENE*M&3Jo z&PKS?9i;~H>aZn}@0L_}-QqUmT+aSY^{6|o+`x@8Gy)tI5h*OJQ&qPNybY;#=p5f({-C84aZff7N?a2XUBg{%5IMB%>K!?t zdN)~VOMN_1<80B_cObmiY#t`y0bD9lT_s#>6QOOQJGhHkYQJR`PXuOcF3}ApKYuH# z@N`~<6Hw-U>1xv^QHw-<9b(0pFNG@*LHeuAc0RY)dk7EAB_gl1a^{dl1P6L zdIbNr9LBiKXB%KS(1RZwiMeTfB&knQS`qAqqqwN`*%m_PSUZ`~RZ>d z5be_B)b@j#h9Gg7q~kG>MQeo55ZoJ4z9xIV^H#F|yG{zY+NTjC7N45Q_*5;{L^jS$ z`}G85e%B#Jca=HOb{Kd-ylb)TSmP@BhAslt*Bj`81o$LyGXhzb!dQnjG(tZ1+lFQ7 zhOKRBaMy{JAsWht+~J_}nzXC6NhW={F#uZj;$GvO_@KXozFwjCC0-(p8)z>gq0lL( z&S+GTEnCAK(`AaYOb0U_&H1k@uiF?%cI9dYmS#nN#tT4Ru)Qj_EU~_>;%4Q}*za8? zXZrHG!}Zhi3ApBz#I|nZsmIaJ=4{4<3s_|epFJ6=cg>hG8*lLU zjQML9dFe8|`0uGmKt`0Mt@<8qxzbF2=g;?a1NSA>)zIC7@A~D@`x(Q8$+a$994F+@ z;>?s&I;*n^`&A7o?FYBp)9tZp@bF2~-gwvzS7nYF3WQ$A@XPx6?ajEqyPX!AXn(V$ zHRv7Zd0r-=46vfhVMIMEJ7Y$%8-kwW4j8gWUic3{44;tE%L#Ta0&u){zI7D+n-Q;) zu<_Az9b6<|Qwn_-)A-;BVAdQ8SGgHxHAe;2VBMmHa*nc zl;ZSkheVuX0+YZi)k~7#7Qv8IgQjJCbah~eC9lMtzCs*r;1|bgcV)H(5N1E8N34F> z#!keCyEQXVl?-3^wb9{zFJV!V4`S)Er{qL4+&zP6+cM-MFM7g-lsip^uih)U5_L*4O4Bl z)H)f=@Dsb>p)EJOC>)8}H)rValH*Jv82vW>mjvDWceitQ*q2e|^ZUC1eK6!h>) zPH=S=Rz*|(5b`-ZJk95BPzL|O=T4I=BoZLHQ^nH$wki<=6TiQV4l?DiB5Ox09QU2g z_zfLF{MQHYTiG^>78vjIp;N5Q2umsWb`w9ml5ppfK5`$c(Eu)~zn_*5lxtfrq}N7@ z61&j9V0#MO2|2&37hV?Z_rk{zs!zYXesHKfE9$xOR$bR0y!TzebyV!*IZK+9Y0SSR zM{Hzcw;oF+^hC(1Jy|O&taDG4JIC$@-Q0XjUcFQo)c3L!(et$&aGJ~(v@c}*sUniA z;e!8FjVHhnUMx4}!Zv{gR_LPBLQ7DUR%wpDlf2Zo;&prOW)ssM;+5$md zk{$Tw(1=hiz4;B3{`{!P{z#SB?vo4!;DzYL*__n4maM$jU#$z`M|$`a2AuWB3D5Nc z=;NgBG~$WC!5!cblysyw!flo?D>c+V$IsddJ;n2l-hkxwU0 zzB><7ZT3D|mvFyj%;TYvq%XfTiGmSN$!Por;v*+r)i|7eJKeX2CZHk~SvY@KPBmr0 zLz?#un~pWNfK_0T3#y7~WE*0!ON=Zw+Khk1eM$m(l?Gdvj|fNWC^c?Ip`T57&+_?d z!|&#jbO?xz;`lVrhGXD$6vT}}Do*)$h17o#4nJZneUN+o6^31QEU~8ytS-I zgYk4K{H3T`I(Vlo8rp`<- zl~z-2QT@fJN%`9iEmyJ-5Y%G{VR9ojYH}}XghZ%W&SZsGuQdv7cDRv z>awAkrOR2&kYkX&x9raTaUJL8>P#TJilPVQ%)FfgqRc^YEcEM?RDIl42F zq<>ien-F8S@y?H)AhA1`hxVMFpmwFHENWf-MnPM=Tk;pJ`*ml;G$_xz*|s>}UywSJ z9~pkB^M=SnU7~O|T7vF;>gG^_P~qi2F(j!I%=rn+&aeJ-92k^pG)q#=(1*pQrtesG zrbuM#ak^*KIgQp%i2Gfqx}!e!oB5QMRs*~8IBo9Z6o`dMtbR$mACaip`^;>WNx-|N zZYNXNin1?vi?EFHbq*ixT}@#U|29A$I7T70;}~oDK6c4u6X9%BDTQKE2;d zA>#Y{>S|r{N4;7We6zWD@Zv=G5OxM>4OU^fpIWZL6gkt#im$eJeZiPAaMIfvQTz0c zf4so4)bl1$+?gX(bm&3Os69+Q zAj=9_?$1;|Tw`1Pa7X;3;nce$RXn&dzC>^XFq{69VU$i6z@?Jw%rvbz_XqN!_c&|L zk%reTXfO@%i4DF-;nFxwcKO2_kR@d(OQA;_+az0WDa-(XQ)-Lw)nuqWdb<*&30ig& zce!%bcvt_4h%TPXZZ(z+CPRLZXJsYiavo=+3(7dpPU}4uTH;9O&#u!Q52h>B$@U5-LHB*OfMAFhjIK(3jU8 zVWw=>+d=)=yTN9OVSf{QA???K{M2XjzSmAul3wrjcV_3iA{C!dfA zLouoZ|GTa1EcmUppOUn}-DcUwk>NU zv45yk>lyw2Ib*B?lHdtxuDRLhpzi7ZAc6K%Uvp1t^%jGQXJL@`IYRZaR&7T3@SISc ziO^5tVjVSYP3)5{BJFNU`wmkNck{(k4j!ZA+}elCFh=QD4X1x1osLRP{**eJ?%n^6pxCEUO!oF&86L_`jhl-{ zyArLzR@^eLR$BU{10IthW>+PQhZ9i>Vh27y7(OcMWa$17Kj`1sRzTw2fW*w#w9$Iw z``*b4d2dysn@`J_W0I9bYqQMDhdw3?5HY6igTM6o?X-c8O#beua5i=MkRp2U%A!S{zabrfePp&zm`v z?M`<+=cP8LKU)v3O?%L*@bBA+*S?w6zCBo;dpGlOo?H#B|6h^&-Q}{j*5~&>o7^At zg5Z+XY+XpysqA#TeSKPS?~brb9LDW=DYFkT-s>L<1BSDHiFqwfQb z@Qj^OT-RNSqI`~UNhMB)U2s?GJcs3%UNKp?lI}HkFgCg`%~a|+503)<1eaBGtVmz| zt9Q_e)ZTqS8P)ONcvY#JQ?K-a!xqgVMLtV#s`Fb)yJ~u;ME13}Mhu1J>dzIUEDyTE z`T${5{hi6`Gqfx9x+*_pKfsQoi%x&`{PaSH*8;6xp}1=0w8Hz0 zV<{tMM4pK4WwM0mW$MT`BMFuP{0eV2&y_FV(+m!(#%2|K@JVsW`4S!)`ZxVG7}KYQ zPPPO?=6>4zeQoHmD|E5Cm1feT@%7zPtC{1+>H!><|1U@hje!77N?M*?P=Rfqhw4Rxk7otm60_YWJ~SQaSDgA)y(A0} zMpD$KAqp%%YQ4vfgX zLP5R6E*S9r0(Lnsr?#rhQPUR1hw}F6&IzDbhd%rI$(;=U@*W|srIAjd0tEmFNF6iB z^4}By8Dy2uWnF`JHc89S`roND4xBpa$|AbLodq#=e%Cfjxy;sCB|2{1ZqLB0-cQN@ za@#U7H+S0@Rc$y$6KfHwHJGifcG;Z%ech+hu%XT5jdDb$9`}u%QrPgx&-Y`=p#7^W zE_bZUKMWuL`_p z(TVBl3tRRLzXd&XL{`+EHD+8fc5!e2wCJY@-(U;Ss58Cd|MA0z9Vl+6XlqP=&bn{q zY3%%-D=!(|`7FYk4&goc;@4XYfuF&~+RNGa3?DP4@;#&N)K7sHkH*^@v!QFxat}u> z4oT_noCaJHgUPVkw?;OxkPRR%eyC``h@f^<6@mP@thM*+yO5a~`7tM{l*FEP{Hi6` z(s$`;wc-srZtqpS#2veHT?4}6%&zF=7M<0fypTsHmr~gcH&LxO6$eYwcFgWsqFTRR zuqGN^im2}w;J=yuR?TeA{K0gPZ_J}Zh%=;gubHurC7v&7N$96efrm&A@_>h2YRE5H zY!pV0ms=_~jG>*LhzzVFB+sx1$nKzwc#NmyRbBzDDE$|@;=|dH>wX_|87+Dxf>$7z zFluhlCH#rBg1*jGiK}S#i!OEtll?UQ0;%JaD+7H7L8y0E0wV#oO(gL}+S4M^*d>o5 z-m2i?iO)cwm9mvV*l(ta4wq=BmPv08+v1P5hU|v@$}_Y|sU(ws%&toVXoP&U?Q8v+ z*5dhila*GcOw8kh8x-`eQP$~xfrBdKTv!3qvrqmRIg~tJc*H2azV-`u6?b;N0>|Ob z=HTZGZpj>aHs+hS4d#V4;S9Z{Y@*J*Q&qkgCjBcWd-6967`N*Dw%2@h$J@Y*(Q$X1 z^y1LYT))zCBRnLe_2IzQXi2;RwO3~?sd{&;sC)mJ)0yuXxn}x)@87Rum;_nhJOtju zVnT7Z#=4B|u61eV4yvcf$_+trirpY+<0GpNZ3;vgI4z4qyc1ETj9v#KENHy;G%_*;%ZA5kY^ z>>bd$2#*`kZ*=R_ zWAA5LHBsbj!7H@n053h3K!V-qvC~ZU z*^d`49Fq#tvupDUdPyzmkgs&9h0-j-k+u)8Rr* z`Xx0c;!24G3~73yP$=LoQdqU~gFJ%>A;(AGge~Gk1>iMNO*JP^NO$@U94o@!OV|iF z5*ynNffwua6aVFS1pH+@D4-qWyBz}1^l7$ww6}m$!nMeAQ3iFsNascX z06{9nUy!%1v?6ccEZjnpdqjIFzV#JE@z#Qnqx|w502Xxqig?@|9e@P(J&?8QR;6|v zj?ica)`*u4XYB-CMSa{ADn#}wNMz@~Pu>44*j5YX{tMAA!iV42ai(*8_hv|p#Ejz{ zZC)LQTrPy3e<02hpqr=N3$;tM4`r@k8T^24CQ)S)s@o3`*U?j8ONyKIy-J%FJP3{JX*y89y{^b96`$51Xu0hEhCy=1 znfKOhnQd>OBceZ9sKOCtkLRLUIfd19vaerp24PY!>T*}Vb~g)wWCjY$G*JsKlhMDf zr5zg%Rd%DQ(=Z)1cOn`68?K#nrLhO78_w*&(bA+h zg~QP160@TZXVxJ@$k*VD|5XyZ!EF{a3!iF+wj*{gMK+GU_iAL>L(N6aLIMy;z?6xp zSx+Y{bQi#Gkqbu)Wr1kvL6GxnX&(9~>L9AA_mNxjnVe7i2kanH&P`VQmn)fG94tw~{;iI-clHu`hnH9jw?% z%7#;)z;< z#T6FnU0J@?jP(FML!ovYU63!t2q2?8WF@|W4^lmT`g-rXCUi04h(f)dex5@s!B8nF zzi9S4UN=E^L9~BCFX6_i0zl>`EQgr=SQIEYcE7O=P;owSkIOa)pf`{_Q+h;!iie5r z4IXF~=!o+j`|;9Tte+j+O946kJzkAtu-eGKzZawxrFZ?WLAQG41CwKtcP>}=gClUN zO)WA@L%2TIm+C^(V=y9{B}24!zUK4HkR z=TedGw|;K%T)iD#`dIX)wu-d3?E}GkV^YKq6A^@&4Y`v~1}egLJ=jKMG9&)qGnfG# zriu2-UCZNr&0fP*?~P93{*$D2Ej~S+KJKl$>$nS+e9j8QoR#|gY=Pql^dT^?kq6ym-yRnoNE zxm}{ZvqZD@j+L8uoc3<;J4xqmS@nywo_Ay(U8Bmm z(Hl(Ff%dSpO)*7^11h&`+EVD^k8S@C&n&0gyaQM^XMFC2=T#&Y%_ZpJsY^n@gjL~C z;rbn+RvR`oTElhXda5!>?MA4|9$CN>UA(Kr5MW5LF>fM#%)va!G_UNh}CE;CfsSz zIe!6yOrZliyWyObkfJBdMg>MPFo)ubUL>KZ|T1WbW$boV$1&d zI4pFe2)wm_Q|O)!{fHr%Dc-@=**?d)0-aY|#eWW0*g7-a=Mrg4)^rEj zDmfA-x}Ym}xp2A4QHlX2w+Gyil)c|Tz>q#dF^PwwK=auVtk5a|elmx#!8n~tX$9$= z=zQpS=(M2k$=%t5Nie@5Eg*R`bdMLg?2KULNSXnB1nvj_0{?(%F%&@ZT%6}LFd&re z6evTyEqoPc(D$tQL^Kl|F(F8cCZ}s@`9FF`Z-^`Yx+Km4t zb?m+IIi=Sf2c33M{A}8pNmk(GwReU>{<*tOZIl75_PhO^=P?O=nYy3=pk z^TmuO5kcw|p4oM8#K60fI*vlfLw67QtK=Lo}J>h4rB& z!~izZ%9vt6a2~ZXo<+1P6l-a*Da?jB;O2xfh#~ZtiCmU9J_HNDxRIw#wyiR$HN-kr zVx%y^b3q_(j+dCJ-l2Zw?4En7$N@7M0&fCKD8qg`crL{Q){i{rCFw3ug?9>yjvYib zRop*Q6WxNYC}j2__m2cOU)=aZ@|dDzbNC;YVY$ZmD*EE1}GXj zQJvJ^Y0pEZD{-TSy44SmegVqhaQ(W#*$)!$vYP)Ad{#owXjQ8Kqaysh&hfj@SMa@qCrSA<9z8E~X^nk+f}SU% zS!%4+Z{Ij2Q46t+u{iKePRK{jvL{H{m=cXhq#~}nd!0IL-_wq833U}uxqwiP{EK$I z=Pdl_?AI+1OWw3K0h%|7RMgf*sYz?pJRFXRv%EAeYfy=&%vK0poWL7F4L;%DCeN;T z<1|q|gJg@r6Ko=H=-8Jw+xWaeSpm5YdkaSpLkq_uB zNR0puDs_@^smcOzRsq{)wimz9CPOp4z;-rWq|L1DkGTvt$1DtxjJmgqA(diUmYe3O zUVEgcq`^edS1e=qp13C}7Dek;_EFGpP6urJwflk($+Q|HB|r2V3I=RNEFwRzkDX zdx4!Lm)5GV-u69WDH^r_z6G$2j^q`zg`Zb+hjy+UHz` zRS#RRIaAMYc8Av-Qsj6K6p*(Gg8PX$Y3#lATmy!}r2h!$i@*2RZGQ?hnUAjOH)$>#i-5l66YlrBhr!N)oC?{yKQyQ5u@IKo? zs03bD?~3)#Rd%7PGdKu2Efq&Ar$7}Yk=#G1CuaAsh7Y<*q zIs5NT*6=O|Xn-t4{V$fd#VP~t42?Crl08|6{rSKE-GP9Kg4x??o=3-<Cq@}ZH~i!?GEb!baino!Scb-U8+s7TP0Otl&-$%MXg zEL!CGt@&Om=Va}vjG`KAEbk)o*7(UdItpV@K2esfAs-q!xpbrG7EvsKkbsxtm= zz8c>V$0U6YJtOUv;M+IkZt1p%Vq?Zzvz2464cLrIv;+<|07vjx{#zsjS@DJsR3;HsTnJ`zbf2zC!*Pc52m%8grO+g5PdT z##seW(nI*o@2>l`JC3O(d{)(-=+=9=()`6(6eoOOS>aG>8}pke6rv7Id5Y=xSe9Pj z2%ZRB*L*QD)7wKpwG9f`x1L$qz_J~vkHdC_6_Rd>%qncXG9j0xlSCAJ_pGr^ATrLo zPiVp-LiiYx4S+UutzaZcfpL?7#Rm_gFe>!6g!vfsOjnfQ++gO$9d*OR~fG=_HIvykGe6i{? z_LyP6!0t~gbtbZXeOWy3$w;@n>qL7@@r@p(%70un`|)p-(XMu?S~w88J0#PCC>P^cjBrz61KDN zZY}n|*k0jD(b1Tv^wc$1$*X?6{v}O;Z&q+NZ*RYRdA!5yT6h1Ua@peVmCeB5sCyK+ zc7@y4KWb?go7j6ZMLMPx%ctjaWj=or@UY9p`{h!rLgllp>AAn4pu%#fSZRB!zcGGj zSEOALR%zpt=wf*xVqfdY@K}X|RDA@o+n)YOVNZOOS33I&!`*FXoWr{xpG?4VM3-aB z(KDy-p$BS!z>HVAV^LG+$<`wOJ@-pc-09?(6Wg4wG%J~-toLJk%)q^VIb1rxm}`Bc z=#$gSGg#o)m|C`Ay+Lvs|<|_ep38r8bd%y*+5nHS8OkEZdbgrpowXt0Vm}UGIcxi`We~yeL*` z+#$Y#Q5N~5mNYL{IrZDstYBe=Heoz>3HVBh_jG1k(=QwPKleyFWEx$k1{&26m(mQ( z>W84>!yc9o3@-+G_wRR}%E^8{4i%SfEM22>mAsR(Det#9%Yp=UXR;Gu^vLSZans?bQ$K>9ZSP*yJOmKi>sI5nPoz+SkGLZi9DS zxs=vkWK7*ORH!!}x}Ij#)`3KfS;nnTzfiD)EweHtEkF@{T8HN#c6p;v_e@AglPUv- zcRlmx2b$6dJQ}COkGazq-hTggfCy-{njOxNve1Ek;g~f~5P{0E4*PijlfE4}lWTo* zAY~Mme=n!4Wu*+X$MVv7Jg|pU%M>Vojv(~oC%|d{aR!4uBzi*De7C25r>*9N zdbewQPT6XQ>-17v9S2sMBq*VmV>97&xGIt#WY9b3$E$4UzhZWDW@w*deOXz=bNvC$HR0>LLn2>f``-6u|0qo2(B$3s+lmP(_uhLSjsc*V z+syTpp!N-r8<-$jju<@awylKv2sirIpqFd}?gq<~Cn=+iu8BD!9eY1!(lswKMkgyj z-HFr0%cY(*Um1i-n)?_U7wC?@@I6wPLa+&f>tH}nN7oxd-~mO4q&bcdyeEmr$|cv~ z9#fr0j0#0_H92ZYj8Fm&X|7hZ*?((8;2 z!W<^MLJ(ER_JqV+fio1=m8Wuwt8#+2ZPq!qUFp45=f1Q_d_5XEh(G(-jbo0fwj17xl*e$8sg%p9 z@WTPAPs?Z6ANcr=BKkNaN?x;?ir*@R;?(!UC>n~r@sG+uxkly1wVzYO@*vMa_P45;pSRy~jco7Ci{{4#m4~B>=>~(k~)pKq6U{ zaftpqRN^K{^!AMTb29UIGOPA0FQXv=OHYahC_3M(Sa+zLu9o~Blrm)TTf2~Q%X4KWPP3sLVoV1z=sah6( zDBP9j%h%bW(~G!nyhpFK_Uc$@$vNw+o=doJUQ^6t(JcO$#PYfisPWTQdSzZg%p@5J zvT?5t1jQ)(7f!#kkcQ*(MIr*>ArL@R!hCr;*=sCdCxu3AoHK=INnbgU@pXB_ES>)y zIUPS}qw$5TLRyN?R|dQ{8`fU0;1l+q+IV&`N2lXJ!!!_>D6d9LN&oRr5DywbM3>%& zj{h(#u5R?FWr(Wm9LVjEl#$ZL?m;ghKh9MpF+G5nQq}V!{a5a;;4O%le$=U?F^|jl zoNo%0KQ}W1bT-^iA4@xwFW$H_n*HqP;V$J^d<0Bt)m;~u9IxtD{HGUSKH%wSnImq) z@~RDQ6r1tauOfC9R1{3G~d}?J#4qQ{dYMD0Y_fAM>9q&FbvWo?=~EH~QV6%nhSUW-dJX zv~z=43!O zhWYcKxk7z3Ia%Kl#xm)zS42d3 z@X_xo?lq;t(!anB0Sz^jzF9|C*&AN;z zD{bD?gxqfP{{KGtd^Hy)Aj&aoy5(QmQ+|Ha=>eVYs{P|)$WC{^Y=NeW-y>F9mAaY} zk6S)-AAT1wn@C{%Q=v|cbm2T=*BFGSfPnRfGE@0wLux zm;{IKv>9{Jru)+QyT#mRX;JH>>b+(IWDgb@>zXI(%UcLD3%sUm*RW>)T8}2-&ibik zKHQ@*&sjK0G2-c8JEi12LAOc_6PfwR>p}B=t)KER>}u}=m6-Q)YMB|KuO5qSmnA4hYxPx9A7;r)f7k)#c6| zr=_Ur6kCy5#&`A1FI;v;XAmQ)&q}ArEvFVgxYsc^*-w!PcRX{oKCACq`=S>9W_JFM zZ)2@?$@~WmNuvH!%>j*+h=!b&QXncBoVQVu&0E zuVFdk7+2a~WXpPjfNsrleCNvP_dTAWijXOeJrFl>{cUhS}j#|0DO2KHwYFZ9j1!v>MHs5^v9X~|}EPV_XF zo^P;Jx7Wr$)e+RjqV%-!sn%$e!1%uyK+Psnj4kd-Q=!tefc%?Gk7U$7<=QlxNBv_9k|W2uoBc@&neG^0NkOdD zx(990?rC=iZNr63Jcx=zQUy*{*|llQsb==L`6lZ^;?0eT2qw|)9{$#e+&q}NbN5#~ z2+Eeg%cbb}mK{9#WVayrF2$Zw9&ZEqzc{lDz(ecXdTx zY(Jtp`dp~uNAu3-5?F!xf+&`-8!LTsUrk_YGFiMReLz5mGySfHaFhc(WH`7qb_Ip< ze4V|?Q*D9^uWSrsjCY~LF~fOgA~ni_k9w2cHOl#sqlm}%Pe=0mBxN@g7%|*yXdE{= zout=K|4@~r7*r>qzOC@jW;jHnG`|JsZ$@iU1DW8H05eTup@NJ3xyBL=h3mQbFmsIl zrQW3cH<+|Ah%_cG2Ooo|h}Pnna)e@LRd1Hiuy39eeY3ZHBdMz>=e$H;`WCEJG;2MB z@&7ROm0?kK?b<3xNRFr=U4lwUNW(~j;$S>VgMgIe(2c+VgR~$yfPe~0_t4Tv3?fJl zG1SoAxz{}Je!p-3@$fi6WbS*dYhCNS&akf zO`X3ZFLB>sbvT)HicHJDh#0=>bvp8VSn|V;#P{ECP6n{m>v8|wP317Asx+DMn`PuF z^`NQ}vq+1Wz8~J6er97khnVuB;*?r*>Df|NvgLhkp%E}E;()O|Xd?gAZId*cbZ3bD z1N+GspMOQXV(y?8sm~4Xe2l~#DndZ$aMSSDC7RWU|Q?;EtpxQg>D63M+7BE)O(W!B#@DMM6x zOk6eZz&5(^9I>pbhs1>0Q7H4_)$wl*k4SAT_3T&LF7*Q|VH8HPPO8vlX8O>vkiC#@ zEXAjbtVhAaB5UB%USyQV7jhkj6KsnV@=(*|ilS-GAk{fYG?6-h&NKJigr!@eO8HZx zidTs+R_RmKs=tK;?Kn=waWhN1ALFA0XPOn%u1eo}*0HD=baFe_+rV#p~nPc1_an_n&TXa0~p3%R%1cGZ;Oa z^tTExm=OE>Ldl7xR|CW;-c>83RYU~+WTK2l-C~c&Srxp>OK>KdRizGj_mq-YOwrhw zA3~Ai>a=Z|Ly8q5=SUwlY)Ir|hW;UzJwKdXhxW-UtFv=MH&;77)kq@?4Qr(#G?$Z> z0y$2}w_s%cis+ZT@H!G18Fn6?hl%K^?+=+86XPIPKCHTfV;AfQtVLBy*q6Zo)OAN}Br zlbZZL4-=uzK;9SiWzL2A;+7&3edC@^|21#65w!WYH5v5epN~DL0bMeVKST(M)=+`x zFSNML&nYG}?vXWns!p3G1gNt}DiE?tL(W4(_ehniqoL;`!S_`)7d*JwuZxV+==V7& z9-d?#E_Fg{(B@j{)rtw47XF!^-#B|4^^&8J@qtE9bHK2H#1o<;wnt zm3Z9B-o#jQLGpJphfW{a3JmSNtW`{Xe2<+hXv00r7kE0)@Fy-MM|nC*#woHhJiqKC zoC^0t1i!(Pyx@!3NH!rGxK<(X?|MPd($j#?$bZXF69yalhog1AXSB@HcH_K4@ZezP z(^O6Il(oh?C+Se<5^$L5Qh*2Zo%cHgo)ug{L#;Fz$-Vj!tmQ~X*bU8Vu|qE#{d{eJ zBM2R7_PiDBZkmEco(^3_! zVp5uPnwux-%N56{!KbQHgr7?m%S=|1rq{W}O3qw*kLr^UvF&(eFM>8Xe0B8ijeCU0 z1;3Xq7!u|DT;8H9@IC^qg9_h` z$0C7kB}06$jb z0YD`RQwb#{Tn{ z9$8tmL~cIKCNY#T=Bs``zvx+}B4p)$3q#^ab?TibxA>lYel%E$mwchk#qxhXTI>TS zSs9;>GG>e-GD1mD@^hccp+IOEEnWp!snqs;(@ZucsB%&8ig$lY0e^LrkirGz>W>|z zKvJ^HmA}9O33~zBjG>`?U9*84t*ZFVoG*Qaj#>iJvRmISvKM$DE; zJy5HuyNpBLfpkR+z}tg&kAoNxD!}(}1Fq{~0cgE4i>KPEz~HF@unei z{KM&mqN*qn3t)Dtm#rF!g-_R=0rP?h`Aa9Qo=x!4M*qgAz<@>E9&7dg7b2%MSYVwv zenh9o7oHqZ;@aN39c8rerafdHaRC?}M@WPI}KeG~>q#mIp;hbU-dxY^3Op@in zoA*GfCT{l*@U%VyOy&aKO;O{hYrn}by{J+?S!@!dFPH_MyFZKNxKzWcx1-LX$n8)^ z7Oda`1zY;F+k`v~SA$2Z1%L{)@<136HO4`p_}7O(GFt&e3^h^oeA>?7^_`*zT*qS{CINl#uE z453yk0y=Vf+mh9<+9!u6ubif2* zw9ODdUgwT&xezs{PKCqNB>5=% zleNyHPE*H+7AMhW%~K={eA`qL^rf!lPz>+76?NPxzvGw ze;N`=#{_o-oM70Zxin$|6Ct|1DFAXpb6~asf)^CQCco>l)_tnCeSUySKf8RRGdYG)lPF;_v!((N$R-1$}hbehJ{mT4*-@8cH z)~fnrdr&gf_5bkYIDauGS#gp67 zaPo~~>Lev}Z(R}J;pm*HJ6o^aK+$3@YWqK0#8jQ zfF-n`(QYY{&7M&>-u3#>F`C7bUMT+nP!9@TN^QZ$OiSp0*X0ZmuDnx)Xxve-O?_Pq~f~A~!L3S(&TYRH%re<)^9lrr$+B%#oiN@8ckDgUFyi9}h z50Gx9!$?p$x08XecpMNu(=4R^w9QiuYplPbfu0uEvR&g)wg|zqr3WF@1?s%F^4m_x z+0xnKPE6z{bv^Lvkv4juSLviw2m2NI1kqa4ohuVbyTxHEq$nu(0u=<*9PUy`U)n2> zWJoAHhBKm2ucC{*N$k;K)R5zF-qhUy@AxBHGz1pJDIo~30OT0@<|ql9vLdnZMUeLZ zX+OjBQFlu&^zqE?@h3@d5<++4))ZG&QKmAqq!4b1+1Z1Bg%J{jcza1SnFEf~!K+2u zn!DAytAYK-3m7xK!5mp+Sb$`A9oY}`+tC9@%gchg#E+XL%ly#{oMBtBkI*a+-^Dv$ z=Xyh$nSH5H7x4lch<=w$P5a^Ag=4Oo!sXPOrY*CRsuVmLpY&+s;r~8A5iidfs?}3jKPF7uLEAE(<@*a)f#4Z=LG9!Hy8%&nD zD;=I(0*NWjG`d4PoTWZ+$imXx(eD`oM>+VNkvGE^^f*dR{sf&+4f_>FN;fDXTR$tY zK&+afvNCGn`Ej%c{z*`QX(QDx%JlES>H_D^?(bU6oQ>`(MiQ#(W!E$3!^}#$YhHYW z&Z&(W^s^7}sw!VpMpSIS3I}Xj%8Ti7=#lI&b4l|Iu}6=DAJU_u=ZRIAjrp^;n);qn zp0=0N*iY2_E*DEVy23k!$WY~ODG8HY>gz5&ZI76)fyB@<2eohp$6NSA%Hdrk-HVFB z`YOsw+-4c4n@#c!Bg>)MFywT@k*R><+h;m&<-{CGCgvJurSCo4hn^p1yDt4{b5-3` zK+`19ue?2D<^mx|*9tmhSL6Iw1845G#Qo_Eevi~yQ}X@Bdb~r@HaabG#*7Cv3YSO| zvOUSXxbeFo9xNLFXi?fQkAxK8m8;Z0~IaQmsvDv}K=8Z5I*a-iAgIPH(BgMEGQ+|9Ql zt=_*0N*&68e#|E7r|BmZ{_U;=v<8E&?>LynFy_#VEs#5vu_#NXL}pJGi*#6}i-b#- z2C?&$tRX5@WmRIDn^wZNnv9Og5*uP7-zVO(?+1Jr8Azh*G%>!h5vHur0Lg}QLTr2! z?|1MrJciKAoFLzak3?rDi~O8e4I)ai?qs4ueqt`0d*8yKEu3k67Ih{56I(lDuFxP? z*N55mt!BH`P}hYdT27fHwWKo>w&dueAVu+cRt;o(Tf`1B#Arz6_Ol!=@?!aTfo7Q# z1>Y=O!UG(NRG}X#eAlcws?7gfoJ2;7ct!0H{pC^e%;G{4m;H&LVXJ?m{0rDAK53?$ zlewl*{!QAT0AnZQ%_u8su|cQr0XE&QKC_I(74Y(sZ#wnR3BR|x>{sZu%#!52=<_i+pv_Ar4fsec6JLSAKOyCGCgV_cV!z%822{7b zCZ|X9fi_$t&{Z*r0MSlatuJSn8=6NXO(QhX4JtQ5| z0AF&QZ+#f%G>v}l09l8}3!|uc(FS4Pe!5HPC7&64@Ww@ulbH_|;PcVs-_7t;->_!C>uG8%+RPs_KRb#ILP5``RyFAf)FoGeto z-*Wjjd*1FW!t%)T+>OAs2j(7EuEwwgzzhdjveqxiW!(1~gGmNGg8>=dVJ1rz!xty0c zXQo%V=JJJ7aN7*>K4|B&tyB^*WoG}|Vs0E=9Q>T`PN-hzj~mO6KQg;TV1r)sll-Qc3Kx80Kio$Lukdq}I^6@a$xis+6n9?i*IGt^i(x1u$#6=M8=x?Ci0Caa(avhYCJ!5w)gxwNxU_8e=_wYm*zK&%QL{rWMXT# zkD{^eo>0P5-)z=W7^6?zN|a@_G0-8=Wk4QDeN)IxC$Uc3aPFN-n6B2GnD+QR zdN}~(pft!eW_J{}q<>YA#0@y5z!S?$5F^Cnu9%{0KD zC6kT}|2mpg&LH{f#4&i`#0T{0cTTOuuyIHdB?QOC?L8`F z3|&vREN6zk0GF7Vqi%nax5)}Rya(b4%Z4yaa~aIhSF^?O0t_wK-;idr#6}_T(&j=$loJ|^@&Hk>0V>7YfC)AItnIr0m*#Cq$vB}B$QTUt_bs-yVuP?fzw4iA%QjF~+ zoPqwv+@-C1i&m#y!KqW# za>1qf$0R_DcAcv~N~_pNtjtIYT)U-b}= z{dx5%mn_DMybrvlK*u6>->@lo)CpCV=mER*^=*`rH~G3{77^qr?+aq8tgGZgr#(2e{!@*6LTNVaU)xlnWbm(!D3Kq3SL#3+zI+tHf?2bbHQC*8Px#f zGgx=09j$+_)CN)N9@Md0&eHB+;JEI;Xfll6&+tD3p8NG;jO_r@ve$y1Fy$F#e;anJ z7%@8P&RB~d-W;wo=kq@OWvuGL{G6m}cg5!RC!_k4k%BV^tsz+==viw6t8C|=lw+gp zH@IdMgXE{FBBOu8Nm>0y2)1Ex?CT=<*+Jvk)7+N|VqUv7?e?{^7|9mQAIIf~r4D1| z{T7~)XRAsUR4YkIamlKuaXb#Vo+BO8mux_36SMwF|OxCHtdBeqe zliei(Ew2Fv`y*-YMq-R8lDGVRC1*)2me@G@`Jg^42n7w4ZVxI?| z`GY7e>5?g$gJ`o17`HME4g5_F)vmQ#GcPqok)RtFX*)~d5{&>GvOg00J^KTH%C2{b z+LHh`2-SIC5AN9D#>fSq5FgykLS4d`BTTWqeuGqvqEp~zKZ96SXW?49vQl;#N!P*Kp`t?@_@QUB5Y^=SzL|gQ>GzXy3{N?ET)NsjB!-FUU;Z zmy86QZs`uuNO>t|eCd;`UY{1ajeo8&QD^6uWL{pntS{CTb#yK2A^zq}+rraS zO)?IVYbRzc7nUy9yVp?Z?E4nPO%mS)-QaMJRw+)AKHc-O1h%momLic$=$71Ts$i!u6U+-OLr z353rg)!4 zrkeCD0`p}2GDd6gke`#buF$(R4?@cpHPX7Lq$1^em-Zm|0SX7Ft z{y3!(_(52qMxH~-;g<-5OKVidE4F#t-U4Qz-?<$7|2U0TF$cxy2FijioH%#bq2YQ)v;%vb3x(VDGhLecS&j=XO;`B3dd5s4{flq%sD;1sqR(E6?1X%tjsEbsxBvgzd=h7hSDkbOlcm1!3yz zBPC{ab-&T&VPJI8eOsb@WBL{-vj|#pE}RtI%R&RsmBETU3I(6zL2La6m$2RxDXxCn zR)nbiWLEIs{8!_^7||q@hOK1JW_aw+op8Igl)qbE-ip0?75S>Ydh1`WG?goUeLPg+ zOwXtPEuTfQcxpa873xs9wq+!l)fD6fH0}i^v+b{cxZEDEwT$jfemF4i3Ue=gTLPeT zuNiZ`Je}{L+@|-st&iYZaX_#hV)RjjakpJyg$3`mx1zhpSYdFues;1ymK975|4X#Jq~jP{fi^{XM(rvl)%c(&&Wklb_rY+D@ny zUKY3Pi*2#f1|K_LvF&lDh(4>n#rg56FISy(W{WR9l%wU^T;GPDsQ;JQhZi}XmF7DO zF^;{SD(464#SLL}?YxXB>0a%7U*H4Z)|2qRQv3GTCd|U=1tRqN-f!R2DUJdBtKYzj z+O#*Ns@MYH_*WF;Xi4}>oa$uz z{aeXtw_-O@8sDcr$I6|D8|wuGUR7!V&LI}{awTi^5>w?;WwW7!N>~LC-=5SWmt>Kx z_Bf{f(EjYTJfTJ;SEoWA-?+|&%!X4VJjHFLe_%d)Z>fKUQOiL8-A3a{6z`jkz9%~Q zI&fZw%69`i@$T!VKJ~Uei_gJ)slim8s1<$ONT8FdYO8ZgM z+vJre%jxy2L*pC8rfuQ1v-p9kDXPjYZwTWijueKZY%rK`*(oSQ&Ek45T3>_4lv_|WlCNUp~RAd((3p0+D6j#zW0nX6;WHK z7i}-KYMmHY|Kbj&JY^`B~jzG4@Y>B9LR0PIG59j7uZjjxUISR&Z4I3 z<#0X=5x4gzWgPB|aD00fQ0n#+->4TGh>y08>@t+?KSJ}$M~e|w4xwTs6Cn(+7&))q zVt^Bme9?$Q{p>C#nUs;h6@=w02rgcml#y-Jpn#BXD^G#=-=Ri-e|n2r;8Q0!?Ce49 zB`r7mg}~8EdoO3&ip*u1Pfj?+2)2T3;4W+YTPHhi`@MRDk=i7?l|)h+FF6f$!Gn1W%Yi^o+pYl>%ZY! z3vCa3&*42<9Sgs%1?sT!^6rj0Z$;(lhg3b)kSdY(-doLlBe#>_FP5Kv_9xHMpE}P{ z!O{L;$vw#VW08LC5M5bWZRZu_)>_@p`TJqA%?1BSM*qw34eE@SCksD35tb>&;4 zf4hCc%8FIsa1m!oZjq7h0|^)PcoLQ)UsFIusf;Nyno}c4oX% zuRjxG!HRe{#tNcwmYMq$wvuHBki9qgUb|eJxj^`3WXmNsz92_z*;XhV4os`TWTKR> z-i@=7#k?u-DrT(?MDNi3yPm@cC*Tb9^c){KYnuN_bv#hsoYPKuASQTW7%vv z5&y;1=TLc)*})1-wQcmho>f17wK9|)dg6Qdo5Opljou*XossyDfATD%y|To{qiZXG zEsFTUNd$)r4zcDArkRw=xom58!wtw{3*B#izVh0a15*FY|WYo+oR@Mn3Z8%$P>Y^pmuet1yP+ zKKa|U4&yq0#kOFw4#A_hXZoa6td3gAhD41pp_Hs|v(+M<(&%&b4d_n2hWPT+ui{e5 z&Bn#O_dX>Wc2Ij|8jn`i*Ya>YuCkt*9LIBj$?pPk96q;bFXQqy^k$T+Y=)HcSmj2| zC5}S^Q-e^~z98Gevm4962w!OOfkB^7X{%c~wPo5tVR-il>GPzR;hs1FeenZKmybTD za-Nc=g>?H#Y|S^VjPz-*EY}Em_>401Wdr0J;^v5QenO$j=EO30{PcZ&>4 zu&R_y7JH21PWHbTAI@H@)~yfSJd_P`&>`%k6q-?3mO9v30g z=VGeS%qFw4P2-jeyVkEuOz+elG?AuJe5&hLILv^Ghpqu~upO|iMRF#gZZ&74P{F&b3)n$ zc0&Bmmw5NH-0M8H@?KUM)sXkm$NkNFJ@&`}dPe_xJAmto#Fnzow#;A3mAerBGD5@e z>1+|&e&-(x;Yle5Sst<``Q08K*{Y0gsYAPf3k0n`s}4y&DW}vp7bM?u?)Uk$|3+}( zJw&_woS~>uRDoq=%d)QIM%|IIew|h9$qXzVJ11;YGui*WkQxI&C#sAA$k% z>HTJenIstv4A`cWc&{lOOwl;Zy{yoCh$p^k@CPSEgt$7j7WN&{0JHf(FSOo3t{Xx0 z5C!lilK z7g3HGa<%T&YfXRka-W&h-bjAvY*FV`>^&?vUgBFzQI#fSY&4w7!Be?If}h2bnJ-YZ z)wXo;-{n3*T+j$|Wo``8=34^%Il}!Z`B0fD`Jm`Rs+^4l%A}+IY|lFj=vxPZ*I-Bi z89ygB!lw9lXCNc4kPu6s(Pha!Y!!0YP56ok(e-pu4%u8~C$a5IF30f_Si1Bw z)g`$OBI;({64N%r!|69dwR}IcFFc$1``H5BHpW;S7;s46QuA>Ag6)Ow4F@!fY%z4Q z4ji%YjNPB~U8b@nsn5oMvp~40yjmeDfln)ar%~=QHDvuCL|qL%qq1Yh+IXcZ%EI3k zmc2Ua{N+iMt@26fJRkZ&_YqN+2{5@f)K&0u`%{;62L1JlnHrBJTx92d(E%xh%#07} zrFr+KG7&(#V#itj>koDIJ_LLvQJU~D$ol$;zabF3i22%$+NqQZ zt7MOj8h-Kus2xj_AgPvgs1)a^V}i^G{rByV!NUTdUws)s zcqP}>ns>|@k!=6)_-SoY{N?P5c~H?lu3Io{^W) zW;h=P?`wM!HtAbb<;~_bQoTSP-tcbznhgBZlGJfswz|M;k1-QFnn>4=-HadgEin)2 zc5gX$oh*k^4B*TYnD0STfSV8XzkDqNz4+bqDFT}Vq;I)F)CF(2l-f)+)ZY|jhOTwh zxUSfO@Gc$^Hb8MI0cJ?(DVK7foy#dOsviT%a}M`{UHIzE(jsU}_=Fupn!?EXk^lXa zZ#B7Pjd{wg$K`K4J_+xWuL#KSyRN0|J&jXC*@*gv2~~rfy@&6tHp{OFZ)W&kqyi#N zy9kkjmUk3$tkz3tgooaTXq68)DjJ3loI8TB4MO#YfdYo5l2Po&0I2ZZ+Z(PAY3Fpy z{FTgS+4gu77;PW!y*ZbV_k&aOY ze13r_@8b0N9@c6u1+PI-!p`|Z1#AY&fGd?W?ntp&^zZ)KxM8P8>jt;R?o`T>I%+^jql~w}aV~Ljhd6b3tq2)@D;F@Jb(fV2qPTV6YN=^S zXV@BJP>uDnE%^F@Gx)w<3FoV|X`Ef97~U~( zuV*UM@xxaoxp3u4S(SYCrX2`$VLSTA0)w&!bSx+8*TgHJJfP?EchfU4?edl}N{|xKq62KDMK7a1@P6_R zh0v35DnHkr1};sd-s{yJe=`9OvZgK`plxNPlg`=R+M7|;8*jg{KFi4^8q5I}hq@pV zxB%D^!`|~4QuTGI)VagH%^tq&OG+?*M*lcbaIO8NG3^f~ufB7T80X3({%P()Xw3F}>b6p=a#=bz6vEHotSX`iTDgW~lK4Y=aGqVUbhwn;5S>E04S88n{hd z%X(@%^8Twl9_h0M0lfE68RnaSUMrLFfX$&7J}BDu=TD*4Eo1pl)1`&EgZ=C1b?24w zGpgE(1GS-Iw?>z4f1kNcTugSAO5V_}Cy4@hzkyt5*~_GX8?ZO}6gM<= zrgNJ5=;^I>x>5uRos-N5_oB2XeUA9=p`u(L4}1@pzZ2^Cyux(8YY1PnGT|T%vmGlJ z#vB6hCX`VVTv}~Z!s(+$8&tYqzpnETKJX6G=8a~SGyNWHN131tmYTusHuycYyJdhJ zD^`;hX{RHg`(wASySTh>i87REFF(`$9N$fU!0^1Ui@PNKYl3QpLuqQ!+4O17u=ndq z7cN3$uiQn56RfZU{!c19bHB{M$T)+-n-Xw3;ike_LRoKsxJ+@DEVGx?1OoYZ^ntr9 z=v}~-tNAv=g_##1f~FE|yqYO+Whw;}K0SqvY8UV(hqBdZc%Lc4H;xKGnBDr3D_~L$ z0ee8+f5O9wOobIirV#ZYXs`gRe`V#{@@dOySR;TaGVe1R0s9xW^EF)g-q9|tL5jw2nWQ6WXtwsJVfENfD zi*~`%AJ@OXjgcfWd%448+TS#-YrkHwB*LgN$9rYsCZ{^X9yeXqV98?lj3z4$q@49u z_y8$zo6|c|D_#MgS0lws9OIrMa;?;R7^Yw9k?FcR*!JNTpN0Q%clZ9%`)EU$baT&? z=SIDe(rY)oYPyVNRN51w1N(##k@59Ux++CI1St1YAJu-ncH?Ny3!`M$sAm@akE5wM znY*t~ZXAOnuI33t_cXawzl@*XqBHjK)6}ZX<%7N~xBXQq12fiV>xP9j_oJRz#SQ)3A%43MPPogic)_udRBLxo{ zhUdj0)GW(Ud@LGg(n~pR3U8^0L>Dr5xUN+Gx4-NOK;XL()^Rx_R1y<2t*z}(Q}rHd zA!XLX)OBTX)sC^v>F+;v2e-Q6atD$OW!%Sp7mI=8~gnVi+m)w znrZBB-gx+TU|nazX~oXXH9FnMGi`Gyx%V#(V;t6vJG1QPrb!FxfnKhoiOmSQMCmWVvA{VXxz`QGb?@hIHK`J(!<8n5t5ZOhp@XJp}xB==o9~ zrvC}j4jL_)wSyMU7AW}K(-0;g8r9umWLP_2c}||7t9T}@N_~N0^_mlwSYt`wWHxHd z(Mn^yo_;Uqq>iNV!(=sWtB??LPovj@1ibxen(XNL?kOAAp)tMwx_)1w?f4MD)R!uw zy%vN>!N6a6S@+%De~RmP6SM&?Q(<4nB3;u>=-gsO(4n(VlWdDRVb73{(3X9y2R(sz z7lWQ58P+KJ@G=c&vQsy;4NQJrR!Da2MWb>wlV=op2+>!WTV(NmR(7o_eq4?-UIjDt zMTgD2eO$P{Fiv0G88WKc$60pL@5GM&PL9)jmte-BS+v}(lv}tY%U9Ck?Cj9J!I!YR z>B43qObG&tyWGpysoka3|43bL8sn{(mbyl0CW22`(!OK9HMjnBrbVI175QmYba_#%a;E-%xaj@ExW--LpFD+@UQHv#-DDn9R4k^X)U4&TvL?4) z#MdUddeLa*n9blZXWKh{h9kh&vAUPML6ZHDos!GNjT39!t5>+iVPHj33Jk|j8mDA! zXgspso`pnWMVi@0n$z;9D38XXJWo7;5r2)*$x)qZflrA^27DWqBH7zR#j83RnDcvSIsK#)Rn9GL;nN^H*77W7C6RcWn!l^ zYfX658xil(T{EW%f`l)sd5~*+`Xg7OkK-E-J2Ean*0-MZr*p4@7T@clCkY=*GTwgLQg1*-IVLKvPA5sN3mKS`)Wwl z&iNzc?_UkS)nE&*0lSjOKtB(&g`J&49#ZB38rjYF&SFAFb&{AJ`o1UfernIsnUdUq zl`nkzDE(>B-G`h@)6%SfyyLxr25~xR)0&o7moMS^NNHG^Qxd!u@KhbYH1U^P7gOzP ze#vj8R|lmry*H0lIwi1S_F`ZpbKZnun}~>PxT6+GwzkY#OX#1jj<6KsJc4|M%>Y>( z^2u$&tea!<$vIjWik1;;yYP~AtF8mvv1;=)1-oe?10Laha z0K_CwjwV%kuk+r0x~~o2>CY|oUAZ+J^YI3UQ~!2mrT4~tK0WjY7TLNsal2HTUyu$* z-{@#67I(?!t#IP3`64-vit>XuAN1v-hab2*UR>61^h?wBtBu3bh7$SUPLI+hQ-;S6 z(BCIoR<6_Z8~YvwN3w{HNm>8;8foU<5<&&rY`YCL{}T;kewrV2#T@EAq^Z9UmKr-m z1ILt+43)5)0RXvR;bhAgH&He0G>CF;+eY=5nm;*+ zBx`WQDb{YaGueU5C+v{Nq1ZctEzPa}o${aQvqe&A)TC3mb2HsKW8$qSfD=eq{r(x& z$>zHoOBa3n99R>f-N~h8H%}M+J0a_}*rnZ{qWs;wAPT88E9JNWCk&( zJP629!Aa_4vb^72dtTKOe?VHVH zMc2IE_)^lW_}d;K+p}-hJc0tR3yrMlnVep7)@+W%4Lzp;k3~QM8$?i<#8M~TWgqJY z9IM|Q=qEvuiDWfq29__%z#UL3mcGPuF!y=kOXlCWa{VfML0OS2TVUjGkfZ6bUX8b1 z9{et-CiY+osE)Gjg&?j;Za?2&-m0WADRstU_7fXV?}$+fC#%aN;5=VMtJBmX7$8o@ zbO}t)nYG2LgGa@K-!wd+Wn>X%xO|(8+zTkiW%`q(6>|3pQXaE)ycyvxoabNfwO0!6 z^VMb#0r<-cQ!3D_Fd!vUEE4qvcIEj%PEuGH0}{tmj`fO+)PJv6LR%ft) zAf<~UmGssk17<7Bo;!gx+>&3hjNtGq!s+rwgU{pJE|=^bl0DReU4sMlAa-S^X+6}7 z!~%6DgfZ5Ky8^fXdT%PX598C#CL#JK~Q4rCl3VNMAA?j_t2u=$OQ zW0U@B00QX?V_j`+2iYEZEJ#O4-UG5PX7L9W9FT8vpu)9t?=}QJt(!a1iy^@HGJp zn9EV(srIzpY zTX4%#a43(lDkBF!;z(Fey6qR7$^YTP6$x3U8|lPiDyG zm%!=Y;QEHoO&1ri=cZ#c{Cim)*>m;zHFfWJ2Bhe{U*tj}yk8%Ga*CzRWy3kLy^;OS zEJ*A!$jL}l?d)r1C8%5ag)Rx=9i+&{!jB|-QT#^X2?g>G&i%#{wd$X z0(1K^pzT9bQz(;gY!jKE0Yg@moxj*Vy+4`pp76MTANo23g!YHqj zLy4%Rne9{n)xT|hI0Z(`Y4aNiN*AnISE)ew@l_KvAb5$;lev-g&E1JiaA%_DiPD6= z3!T@(L(615{V}_h1 z=-a~s%QIM&2*3&_7w5lAK>Y=_lUyq9(}0wG4veJ&_)nw|dUO#I(9Ks42IfhPIsM^8 zQ~?cYp!1Eb+a(lR)Q~>+YNrOS#~aw{0V;|OTTW$K1PR26S*nR>%RMA6L|_*K}7$1~rSW0A-by z)$PAOUOBG_y!e7l&4_wIK`%&2KKh$5Pri+ax`pTkEuLy!C+knC7N^4M1x8*5q5;(v zG^Ca0CZnL>tlv2hTFs)r-h1-M00;ovM#ZJf z9yvLS{mUc-PYQ}O1lcQYtB#x;_Al52FXJl6T_beppEBII(too^DIJGdT$|uM-uD;A)2D3; z;oU>@ws2Xl^y4f5zpo#2D1{)1b%@`#S|M-;lioth+i+eWUKkJVQ_XLys5NOJ!H1j! zTmCezBx_n-ribt5T3;CqN_xw=$A)w!oH6fP*$1F35FAAfkODIzcRA{DRePKCTpjIi^Q%EH0NwfPVowbf)#+Uqm_aI@PT_^i3`T6LOqbgXP5?hH( zoqG*blI3|&vaF_* zh60N0sd4}yjt!*yY-`wn5-p2Mv7-#3w5&~L%WMSlWqXG4@H`Y8T?zMjnaP$ z9(uZ|l*@IA?6QflzH?#4w;2GTbq;c-B!E|NPcEPnR#fJAa=nqO zmkwA0{}<9Sh+?n1P7NjlLxKk)%|e;u5M_uD1hLflNXH5>#EwLT1-y^6NjB#KW*1Xe zdunKlAWx5qWf6Z`f6j+{geRrlI_myKl{PrfzJ7fn)s<_IPPGn1wZV{T%==Bj%^Z}@ zd6-WIxGN(N{||dZMo?pnv4v#qIQBQ3Fp{(;wB4`EvOv+yD>$6{yyXX&d4Q8W+V}hj zZ|{i?&@MDs`lcZ`XRA6=Kl6bPH+>yW^>j|9=|_iAW`TR8;mp zcG=1(m26Q$<}r_59IK3^>_b#E?7a@Mj(N-+9P3!e-p;`>?)%jDdw;+Cxc_+MA$30I zyvOVHdMbGcY>NXh;-&O#N~K3cw(#>&x%ZxFE@BcSSIYk1D4t z3v-!SW}3a5{bv0+g&#krn*1VXV4l0oPrrCy4WVCXp1l&VZz@*z-=z{BdDc6m4dDkA zL?dM1Mz%7ll8T6G_k}5nZcs0VW$_J&%e>CkNtsi=E6yHmXWAa1ixYj`Vo27!lu&)6 zN&*7bLbAXsdlQVUE{+jqLBI%5>m=RK zwoOmU5dL@G^Oi$hn;#F30bg}|t)k21YitbgKadTR4swz3dy}#Umhs$Z8zdd@dwxS5 z^peDGjLTOf4J(x~aaRE~QyFwx9Y3gEzU-*Ay?=MDB^^@nm zBwlBU**m+gbIAS0Uyitj5FtuQ9#3#lB23t!av3gTTvJcT8lUef z`=9##yw~^<{vAf_9F9UllB#W=k4Ls7yUzw9F_}3A;2Y{Rn zZ@9;(%W@J-%F708yxsV|et4cF-%OPpfeRaIv0KJ_5jGGVktzbTVjxQbOve#p{=~5| zdyEj@S21>Fn7*=WSYyDofuj76G)pQccx@zBr{P>g31v6HS53VdUC}MyS?9i>ZvyJ2 z8V{Uo-9lDMYEPsa>q&&mDBA@^s;2N^vR0V!5aggQw2ugT)h*woq*wz!4rA;p@%Lru zdB&JJp;gz$uX$o}O)wDy?sU(5*jE4AcTmO7nu^4CS>Ho>vMXo2gwr?hRW=khz2N34 zcHOyGJ=F6or13S1W8xv$0n7|6xRVK2qmY1e<9TccF?gOw&x7QifyN6cc^#{XG_G7_ zyF$yBZ~Dsx@lq8KA|36{bbnlS*1xl?+9?3+#%W6Ze*8wB!wYaunB5=dst67Kycm{3 zFl&Oi1V>wqwrDe*e-w3xg+o@3g=$2AlR=7&ZIG>6v*S63s@tL*D)Iv9V(lTlqA;nc z;&V#U>?Hw15%<;ijmg&fx;PRW_2&IYXZ@y==h)9md#)RO27V7tflxznc5DnIqUgdL zhER^MWB7B6wT#bsyk?`lL74IxRwf=ddt#ZD)Vg8Cl6P5POCLV1#=MJC`sUJkD_axS z3%1YK^Rn4ce>(Mzb(}Hl3bW^YPe$JKM@>%m1V-iXn_ruv5D(lU*?RsR65xuuL9fhU z%6N`@CAdB*@pWW)M18V8z1cnT{ZcqetO?qMiN=$QrWcRNHy@RT{-zM$cH#ACy?K+rr_#Tp z>AcIEYgb7!6_3tskvhl#n2_}hSr={C$1_pF*7e`l2G?|UahZOh`)bH5R*Xtd_q&^N z#PqtJ*5JLSm#Q{Os+Hh>AX7I$d1j?`@8&YV7vsPDB@Qmo%3N(@W^qRY!5Sd6@~XPt zdYB3Ch`GY?^Hb_)vH=Ky5Y^6i+y>n5DG|3hZN`NQ-A1D{ZL?AHsroqP-!kA#Cl}_X zi+=^%hDBf3<@&_#{KxAh?W2&{2)P6W-6(=F6$d;KE~cry{cc?P6P$NlpcA@k0|PU8 zQ_3)a7v2MpMg=trGGQjaQaJrz0@_1>Q2>751v$LrZJi|fw!wT8`-D^5yVY4XtorR2;3On~_O6otJ+4R7xafrzzGxVv%%(!YqkGU{fLOSRkr5c8*rQ@N zy*jQ0`G{CGQ88IbfQ*qm9HJ+0K(Iwrp2|{{=F-h);5nnj*-lmiUx_@Ym9c6J?UvaK z5M@y4I!;;z$0F$e|K2;Qb7~E4yqS+Md4tDjImFFs?~bhd>M-;obqAu#+}dMtuvCqP zY3Q-u<81CPFLRAO@nb~Q)UX1nq`R=%Mr;5Ja7jrN#>t%iFp`SK^JrfK&M#m!h@FDt zYC%=#2r4blxlU%h;UO?rF;i>>*jt!tEx9rV^MF+QDge9=R(m;P0qcbEGw`ZFumwuFBJDwz zsUi4{OTPayAGpIW5>&v4*<4Z6|)Jg#~}ace=UtVds&^TZV!!?q9KQdNw@x4CZ6 z%}9CDU&0fb3SHdz~1x&II}Dr%zkfn+dzgep#WVjT^>-Mb8m*!PSlQNU;) zoVTUGf<}%g?!GkG6>zYjA+5B%HUSWOJFDWCU1HpR^He%EXH47O9c)4F(cyN#-XO@9 z;^Vjgazu4d$AC0|#is{4iHeF!y=bM!7x2~1p1vSIsk#iX>B@bSJdV!p-)jd17hvAR z((GN=j2yI9Z{BThs?qQb|3G8S+g;!V^63B(Z;^1Q0_vckK# zQikLoas#5K+XKw9$|txhJ3ii;4sZrmNsE|#XV9*C_Wq*UidJEvLPkv+fgx!_`y=At znm~2rv(2x_cW}J6E_5vfY1?bHN?bLoUao(0s3nWroawS}es{UtZ*R*;yOUWOw12*4 zYdf0s=L8do+;tMPv=Txe0k7fQB>`Iiez?-=ht;TuHGTGy%NW_beDfI!*>cXOCOyjW zI!#!QqhC;}JhVao^z4(bnh){GS+P#2=#?vR)XJ3lX!zF-U}uAXK>G;GBJ`F z(+=SJIvt5WjP{0rn1I5}kY6w!M+2;vOE5y#qe)-I81GKUClhTmc7^-~#9mpiiNs3C zqr`P*;{{DdBALZa70uG{{s6{%26k~VAY51Wi~uT58Nk6Sp`g?`7x9*A0Gvy%Lx6Vk zOGR-&sREQ4W7S*;cF-43%Ys9xvc6h$ZP+ybkm?^dmd7Ji-n(zX=u;8s%>07QsnIE$Jj!Er)04gc_KR-X|B#AY9oKib)X)Jqr>Yf@G_kdLQ8vNdP z%AGJZ?x6SSl|W2gX4QNSpHm0A5M_i7RQY%k$*+$h(@qw@(kIZEK8-kWhc93;Kyhu% zl=kc2d-fLPAq^s!Xn-_%A%9)oMj2*zcYvRrwd_2ka+B%iGvc_#us!6qjq?%7gIL5# z5xdKzcRV8NxyWV%p*?wq=1Niflb?o-Ejr7e5{?|~Pay|R_Qr0kZ-dOq%eM{oy#t)b zD#Cv~&RrbEoK`&G8kYiW-CXGjw{aSSBgmGdb8nwxKIcn8h3`PygWT=2Q21S0-+dYx zT58(tYSL@fEN@wwN4q=ePg+gMc*s7%6kIghjxDYuDe)b+cKXkAM{$|u2b}&j!yXrd zbR;6$6tx3^1G~`#t5YOV`JHc-GPn`GYccxbh;_x6I}%XLF}9tBSpsC~r?jKXp}Tp- zQd+wK8e1!Uw08lsz^(baA!OxGAab=#iOsy=NBIt`L`hxEdJS2?l=<-2$RC4R_vxWP z@0?d5Wd<4Ak4%u3LEkRh;a)2;SsK0kSENEMxl#%2UZV{A-E#G0OD=M^LAE3VT{

      mz#?#6ePKl^=(F@e%uvHncpgg-GPvKtSkjErm=bj)oCv#HOxfZXSRUN zjb?~?HdNv7{}>=0888Tq zC}5&VI2AU8XwZY(#UvOz?dxS##lLYuCBrUS&k5l1m*HByT?P%p@T%$lD$hQ*5R^^iK#44TMFp4pxiFx$YK} zIsy3G8$BHdq^v_E|z`}FCZPhP^Q1ou?J(lvI@kJCn`i|YY8 zGt{zXEok2O85@1|#Z z{#-XzQZBYcbU$D++JAMyVi?4FC{JhWC0TVJ&sy_8t*w!C92wp8;ekrvyt@{k5UOp` z3a@FPrRh48Wg63VXCLVfsCQn^@pu4h5j81&B}w!h8<8YTaUOMh`b5!+cx+zBu1db$ zA;K3v|B}kRLofVfzeb$x%{Cx(9Ck->Zq0cItpWk{I4PA2yYthDSsf;1k&!96)nt9A z#(%F{cm!w|MmuhyHj~FO!wR7GiS{5xvpa4!Q42XF=*6TVQ|Hg0R$_i;;YYCh-s`fS zU@>H2;otSspt|AblYGk^7KxI*tvU5kI*PRkMN;I-#v-dW0X|3K@B@3STGYUA^&-HS zn_XFA%?}#a94q6^PZNukfrF%%UKLe0nNKvqrRQ*dQHrAiVVAm}tDn)!r zZPv5?^ytQ|2DRy-jlfxe8 zzgOxs=`b-Vd9wmP|AWJD_Z+UPQFXIY}g&?(?Zi7cT+EA?A1^StnU! zyf1DWy|A2r&Cl#N?!Svn$imj<^CQTV8wiy(O^GA}BLD^XsPYkWNFr9Z=2WE3`k@Wy zZB2P4YzKy9Jyxg8U4S^%VXbyAE0<5+^NuZYBOaUMHBpN{HnsZ6%=9_I95%kfqgj5q@Elj0UxwSEWA+CZN zh<+J)31D3NuS;iWVoC$p8r!{h|KKfsI?J+mmu^j^c7HwjX+5>Dr?*1ecCaR-!>f~~ z+dlu`4@h0V=$xFGxJ~WFe$lP?MPVvK1IJ890*0~4&DdvBF3}Cf#G$N8Mg_%A&$tk7 z8Rr-_*=;hluGK>A!-$L!CRU!52aK^dO=s|aBiXv?Zy~e_1;sY+0wX5XWNel%T1M|CnUULM_tWelF#NRp{@D>I z^|!0<28T-7%ymMh@5kR>p=kR$X`x#2*~OCktFkhijNgzye%pMV%C6MG&h$6(K}N&i zSGz|YY1hKQaOTGNE|>S#r9y)!&H~qOtRt)b_6~D;$Hk|^$_#y6c6;s;UE2c&f0|(< z%BVUOA)#Q{IU5j{FEi(^J#;W0kRZ-)o>_5un_^sr@q*4dNe#9!XWL zFR%EPryd^DC;89`iI|BZ@T2daPL09j&Y_W4aFq_s3w5f;wJ}&2ZcIt~>ER z{aGma)Bj7U<56Py5nDWm!&ucH!kV0LL79X9w{nD;3hF$5pB+qNTn!pGtvi+{f1ifV zfs?7GB3;3k&UZV)qT--k5yVxLusYQ?A1cmJk1m~NKi#mY7)r)NOb+&kt>BZVdTUzb1e@8w4^F>I5Ow3MHu#X>uEjbF6^eYg@)=W!i0`}XA zth=2AO-jpN3K|>@dCy#Xj!E_mA8H!`!oVOu*rzDu-topei{_&f4fdR zK*;zfd#v^LAJ$d|1}=>ts}Zy`-`2Y^M;xxbLV(|wTOH6CI$rg2IB?t>GY7LS>}CX_ zsb9{(f?$=9;&=axhJX5G75_&&7JOivRVk1?!!muQxZ9UtODyYqOb=1hYys02$0g0? zmG$Eaz7ESk@|p$ccze`o-m6~YYuIHlh(NQOmpN4S_%+s%q|6}^T8w-{UFADodF#4n zRmNt{hk)Z!!j?vF_M3mrudqRMhX=R?T8!5a`X(&EMDNN_;WP?lcJt@>g`9I@6IzUz zMxm09Cf}Scd%1JFy6CYSze#P);lk`whyE7YGUqi#CViy-w|0Xn2P5ef4rfjo#a_@K zzyBoQV_w1QzWd?Rgi+@LJOn==o7||SW$X0cz5buutb>6ph2f7EF6IuVlo7pH{wm>D zRb|YDpt;fE;#5}IT<%L-ffKMXa{`67X%)oN1ZGv8g)4QItFnyjh;m3 zRM2;0@koB6*UWSOaf9;r3s~bU)5`DDZNy8XPP>3;9yJyV&Ggv*u%N`7l&kmy-1cuQ6da1NRM^G*ud5?i+i zk{Ph~^3Bg!8gbSV(=H1djCwfT1j9%Y+zp7yeGg0PP}H0px_f;(HLh~$_xI;F6v|x3 zAoqprxY;^@ZS#LN{MYj%)bkSEe8wadt7iuFns>2p|Nf+PXg)%avCwDsHpz1PX4;4& z5slbrS;JOiTB7!Tp92yi6KUsY>45q$P6&SS57I{l^J-k)dj$~IfIj9GA5T01-qu(s z6MKPeh|^}g)P6A4q8#{T)G zu*|Ki&XrGng1oHt49)Pl_<M zV|lBVIwmFSO`}_~K zjrp2Ae}XI$H2hwG*lKqM)kN8|BRwh0aZU+R_WscPm7L?gM% z!!I+A?WJ|gPKQaEfP}kLH17D*^k1j|toNpGnn|y`bM8$Cc}{6Y3Z_+b>!xd)mD}@l z0&uz6UPC7S8GZ}S)n%Na9Fh}+iT`BS{!cOng|@j0eH)_{=9cw2H5W~xT5zA%Cwy*0 z6)#{^4ABrdg%8O&8=ei4L5K~|gQ4C_b+E5~W8O9X-HY%!V1IJm{!pd}PcV0N9RV~x zt#gG41Go>-2g^AffviBp1uF?7uIR#0tV})<`x71sV;&936b6E|U$P*dDw-yRvm}z54V0YaSUg9)1(swTHR@|l&jr-?`Qu_q55U*6@#fx(Z zXiH@JPuo8%Ok!d_w1NJ)U7T(``lm^{tY;k`YUvbTq1$=8$(v~mD}j*DAk$ihp@QE@ z!c-feNm>l3FwRC#3A{9bkMq$XDOtm`i| z%`x6GA+`%mM{3WhvjO1l7D>ClG++z5vW6jnM_&g3vrC_mUMXZWx5cc?HeIOGZ0H|)w#LW+J4XN z`dj?Q1iz6m_9fvoQn>wn*UWOVxG$nIHc`Yf2&h4Fv9u?mXSjF0T{iE0NMh1N>-6NdDx{Ff+B`!qi*+ck~x)-$h{+9 zlUj!)dl6HwSo456VfGot2q-rkHv{>6LzRq>OesJ5{(!rBHr~YayIAU@87p?BfSO#x z!Um!103~rj4wAzQU=895L%twg6R5>pxd(t8B zvhB)gRlir5JV#*q6aFY3)Q(yr7R~^{Um>eR^Xra`8;a@es4(v69|K=I?@@;l5Cy@$ zdd6qu(lxw0+TXc3<{IQClX3gi{VgO$JvOz)c2yi(?(8MB1R%1?rN_WiAJN)Ty7*YE z?~SM)0J?HiBQ6qpH8{U%!dAzT)xc({**x%Y=lyz(b;lJ}d00Wm(=G*_e{WE2Eo{RI zwz^j(}ZD`?0FhC}wfq=$;PQn>Oiy3E5n!XOL$)JVx`zmkCq%m&Jmw z1>(4*9tAiRn<~f2&?h;DqL;LS_KbKl#XE*qN~?P&(MSm@j8Ueqi_V;J+xBldDuG~M z1)?;e6hN`7wJjdr;FElNf(Pu+NA>;=z>{D#AR$%PlE;nA^NqFJI5V|=+{WgYz%2Pj!dBakHbCX-|=p4#*&2Zp^F>LiP{!MDHEjuZ73?frs{*;ih!~NH=RQ za&|^{`dZmHU?c3rYUf~c=s**-68rg~!sr>zMmZ-l!fEak(0yPb>P1WXcoJJj=J@%j zXg-r2l=fUU#LQcO91Q%3`kl|`6OUYPd}#bol(BpQ8UWaf=x_A!=VRs07Q`r#Ac(mC zzPohvrX!%L@Owp105E=blaYr365}$$qv~4Q!_AAlMw1%VW@TeXQqVwg=)n||q$-o* z&IK)k9fHqW7{vw=%Rd&mFZA^|TX3CSg(7{4o<#jg4ryP4gO|nRk(Ld!tk)jM|3%RT z0?yZ1;OM|8Kgd1dSbSaVFf0Zl1X8Pya3#Fk(g>=_tQ05L3E`UcplUkB?H-j?pM4+? zstWZAOflrOtT5t5r7Yd#JWkU@>^2Jr;8yK&vcWmv#6J29=$pNbChEY+{DKZP!4JrQ z)nQQKR4K>gcLo;)t>aq#$XtXM#zm@o=@0+I;8>ux;*#NOWSwOQK6w&wj#}~<`~XO< z>$1}K?HvtMJH%C+jt$b|xiT^v3Ob&KkldFX4M71rf1c{ze8IL=B-G$Dt*`EW-CYW8 zJr{Gff3o$QSKSnq%H!W!>eD_^ERw1Hp6wrR>B3){Bnp3+eEoe@&gsoc=I|?I zYxE79SGx?=PUv&3nst9^$$BhH== z|Ih~^hnF|=U7TErFMmddE#3IeJ{n6{HKH(sV_X>6PZEzvYhD&38+p7%t90 z#OO4K_Y6b1;3($;eX~a%;5#{uP8=V3VW`6%Ot`21F75QcpaHrmK%|bQ&J^vB?MV8_ zXsVL#PcZVDxZCQ~^Z5T~QxZfSmWhRdW~p8~U?3$+0OTqN zbU4iBL}mo?Ggw`{dIy_6Jo} zDhTz#+isEdY09Qlwjz2ruS*E8LIUlY@+|6V-7G|7E@bjpYBN~cxo1NWOo2^CY;6JG zotg}v1yG#KvSA5ib-Bw|5_LCrD6AzgKKR-Bib&`;Q8sR7=!ceF7ift3TflAzQI05b z$fBe;8P9P3k2;mB5+7f~&13&;K^|$eECpS?OpB)}nk(}G;m+{1;vHC4q{|c_VRuA8 z4hSKPobBnR-@#Q1&GV5JJ)wNwin)QAGg=hwsp@2k2d4YDk;oHWm0`QBVM`W1kYG)c&>K7cNuH8I)u#laeW#~R<-n^40 zHqFsk^hRupwPfKzb6HR9;&hCXXJbW~!d9nvo*V6!I2}>sp-e>rx6rgL0e949)B2u! z)v!P*zh?6-eexGXUL3nN#+AIVX-pVATzk3|q2vwnMwz8N}qk1W;s=~=; zl*2cFlP1WXnVXw!@D1yr#f6R?R@U8@={#?~M}B73aA0+1P6rs_Xc0JT!!Hs$JG~5#2k*0SkTB6h-A$!1AT!!c#Ul{hQ>h5a4xw)gv%iM$ zub6X<=GM(pGgpl_`S#GB|8emT$3)RVg0p;Jw5KqlapX#yrJQbBad$at=xF+f+nwpf z8(pXEXv59l{7QO&p{gC_cR7lDc-5S#d)tEwJC6k6RIU8{87NFgOxxc_zervCf@OYZ1fzfYDZ&ooArdMp`8N1k0b zaYp`;iMM;No*1xFib;iOtJJMM)}>;ppMa15?Z_r_qQ}QXNf8dp84SF*{ zU`=)8!ynd>uhMCS{b2;-^uEfR7kN4AS7rvAi?9cW!w#dX{bif$%yMZ#w!q-?b8tI2 z+U&^0eB#a3Yj8YDMjMqd5Q>?rZ9I$>n@a9JjCgPi|9mzyOvB*>%kMZhJ)VZscBkj- zo21-gGQK<&iE-DrWQE>yqmBBQe9F&q1hsZ)?n_M~cE_FdF2Oj zHvL`^v4Kk%S?@oPAi9slUC|ynV67tGyglMby>5Khija^?n!pk(k<}-BEnI3ib@_Es>;VWSoStk*D^x<|?cew7z z!vVV+f)bg!HYK&yt6A?JJ`v0IH2l*{#`R0LXwOqM3p9F_77G3zUp+{d^Kw$Pe7!@- zI%mWwB+~S-X?;>2QXHI7I;=~0=kmQ`jK2Ty(2Dh%%%l(>ebBX8)0Q)uM$iMQ6ouz4 z=M(TBi`42jRHkvfs_Wd@5Cp?_ivY@#i|^Aplb?s*i8ID&gm+w)rQn9d)up)!59?wC zjB-4?vAHiXtO6#{>1HLOd@zjHnddJ<$bRCEE^>Z(UGs zt|8L{kmR_kzo0=l&6%iy@H#)9H}4^U3fdE>#Cg3jIBE#;V2=X-<&EM+Dy&~nPk8!! z+xkrxHjPtv6I)1M1>T)KvV}{xYqWPq^f1`LN;a!gHNSIkzXowB;@cBmmDkEBV%VoV zuJeg!zEx%9)~Cey<|Vk(Wj@llr^26pq0sDh^t|5-qLhi8bw%#chKU?gt5@K%!xbiD z-;Ri4Pq*PzgYpM-9r4X}n0N&f*Xp3-^B4-2#64cNK;w64MfclN=IRo_TtOCcm-$Ts zT9>L%0`@4+fl}xtk91GrS^Q;}l`owO4}#@VY}v!-0R77~qpa;rmo!GXAynL7q)r?` zQDI>K*r~biX8Uj5W{bXoRlQEvWP71{SzE$&e{Svc zDT7v%=Mh8O1{;uGTgA0KqO(;9D0Cxyg#dGn~r56U~$T*qZYca%MtXwYPi=@N)H0aYXF!r5mu)X#y3}4MV zLdhd8WCgck8&nu`y>|Y5_g)$LDu#IIL(==VujlE>l>7TpzpE1I zxDPsn>&~lDZ>TM-`wc8hH$M8XMkXj%fGys57)81jZIk8(07K&!G6{V`9}?)I~w+SW4wN$fexFKmga-na*0 zU|^z8FLA2n*RPD9?M#{Q%uRI0qtmoD{bZJNe3@bjbF`AvZc<6yCS^!GI_JT#Q2|tL z45&vM4EBfXLt5-l%N&dn&IW~Fi0z}@-I_L-Q{aKn;z}#^7|)#QmF9+|b;blIudJ8z z^+BzT6$KKWbK3dxbTK)S^Dd!3lu^QcB2YcLFq;_L?t=e4;sWi5t$y6J43a$D`JZ(# zpsaE2{KXlldWG%#eb=i=T--muAplrgd-JV<^s zc>rXF(b8;8n;&l67q|uQPJdtg&hA>SaD_q}vk-YY1?7$J&%t!HHFdjF(Y=HJ z088-GuOGMDz5PV%Z$+|R6;=3VDZ!8f6~BD*K|T35xm8;LFPEN2CGHZ+P2WvEyZp3q z^j{E`ylkgzG+FP$9F*g-2V&o?vvHg?|GSvUreiidFhjs(c>Ac_b8XZb$o&iMpEPG{ z|0L{82KQxr%bdoSeSUwKh{hQeTfdX;t}Mno0AuWUqt*naIotE}HOU*{IK^m*5~u<$y%?7aE=jwj!r4I`_x6|)hR zGP7H=9X7zV&aI9aCGl^Mkq5vh)|&kOK3CJX7(n$J0BzsSb|*}{>`Js0KAzQsws_rIvXBD^+HlLXFIyg7)<21ITOIWtt(^to7!vY8 z0^wwMU7sawLAjq8%DPfZ$$5?%eWiM=0t0BqFUeG7E46pS)oV4@Hda;w;*SQfF}5fg zl-E5i0hHUWE+IlPUj8 zsrkRJ4!ZZ(7#<)u&o~3u15zz9W)t0&M&hS$+>0-%UPX3ON4Q_PD!%BOB4HWCiutL- ziie}usEf?1y~<_WUSd;?#0AC0SHnchV7(2HQ_%FKePcjs6p*}r1FX!1xcAdWqnDa`i%|<8<$4j=bR&R9 zOqN1=ibx@~KnR{AFu(w^-9pILHqc#?(^CPh_AKI-_8Iz zSrM4CR!xA`+11W#FwbmB|NISgz;_-6boboi?XTpKEHLVVG=dD)mu_>N5wdzG*UYjk z8$+FvK^!evQ}Xxb>0kx+8HoTGFyYG={h<#`qW;IozR`1KG-=WgzWo1r*_(es0WW(q z#Zhq^bW=)p7UqHemzRR?A|eU_U}+R`?^DimypTbewo!hpU7dYNGTG057%8{tW0&}9 z=zF20!|2exPeRXqiOW!{rHjtU1>JZ7GX26HC)xfa=kajJ?TO0gVOU`DM}l6Z3smb@BgkyBAuO zlr7t&*asq3Sbt9Gl5<(SNOh#(Y=Zp58%IM&KoHNhXa_)f3={I68d>M3A>_T={}h8H-y!r0R!}f}#ul9{nDWQDr-wz-ZtBmLYy2Oq z0Shg#2*VK$hkCz2w^!R)A4@1!TT?fQi@ZDA~Md*7%J zQ7IB0q;5~LZ`l=L^W{Gq)~lmYp%&fA5{|E){CZL>@4Yn)2>hwR3dRb-bO>4R*(a@_ z@UeZwt5XCrR-OZAFGD-$L%Fgw7j}WU?&G#--uI2Eu9-DJm}zI-9=}1jmhGh@`(mla zzE9cNoTZ16zb-@}H+~#Q1s0d6%4a%L&_?-ACGCh1~ zy1yD)9^ay&=mDZla!zt8eK%j_lz4X<$WbUO$$U!`&|yY{&|oA}uhEH&1G4@dI3@5w zoB>T}wCrp7dM9CnjVVVQh;4LSINA|DcbUN)g3r|AgKyL&^182h&||JgDs7bquIOI} zoO@b1j+=#ZUwifKxvva%`8bb0TSM+;btNhAkISc~Qsu{ZZ+#-L2sZ$2efgn?Pl^A| zEYk)&(;zKz;22#!x_0jqzezcVf?1+%ItMbZa5n8V>8N@Qc8c%;)*)n&Q&B$72L$dG zZ1PGL!mQ#xAA#%UpFSFjN)4n3Z|?g5JoUo@@{N$P zCkcV{TIg`z$&ULH~KzA)Q*?3_&JAJO1p_J9P;fPW1 zupJ5ESxpdl(oXB#pND*sYuuGbi2js*pEXv@zAO*~dc>)0l@ptqs#hz!yOdt6KU;GB z^90&p?Nz=13R~nI_w=RnNDi~OK<=#-$%{vem~KM_Js92K<@$v}mm@#Y`XMn@WZ}^u zV|F^=q2_fq*bP^elHkQw&6@z6ncdoUPAlfGX(`UJlrA>M5X#8bIr(S(8498A(Un2Rt^-AbCe%bpF3!%?ZBg5{O(#g!B_VXEv@){CoAM}!*;!#g@C^cacQ!KYyi;~F- z+OEc_KkZf|EDrnSr-ewXj}q%u(hN-pb$w9ZTtEHvobD=bl0oII^rJuwQ2$!(Vb;<- zgYM3vWR2SvQ`$3gX)7oD#Wi2&I_tQA)T@Omk$TyKbw#pIw_WS(4Up}w_}ed@XV<;} z3#93rE;wORMIb=9N#tbOdNN+jil8H|O>o*6H{DkRoGeC29e3nsDxZO2 zA9-vH+2XP4Ps#<9IVjvFO^#VtL!mwicwnk|O_;AJ9EVnic%QXaa5#NwD@}B-KsS&T z2$fb$J0L+%a|{`Lj%-1sF{2ug`7EWj#-^ckK|nPqXuU|$^(H^`Z!BTU^RdxDfFxtH zdT(tw)aKscL!^&Kxl?;ER3OfS%RG2(@>`@QtXs@M&bkm(vJdvI+l7$roA9B8pXgqelo^JaPVonZ;OUNroe9A zgN&dh?fZKtJYL%kWzF0{u9u5y0wb5PLdzsJ=XU9u=#$tOx8&zw({gP(;1YPCJb)Gnmz&MU za*9?hyk0b0&uH)5Wiz9as?B>H2)^>e**!eMO+1(CZA|ua*6ASnQybG4j+i`-0F9^W zxz_YWT3v~o>@u!HGTP))v$Q4@$(Mdq3K*YCvQQB=xcpp-toH|ycGAH9Wl8=w%Nu{- zsfkW9`D*)6?@V zS<7ehJ7IykQI1a(mjFdw5i%VDK;cwNIU%jrWh0tdyd~lz8A%O1+DeD69?QoN7XR>H zmlqFA5Hd^M?FbaS9B9li^ELl^})Dcr~9^48O4>C=*8 z4l`3>1}`dApWZ!TJz>a1IxA>g;<9%C<3qBW>AE(=4*m!0RNXc1x1}S^PSP@TCY%hD zv{rDR?+I^kqmMpK0+ae~5Rydq`r{!;C<2CQFxPfhEyHZ{_HfrmYjl}Nw+5&GO#6k6 zJ@VMKpWzf@I>{6#!@|ZFO{px6pc#q=ptdYp!W}+8T%0W@CI1La>T?Mo@UmOMW}p4U zZV55%g17FD9JsQDgldR?8;BQ=XFSmW6GOvy`B-FvQO6=JjCfsN;k~C2hU~jvTJmfH zSsRAEX*m>y^oIYYIB@?r#lexXrsXz8IS9a#!BL5R_nKI8TpYMnCR|qT2a)JJSo%{Z zSI&QmlLvP#MhVwIy7-}5tN*3c9x5VZ!S4F2i66xz9pQtMoHc7~kq0lUIenI)zn)Z= zeWR=psot5#0S9FFR&$??GfY2|&KBG@Z*2XNcC(AXc&erpQz1D=ijC*Ej#;`lKOZ1H zHp5~^zo_Ahm0Ye~TmFu@6CS)*Cbw3S)s9avd_4R2#ZxmiY^&QhysX;$>?wB;Kx$T#ZXFXqd+_ve+tp#9^e z0FMi#?dcc+ncd2i#^bHAQN~vPUhgOjjHsuVbKO)T>Se`y22DVyvD!hZBio<+8fhP5 zo0NE_K4=BKUAtBZC%Nwrr? zQMi>oy=n3L6()Bnz%BClaKFxBdVj~Wk1?MiZQ;GL##NRZSdaO{&+9eElP~!VDqhVW z&#fqt>9SxeUp;8Npaj7&Gkmg5Ec4(BV zeAkQkO@`Y}aQRVo@E=;7@a7ZW> zy7p?vCd7%V_wLnhznVBGn>h@3Mw(5O(-L8GC#?&{w=H+(I_2oVF){EMAFwql4Pr%! zIZ>Ku*IRspB;ZvAFB=O(_k83GQVNoGf|W7eP4*G>-h4si%;5OVhVjyOHKpP1O8|aJ z!lw{_+pmfPvNSYF%=<&s?ke_u@Uz*svr<+=BERs|&mbB01CjhQAH<2_m^*h9tys<} z0(#^7*YFCdnP0#0Zv8$%96>y^S9-51xWYU1mR0gb-vZB8WLhh{G4@~1MH%IagdPPO zVMUr-TGIO)L#736VHRdt&>tkVf|Wzv_S@LAA@tXzyTx!j1Q0gD2vZ&T6&~eU8aSCs zf7f>3Og0d8F()Z?2#$Ic@9)qbi~+mfo*u25uEINb-PtW88o3W-=vi3lvk%`--LGl6 z1;;NB7gbODiz$D(fVv{ucOh56KhzsM;dU=hWR&5o~31NVMq(!aUe&VCDk!iWxdBF zsdps+*X(B>ea@~Sx8eoEX*)E{*uj*7FWjrTD(v$59RH&%2R59{)3niX?*#0jd5vx1 z;iXm@%_ca=?I31Z%q`AUN!kl?w`d3S5(euU&&>(1xXK@wY~LsAgoP+8Kt$+N*$uep z)Cy3SKXV2tb(#ZBZ{AkRnAV@4s`h*HpbG-O_GY>qxMu4fTtmMQ`diu@FW`FhvD)+YwG8llB*B=p;vBftw8e?U|N5$2x!c`K{hQPlTi~v8 z_n-hPpS{oihGB;xI83(uFqI7=`OgO9FH@*fV$A*-inra2nPwQQF zIuV8p2fG{3%i0-v8@ct?&GUbsEkxdV6QnDz9YbT_%HB=o7ZC8=btzOj9%vTO)UT<6 zn(tqV8TpP+D6P}`E#D}51P#x6>)WrprP{f^IaCmUpka(={B%}ORx(wG>)6SPg1uWQ zn$wvPsTW^>Q+#*j|8VuzaZSH%*gvR9_@zWZT17-fKn1DMAu0j}ohss}(Or{9DU0rw z?v7D{)CM9sVD#vQ0b}gB_Py`>c|E@$fAT^Z*REaH`8m(ycps-pc65V(&&{_ZzF#t@ zHWagqyj}dK^z(L~LwBN_?d|f*d`OfUuXUF9G{~QGj_{k6EO@OZyJaM-zuTym2s62F zXOgtT*}#@U6E7t#JpyT z#7a-##nFoq?4Tc!?lB)sn+~%t&a@o5cZXA|y!}?6JBjNT+Dq%Waszo;gFSaeYipb~ zSD-GY``2?yDdh?9{9n7>`JFdQmt0wyN6JS;88VAAkTRrjH)3OU6mgG>Y62DMc zGi+RCkjaC75jbdPO;$6WC7OXY0 zJ6z`gxMwD5_B7imtj*wGl0+75W5YHwE{P5`*9IVmO#b(sPMlAZT1D?A$-4Y$WMKE_&sO?{}o8e%c(ILfDx$zU?|E*;oGI6GzUSSj?A27;cbC$bY^| zbL?yT;1oq(tDRm?yhv=X6S~fNRARou9QC2@ol=K+uWR$pidLX^UmjmwB=*gi6esd) ziwqe+R-r7t#h%Gz&MpIkoQC_YN*C9yHs8CA5-U8`<@URN zrKz67qFqXCDgKB;q-Ax5f_OLE?|?{~t+X=C6gSqEv~^9IlRELoeS zih`h=C|{)qSa_C^|D-qdXyl%p^f!fRc^Sx6!_+nqSYu(Xmg$;B$04eLU+80Wn@SXi zRjPA{>s1NlL%NV~j0eiq2E7!_)b{O5WEiW^mrJB1%_n4&xeGTQug^EDX|V*VDnFI) zTS$2}W~L}VuSJVu`)9%U@tDfh>&jwnA8zV#pSy8AZM4L6i?dp`5k$;XbbX2evOKrr z;PzRMAZW2cl~tX6--5%T!fgbQb|#5%bZtHwHJZ=igFbkh>|nUpn!M4Fk*Uyr-XpZT zKb&Kd^*8l!|Jm07wn5hGkVg!joUL3hV-Eh7m|_;KH2w+XABhUX^AL|zEr^V34xANH z3on+E-vBjB`tfc0!w5%JqYnw!Y|hVCd-$FJOxwMpnXx|);^*5!P6tDKXTR_#68Kdm zkakOEiHwB+NHRFEGhaKOpNph+kZfrX*n&}^l17cr|CI++8{jN;w4lUJ1>z$1L$d^4 zg^(f+*l7-^og~uTcH-`KxR!aM>HU6!#9GwR(VBK}|U;Xl#a9v&wTnCoPy8C;zd8n)mrvOrM zmG=Xy*gP zw?ahF_W{WbchCRmGlTk={h`B5iyvbRtpc{2KNYB7=Efg)XuwS!Cd+-`Cqt=5N480G zvc9)rsc+b>vrwddqN9*nzn*gA!|Pjtj2L11tT%S#h{u|sq{5>ftb$00 zwV6*$2@ff%1L*f&`npXzgfR7Y3r2k0Qj#nIrl7jg?+JzwsxE<7{6>eVle43y@TRrj z;Z7;@^RZEK^ow4g%`r~eDsF}2vTz7Prev^k*1JS%;FEv=YKNB~wh*HbvNrU~JC&8x z8vMP!&HcQ~QmXkPujQw3KN4d9bM)PDA9~sM(FHm#!V(~-w7SSptc&qc!RSw0;2m-} zL-8HbIrms+#V#8nFKee$`2X{_<(2sT9m96^5@Wj!h$G+Bb ztdcW@7Nh9__zgs^>ZRV~SBINZW))E6XQ`AuaMKOndPP4=;AtkBtc}%$J+hqmOUka} zQ~Tj8+34}+wswA{%)!2h>r9J6tf>*HlfMIcpP%u{bAVt*Pk3xk()&!>asE+YVC+UE zUSYUm>ba8b-tJI-hLt0Jl0bzCH(x!8xXLMHfWJ1mOAQ5$phLj;(Nny((0F3imM6~O zodKH%&zM|TA`l#No~R?&uThQ4hAvQbe#~U#cd8Agr8*f*T96Ix7r2o{NwZW5lE~+o zq-~w6`R*Nps2f4PqvG8sfhD6MxB`?c{@y;ZprrY;gxouk*g?rjllcmf8F=*2iV&=wl6GVdwnpD=jyvyi)n9$XrCi7;kTjp)2en_ydz8q&Auf za@aO-GA9Vqpm$CwXvRbk9>~RM+(GK@vcO=FV5|B>}@d2Y&a1i#f{wPXbp z4L2p~{xvs#nU{I6egy4}Zb$=&j*eR>&nXrmqE!ARC*776dE`VI7-qOFk9B`Smiqck z5+vp}u$G#AeP2a#t1N~mWI67)pmC`x?GrAmdMo9N$P(zN5XAT1+n2)GM#Du75of+x zm$Wxu1G0;*>C92tJhhljawK#1%HNMp2Lr7Ej82gDS)~xAz3ANz%=WAP%}=?>^{&Sr z@-|$wZqlhvYcepXnNugQfX+P8n6VeLn|KdSJX_Mx)=F2)tquCc(00R4rlhHJV=Iw( zOiHH~5w*o1!ZsnfZjA{wHkJiCXPh^_y3}k8T)&y0%NOV{*$hh@E;2*`W8C|VCeOqE zFC|Lz`p_toCS*e?H6wRS$&P(m%AfnHGJ!0X_*}0jZdcgW+GMRbaW7c+gTQ<^>ML(9zbKCkf=9BPUk?Sms21YJ zdnU`oBnqDKA9Z&B`gSiv0U`3%D>~G}!CfiSC+>(F245I%%(p>klPx7phZU4bTjIuI z8uJ^i3>gy=)yMSKJ>&8*rnF**;(0ueXNTBXqOnR%Z`$ugvx8XgmSWYEoH3Nn0KlH{_5L zFYZ>n0nCGh6fuwTDG!`Xj2xVNZ3-*JzpRlg-CcJV1jW4_J!ojn_dF-I==g?sc42g? zaF#12PN$E6{D0zvJ`H@0lUh-2!1+-cv*GHO*zMq&W2YVqhQ04dES_l}eEkYZ)*zCj z9wD*?fXK;D^hh))VB~8$T`dsnK#yiltKBW$F~nou)|qit4mEjjSvdw8_t3g?+M(<=YNlklND?|*7Z7f?>eQ!Ik|&1D6H+MjKxW6b0^`U<+tSh zo{#sJYjf)?jixeli}ntQU7wgH_d`>sikl}qjnNQMQ$@)X2Lku@s*#CZ6KtZY0+w>W z(QXT+F#~4Sp-tz&BB{`#GJ;PY7* zRqx!?^9k`+y!z|p7?|}rVbQ|?U2j=qhuKWtb7&VT-dkmp<@Q&yillFb z{s_1pCaOw7bH)B#YI#!LBNEHncL;*WG7KxT<^Wo=I)Xtw^5O znR=%WQC{S|@w|5aLnJJnEdKpRre=Mddd>6)AG_LCP!SU|RvPScPbCJI`s10P(<0Mq zD-e(_es;2IJuS9Wkx*rYc7l6Pe<}@)KT})v)Rf@7Y#*P)XTy;m-{9CNWr}O_HL`9cKXzzJsmt7OMre`52D7?B@O~38R#)JwqiBLyUFQH5ONc7`DjgA`*~@-C0aD&8GA>ylz2JHauHuW#Nwnsg$bcU=SK zKeJ?X!93QhGIb}?aIP4eXj}KFbtkk(0ec2EG|Zo$#jP$s(NLEN+5AW4${WMm0;>?) z1(MB4U+1}vj2B;ZiZMWaRauPxiO!bWIwq*qrp(&pBERvUT^M9;Jg%J;kwZH5eCRr? zeaiwu5tnYTFw~_zA1^-)=l85g{(F8TIc&{OT&{S17U)Z;U)C!p4{Svkewauhto`2& zcCIljCDaEi2)r`?rEF;V>y*KXzOiDTEo#Oq)K>eREI-9vKKFKQJ$`RCq0Oo6vMdgj zat-1OT)ZP*D+*6|lO7zumV7FAysX3ldX9ePd~)mGh1XSjcnFKwRCI$~6I;)n-d`U% zyF#Y`1dSHW!10iy^H!QabOqPx=9diG|pLMpeh!{hT8QBHW zKjwT7u{THHm*DFg#4~=4Wrx(ol$N8yni7#54Tt#(&%JBNJ^#;pfPCJ1*np8{;@7m3 z@U68>6?sc!@}IxIU7?wz#5o%~AGF-}FjphtJ<;=EOJhtk)I3Fk&;~e5AD$;Jt*RWA z&CO#&AI~YfpDn|;>bA|+p*xrPjAi(=aH1ugCI^w<5t_bdwsLp9k8u1vaEnyBqp@fa zx&;ZB4u~c)cvxh0Xe$*T;WG9EwHf#_Zc6K-InSh(ocJhHgg{7 zFYC>nsL1oLi*+514Vt}-QrPy6(0V+ZdhG{>gLoPOLAY*6@k}SfP>dWZZ$NKo`oU3? zle4N+3BgkgdU#J<)@!}7FvL^rCiTHTg8=a)Z3ntmu0l>o!6j@b(a%kq(&xebX=!Di zqjtO0im&Y<4dqZzByCS0DnvainAMjEM|yBa*yuay0YHKx5h{H0_mAj%(t{`IOv*Yp z&FWEe7sx=?(gX(o^~Tb9q1=woxs-?=JcAzH;0O zfK7U|&Dx?%eT|i8MPz0uF6BOq{3DYR8a_YB%00xTId&t-9TcNUp$+D}A7XjLCEwY! zo|+e0%=UnqRtF9LVr2Ui;xo4OIeKhsSK~r<^UKYrG6aT&yY73u%Uomd7Erjv*-EDW z&t7eN9J<8R6;%TiqGQY^$#18^{+W8u?Dq$n>^^ z35k*cn4IXm@3{c8QANG!#Gs58u=;E7Q7Z0{A$+}9SnEuv!!VLLz1s}gF$SIxjj@qg z{>y504OCQkoaA-MbQtmdOzh@W#t)6UxV_otcmxyRL|iSE*y-!9>s-V!`Y+?&Dv=6O|5_D z`-EXxl$){Yq(EVf#u{6RE5p{o^D1=vKYmEiw$+9TUljEnNGlWg)ODBBb5_{2y6+Xu zn(Fz55x5X5OCHNujaMv{5<lOkY9(mllMbH{AmQ*peibpPRovH>|B zFiJnaDn8=#>X{W6l2x&m#j;&Mm@qCR)_^O1_-{e*RqEZlck2LI2eP&-nPTZd+->DK z3K~72HB_fcrE%HQZ=zG#81owvgZyg*#_db36Mdt0c_I60bbA2BA0q&QTaMW zR)FgKZ}cwJR|k?z_{nSk^wI$0cix++Y6~PKH+b1!#jai0z#uTxknxIwPuD7DE;-y; z1X&o!AkUc=a$wsHb^1Z`ve27u?O4x4K$jPRho3CmNtC^L{B^*8ATNlH4g@QyIml!- zpK!gWVZKX}*nq-%KBMN@b>)O_d_BZUS9$#We^>hsCF_mfDsgr4Eo%J_%uHmRrLJ9Y z1pJrhp>5fYhJG26O2ppL#|!Go+s|)ONL6L!IGuN4o@FC9ApNKDsld-{0Av7@B5goJ zYaDpRVFf5pL!bX%WQjCD{#U#Fhcb|}&RAHJVefZ*;-BrVxj*y!-4)YVtoY`9h}pfW zFQbx0#Sfl#Ge+_SIm9%Er;o z{N{I1{aU<{@j9#oy3b#1vQQ)^$$1MD4*h@FtM`IfP3#e=?sL?nEvejgl;=ywBg^@@ zB{T9%EFfM6F<3q`pz7-RFLzG@#3+=JB7KAS(9J##2f*9gR0-eh=C}0*f96#0DIj@Y zHXf-OHL)f!b-~E`mK5yMWj-6AlC1_b0bJ^7DVPZ$iu5Zw7k9F-CkUwU_-IBH2?sahos_kv{nvFmohiAusBh`cyH=sR9sn zo*xjlAWpLhVB}j~03b|0Z3^xLH0JEXiaOYe8}#s_fVHGnT#)~lpqgpV0s)jAf-oXx zH@%MR1_?xCU^=~CO#2TL@MtEchTs()*9R;ip4-mL#7%Y8^>;5CTw(lk8Y$A_!T+$$ zwYl&=22hO+5J=`W>QACW(`in60nYTC)H{Y(zJNl&+W4H*}Qf?o|xu64~S)47gumvxZZk$3S-G#t)Fiw={Q5N*Rsh|>76$x$Cr@F)+9GNajSNo zj%1`)kGtOr9{RrCY?Xg+L=*knoC4U5CXX}4c?P;?(?ht+fz@ct_hf}18%pXO8()Pc z1ylPO%HElEV#);eYEl}5E|!!yxq7n^%zpk=cP5`_%~vP@isNEVQo3Zr3;Sl^lO9fP zH}yHtUT&P1=8^HNbn^W3U>(@X@QBPck{3?g}Vv zDEF*m|?3GLJVwdc94%2+T+XmFaw;7K)hvbVPPCg5*< zRXGLfVy~Kpk(-O2uYgXDWckMTKe7PAo}SkvPUzS%UT7<;yKXeB@85&Jyp|!o6vemm z?*TXG82s3-gSzeeG3^WyWB^RM0UdSH(XUG~*GnvINC@C{66u^4L&fe*O4$@r7Q61} zpaMMk7?6Oy!aldvjJL&F<-GOn{>G=#NE2et`+ol3o_?jp*Gq19g=jUn<>o(WLZ|rI zN!CS;`NiJY2BJi=rTi)efnZ9>3kwww^uD-CdG5|RMur&nT%oo>VBj;#rQk`5s$I@o zqv{EdQU-MT}4{ChSPQ> z&i9lld*{&Qx^1>sK+DJCzb~28qf%s`5BP;_ZXW`seLYfbQdc4sV1E)9=y(@ggSR7@ ze{gYCUb}sF{>xJ1+%(msuq4r556@M>5K(6`Feq?a8kH)Cc?|O9Tnr^#*DsBRfHs)R zJ0Q49U;7R|Ne+^2KHso9DHxB`QxIij+;iI{vhiOl>=PEtWK)Cxqzhbsb#ac{f9JKP z%%UP}{;%SGwt^S9?R1*GJ@~bbB42mho{SXziO;wife-bdGG6$2Kq2TTf;e7EEKcWa zr6(@~W2>DD0)Z0jRLe!10ZLJ`bAM(!zFq|9c~70Mn8=&*~Je8lW$y&{7E1wus$jN)gMv$iMs|OR9ue3sfS{(*bBc> zW&B7btcj&j)^B_LI+h1G?cGxD0sG}Ag!4j+N}qFJ4IDJ{jV$D)px2anZy7uFKhkKt z^gHqvc;U$(!%K+Q?yV;!nX5Qhz{P)kQci9v+OE zHdw;Jk*M0o+xt+Wi?DpLHZk#$^#>B}107bY9tV?(1|l${qpx>=ztw2U8dCOD`6l7k zY10#n7PPLuS8d(?0F5C0$bLjs>%2FH-d5eRXznBwI|YOsvMu(7`0^pkwXO z*FdK)K3PncaPNwtq?jy3oh|7`j}?$c4=99TZImri>_U<4K88l@{}y^Q|HW3;N(|UX zwO?i|2Hz!-kY#?ry^RW%$>P1ir^@;HLR-;Rf~w8QUMg`t5V|Vz zt`bw`r*RoLIHLHaD`=^tyBz|6ittvXo`#;y1%4zgl3Dq~g*)b@^@j02U_2-2%LBF4MU07A9rFsmd z=;VL=g7a5d*gPYHKZ)qg*)AI@{xxm-R!AC|+HV`9PUoH@;^F2w*~mR3^bv2&Ju#6A zGmXB;^K?!LqW{30dL~nL@4S9y`TFe7O<22Sn&tc#E>}*ozV$dRkx>1UX?*mDCIdBq zS*o5nA(rbWBqt|x6}e$kupU*7G~e1&`NvWY+|s*N-dv)9lFA$SB#3ODJ%2Z7DL*YT z%W8eQ=ZSg&nGAzRT4)L{RoNP3Gui)l+Cfu_8gukXqBdV{oA^|2i!@ck;KP-z=c$B~ zzF{b0+LQnph$AzgjJugrQ{xBKsM&9YPIQi@mNi+&9$_$Uhw7D2*~+SOe@=3rrS-}F z7N~Cg!vq)NI!&WH$3CZEOzw+oz#I?g6J1v@bX6s1pd?y?aEksoGk%SwgU#n#j9`Nm z=bVs|U6>LCIag(d3p3{vX70ypPRpcviioE>yEPnaN?ty4JXU7rQ*%)e@poigY3u7b z*TMbOBZfxTCZQ$`7j7z|I1AawYGsTIpspJeWgZh{*D%U-kv7IuDdeJ0oUYEZk&%&o z5c$xz4e8M4%Hdg^7%Xbhxc=P&TkrduGTL#%;cPBU_~eZ`q^;d8L165UXoAl5#B;P8 z9lG|}Iu@WCTwIp@Ge!4$f@`tBz)0o99aBSz&?RB9>)kn%hbkPdo6#&xtafUt_}s;q zAL!|}SNIo*e;~PrGSv;$8q&A}tH@W@dgFZK?>7T<%|!2-ox;5OXh_T+ zE8-}K2zkw%+v%how*DlcMzK0=xK`@Qg<+Js3cSJ!QSwZUVupq{pzLRrcmCO5(MMeJ z{xPbQ2FqJd;7lj$GGABqDUcgd&Q-|vF7y|t;_4qr83CmsI^*?z451|YJx?XIkn?67 z!-ghC^HW)NNTv<)?6P6%>kkzC17nJC+$!C6kg#{F?mugoe}Xz_%!W-2&3>dlS>_xd z=a6z&;ScIDP_?r2+4;qaju4+-CSDA1-G4NQ@S5EpyChWGQUWb9bCDTn<)ewTX7V2S zR3EO)Es=pxYO*CGn|MfQ$UmPuD8(p!-r`HAj>PN1f5^xNME@4+zK!h+(>};ngjOw2 z0e2b#4(x8t`LFycCz!26@SyNtYnQHK7&i0Ie^zylHb=WEZX(1=wJATYs@-_@9So*9 zJh2bpMYy-gZE`^$*|98wuO0CkBgDQ6L0pT8*VZ_t4Pla1J+V7gho|yU2+hU`dHl$u zJIE_L7a6yK`DddGqVucNU%l$QPJ>~D<-L0K=vH=q?cu>zXTN42{K-hwL}#U-41T@h z%(W_0JFWnxJ$yjpcO@r(16F&@=1*fl4?g&XeewBQ&SXJ~_CYFNQH)RhM#K@v>O3)) ziK7_P`yX6xa&cy`G_Wff6xF#5{5BU&K1)olp+x^X(Zm+Mf3u?qu z1oSdD4NugWOv7q^!KpbR@#lGUE#@Mcje39Vc3HvjL+OXhBMNU@$={KYRcf!=WW9B9 z-mYkFzu0b<=5o#b;=r{7>c}Y8oBw$;-6zP4-)O?TwPmu`Xrj;49Q&^dQaI7%Gs{{V zY{-w&xd(Y<dg)1H6WSxpk;S z+Hq;X;Rf(ki~EiXPcTS5_`Cs&_7BmVZ&&&Qs$sCiiCdLLNiV`+I2`1pUUU58N~~@} zorG|&4$8BmS}@7XoG<$AAp-XUjTZ`RuG96WeO|nN`wJ(>VmlUcqB2fDvSg@a3HhtQ zcLMp-%E8`10312k{$XB^uM5))^NP;UQB357;o8>|9iRY_5)K4f>8U3=d0^IchH=a3;fimKbgFV`z^Fv*^0YU=}$f>qP0Yh7+Ku6=L0 z?CrrlFnn}1A~v69E+Ib@m@8IM?PzDp%KrS%wbjq&?19m`+7RGs>|$pXVCubDG{5a> zf|$ovuRJwF1`BH*iB2r>*5D^h!rF4LeWby)T@u!6C`Qz6BN~326M)#&+U2F8Y0$CM zu&P<-#m>BJoQ_|P|4Sd))Mc;S0RMMP1-fV4<8|XBDBnM>jksX#A3PiBMQXhj&o<;= z)=f={Oe1Z0?8>y|cK0~y?DQyIES{SaI7Y5es@(3=sR;t1sz<1E1g;f%0gAqi^9KF_ zMWRLdg`yiEt8|k-?N6())m!fH0B&c^fvelA_cD^_R>>~Qips2wrcJw%=4xjb=5H?ds!8X&J=DXZ3e!@d8jP#t=DKdIn zk7n8bc3!|Xj64Wy=GEp&0PV0LfE>8yHKEhb%=BmUkQD#P_A%gQha zNn^p$U{;-xG3i?3j-J4=y&HT`R_)cVXo%bWu9M`IWw6X?tNXT&;GveT-hZc}JKmvr zzEz}weR>Y^${qT#^Oe_e8Xw|r1m!OQFbn0i%Of*A0An~>WGxY9^L)mLibYq zT-B)#?!w>!XaQi{tX_;2BAA25Pu$egU5?0a& zyV_-YiS+D2uQQ_1cL7y&snzMyL(5gIM332^vnczWxu6e4@7G--1f54Zo{D*QP#Kna z$IB2(_)j;Kg6XQl@;hfgWpVNL%ec#$E!-yh4l8fXYT(+j$3$tUur$$>r&2r!*s0OK zVog?~{uFh~aW@hJ1F)SsqN*mjZKPF|AY8e1m*HitHhL>G=ElQQ%Z)36$+xvpcLRrz zvO(_-(zn&k>p5VFI=?@nm9?)CgYYp6Copm z#rt{<7&IK*aDQB(ZDjPm!A;kW17u&Z!j*m1GDlx(=`FzjLMu^~KNha60f3Fqf|=X# z>H+{PRe*uw${;0xr#bEF;y(=Xgye)%bVU$)q`3VMFBUzeg6)QS+af(urWu= zUh`XT`9B{=*rftnVXcX3``zvJvGh#7+?$4$mhte(>o}#fY98_v|B?Z%dBV?M-<$W{ z)~2Uk4gD$1svYCuN-&P%c}z`B-Q54e(JG&L0gLCAdt~CI{ugbUYp)Vvqn33L9X~#; zt6re~2TYiX_OEabrzR$v>8nN__2MV3r>kAUh^@}8Dy)W-HP3lfBMN2QT_JvdZ#^6O z^{ex^dJ`pZbu^!&u#6tnqng-Va*YB&d7Z(A2IGh^Ao0+7w@51a*qus%ai z&w500Z_(Ru`y}ancOCRvdHH+29lJctVKS4QlU8p9f2#7WEtm|)FR>b{6eCNBxSI1D+5`+w~S==>0Y=aZ6 z4UNdy*{+&6cW1kfN9)${{8()E#FYz_RPI1i7Q0%zdr=il4Y;v&U6XQMQ;%O!^ej&m z4r+Ix6CrkWzd+utdET8o-}(p+@iC?-={c;|!vk<2+cxZJaEQGN%+ATV(_7UzDNQsW z68eU!-CO-16R50iHyr|Q&mH%X`W18uJYwk1ZNz4~_}CFO(L%eOQydEyX;UI#tW z?KMd5oi5MvOy*u6{6Pgh#{K)HU#j{B2K9EBqEfG#OKYh_90E2CaVp@V`V#l$4d(RF ztX+G+2|av!s*BhUVvps$^Ps)BVIgXyuKk68 zfN=Q+&%JV16JjwlOH~Rl0xa;V8U$@P_eF%vfM-KEZsSnqLag8XOAF3QC?y%0{90#C zGs_c5vTgH$*xE#q;j)!}7@soXRkZPtl>_2l%p#CsSiiEFf~u@2{? z2%}+FjpBmJ5xb*ohJtB_bGm=`?c;iNo6i9IpaC`5)qvGuc0imFd=3uexNC`V<|z+h z30{-p_ar5=C+3j}_XmYbB0tLLBkfyP=zVuZSS50~o60iUE=%1sz|(QrjBPU>M&XGc zP%`+wJA}c)vbf$UM`i2hRdigDbqKGhl*0o%I69b)!*~CuiMUUa7h*r*N(Rn#tNlE@ z0p*w|;ms{#+vu~UDwlug`{^!*IhdY9tS`lL*L1V#ERm<+DUA_Ta&k0`>6ZH8D71FN zW-Uh0H@;mUVfe7Yl-T3CB8=F7SJZporsda2#oAcD_0ti=sOZ`htPwVLk^t7V@{vLn zE14)|>y|ue&r@}!gpn4q-g(0cWU^F^3pc$7pRkHq-e7dqC}!r|f+%Fm|I&JL4W=9< zeQJ44F6x?^K~tTI5ry*GRgx93u0xp6{<;Me756r?GrVdV07PJJlW!46E1K3t2|CNt z@M*~5NTS_|>-cNqpWf4bm%Ifw1&Zq@SQ;Uyks@P`gl6keTi3k}wqX&4=}uo?coH|C;IjsI2p01A&(Z zzy?PqCPE)%Yvz33rQzwxKb4ZoF#e%<43Rx~$@AGdA!rX%RWl86)az4bGDg>Y4yt%| z6^Plfrn3d9M8f{-5iKnRA_DVM`bk=C?UTaT>or3CYJ#=R@gLl& z54m=erYkyNB2+V8YWQrv?X*3FPCJnp#A?b}fBI(+h2Kl)bQcmX@tp~rfW<~LbC4GL z->(E7e=LjDP-nzp=9cehd4&L)PT0%t6Y9R4<0$bc|8K=DjY1abg8bt`Y9=FRsOuY| zFCJm%J9W4@&QuSdo~+r}G{wvZU?0pQD_w=03kBUxmfAXb;6%L8k9)hL%!&oH6>Zqc zeP@hVy}|ZmQNck;zPc^k}7k@?BF@XEBMlifIzz`d_%hd zCyt=g_7^rT?asb{kZ%Z;w7*(Dg1Ip=Lm zHcvI3N9-M<)A4w4Bc8uVw;StLJ6bx?RQ-mn z4Q0Nu6kB9ha%UvBOIbibu$tD;v}&V)_5ZiFs|O&eD&0w5VHNB_%Q6Rtks_}sD_oxA z0UmQ)U9u^7_ij0mMC&#XNm&+e2~s@L0<{`XLQCfBuz`xu!Li@$C3>wD`*~K~T+53~ zc@E*`n`pZrMQjU1X#Z@xzebOA{p8(Qz7pYA^aWB*IBKJ~w9djRTM+FIkUK?nPo6)k z{97ps_lUog5HKKFYPCp%uJEd%PXV0pjjmH<8PlZ{-uW{MuouyG^{u8Ot(2`^T+eIX zjlV+BT0&kX?r(R+M#q3Spk@nD{_SnmP1Fk~$zh&NdFuX@CaklipZ~|iA-($UjP+}+ zAJ)Y9Jr}u=3htMBKVaEf(&x!OiYa3%=!0CMsGDD(Z|S})dHTawX{{nxmh$sj*>G^J zV%Uq(Ek`o4k3$>puiTqkxZ!T=x1Tv#N%_ilBH!;eYxh1*I7lVhuQUcC zRlg$ZeQ=^pTaub$MLwNw)-~XHrAUD5ciN2Pty>c};2C#on^#)M*Cy*Kk|p2zdwKJ- zeuK}LqK+zV9a&Z?y*um`=5f>S=~WXHCVnKHbSfuE=j|BD`IllzK;Ts2cdbnQOaX4Yx={=gXKJlMnqx#1=o-sRQw`?XSFogB0kpvSGQquU@^% zSLe}S-T>~W?V{e-uU^4U#)mfY_)|({eeedUvOcGx`N+}Mi?e1@pwLT`(q<#|KFHGe zt~Fi&e}(+^QQrZ{8wR4)%!NKL}rLvqyhf8ZEXi04H7X61fQS*eR z`_?hZkKSff70~oPy5$0kq5!`$J1*{OJ|%hO)zuX3q1I`OX^SX2u)T7W!HWrJ7a2ji zD5Qaw+^@4W9-;+M9vr5>n>pdIs}?A!%h`PG2LyH-)Tzfjpg7gQ(oK7!ubn(K*%Ew;;4md&4Lsdh|H;NHDT zA1|DN(_o!i>s!@UA4 z$=%zBpF{U9*9bQ4{s|Ma-@ayA^=Jcc`gHstjw)?uHBviP%gY?XYmLLK|E+3oFWNjbG)cv*YDP zGS@87aEtH#@GV)$x27SDzzHa-aYhlYKYJ8Y>T+{jU;oUt3Hi2Nb*xvo*}YF1nRI{f z;X{$4pQSAzCY2_bX&Wz5{Evo zATL9l@*r_?^tv>XZ3+#$6udSig%LIf>7%l?9qJMS1bE3JGxx)P-z_!bGit3koce%HGg7WXPiwviXsaad$X@Nj+}uAU;*4*=p&CDp)X zRTQ8*O>B!GB~CuxvZ-o@nbsgNu_<5Q>YC!O^N@{p0p!a@ z_{+@GMWB%F=RU(?);N`{X4@!Sr)b4b2KIsz?W)byFcl!@>jdwNt`kAk5RVsf2_Zw1 z;+R4a_Y~<(CfAXlXu=}5ai@XJ^Twv5PPeJOQN$~wwR$rw(sg`McdSmk)oJ7_Z#B65 z!n~71=()-dxunLzolq6yC5<)(y2bxY$-N)Dk3YmUZ^0{lORZzQjMc1ZQ=&L!4b**x zAB|3I!M&oQYg?LgT<3rB{gN#l)$=FuLpEi+CMboz(2G%OTf&bz69t9NEP_1M6F=L6 zWY(yrn)jcK-FJSa4|qg1z(54C4iEK?rEBMxfOor(rhP&#kASdD73fjVsWA zr=xdTrMZ|keXwC5(ZR7Qdtizr_HMe-Z9Sjf7@C)tcNmX?w+6*yC(3ctd+<0=%~tyo z@TrxVw!pq=2Q>0kDvdB!bynx}-lI#%k=Chw$#@as#1O zn9YLPcEU^prpyiF(Pe7V;8}%`HV5WIqx0*jQL?sxfU%ukZ1BttDB(48>GN~X4wREo zQw{j|;bON9iOG#PwS3)eZ&VY!)Dh?R^Pq@KHcf1So;bf%?Xrg-&XEH_nlkwP*N20| z<62WWkb>3(61i`g%1k$C@^GyCW7E`ePAJ*=g74OQoz^AeFgM?h5CqMcu#VM6wGGw}ZAR+|H6C47bAgBwF$DS(hZNif8ah?)Qez2C-7u_H&4*2bg2{avDGLqe zyQL$$bWA*Ln1(z?^O@JWNVl05|GZtpSHSH8c|e^)P9~4e-ueneHI?Z~AtwRC2TfK0 z*CaOTGdeOj4H6m-hG0cf%lpdzus!T}IO*ovUm-@*BwV-fZNOYm)z-EcarXDMCK#f~ zU)`{NTFCDDe71safI65096$2yD>Y?waU%-j&fhJ4Ne84lhuD}By{v_s&+hj#`dv_V zpWaDJdp+EO)zzLA%YMjOJdKN$)5mek*tE3xHLuodVtmu_u|oRq;^X5-MuP^rGA(&( zw@MDbHpp(uy*Ryd?|1a}o0{66zkT<@8U(w8vaN81G3a@ebiu@a{&o{C1#|SJUdZdP zq)bT2hK{pm;sf8WgG-9-0)gkPatX0=XRS+(ubkFaps6RZ+1a_{Rii#*h@4hi{xl8p z4IA&%K~q<0&hiy4%HS+W01YSQo?nS~2=h-7%O3 z;VVGnBux;I4iiB#NN0-o?o-o8qh)5Q_<<1F_Z*XM1Rygz8PIbcc;oBqyX+u!q=otA zZ!eLy71!O}eRi$y+Px9Gprg{Q;#Rk{Z6T!ukX@j~T?rb4tS4BIW^n^YFvQGiNfu$X zqEi)F24SAE+OJiEhfbP{14La+kNiF-#KxGS6w+wZvi~%P%{XbK=3YR7bCF-@sGn_t z(!zu)#qdjXZwy)q4j&-OkF!6xRr)h%pD9Xq)opX#`K?(NTyF1&AV5zF)vY`7ys^qf zoe}Wf5)x|&Vi~xUj;s59O+x5&yw-QK)s!F~>1w}7eRGv1?6p#!M&&(vbfK1%G+p9- zR^bX7Ht64jnZ{I8Lv*!Rll$=Ieve~52)1$0hXWc>VPs^4qs#8%@#vWL-29YT(5;j@JTG4k zf-5v`;J{@IVR0N3^6%ytqPGrWvAUCkxq!!Q)#Rr7PUsG}IAF2?Yi}Nbz56$AzL~fp z-x@ChJ-IJIk`1_P`8YsQQOVzttGPfMQlmSCdls}v^X`^=C$>+{K__!#pnbzTab`(#DhS`;Dr6Ou#FqcW)9$j=;>v9DOa z-)mJ7>)7>)wPIW>Pb1Opa9N31I6D9BvdH?OHFw1!n@{0SiBWF+mMRR_tbH-f z+yLRwlxz#=9oyH#nh$UPCHuH^_iCyYh%=E*qMCq)?pHa zeR6R;KWQ*-AR{?~J+-0v8%SL5+n+w$-SiQlP6i8KSUy#CHwjo!YIJpu zGtfz0p%Bc&z==Ml)H1;3&NF$}TW6FvS)gOO+&nBb*T6-fV?1tQTJmTZ~MH2nm4V^kOFlvKi zBk3xar~>Wfk2wtg1W=QGrAqM=%el@xpwkOu?vjk9W*UB2mWgP5Kd2}d>F#r|^=Jz2 za7S3UD%(1R^yh2+LCyiy>G5~}aeNL(;!*P86K4HifM(>RJ0rV zf+yRPAw>VgXvVC7#W7vlgTDt#$>IB6{tsNqm2bFToQMn7ksoz6Osgitw}lDsM2qe& zag^wy)7_=Bvni@A(Ht?U@PTQ}VGLO778@WJYA$&Gg1OKNT2&qy6;L7k-n{Wz5H%P)sP|c7&*nV zfrhpzn2=kuN6;3H<}6A$FMmPUZO^pI%7bntZDv4UWz=IXRp%SG&kbA!r#FV-#Fm@$ z?>RDZf3QcaErOh~PW}&5{~eIz`u~sPR>wSPX-jRWoKD-Bm3y_!$}-E9IH=4m?k%IE znWd>^sb%iUf#OEQ0hy_#DNayvn-jqe0;0c*b6)Sy?|c8rxVi7^zPPUEc#PX-W|J%Y zEwD+hn%#wlSQD`JxUM7Pb-j1j4}jr~gA#nd2zc2<3tW?vCEd+J5lqw8k>bie2)83@ zLDhZdtYQb%(_IQaTLH4?t%m-D8k? z)i(sl+E?*bht=BoZyQ$(SU9DbMUH{Uj05E2>kA#cg*=>j|~d zd3Nx(+WS`+Mg6??k+Qva%RKQ`KZNp zk%Rklb8~5cY*0{Fv^3Go^9}(4GAecM;f70{N!_VCpI&R#n#E0hqGnP?LS>##8KZ05 z2-arwt*M90zkgE9SJUo`%nB(*5*6|qE5+@1Jk80@^7j|5w%^|N5~V{8H2r>otlL0( zd3v8DS!nL$oF;qUH4r_eB1E+*SQ{%kALC28S@Bj2G4NyQP45wvvH%<=t07XPMJ?ZT zw@d6;p_!(|Bl1TL6@R@y(+nS3bWG_a$e#hY?>I!MrQTYYwr?<^K9N;{^YTSyce8J*wvRZVzyn0$?@T>nJGjiAChu zLQ<5^p8Y8#l((n;LPv{Q<@N!SQJMdK_G|u|q$H==+1bj+jiN`-KY4NT^l4C(%iZCi zyF@SbR>7RG)B4lN7Jjr6UD^OPUQla?*AT{T7-?| zR;1xFpcWt!fi9Pg$6%EY3rGd=Iy4u*s33n1gEbd$5~d3a3xAE|eAV(rI7fDBBPSJL zrQzY>9Snht$TlHw-B(MyE6&Htc5|*Z1@HXtMwcJ9IilfV9Rrr$Z zPJ-hdttr))b*HVb;7iroRkT$b_E*OhO%hk33p(lVE)?Nso?Ub=4CJ?$ekMBeT9;%+ zc#})H%Ey(o&vvKWH}@|*Src%0s3=11iza^X>~Veb5Uuj9PO52u_7Kgg=CZVn?RA)r z_2cd^>$$@aal82FIKPF-y<0>sbz!qTMT}n;72`_n>}p2;g2lNTWHzzoi@Lpy=k#z* z97DtAi!tm&LIWv(ov`cxQX$R)U0VYIa|DQ>&}okJz_ar5%iX6>ouX)wK~<`?rA1Uv z9ISd^zkyaoAJCLA=$%#tL*k7i%^wVK zeXM}H)I+7RJE3!ZG`b#g`31djeKe-EfA9e@BIuu!Q*csU}aF-w5Ys4!jjZw_DI@TUU;+6f~58`(( zDW6kO&>X+IcpI;%|AML4m=I;_l%}$Y6AKWrcJP0{1c#gnz1Jy~Old1D>`O_Ygc#n; zBBg4x#HBr9V_sq=stoO3POz-)Yjv)a&f)CG%tnw=byX`TDTYD>S)~c{_|~m z@EBPMK4^saGb5Y5)IzHAuFh2xk!|N)#?c4bZ}|m&6xVBizjzjpmEl?MrQ4hNBOHU} zs6Kf#6B1&T_=}i`hShzXdU#0a692@>ll_1V#DCu=p}Tkq*9{^(ry(G>5B3!UxQ|b% zM4qHRUH5f*x;^}rGj2>DvA(D}p&!!}yHjX1*af$z!u#IoVEd0hEQg%#(5eOffY@$8 zJs@?P>Im-u^B4z+QZ|nsWqIZ2scux1mpYTvQ6kw*GX?pM+47QaMeLstj;7;(Z%*4R z5iOi1jhgvpjZPldy%gF89yRi)vUPPUf5zOQk2PS%`31dUrM@UkI#a#LG5@7yiC>n* z!D;9_v4VlMl<|gJB=5di)q$J9=q` zbI_Iv<5Wr9aW_lA4UrX^BI{r3odyEdIM>c1!_CdIjff=Onf(fbss^j?-~TpA>T{^I zY2R>Lx&OuIwws26UTuH0L>-J!t9;2kxWMtO|46j4IJ`8Ru`=lAB&^WAe=zjrO@`Y^ z5sJ;vH;hD$=G+IhVpF&LSXBY%x|EuaDGZcv%$z^r^q|&8+L}iND202LkNXwmaAmdp z&CTCgR?wDAW5(h?Bi6Q2+dS)@5JF_~LLtw2)19FvGulnJ2A59-Lfj?4G+I`L-vT~?)rYl91z`*x1^%V4~+p9BNMPNM7Ny(tF;p(j_Dj|Cy)Z(uK@4DZM>fI`0 z7TNT_!pk=Jn|d)pS*V)LY3Sw@wV*QhiLviO{5Q@wiKJ&qhP}9xMwQjGBGnY^hL5Bv6ntFc4u$O_#$8#7dC3;>I9N@hRv&~sm~IH;BTucR z&umKVpxcko?%4Ml*Du;zedrSk$i7T!MXQasPTpBRKg(utkzJvpRQxSDgF8>*R2&C_hVX=Bn$q5 zx$*L5=K1?ymFK2C1LYH;1(%AAN?Er@HzV@;P)&Gb z)t7U(;ZYL5IF%A`$@kZrb2+0pZ|aqp0P2M%WRGx~4pP$PadCd&lQ9Tl2HRpK{A|)t z3#FAk{ub$-_tzasGVbP_UVl{UNfGtx#Ugjd8H#K0nPBC?@}7jjGNYQs!dm&K#&bb& zl2t;gr4yqqAF9?;)aRsNy|(w>*&U{MB5BL&#F-sdxOK}1_P&cqh;DBD7KFAno{XGH z)n48y-6IjOqVJO5P+UHUBUd%o%_kp+|B|(|PoPhIpxg8QYPDNak?yOT%Q&xncIcKL zn=@LM6LGDzEC_0D(OCYiHC)N-`S7O-A4vIeu}zmR%E2ZEbhNEzRejs>mPl^hM(8gn zA|ni@U3IQDrg4g3=4%DfbvEJF%D(3-B}+&{rz*Ar7JmK>+a{~AdtwSzYM$Oxs7FzjZB#H&{x8-Nuac*l4(pD)Q~{ z0Ru-vh+=tm0wTtkK3R}`p!(HvefjoImNU8=Ti)WW;n=4ZxSj?hOb<;-{M8X=VV^ny z%cyLK@Z$gSYIU7p`Y%|ZrGGO6yY1Yx6d-#Ho$Eoih@m_Gx3X`}n z=&rz~!OT6v#kQIW@GYCHhxY8rA{3?0Akkt23Y&G_j5nCMB(mpoT=mb$9yCB)?8nQ6 zLI>7cNPC3WT|ar1MR;v~_wp0{qLa?klYZyrpM^;HvYXT-PF!+e;}hWd$Mxr_)~+mN zQru&UHiO9+%ehU|8oRq4TYlARYvVophRF8sU)Zb#BfFj^eIj3|)t*z;=qT>pnm#3A z`e(SatkAxr5HDA~yM=H)q0F(1IV*q~jI?3gz<67}*98*22E*k=q&14oCNJyTIFP63 z?l_DGwkd!VyPCWsj5S{x1wr-cgPe^9VtP*kfspk2^+N%ZUWZxrX<+3{mE|N(JiJG< zn;VCTIAL}_PCVv(=&FmsaE17b6Tv&5QsPGsyF5z4WNR&l!lwm+i@o_z8M(g~hU;j| zngxB>hwQZHByMjpVzE$Onz7rqHn@~zdjM8P52v1&woII2mOf)TD51MO(6Gk~uFAT6 zyo9}4oR5DED=~gHsB)6Dg^~0Kqglb42;L?=P=d>Xy!7?Wq18L*;lGrUbbpJY^}-q_ zlx1o=M6yuBcFo*HMP8i<^5_$byVnU`nOt#zlvhZb zUh^59vKbYl1+#Vhn6PwqjU$v5-%^@Z6I)puK#mG`j%;x|o{C#9CbsBMgnb#g=r$`? zX^)Twk#x*;Wv!B9tBCBmna}#pyiB|L&rLkWxd|Q15_g|TzVbO;T^?Tl;O%+6-uut( z4~wQB(607IuoK)=u0FyM_NrFe89|h%yinzHoX5xQJ^R-34oR1(RE9Ga)^9O?&BEB1 z>(X=WwpNsahS2erP$S3?q0lF!+_nUBNh_d2Y-q?2@&R3(k<-92D610R!N0t7mmayS z&{3j>N^CE#iId*=^;o0!$w}oyRyf~B>tVl>3WmPMC=x*v43~X^yiD1kL2hS89PDaF ze)py5O-o$wSk4axwj&xCeS@-+Wj%L|hdE(IIAu-LH<7C9BKZ7|4TE)v{1;EX>8eqi zZ50D=3cl6#36mLvfi)wMla9&{V_WB^Z7O)ZpV;y(h+fafGc)C)I3*kd%HGg-}ETf2~NihuRrQZPZ7zi&({V4Z;Sc zeeXOiW%lV7%+;K5x3Rck->hUfH~|TrImTm?wipW7Z9-UxAQ?@&A?$Cc zM0M9bjR1+9i+zQ|IR&~)49w25*AFNyARNmBQE_P!^f zk{nGoYfr8LKPH}KO-V=`+BRLs%V4rqxgy=AF-pCLrVugr+1||dP}N9$#Qb!|Yvv}* ze!@?>+Pje7Ke9ab5xQ#{p2{e=!bjMi3!A}aMCII>(H&gIx8rg$M+vQfpIKinZ>=zB z(z96l*`n8NvQghZsjHAd+^==2v`)gw{lLdgYP8*p!{&d}mnIttQq%S@YagPROppyh z?0})tdk4&wjh1FsVAgbDM}S2`PL=81-Xf6Y*=#mRBQk?@F}IZU%{fqW*`me!a3Xd_ zQzyi(>Ts>PMR;;`M_G35FTVJTz_HnV$;VDxzY}Y>XiL)`zl!3v1SEQP=G(Q|F3K!i z>04xtVQi_a&zX8va%Tqh$#8|YiW9%?_GMAgGk9Fe_kbf)`1sq><5oqjZk#?eKyj_2mPYJmd1^uI-qH30VocpssQUYNgJ0rY65df+c0 zqu3H(pNny}NbiY~k8!ZoOa)50GnL;x9T17R+pprj5A%DlNgc@AFS`kY`)e{BMMl=M zBp2))!?sp-NmuSE2Wb#AY6ayY;)L$T!`tmvQpHx|;*8uMIS55{Z?N0Asf{?uO!F!u zxITXVYwDI?*28cwD_i?ue&K5q0^5nK~Lc<7~L*HE={4$|$=URI~PevPfa|_EGje z1F6a@^C>Q`m~O52_Q|bM{W4RdLvK%C`E_5KDR-|iw6SxqH5SWv2Wd%J(jbgMP-_qP zeTbacDnq~e`~9Jxw^PJCZJnV z+KIE5vq&Q?iiDmR*(ikd`NCvtI{=VRV_waCJ*j^xf|VlCcaB{(FBu;RZM0H;U>*B5 zCyvk-e=`lw(t?x~Y}Zdnx;cTKET)D^cq>-j1gJvBB6`)KwW+ZD-$mC;mXsX7P zd4^!OzO<56x^yuxJ+IpO*eYm1AZH3`YL)hyv2?2gxGU|}Y>3VVg?u%4a8J4IUStx< zfL|ETdySomIGI#FcN6xZ;1X_V)L2m+n=6)SwJt^SJch6t0a+vBh3&ofj2-r%uSddsMuZ47Uz3C{{{Jw%|>HjcI?fv!#xG!!Ie~$;l{i4njp^1dr7KG7xZhb9C7l4YQsTQW!WW+T3`rdq+>TMLsuwVWxXu!GDf>-n}64RS#g8E-s+4+weUg=06 zXU}3tNore}Tll)!>cut$fx@q~lT%I|Yrs7##3j`x7G2p8QjZTCSY| zEcRvUXt+M^tiC3XW{C(c2+-txOw!)CirR1xE9Ql`?_x8R|c2*c`vls zW?~?^iNu^q*9mJpj?x`^im511+8olhU%#NB@Wc05C`LBaD899F=5w6oQJg)6UKD$! zedA8?gXPQ^Y@hI=u=2$P|4y<}Df^&;N((NVza}=hqE0UTbrx1yyN7H8QXA-1P_N65r9lDC*gLH9q^rM0PZ~_-zOk0cRmgY{J z=L+^Mb7XV^0$p-7%8y95F{6)0&pS%+{=zG3pUE0}Mqc+J@>i-Hy8^N5G@@S6&rYfA z6!h);BJ@y(!3MA3E74`-h|Vg7yum*yqQP~ow&h4G1T6Rz^1^frG3*KRjDqpn2Cc2> z<}}Oof*pU0R@PZhRA?2Xm$9Z%Be%*c39mJK4ep+hJ(NJ27;^BW_I1|RLoibY>jM%6 zL&c@|UZu-uI&YJg@5WA)dUE*b)XkB@w~URI)RTtlg^t`Msa<3R{k~i*wATVOxTpMb z{Bp=8ps;?ZV}I)0==*a=E;(RFs)kK8EQEm7{f{Ws#>U2-LTwgTt~k=i05gH>P4F5a zHsAh~rUT*pFq-do&e#)Mmy4PD{{32Od%M0+kwRi4v zO;kcFWE3ukK3Y3>Qz>22DN%Y_=D;vFsXHa;ci*>rs>-ig7sniWZ!2o+6V8uf+OF#zQjvT+&NY#_erYl5f3lla*Izl70wCoFb(r!BaX1G7?}~Qe$hL8 zyCVu!*}wQ!_tnS;A^RbA&7H(sJ@I2U_v#p>#jAy;Pd`j6KnwItu*G)giZa!MQ(=%! zAN|GMcamSvQSUa3Ed%;H0RPdVu6l=ut^xp+``;&9edu9|_KQAZ&37|CW=BK_e(>6 zM-|UAt#z6H)^QP4JNY8*wP;Jg+oXb8H(JLwA*lm41Y&q|^IS|Wo%~`|L@r@y2H(m5bF#_i!oin}vl;4YYQ5S4bJx~)XWm=&$`pSNtf=fV_RqFo zUN*nlH^1O}*>;_w--C74me%Gi#Jpj<4l6&w&Z_GFA)bNH5t|wd#}*oH6_b?3eRX-TpN$3h-;Rx6 zDc0NYfkKY#&_+~a*4~n49Tmt1-t*idR;{GP%Bv!7HuDNOJR&jvo)}|P?OLsur=exW z-My#W32N|Or0Cc9qU5fQi;3}PF{mNZX1E)j@MH_BpjEZ`p1SueX6}pmGq0nPUk3cF z`K7{97=sLZuix$p`NZ8Q{&N`BA=(dPaJ~ClZ3c=s7BA*0_OWPyo1b!bUHj|+t^=ZJ z+RZ9rXRdbSxOGF0k8?I|$?u`r_n>T)h70QOCsBuHs)v&?(hiaX#J^!dz3%dZ<%2D8 z9-sn$T`pKg@|Cqc6sgq`!RWwHY;Ny1Qrgk>UVL|dO;GXV@89bYG@;RJvnwY+i7@CP z2L1pd1Q*1nzpm{h=4O8*6se}~$^biB3Ix|nnZ4$Eo7VG21M2rq_jlJERV395Ykhy= zET!wDMD-6L+~Dmy(dt5NW_$O}KD{V>UC2Az-!w)1VOH4orzwj+g)UyWhqE>46m@R$ z2hq``&t0iQmZlATMc{KStu5F-b8CZcp^FBWO|RhqaZvLEz%Doy9jo_&U-oVEX$Ke4 zQTa}K+Io{$d_?GCB53Z7gm%xL{x8r1-JBG{b4y(_0o%BPyEfn7-PP6Q0lMpy2c13) z1Rd0FZ3;n?CMDuKb7F|y<*UGbm`?)jjFQHjKs>0>ncI`+ok8a$?|WCYgjePAH%0gJ zm_J+Ry&Sc|Hn=ZZ=iMDSQH8ZM_ls^n{%Ot)}@jQFi=o8 zq?l(<>{mL4i%N9S9f=l=Y4a{V8-x!-3R7f2x5^qZJ!YALYbZYc@+R{){+~-BH;WQw z1_2I@y@GWR_+B&{h?peKxC}%K5(BHb)qlDpK*h(&g#Er9cSj7svZpRTYJPS2f(MYj z4KT@t41oU+5k6Gi3%aA`bpM~g=CLep;%f!$U>#eSzJeON-YtgY1Zf_mlD!SJ%AbE>9dmTHIe5Ot-hV>g1x{SEB zrgBMv!OWpMa=N*@NfhzAHNP)~6x0A!@zj^{#Hzh|r}85#c2|9kQ(V9LR=7d+?2zJ6 zUCvdnjSe)4oXWM(S)2>{mGWp&<|C!Mt9i(Emz`0679Rb`u|_^(x}pD42d|hH7^bLW>i=g%U=D5*rP03XbX319&S(zIx?!I^-*Z1}`_m6(_%Yrdd5i~nN zr%8}w%~Za7caYxoB}P(Ong)~+H{gO6GN9ISSa>ZhEr634c9@c!yh8qcS=xFtNkfsa z#Zmr2bFs9St2Q|GC8jaQe@(IxleA|jy^yBEJ6Cz4RS#x3>5!f6fczmNoBX5^Y~Prn zyuLq-XLP@f(ZD1A~$|RC5OL zyZ=^bYs|`3wkxW-PI2LBMs88TT&-dd3C8@vxJ9=vF8{q~sgW`GX#pGNl|5lrcukTT zB66jhchZ05&QbO~g+5MEjofDI=@va$wxd$WSJBEgEX!6<6HQKb-m!Cc$w}j+L*StU zR_8InAN)Z6(;_d!3;zHx`K8uwfYD6elgxVyRt%$ddB4uJH*CBsntT=v4k z)j2_n8^AVW>-{{OV36UdB3}HLc;5TQ6O|GcQm0onTf43gn;tH!_CAkZk&!kf&0ZaP zbu)vFS3vw4S+1VMW=ztwoNsdzz#`#8@FZGW6J%2W6KMBa5xaTMg{kHwW&M(2;hYZ? z6qh=9QQ0GK>`5mvF{ylfA0)InKxX{PZ#(6lB2fiN?^BwmMkbA3SrL_fl_WjcmlcF^l~g`Qb$3Iv@Pm^GwhYHIrKY(o zd2>i)Apf{mMRr{QDEzi2^|>dU+@m=nPU4ie1kjMFl1%7t6{~mByoI&Sn}?Nqh8Cv7 zW`;&M)TxY`tq^^W;xkJA^x7YyLCR%=Yh;_-p%7z;UzAO5KND$;7nL5KQbd1`4pdpO z=$Um!mYshZRD6@JCts+2p#^^0bz+E@)-!DPvNT)Ic*u9F+_%3vc8Ok+eWn$1Fmv)3 zZ82QzJI(sJ*muw{@BlrW2XlEg8=>v?EK^*7>3z+=m7HpE^DNC7zia2RND!I*F1Uf;4Tj8ld+e2=9s`RiN+80**i2#XHGp zU^>GcweHOT&?P*8VA1A!3*1wazft~{R+PVCZhDmZ$oovN<%3lE_Q~ziiahzTnW`3A z6pXQb&>94NeXHrH+J^uVnp~}te6n&OQiY=$bKw+f0F+li7bT;lL2S$8=MI&M2L^_oVOiSajzZGmHwR*TQ?;9!KmOR{iih1BpzMpL< zE=86TM;q=z_Om}&!u8Ic8DV!>A@VSleE?3a&7tkqdAp?Nl*@ZMHE3f5z&Z>l*ghD~n1AQAuxv33nmfJG@gDf>G_fIf=pr=vei=_3TZmcE{K3*^`#^ef;;K6b*3!mc4)?eGkcW^D+wpwA zoLB25Cv(?yxuLc%Y)afqB|SnLtyF`EzvVQ@cx+GI=?`!9y+lU1AHe=OQ}DJMl-5Z* zaaGFx-Jb~|j>U*y388li5yi*x`Kal2HuI|j%*q-kF)H~~!Ob!c`D9p+c*}k)EX2p8 zmlxUrIWekIL*4(=%BE&i$MJ{7K!u`qW!fabN{?W}?)CaTew+<*A`S*ESdPBVUIx3+ zj>~__pg8`qv$iw`L3E;}Ak{+~#jIev#PlhGcJPgV5;wZjEk^_%1RIYTp*^XpO z46h{PYzgk^xQ*E22Odsd?$iZa=~t+pcww;FW5q7wp^w?+wjE(HV#y*8ZbPXrrtRj* ztubYYFlUQR`Q1wXD^@cyx6M*;bpsQ=)D4~0jgXHpzj|hfesJ6!#v`L)PAqdNu|wEX zA1q1hqt^BCe?C?=XpICs;&?zRL=w2^4*jkAmN-SNz$f(?wpEPn!FZFkl&+>hClPx- zP-Lv>6aERkE?kY7iMzvmEZS!XuaC&I+=lozQ<}K4pgkZO)GmQLObvV2vr^cxQm_`_ zVplbNrjMH=mT=m-$VS95vLDrN*!#m#c{Kjc>{Ntvc*}!dO@^#1al|siV zgXFIU2DR98<6CrW9~ZvX^J~Iy)b9q980(SDe4-N8H`6BIKJlZxY8Lg6HkcT`bt`vNPMQN(MFj`fcyT#UJ0sN$ZbT28<_OhtU$OW7|=?;0qi0oww-;NVLIbF<6e z8nS${)pE-1lfxITNPmU+W`%vIF({or0mETg6rT?}Hne|0eMu5+@%ooT`X);ntSzKu zDrN4emiFdaAVYAkE6av;TZ9|$b@rmSUE}PeN@j87|Dc5Jt=Jxaa5CM>VxZX@uTZF8 zn5i#MIe!Y>xu18tlq((c{fx2NdFLQaZ^TNaI*+hMR=@%W-}0lpY%U`7^+{l zsfkw{OR&>qHU#9Rh4CASl2u|ID-sVL7ynF*8UHr%jOh$rVooNurVI=X5Sq{4Fgc9K zhe$vZ23Ie?W)`zQFuzTb*F`-HGW!02#TJ!7FV{Ayx7+bvNiwXNv^z%4CuvIunKot| zeap5BS*?Fcdqa@6{)n>1AQ|Wy;-#m}dnaKgf5qW)4g0)0Hf++L>FZw;N0c8RH`fvS zDm;_;!x2g6$E!QIu^^36sN{2XtA_X2#O5RZW^bH5?ggl?xU{_cwv1XoOIOzUM+xUesIO8rX4TN zm^nm#wL_59)ye>z3rOk^#&C;Zd2b@0MMM5IMDUw7ZN$o73Sta6TG@wu$zXvNpIF;f z3%sDGMX40A{c3%vx(*<^jOW6NCTkWg$DF6d(5{9e6eyxesMVUU0>fcSO1lk7CE=g^#BTJpxZ$n1O<#yzs#FKuP5{nvnR@T$4C@({1sVXzT{GF7bhRJm_ z^G?@aDo4Hgz5Z+S$nNzjx*7Q+e(59~F}qN>zUVZTFTE~Tx;&_tq_u`d8qdzG2U^-gg9oYRC7eCdtaP}n^X7Mv zJ~tqOI@#ggZt#S`%~;qm*0-w9)H8QqY*9_}OVS%3Zh&ysj!tiP!D*=kw0`N(aGXg@ z!p}-d&y$1x;axMHpRP>Yqw-*2#s(?u%PK=dho4Jh8wewK@la;j-)yN918?A7yw_D} zVd%FawhtXccuLBj@UrPVg{@RsX9O)?E3K|@N;D)^$G*ZjGN5+U8CCZ^=+JNKBUhFQ znp7DErwiuF({2S!HWAqeE&acWrZ=WXYP$$q_)p}vik)lfvx7QET_zmCgC@e z$`6(OjyV}x9KzfhnE8HtL?1eq9o~KEc8xgkJjF`P>K)H*s_(NnO6~~Vicv0k27*{= zww$_R`7@Oz*=omwNk@DBX|t`9h{Vak?xlJ;g31wYDlVY4__cY~6aU-UiBlHs3dD)M z>_K{j^xTfogocGE=zY4+Jyjpe97oHe9zo?vHxsKvWr<}p?Ax+hWLETi3pI6|VkDhB zC1s%;BNl2Qiw!WhPi0WkzHwbNVw-L={eS8Ojy9@TxKCr{oh@z{o%{?ntltM2pCc%Y zc(Ft6ypDsVo(N2rJ}8heSHBxd>6l$$(7q8&Q<<3 zScK3U+6ZM8e{s|42)$=fJ$w~@7phTT%{~_PV6=GF+*MZe*HB=w5KQFGJ4f^=^&hAg zJu_MbF($?Wt$e+Tp@~(~MuPbB4+dzWnxIZ8K$VYva8BP9uxjJ<9cLz!YM3GJN}%(pSW5jvp>H5` z7~c)=$-76%x+)UJU!(5H1ywWf8_@0H({E!eX_qeSwO$(R7_B|X>Q2Jg7&3pC;H zp1#$a_cKDJbm~kIlH^A1ZbtV&kK&@QPvjeNf$08jP1(E&!KaBmXLsiU6}^t#*LuAP zM4)=*HYe&L4>+Sj(5z_Rf-|3X`~j_U33MG@HJ!1ALfr&kN(T_;T^V-|puS}FYWFMU zeJsx@e0oYyZF4~aTpE;BCg8JyBQt-m?x)^p%yfvcA7)3uzo-584S*Ey+&TKLAa5e{ zjz!DZ>4N4Ev%du=`0x0-WV*CFb?3bRTQ3(!*3Y7+IpYFxvj2`|&{Iv_ep*LH|AS=5 zGXb^xze7_l+w&+2>;opu!6ME_t2`*yS5wkHwb+domwMM}l0@P0? zu-?RjtqtnoQ3$vgHh}v8@A`a`)lWuIqR6euDjI@|Q2X~HxX+pcB7f%k-JZVjzd=vc z#8FUmEdB}=$WIhjRP^MSq`6Hr#~Yjqwv1s4)L8*(!@0k|p9NS!Jp)NKSEIxO+tjG* zD|-M(7!bc6hlGS=O$%H=NnZ8g!j&N_PUsp;kyrKXDOe;Q=q0XC@6{VIl(u^U0B)5V z8;G#qZ;T3IB$T?})NM$rK+y1MkUo{k>IAOy0Q*V1X1=Ud@$~6tuta+Z$b{Xx z+?h|Cs-lHE1O+}Af6fYp0s*^zi9UPKj{$&il^}iRAa@CfcuFM6TO#Hm*mKtPE2&z3 z8*o5qW&ypr5fDujmXvgekPSA*B=|&;Hug1WIG9nHjAOx`mv>e{jzYMLv6lDjJ^!DE z;^o`7UkwGfVkw`TRcMna7e4)GGZt{5xvLCk>QM08#%o59mG{2vi5aV)tzRiIKSZZo zoyjHTL-BRbgQpqz`BnaV^c`e~<4XR);3HXQL6;7! zZi_#ofN=))*hQy`E7O8PDzIsF0getOo$Dq>VvfXOhXf> zY@}c-ERShxH?^l|{(K&P=#fH_N_p!QKS`_Dat8JTKqw#- zhAVunts88~gX3D1m6ci4?(S~nTE&1v&}`R9f8G*^u37W5Dg_on9a6USY^~|k1JwfV zieNdpXw%qe$TVsf>GcFsGR8QeNtq@=h3dYB->dCiO3cG-xAkRaZnl551`P3$-wpcNl^rt3`eVrT8}tbfJNLz2t12qeJ zN9m`@s;~Yu3O4Zf;@E_K@l+>OxcM+ML;|Ai@loA#aYBuHLIBhICP{!eoW}Sf_mr5V z>F_40@j#ynUeR^nPak*Ds0Q+iooS&N&QS$p8wfe?>_`I~FM2B4iN}(HK+wOCHyH!{ z$Jl*kP|C-+1PTx1Qzq#Ye^`eyfHMv>xKADUhtK2h>jBz=EU{`|&a#`)1*0zQ?!NIf z?V!$Zp5t&&W`LBVowj)CYDIcdGWu)ag3V-Q>HUBAi%jg?4C~A74E>=k6bvl$0`Huy zCW-J#Kw&1wm&=&0l|lWS9UUz`lF#8`r&2MWaU{b;^1yT!Qa8m5tjWc0;;BAOhkNC6 zr%Sr(#)sI(B2k@?K28RwJlcjEnX;& zSPk>}Q4e6#ylHgb8fa5x_{~R7Z@J&q<2=i-`uu?XX%diTeO9W5@gFJY>CNQyy0G~z z{_I^#`+J_Jjo*oVAnUq^4~6n%DW8H=wgyGh*Q(hIBhK*#%O!PyT7cULfLG<|(`z51 z%%9mwD5IAYV7Rdcqn`CX*w*;8`qog8d#%^E?>AW-6=c8F^(5E zejY=%zULNtZEd0kz;iBxAQ!egfG2A2)IMZt0PBGswZCs4l}30=bn_{FX=!`^VKI3N zr)0D8FJJ~}2==paQBFR_Z=2smUAM00lOarx>n zQpMEPWU`uT+VZY8|53w;)8WUzHQ;X!J0x++T2=7zgKItp?LIR;%x05?VdT6!5XbX6 zi7fl2$<~E@pA)gZVHnw1MI9`6R^hc!iI41R{L7;@IY9+y3`&JIf+ag7ak@E`^y<`^ zZ^N&ksL_*=*ybBAZ@wgsTbmDIlk7s#I@RoXo&ope$&)8JrqJoDQG3dddJ-E^TeL7t z+r;~T901iHa<%Ey=DGE1hxK90m$fPVePbHXD~L(m{Ri&DS4-Ugw@|`cUhF##1ViS= z0f)CgV{2pD&F)7!dNTxu({=iFh*vLx+FNZmG-?mX`VR8xBOr!`t!<1(NIdtn0p>M& zi(hwSRnq9xVs>xuK>Uh;SV=a1#0D66d$@fl6KqNxsZnWL?|(*eD}Z|pZvhBvTG{$U z3Rda0%Zr2C&jyT~M)H2UI^V_9J*$2~cIh|{_#f5rOjYt{N7byCwZiAu zTcmD+CBJk_m-h-jP%>Q2o^u2mo*!a?lodXR$Y|GL7>)3ms_>#6+|u(4X$01Ya|SM< z>we98g7JLq2k8eDVkcDy8=_(Gb`O~A(V5OqxptwAi9oAL0%9@Oj+zzL0fI7j(omIl zA#FGm;qLReG;Nw4WUETTRI;)i#W@+aX|Po~KK}Pd6l-@)XJnC^9kLsaCqSIVJmBBo zcdZ5dE!lyyFcf*TCXm-t`ZyvnRJ4{iHyNt(mSzIPf4xw(uCm_e9*ti!xW1}_28veP z;V{<6umxO^T}^-0QZLOZAo_tbd23oLY&Oz*Q^b8;yM`b~FRc2^RX4YN=MIJq2mlEK z`TX*RM-2(C881vk10?^XUR+JQGI8(Ib&e2JiNNo0VG4Y^O#i6|aB6-Pxtb3QyA~NG zy>_0!#l4ckh~KqfA|M6VY;E$eK%<^GU~K_t(9o5xvS%s{fO;+gTPs9ftcF>1TySpR zt)v5f)m!%uvQke@>`?|YW1|lUB*q6KH{KZ8b{v932y`@JG* z$&%(oRiBw}+Yd)A@hdB)h4@psUOX@Oc(#^$Jqer;l}g4KG5 z^;o&QJC8+&DFrio2ycO8s>*8L$jFL2X?Iy*+Ytl%rPKN=)}+BZ3?RcOkTcy}K3ZJo zhTi1YWkKBH^)_BlPEHNvk`@hNKg06H+T6wNHP}3gf_dGD^t-cCNGEEQ!6sj|RDHZ13F{Oh3DtH_~I2Z_IOwk-g<_-*F+&_d*g8t?@Qp>GQw!hN^UJ@XB z20^I+Z3eZ#lQu*I!K((#SH65kFNitl)_rCseUv4VXNZ?ilf1#6>utr)N(oPblL|5% zylFA{gRE%U4&$Nt{kR%RaLZ6NJ1;N;g+OfSjIbOw^P<;o^zFlE&pE^{6^?4Ds&+=c zSqji)r<%?vay!pYCt4vEK_IzSppLw&ahLz~P0%n(;h?t2@CRNca(&8Xqmyt43l#Y_ zYrofRhA@pRe#Zl|9=x2^xD6DP-f$GowO-%4QU_h5ofM}vF)Up{)0go1b6*Bs#C`Gj zMGcM96@Q7oi3sR^9YDdx1)Q=8YA-)6URc_9h`pn#;wwB%>)#ynl8sMx;xX~ZY_e~!>nH zrii6ajK?9}{mRPuH}}6yQ0x|t0y<_{yw+O^@u9KH4jc;6b-u5Z|DG1e&<*_zzvX)i z$GceR-y2S2!D(?Jh4!ug2_UAvemz4r9+FUxoPCp3)pV~N2p}HA$fG3(lCS@PRdc=3 zxU$p~9H(nAwEsB8dPJLIjkt#MzauId|8LV8B=P3ku2!n#9GqO~?qFkICwK`Rmb;8WrQ5VDL07 zbu}vBL2uo@YOlP_cqTO~n1z642n9ipfnaGp9X(2jH8suic^BdH-f&xBaBFVf&gVs^ zTYsjI!g~gwwrBUM1dauTD6usf-?yu^l~>Z+zKB-q)90_zp8p#`3r?8125#ke(<_LV zG%WOkL^2g?=T71@lHnjq?7h+;kXD-qdV!eQ`$kE9`yHA9hmp5DZQxD=CWZ$(`&82u z+&(xz@kT=BQ{DF!mSay>{r{^69f4qa?*k>AwXE{+sgXgxAFX<=@0_Z7CFYdhvI4s*`G^Zz|-D9C*F2?U&K zzePrKggI&^7ySDcKUvM)NIrTb&U2tj)jwqLgLD5z$O>j?B?6UX3zvbLX9Pb`-bOq9_ zHmE_Tx?vkHQg`U;{Nd`mcsrk73)aiK$N}d1OtZ&azjG9`Aa4x8eMTO5y(#_RmhWjg z)g6_WCz)^$4H|P zwos6o3zUjoXJ=V_2>*NFe4nRQzt(2RTeJIfdd2u*M1yk8vOJoT0D`O-m6~5xK2f~- zAdj;V&A#*@Gri@$6HgEyj2_-=LxBsy7tBN9^C^x$-COY4ryD6DsbVu@6 zn$GSbmhNF!JtckRpQ5d|=7Z;Sn*2rwSIBrT1YKvJgeG?r(LKbD^+NGxHtb9h%}N^m zfUJ%!{hQjKu{kp0(YWlG^zp63@j-36RAqbmE*odH*#Xz8#%uq-_Rce`$*j%eL5R@^ z!2+USD6bAE2oC7KS3~AksoWAOr#mN$AxP91#;F1Wc6j zG7Eyw`Je z0-xWNk7axn{H3C9Y&`t#fZiMYHkjn0=fXu0fK2D=7yU7>LfrhyKLPp~;ClhiE*~`* zCs^L~sV(%+y*+@3t;Ci2u0WX>r%%gobKOO#F?yYN9;1Gn|?s zpD^JzQ0h_`J!{nVf?DA+C}@V?S()+j_RyEdTE*)I%S)c z67=MrZV8s$7@ys|39t%hM(VF5;l0icgt;|bZD>!!rCr{}KDRz|ZwiL5}8UX5RRC7@_$ zp7z?}IkepRdfo7<@n?+q^Sm?1j~}mG@upzA{`kZ7>eYX7lw~h+Y@hdP^DkG9EW!~lIsCR0|f`+ek)i`QJhiiIMJHk0RT z+xE>(?HGCMi7SNMEl8W@g-(NY9>iOZ@&^IaB>-lc3}m@ zKaqW)K%RY^3A;XM(UHC_2MoR15Q;>9cx}L-Mo&*qMFi#{nEV7mki3g*4Y|F>0lHRU z17bFhX{WIfOC?tgpmY;OU1A08o+C^!u-q~Yas)5HVdS6<0wEz%IRR3T^kV-8&;D}b z#Xw$Tg!~tCU$+-u-G0QXO>&L26fqk@O8VdP= zRRf6W8S~^9m7=6M=Uf0cIv8)jR>o>-QzZuL=Ohlg9Kf81bC%qshwqz^=cpe3Gp?i8 z-nW&R{uD7cdz66&f%b4M#q{Rk2Z{~WD6Q|2mP8$Hs^+`ryG}Hp4D}!^01K@^fR3YG z1Ctb;zET$fhNDK?`b}URnI&XQF=)a-`yEMz__sV@CHX=~yIOoi0MP(i!d5)^f7X^V zfk(1JX~J9w>`vB&TV5b3M+VMn1P=dc_#{Kg;QDA{LW17)?bg;X{YlNU98X{m6#K0i z#Pd18)wKm2V+KmC&z+m+T%HS7V>k$ZbD)LhckLJGs)2H|3UJEN0WQV>6thq#0l=F< z^<&#F*xJ?!W$GjQXIwKX(=9nA{;j}z)uo9Hg5Kf4XoL-7{G7kWo@0jLwA|=nI0aaz z{4)2k6F4;ZqHo@;Azx~EKT=Ask~fNW6*8cg08~`G%`n6)BqPb zgYe2~+DKzq0EXRHY_%q;#H#WLFu7nhm#UL?N=TUlZOT?11FjkiSj_W-!n1a+?u{a$ zZELIQG%!i4Se%CgJqyMEL<-GxHY~F6UnI){y^vDC8R`WpVW~zBUItiaHyS1t@4m)b z5D2B`e)(l?a2FhY{PgKTFP4a;{%$jnBj8Hn?7kiH)XvVz+8|UqAkDscYudIDn1BR|J2Dst-bT}d|{Y$MCC$AKB5~(qy zL)kbxTt+{Ea)i~vULrB^{>LQqE{f4H{Wg>$y}i;u_KJmM^z+NNg30-hA3IHJfk7EQ z9K~H_6~V=&m8-nkhJk(Ybi{4jr$4^}Rx*K`>#MDuYK6DEP|=@A`e-S!bXn~;umO;lSmAsI(JCzP%GL>+V%q(*1!UXntH4Co2jc;DEn{b5 zq=umsBoW(e%%!AZ))=$~V4Tg+BH0au%X&&E7zP24S;CFjuw0rc5<=je<5Z*7r=vvm zPnwxNLtJNsOpWeLehBaCtMTL9H@s(pS`i#~x_2lR;m@&qlDTuA^3d4JyBpkWOcQg1 zosJW2!0}YFtBsrZdga~XfYC*FSEA6g!|;l+U4NdP6L;+w>vq!pkx@HzLFA3lZqM8| z4N8Vg%+%6pAb~J+^XARi(X#xnLg-u^U9Oqfst;Ra90c+xNnBFaEc}u5*#M3`WD%G$vP*#Bk?8*9MAKIkvqQJdqmGBrCdW%V4Tb#N0}YT-Gb8&c=L`>b^$+z& zc%E1^3(BUJ#`4jjYLP5&>S0fjv`#;JAIdgaXsUlyYSsl#;;`*bv|9z1ifb->2-K$f zLZ;>bi9?Me;@nVpl8rN_DC#J2XIHTEy`rcuIy<*X=ikkkuUz$CgKv|!hmc7Q*qE`7 zTH2q5ohJ)V8fLHjdEkj`Z<3i&3*B^yNOO@mQE1|Jg@7?=oCIf-_CY&1gz5pq-O}03UCF2u5aPje~>{A0|6FsuqX%5@N}DtO1*CGyAor zyRnMi3}h6^^3_;#7+YvH9C39w_JaP=D*&7rFDEgg!`G|eU66j)XiFX+XfR#OIJEhF zDZ=dgSJFsMP;d$t^BNRHgJyDJA4SReGqLk5RO^wl^@2gW^h4%ZgLgt6s=^@>?gD`@ zu`jh)j)91R>IwOrZB@G+40^YgsuK>Pb&_Af-=3Xq={m=XX#?)zb`QQ2;_5MM&z9(9 z`3gVO=W?vg?*)yOyDi4jaQl*fhUXl7AyBRb#UB$(3Fm$ z7R*zv=0x1pjkU6Ld6Ef>TR_Sl_%arWdM!A_G~F?lZ+aGHIe8hHk0bf^`Cf~3#~QWK zDlTVl8@;9&X_;&1{`u$cwg8|zn0R1unPj-bUn+;l<^%8c2maQzf?D%I-6ngsG@{jhrCcPrN_Lf|Wn|O|vC?ziAm~8w!<|H{e>mK& zfO@?*Pz`=tnt_pXGC@)loJ%M)!s{1~FOU7<=E8E(PoQy?j6+4 z4XDk2AkOeh{Q}bCpxGtBzj?;5`fwUT%G#>(N4hJtP$i4lx=#~H-Bt>5%)1ZZJA8q2 zdbhg7WPHBX^5V$WW`x39OsofrSmfhqCqoh6pDYh|cWRNLWJ-{-Tq<4d$91IT#VR~1 zZAfg#X*Vbi{#cl}N7q?_yFyZ0AI57&`H@!NWuJP<&^dO`(O@f)cK>yf4CNChFc|ea zsVT|$CEtx0B&lM?DJXDMDk2e+PQ?r?DeZWSdMfMLAe+u;SYmK9&{Y+J4dCa!1k({y z9||bK+IlGQqntUWnqyknZva9WCil{1^crwR%MC9A0*|6?-yN(#)Ruj&iczd|1s?%`A|=L=V`7vNh`HGZiMR6L3^ zrntVVD;|LeXZWPakk3bAf7AEl*gqg+OLa(r1Kuc+1M)LRC+(rfyeDYZ9lDKSeL6*| zeRE@CxNu(PqQk3l+DpZmeqRq=BTLvtOp^r79NH&LI7=3VHKAhyWH+#4yw;>BKRIJh zgI~35rzQxbU(+PzV+){D?nc$!P?+iMjC0j=hq$if44C?q2BGSR2o^7>Wd00M*_9+x zXiX%`>a8z#x0olPV=b$z9TtNAnyx;nX3Pw|2`!aiT_ZiY+Ij%K+5nO^4#q zOj3;#d4y^-)e303-*~mHPEQX|G9(p#lO;c)A+d)$>g(ZIRHViGj@=!)O+`E#&N*FZ z0^s8>aj++yL*`EJ7JCDiUW$buNIF#@eSWHuR7u?+e6}x>Y>5zD>aSlYT0z0aE*2QB zX1~Y{o5LYecAjZBg&m$W*%`Mi2GhpK^_dz70v%NDT?ZPFT^pPV?)&hHq(EK9c9ng2 zJIp>=gDy?!-XHz2q_CnBtDk(zA6psDfy*SZib(N@@K%^pLu1&q^GLKakJh&U92Coo zoXB<3t;e!=b*(tBjR^~!SY7a0skg@zqgFmem}fX1EyMoOf9!dm7Q1Tyao5p0e7g`- zq)XoIKEUkAeh;rodgG5G`o|Zs{w#``zKKChaNlp@^_UjNGP4IV3F~qimsPc4q zBX*q^D+J>SZ`NMs&#O}U4E@~ueLsRMQlNnUg@CofUx`l8UXF;=Zrc3BytQ4%GmW)rV%?4Q=MR=lB%Qh^U*5aawG1Vs?ZJ# ztR3#9m;ZVt<5lULiP{HM16z0r>b(J*`MdJbukR+3_zn-g0cOnFn~K7m6M5mSKwZJD8Mxa%kl%XDaJmicTxB9g%!n8!4M9XP0)y9j)1vxlCmKmPa_=AJ!hON3^2GI1jGBK^ zfN1%W)+=U*+OT`3OXHc#kw8h+nm+@|aLDT3xgF)t-mv!_Y(whWFCo1Q0IZj`PRvKw z23*425pDlsGB-nfVvMd6q|RUJ_x5kJN!ElgK_oXv8z$Sf3xX~x9cm~#NmMe}cdJyW z+uBlR>7h@=dCtoZUYu4waiY5GMXLQLkc`HXpLR`F&bIMP)iCirqfR?oPq1JdtsiZ4X>6v)IPKHHSySe zDn$fvp4x@@*r(GSac;7%D&C#BG78N@ulJ0CQ%ToEtI;6irnc4rK zq_>rQPthnJP>5FyQbr=j)9jKj)q}&aoPYPwW8FQJU#&ty|J9+ya19JG=`pe0RuKpd z;~?t}qB8_e##Y*+P9ss5rr4TsA0Go4iQ8JMqg{ z2_m)d-?cstKKDDh(^XCH>g*)TY{dT-%z{#IX*w#Xg{KoUcMGOI{Yw^MbyxKzMBBRq zbYZy@do@SW!@Ktt$QffKjrb3EpPGaLI>+f5U^^jy+DSRoGNc6ih*#^=zgFhFDO;u! zd-M@Fk#c~}gG|O?dW7kWJpJ_v-MDXAmn=|p{MtH~*L`L^ld$?5>9gQ|`uyAMcMt}} zc%^~vmLYFc* zBL+A$aG(eu8qYZ6iLL(`b!OydkNT#8i+lSrsG^22Q=K_iz_mFyEgp`LMHc`@kBjRP zL~lU{tSNFYq((=^IMn z{sN%d?f3g^x`X4^+*yZS{qe`p>DGCPw%QmFpx6#k{{T~ny_{jRoEI(*!W90o<`x>Jnac@k>P;9F3cnaM3zY61@AZYR zUf)jP2eyg#+IlBl>GXzRqDi4aRfLdwVK7zGH@$lQwYR>I-rq?%(*NcIe6r1Bu+^XZ z2%>EltgU?v9rAQQV!G9Ad2Z}wyup#eK%~&Q6u&X!i+%I>7;7)s|9lW$sBb}37Z{Ph z>gw$%n4asbl$ohc*!)dc7X@%68|nTOjisGcJIh51gZ%vbfSxsu1*5CqM>AR%-lzfW zP4x%x=GYzij~QdR>;O^YiOju@y*i_sFM@CP{(>^r?RYIyC!ST zj;uC@^MsBRi{{yRamydnr$T`66#N*ox!9X~3>CV;-8fSs<5}~>GrDhiX4o53Ad42U z&K8HHJ$aaObGqFxz~HFl0u~4{Hy`Id3cw%_0GsP{ zThm(7C4e&b?k}^g0~5erVcew90w{99N9;DlUlLy!fb^HzE~zbGFLtGVVVBUR(CO literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index 75f6024b..597230f4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,6 +6,8 @@ LitMotion is a high-performance tweening library for Unity. It encompasses a ric The biggest feature of LitMotion is its excellent performance. Designed to take full advantage of Unity's latest technology, "DOTS", including the C# Job System and Burst Compiler, LitMotion runs 2-20 times (or more) faster than other tween libraries in various situations, such as creating and executing tweens. In addition, there are no allocations during tween creation. +![img](./images/img-v2-available.png) + Additionally, v2 introduces Sequence for combining multiple motions and the LitMotion.Animation package, which allows you to create tween animations directly from the Inspector. With these additions, LitMotion is now as powerful, if not more, than DOTween Pro or PrimeTween in terms of features. ## Features From 6dffe99f7def0be2899675828c6c3601f3e98930 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 25 Dec 2024 11:21:58 +0900 Subject: [PATCH 223/224] Update: README --- README.md | 95 ++++++++++++++++++++++++++++++++++++++++------------ README_JA.md | 91 +++++++++++++++++++++++++++++++++++++------------ 2 files changed, 142 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 82e0944e..8a554cb3 100644 --- a/README.md +++ b/README.md @@ -14,26 +14,31 @@ LitMotion is a high-performance tween library for Unity. LitMotion includes a ri LitMotion is my second tween library I created after [Magic Tween](https://github.com/AnnulusGames/MagicTween). LitMotion was designed based on experience implementing Magic Tween to achieve rich functionality and extremely high performance. In all situations such as creating and updating tweens, it exhibits overwhelming performance that is 2 to 20 times faster than other tween libraries. Of course, there is no allocation at all when creating a tween. +![img](./docs/images/img-v2-available.png) + +Additionally, v2 introduces Sequence for combining multiple motions and the LitMotion.Animation package, which allows you to create tween animations directly from the Inspector. With these additions, LitMotion is now as powerful, if not more, than DOTween Pro or PrimeTween in terms of features. + ## Documentation The full version of documentation can be found [here](https://annulusgames.github.io/LitMotion/). ## Features -- Animate anything in one line of code. -- Achieves zero allocations due to its struct-based design. -- Highly optimized using DOTS (Data-Oriented Technology Stack). -- Works in both runtime and editor. -- Provides a rich set of schedulers, allowing you to specify the PlayerLoop to execute. -- Apply complex settings like easing and looping. -- Wait for completion via callbacks/coroutines. -- Zero allocation string animation with FixedString and TextMeshPro -- Character animation for TextMeshPro text. -- Motion Tracker Window for monitoring motions in progress. -- Convert to Observables using UniRx. -- Convert to Observables using R3. -- Supports async/await via UniTask. -- Extend types using `IMotionOptions` and `IMotionAdapter`. +* Animate anything in one line of code. +* Achieves zero allocations with the struct-based design +* Extremely high-performance implementation optimized using DOTS (Data-Oriented Technology Stack) +* Works in both runtime and editor +* Supports complex settings like easing and looping +* Waits for completion using callbacks/coroutines +* Zero allocation text animationSupports TextMesh Pro / UI Toolkit +* Special motions like Punch, Shake, etc. +* Conversion to Observable using [UniRx](https://github.com/neuecc/UniRx) / [R3](https://github.com/Cysharp/R3) +* async/await support using [UniTask](https://github.com/Cysharp/UniTask) +* Type extension with `IMotionOptions` and `IMotionAdapter` +* Integration with the Inspector via `SerializableMotionSettings` +* Debugging API and LitMotion Debugger window +* Combine animations using `LSequence` +* Create complex animations directly from the Inspector with the [LitMotion.Animation](articles/en/litmotion-animation-overview.md) package ## Setup @@ -74,7 +79,7 @@ Here's a sample code. Refer to the documentation for more details. using System; using System.Threading; using UnityEngine; -using UniRx; // UniRx +using R3; // R3 using Cysharp.Threading.Tasks; // UniTask using LitMotion; using LitMotion.Extensions; @@ -157,12 +162,12 @@ public class Example : MonoBehaviour await handle.ToUniTask(cancellationToken); // Await with passing CancellationToken } - // Convert to IObservable using UniRx + // Convert to Observable using R3 void RxExample() { LMotion.Create(0f, 1f, 2f) - .ToObservable() // Create motion as IObservable - .Where(x => x > 0.5f) // Utilize UniRx operators + .ToObservable() // Create motion as Observable + .Where(x => x > 0.5f) // Utilize R3 operators .Select(x => x.ToString()) .Subscribe(x => { @@ -173,13 +178,59 @@ public class Example : MonoBehaviour } ``` -## Motion Tracker +## Sequence + +The Sequence feature is provided for combining multiple motions. + +```cs +LSequence.Create() + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .Join(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .Insert(0f, LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Run(); +``` + +For more details, refer to the [Sequence](https://annulusgames.github.io/LitMotion/ja/sequence.html) section in the documentation. + +## LitMotion.Animation + +LitMotion.Animation is an additional package that provides animation functionality built with LitMotion. + +By introducing this package, you can use the LitMotion Animation component to construct animations in the Inspector. + +![img](./docs/images/img-litmotion-animation.gif) + + +### Requirements + +* Unity 2021.3 or later +* LitMotion 2.0.0 or later + +### Installation + +You can install LitMotion using the Package Manager. + +1. Open Package Manager by navigating to Window > Package Manager. +2. Click on the "+" button and select "Add package from git URL." +3. Enter the following URL: + +```text +https://github.com/AnnulusGames/LitMotion.git?path=src/LitMotion/Assets/LitMotion.Animation +``` + +Alternatively, you can open the `Packages/manifest.json` file and add the following line within the `dependencies` block: -You can track all active motions using the Motion Tracker Window. +```json +{ + "dependencies": { + "com.annulusgames.lit-motion.animation": "https://github.com/AnnulusGames/LitMotion.git?path=src/LitMotion/Assets/LitMotion.Animation" + } +} +``` - +### How to Use -For more details, please refer to [Motion Tracker](https://annulusgames.github.io/LitMotion/articles/en/motion-tracker.html). +For how to use LitMotion.Animation, please refer to the documentation on [LitMotion.Animation](https://annulusgames.github.io/LitMotion/ja/litmotion-animation-overview.html). ## Performance diff --git a/README_JA.md b/README_JA.md index 42aa8e62..53992938 100644 --- a/README_JA.md +++ b/README_JA.md @@ -14,26 +14,32 @@ LitMotionはUnity向けのハイパフォーマンスなトゥイーンライブ LitMotionは[Magic Tween](https://github.com/AnnulusGames/MagicTween)に続いて私が作成した2つ目のトゥイーンライブラリです。LitMotionはMagic Tweenの実装で得た経験をもとに、必要十分な機能を厳選しつつ、最速で動作させることを念頭に置いて設計されました。トゥイーンの作成や駆動などあらゆるシチュエーションにおいて、他のトゥイーンライブラリと比較して2倍から20倍以上の圧倒的なパフォーマンスを発揮します。当然、トゥイーン作成時のアロケーションも一切ありません。 +![img](./docs/images/img-v2-available.png) + +また、v2より複数のモーションを合成するためのSequenceと、Inspectorからトゥイーンアニメーションを作成可能なLitMotion.Animationパッケージが追加されました。これにより機能面においてもDOTween ProやPrimeTweenと同等または以上に強力なライブラリとなっています。 + ## ドキュメント ドキュメントのフルバージョンは[こちら](https://annulusgames.github.io/LitMotion/)から確認できます。 ## 特徴 -- あらゆる値をコード一行でアニメーション可能 -- 構造体ベースの設計でゼロアロケーションを達成 -- DOTSを活用して最適化された極めてハイパフォーマンスな実装 -- ランタイムとエディタの両方で動作 -- 実行するPlayerLoopを指定する豊富なSchedulerを用意 -- イージングや繰り返しなど複雑な設定を適用可能 -- コールバック/コルーチンによる完了の待機 -- FixedStringとTextMeshProによるゼロアロケーションな文字列のアニメーション -- TextMeshProのテキストを文字ごとにアニメーション可能 -- MotionTrackerウィンドウによる動作中のモーションの追跡 -- UniRxを利用したObservableへの変換 -- R3を利用したObservableへの変換 -- UniTaskを利用したasync/await対応 -- `IMotionOptions`と`IMotionAdapter`を用いた型の拡張 +* あらゆる値をコード一行でアニメーション可能 +* 構造体ベースの設計でゼロアロケーションを達成 +* DOTSを活用して最適化された極めてハイパフォーマンスな実装 +* ランタイムとエディタの両方で動作 +* イージングや繰り返しなど複雑な設定を適用可能 +* コールバック/コルーチンによる完了の待機 +* ゼロアロケーションなテキストアニメーション +* TextMesh Pro / UI Toolkitに対応 +* Punch、Shakeなどの特殊なモーション +* UniRx/R3を利用したObservableへの変換 +* UniTaskを利用したasync/await対応 +* `IMotionOptions`と`IMotionAdapter`を用いた型の拡張 +* `SerializableMotionSettings`によるInspectorとの統合 +* デバッグ用のAPIおよびLitMotion Debuggerウィンドウ +* Sequenceによるアニメーションの合成 +* Inspectorから複雑なアニメーションを作成可能なLitMotion.Animationパッケージ ## セットアップ @@ -74,7 +80,7 @@ LitMotionを用いることでTransformやMaterialなどの値を簡単にアニ using System; using System.Threading; using UnityEngine; -using UniRx; // UniRx +using R3; // R3 using Cysharp.Threading.Tasks; // UniTask using LitMotion; using LitMotion.Extensions; @@ -157,12 +163,12 @@ public class Example : MonoBehaviour await handle.ToUniTask(cancellationToken); // ToUniTaskでCancellationTokenを渡してawait } - // UniRxを利用したIObservableへの変換に対応 + // R3を利用したObservableへの変換に対応 void RxExample() { LMotion.Create(0f, 1f, 2f) - .ToObservable() // モーションをIObservableとして作成 - .Where(x => x > 0.5f) // UniRxのオペレータを利用可能 + .ToObservable() // モーションをObservableとして作成 + .Where(x => x > 0.5f) // R3のオペレータを利用可能 .Select(x => x.ToString()) .Subscribe(x => { @@ -173,13 +179,54 @@ public class Example : MonoBehaviour } ``` -## Motion Tracker +## Sequence + +複数のモーションを合成するための機能として、Sequenceが提供されています。 + +```cs +LSequence.Create() + .Append(LMotion.Create(0f, 1f, 1f).BindToPositionX(transform)) + .Join(LMotion.Create(0f, 1f, 1f).BindToPositionY(transform)) + .Insert(0f, LMotion.Create(0f, 1f, 1f).BindToPositionZ(transform)) + .Run(); +``` + +詳細はドキュメントの[Sequence](https://annulusgames.github.io/LitMotion/ja/sequence.html)を参照してください。 + +## LitMotion.Animation + +LitMotion.AnimationはLitMotionで構築されたアニメーションの機能を提供する追加パッケージです。これを導入することで、Inspector上でアニメーションを構築できるLitMotion Animationコンポーネントが利用可能になります。 + +![img](./docs/images/img-litmotion-animation.gif) + +### 要件 + +* Unity 2021.3 以上 +* LitMotion 2.0.0 以上 + +### インストール + +1. Window > Package ManagerからPackage Managerを開く +2. 「+」ボタン > Add package from git URL +3. 以下のURLを入力 + +```text +https://github.com/AnnulusGames/LitMotion.git?path=src/LitMotion/Assets/LitMotion.Animation +``` + +あるいはPackages/manifest.jsonを開き、dependenciesブロックに以下を追記します。 -Motion Trackerウィンドウを使用して動作中の全てのモーションを追跡できます。 +```json +{ + "dependencies": { + "com.annulusgames.lit-motion.animation": "https://github.com/AnnulusGames/LitMotion.git?path=src/LitMotion/Assets/LitMotion.Animation" + } +} +``` - +### 使い方 -詳細は[Motion Tracker](https://annulusgames.github.io/LitMotion/articles/ja/motion-tracker.html)を参照してください。 +LitMotion.Animationの使い方はドキュメントの[LitMotion.Animation](https://annulusgames.github.io/LitMotion/ja/litmotion-animation-overview.html)を参照してください。 ## パフォーマンス From 38095eee894878894f3b2a2f037e15553278f575 Mon Sep 17 00:00:00 2001 From: AnnulusGames Date: Wed, 25 Dec 2024 11:26:15 +0900 Subject: [PATCH 224/224] Update: header image --- docs/images/header.png | Bin 322260 -> 326667 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/header.png b/docs/images/header.png index 906ad69e1c51cf8b87e187411ecfe2124575fdee..4107ec5d25331fb94e62ef448518a321aaaee5e8 100644 GIT binary patch delta 240498 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
    1. teyT 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�n#1ssmvGGVrLB$4CD-gE-i}qb0R(Mi2xPsfpd zAd-~H6v&1-{ZBRkD4T5gU^IPpVvoK=pK3IXOf>zCvrbXo^QiISWhJZ552>tynmgW_ zCY?|$9nrwLxj0x}5CZ6vU{mb>kAM236tXmPwB&4E+LiI9rn3T-e?~a{H5Tf>I=&-D zOfGS+f`vHdGbmVC_5T+N2)qI7*JJTkA8Ftt=QyQ2U~I;uA8?Xsyfi=~V-0{39^J)50*1-gmcN^xwp3D^b zQo)q&X}=vJf?=h)XF)AR-ZZgk(?m;}o0})f|BtFKfoJ;v<5#J^zD3{Y5|VNxA%xsX zmut#>QzN-!A;)}l@l`^Y`z*}d=foJ5`7%Q4Gl{6Bub@Bjb*{yaP$JdBUM zU-$8Rz1~E}cL|{Ot*3ehXgq%W4+!kjf}2AwJpm{ zt32<}W@l%0Df95)?cb|UtUPdGBM}+!m&rnLjlHG?=mf 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 T=%6wQ3}$fN^c?xD^DqAgHek+G delta 236987 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
      V(YXZCh_J2x=7aHX=@ zugxZB^LX9q)y75Tg)$+_#&0)`&D2G$xfV zCiV#(GTjh%ZWO(U**BjtOje1P&@ycFzvtG1wEMg6yW)fpGS5gJX>jm^0^ zmP9fB<3-Nh4e@Z+yxTdy2WX3N>~kj&95s8{=_s&+z=&zESHF`cDF}_pNi6@0mh#>o zAlo>OEB?QRH-9|oe~T(ywRykeV?i>F-_A|^b?uKoxf60*aaakVIQgTi`}e6EC50c? z%b>UbO^xTFIAOdYV?Q5`d=oW9Ea%bZ~gL^3tG`%uI4g9vQb`-u~|Sk#cf7AEnK2 z^aa;GVGQi*ovKe7Y+uekR#23j0zC_)d3}r~7&{=bdA|o*zP~`SA!Hj7aMR^ z8pI?2{N|v#k=CKDma$zi=y0?WveCMei20K6)LJmG@3mBA*-XwX{rnBJp!#e3_k$f^1?wvtNgh(3^RukuUd|VTnl^&h<=#m@~xii-{`U zV%;}kz}-93uvco5GrMg5SLN&%ldpzeS!1q65*L0l^l5>Ac#I}g;~BTtaP_7P69ATL zMkhrACG{LbC@L(oXeu#teo2eG7{jPLYDtkR(o?Y*l`8GOdzCm>gM=p_s}mS$t}`yfYkG56=tco=;7ZSjL_2H#ar9gL@&ISKG`fxeOsr# zAtHYM{wb$Q0m9K)Oa?GPx6EllYq&;wQ~ZpM^s4%oua?6&@^aoIM(bq$KuK;1?KMS8 zZRJ}G^OYWG^af6Eg@MVGd_b6tP_hjoMR#JYFT%6Io>OnaEEUP5duGQ0Tz$Z5HLRLk zxcLAodrICcMQdw9WO0k7RR196U254@P_AuGMNh*?_Bt72NkWQHP>NOT$9aT9?-0K9 zPy5ACo*!NtC9j^DE=&_hl2rH44-)nJS3-fCoM{qC9DNJ6J$QUVq9#nS#3G=}D6pg@ ztS5T#2+C+hDWl(4#h70ORFLniKiT2%>oEFikk#UCyg2Npi53<9suRn}tZ2d!pvFt0U>n!|)z4w>@~jLK0z1E@^Q|`$BaO zO@iWd?wI_RXp;pLcHyb@{gI!$Yfs_@yz9GADw_xSRKzcra5YLCZ5d2g8p359(h!xj zs?+0c>;zP9XJN_xjVsy&%?R=c@^QT$GoyT;50d)=^XerjV7 zseiz&V_lb+RA`L}^TGOz?MpmFlI(M*q1wkFZu6Qf8gds#gS_TGA*;Lx@b7kG(DR_N z3p=A17QgZ_Zjx~ujjTK+lqJw2fG=UB!DG3UGVHL8WD5>MbRJ_{b_T?e3qD{H3oQB0 z;gv(D-rL%&(5Z)?*x>R`Pk$0Wk#sTp@lR1yOLvajFHoxxkKe_tOYg@hlOiGJeaM5N z(phRaS4xt{!AHqalBHF#-E@N@2^Y01j8CsG#@(MYy$}SSsxdx(Q3z
      2{Ch|swP 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 Qg$(D&A=6)T^&Kz$AF@cmS^xk5

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

T_Z*OFu@8_k6iY_6iE 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