mathe/Library/PackageCache/com.unity.shadergraph@14.0.8/Editor/Data/Graphs/DataStore.cs

30 lines
887 B
C#
Raw Normal View History

2024-09-20 20:30:10 +02:00
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);
}
}
}