using UnityEngine;
namespace MalbersAnimations.Scriptables
{
/// Prefab Scriptable Variable. Based on the Talk - Game Architecture with Scriptable Objects by Ryan Hipple
[CreateAssetMenu(menuName = "Malbers Animations/Variables/Sprite Var", order = 2000)]
public class SpriteVar : ScriptableVar
{
[SerializeField] private Sprite value;
/// Invoked when the value changes
public Events.SpriteEvent OnValueChanged = new Events.SpriteEvent();
/// Value of the Bool variable
public virtual Sprite Value
{
get { return value; }
set
{
if (this.value != value) //If the value is diferent change it
{
this.value = value;
OnValueChanged.Invoke(value); //If we are using OnChange event Invoked
#if UNITY_EDITOR
if (debug) Debug.Log($"{name} -> [ {value} ] ", this);
#endif
}
}
}
public virtual void SetValue(SpriteVar var) { Value = var.Value; }
public virtual void SetValue(Sprite var) { Value = var; }
}
[System.Serializable]
public class SpriteReference : ReferenceVar
{
public Sprite ConstantValue;
[RequiredField] public SpriteVar Variable;
public SpriteReference() => UseConstant = true;
public SpriteReference(Sprite value) => Value = value;
public SpriteReference(SpriteVar value) => Value = value.Value;
public Sprite Value
{
get => UseConstant ? ConstantValue : (Variable != null ? Variable.Value : null);
set
{
if (UseConstant)
ConstantValue = value;
else
Variable.Value = value;
}
}
}
}