using UnityEngine;
using System;
using MoralisUnity.Sdk.Events;
namespace MoralisUnity.Sdk.Data
{
///
/// Wrapper so a type can be observable via events
///
public class Observable where T : struct, IConvertible
{
// Events ----------------------------------------
public ObservableUnityEvent OnValueChanged = new ObservableUnityEvent();
// Properties ------------------------------------
public T Value
{
set
{
_value = OnValueChanging(_value, value);
OnValueChanged.Invoke(_value);
}
get
{
return _value;
}
}
// Fields ----------------------------------------
private T _value;
// Constructor Methods ---------------------------
static Observable()
{
// Limitation is based on current use, not theoretical use.
if (typeof(T).IsEnum == false)
{
throw new ArgumentException("Observable T must be of type enum");
}
}
public Observable ()
{
}
// Methods ---------------------------------------
protected virtual T OnValueChanging (T oldValue, T newValue)
{
return newValue;
}
// Event Handlers --------------------------------
}
}