using UnityEngine; using UnityEngine.Events; using Xprees.Core; namespace Xprees.Variables.Base { public abstract class VariableBaseSO : DescriptionBaseSO { private void OnEnable() { hideFlags = HideFlags.DontUnloadUnusedAsset; ResetState(); } public override abstract void ResetState(); } /// /// Base class for all variables ScriptableObjects. /// Object holds the state on runtime, but reset every time OnEnable to defaultValue. /// /// Unity Serializable public class VariableBaseSO : VariableBaseSO { [SerializeField] protected T defaultValue; [SerializeField] private T currentValue; public virtual T CurrentValue { get => currentValue; set { currentValue = value; onValueChanged?.Invoke(value); } } public UnityAction onValueChanged; public void SetValue(T value) => CurrentValue = value; public void SetValue(VariableBaseSO variable) => CurrentValue = variable.CurrentValue; public static implicit operator T(VariableBaseSO variable) => variable != null ? variable.CurrentValue : default; public override void ResetState() => CurrentValue = defaultValue; } }