using R3; using UnityAtoms; namespace KitsuneCafe.Extension { public static class AtomExtensions { public static Observable ObserveChange(this AtomReference reference) where C : AtomBaseVariable where V : AtomVariable where P : struct, IPair where E1 : AtomEvent where E2 : AtomEvent

where F : AtomFunction where VI : AtomVariableInstancer { 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().Observe().ToObservable(), _ => throw new System.NotImplementedException(), }; } } }