// 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
/************************************************************************************************************************/
}
}
}