Files
SampleRenderPasses/Assets/SubBaseVariableReference.cs
2025-05-18 22:39:39 +03:00

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
}
}