74 lines
1.5 KiB
C#
74 lines
1.5 KiB
C#
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<T>();
|
|
|
|
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
|
|
}
|
|
}
|