26 lines
928 B
C#
26 lines
928 B
C#
using R3;
|
|
using UnityAtoms;
|
|
|
|
namespace KitsuneCafe.Extension
|
|
{
|
|
public static class AtomExtensions
|
|
{
|
|
public static Observable<T> ObserveChange<T, P, C, V, E1, E2, F, VI>(this AtomReference<T, P, C, V, E1, E2, F, VI> reference)
|
|
where C : AtomBaseVariable<T>
|
|
where V : AtomVariable<T, P, E1, E2, F>
|
|
where P : struct, IPair<T>
|
|
where E1 : AtomEvent<T>
|
|
where E2 : AtomEvent<P>
|
|
where F : AtomFunction<T, T>
|
|
where VI : AtomVariableInstancer<V, P, T, E1, E2, F>
|
|
{
|
|
return reference.Usage switch
|
|
{
|
|
AtomReferenceUsage.CONSTANT => Observable.Return(reference.Value),
|
|
AtomReferenceUsage.VALUE => Observable.EveryValueChanged(reference, r => r.Value),
|
|
AtomReferenceUsage.VARIABLE or AtomReferenceUsage.VARIABLE_INSTANCER => reference.GetEvent<E1>().Observe().ToObservable(),
|
|
_ => throw new System.NotImplementedException(),
|
|
};
|
|
}
|
|
}
|
|
}
|