30 lines
887 B
C#
30 lines
887 B
C#
using UnityEditor.ShaderGraph;
|
|
using ActionType = UnityEditor.ShaderGraph.IGraphDataAction;
|
|
using System;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEditor.ShaderGraph
|
|
{
|
|
class DataStore<T>
|
|
{
|
|
Action<T, ActionType> m_Reducer;
|
|
internal T State { get; private set; }
|
|
|
|
public Action<T, ActionType> Subscribe;
|
|
|
|
internal DataStore(Action<T, ActionType> reducer, T initialState)
|
|
{
|
|
m_Reducer = reducer;
|
|
State = initialState;
|
|
}
|
|
|
|
public void Dispatch(ActionType action)
|
|
{
|
|
m_Reducer(State, action);
|
|
// Note: This would only work with reference types, as value types would require creating a new copy, this works given that we use GraphData which is a heap object
|
|
// Notifies any listeners about change in state
|
|
Subscribe?.Invoke(State, action);
|
|
}
|
|
}
|
|
}
|