using System; using System.Runtime.CompilerServices; using Unity.Collections.LowLevel.Unsafe; namespace LitMotion { /// /// A structure that holds motion callbacks. /// public struct MotionCallbackData { public byte StateCount; public bool IsCallbackRunning; public bool CancelOnError; public bool SkipValuesDuringDelay; public object State1; public object State2; public object State3; public object UpdateAction; public Action OnCompleteAction; public Action OnCancelAction; [MethodImpl(MethodImplOptions.AggressiveInlining)] public void InvokeUnsafe(in TValue value) where TValue : unmanaged { switch (StateCount) { 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; } } public readonly static MotionCallbackData Default = new() { SkipValuesDuringDelay = true, }; } }