// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik // using UnityEngine; namespace Animancer { /// https://kybernetik.com.au/animancer/api/Animancer/AnimancerEvent partial struct AnimancerEvent { /// /// An s which internally boxes value types /// to avoid re-boxing them every . /// /// https://kybernetik.com.au/animancer/api/Animancer/ParameterBoxed_1 public abstract class ParameterBoxed : Parameter, IParameter #if UNITY_EDITOR , ISerializationCallbackReceiver #endif where T : struct { /************************************************************************************************************************/ private object _Boxed; /// public override T Value { get => base.Value; set { base.Value = value; _Boxed = null; } } /// object IParameter.Value { get => Value; set => Value = (T)value; } /// public override void Invoke() { CurrentParameter = _Boxed ??= base.Value; Current.InvokeBoundCallback(); } /************************************************************************************************************************/ #if UNITY_EDITOR /************************************************************************************************************************/ /// void ISerializationCallbackReceiver.OnBeforeSerialize() { } /// void ISerializationCallbackReceiver.OnAfterDeserialize() => _Boxed = null; /************************************************************************************************************************/ #endif /************************************************************************************************************************/ } } }