using System; using System.Collections.Generic; using UnityEngine; namespace RogueUtils.Data { public abstract class SubBaseVariableReference : ScriptableObject { private event EventHandler InternalOnVariableChangeUntyped; private event EventHandler InternalOnValueChangeUntyped; public event EventHandler OnVariableChangeUntyped { // Not thread safe. // Will add tracking of subscribers add { InternalOnVariableChangeUntyped += value; } remove { InternalOnVariableChangeUntyped -= value; } } public event EventHandler OnValueChangeUntyped { // Not thread safe. // Will add tracking of subscribers add { InternalOnValueChangeUntyped += value; } remove { InternalOnValueChangeUntyped -= value; } } public abstract SubBaseVariable GetVariableUntyped(); public abstract void SetVariableUntyped(SubBaseVariable value); public abstract T GetValue(); public abstract object GetValueUntyped(); public abstract void SetValueUntyped(object value); public abstract void TriggerVariableListeners(); protected void SubBaseTriggerVariableListeners() { InternalOnVariableChangeUntyped?.Invoke(this, EventArgs.Empty); } protected void SubBaseTriggerValueListeners() { InternalOnValueChangeUntyped?.Invoke(this, EventArgs.Empty); } #if UNITY_EDITOR && false [BoxGroup("Debug/Trigger")] [Button("Trigger Variable Listeners")] public void EditorTriggerVariableListeners() { TriggerVariableListeners(); } #endif } }