public WaitUntilValueChangedStandardObjectPromise(T target, Func<T, U> monitorFunction, IEqualityComparer<U> equalityComparer, PlayerLoopTiming timing, CancellationToken cancellationToken) : base(timing, cancellationToken, 1) { this.target = new WeakReference<T>(target, false); // wrap in WeakReference. this.monitorFunction = monitorFunction; this.equalityComparer = equalityComparer ?? UnityEqualityComparer.GetDefault<U>(); this.currentValue = monitorFunction(target); }
public static IUniTaskSource <U> Create(T target, Func <T, U> monitorFunction, IEqualityComparer <U> equalityComparer, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource <U> .CreateFromCanceled(cancellationToken, out token)); } if (!pool.TryPop(out var result)) { result = new WaitUntilValueChangedStandardObjectPromise <T, U>(); } result.target = new WeakReference <T>(target, false); // wrap in WeakReference. result.monitorFunction = monitorFunction; result.currentValue = monitorFunction(target); result.equalityComparer = equalityComparer ?? UnityEqualityComparer.GetDefault <U>(); result.cancellationToken = cancellationToken; TaskTracker.TrackActiveTask(result, 3); PlayerLoopHelper.AddAction(timing, result); token = result.core.Version; return(result); }
public WaitUntilValueChangedUnityObjectPromise(T target, Func<T, U> monitorFunction, IEqualityComparer<U> equalityComparer, PlayerLoopTiming timing, CancellationToken cancellationToken) : base(timing, cancellationToken, 1) { this.target = target; this.monitorFunction = monitorFunction; this.equalityComparer = equalityComparer ?? UnityEqualityComparer.GetDefault<U>(); this.currentValue = monitorFunction(target); }
public static IProgress <T> CreateOnlyValueChanged <T>(Action <T> handler, IEqualityComparer <T> comparer = null) { if (handler == null) { return(NullProgress <T> .Instance); } return(new OnlyValueChangedProgress <T>(handler, comparer ?? UnityEqualityComparer.GetDefault <T>())); }
public static IObservable <IGroupedObservable <TKey, TElement> > GroupBy <TSource, TKey, TElement>(this IObservable <TSource> source, Func <TSource, TKey> keySelector, Func <TSource, TElement> elementSelector, int capacity) { #if !UniRxLibrary var comparer = UnityEqualityComparer.GetDefault <TKey>(); #else var comparer = EqualityComparer <TKey> .Default; #endif return(GroupBy(source, keySelector, elementSelector, capacity, comparer)); }
public static IObservable <T> DistinctUntilChanged <T, TKey>(this IObservable <T> source, Func <T, TKey> keySelector) { #if !UniRxLibrary var comparer = UnityEqualityComparer.GetDefault <TKey>(); #else var comparer = EqualityComparer <TKey> .Default; #endif return(new DistinctUntilChangedObservable <T, TKey>(source, keySelector, comparer)); }
public static IObservable <TSource> Distinct <TSource>(this IObservable <TSource> source) { #if !UniRxLibrary var comparer = UnityEqualityComparer.GetDefault <TSource>(); #else var comparer = EqualityComparer <TSource> .Default; #endif return(new DistinctObservable <TSource>(source, comparer)); }
public static IProgress <T> CreateOnlyValueChanged <T>(Action <T> handler, IEqualityComparer <T> comparer = null) { if (handler == null) { return(NullProgress <T> .Instance); } #if UNITY_2018_3_OR_NEWER return(new OnlyValueChangedProgress <T>(handler, comparer ?? UnityEqualityComparer.GetDefault <T>())); #else return(new OnlyValueChangedProgress <T>(handler, comparer ?? EqualityComparer <T> .Default)); #endif }
public static IUniTaskSource <U> Create(T target, Func <T, U> monitorFunction, IEqualityComparer <U> equalityComparer, PlayerLoopTiming timing, CancellationToken cancellationToken, out short token) { if (cancellationToken.IsCancellationRequested) { return(AutoResetUniTaskCompletionSource <U> .CreateFromCanceled(cancellationToken, out token)); } var result = pool.TryRent() ?? new WaitUntilValueChangedUnityObjectPromise <T, U>(); result.target = target; result.targetAsUnityObject = target as UnityEngine.Object; result.monitorFunction = monitorFunction; result.currentValue = monitorFunction(target); result.equalityComparer = equalityComparer ?? UnityEqualityComparer.GetDefault <U>(); result.cancellationToken = cancellationToken; TaskTracker.TrackActiveTask(result, 3); PlayerLoopHelper.AddAction(timing, result); token = result.core.Version; return(result); }
public static IUniTaskAsyncEnumerable <TProperty> EveryValueChanged <TTarget, TProperty>(TTarget target, Func <TTarget, TProperty> propertySelector, PlayerLoopTiming monitorTiming = PlayerLoopTiming.Update, IEqualityComparer <TProperty> equalityComparer = null) where TTarget : class { var unityObject = target as UnityEngine.Object; var isUnityObject = target is UnityEngine.Object; // don't use (unityObject == null) if (isUnityObject) { return(new EveryValueChangedUnityObject <TTarget, TProperty>(target, propertySelector, equalityComparer ?? UnityEqualityComparer.GetDefault <TProperty>(), monitorTiming)); } else { return(new EveryValueChangedStandardObject <TTarget, TProperty>(target, propertySelector, equalityComparer ?? UnityEqualityComparer.GetDefault <TProperty>(), monitorTiming)); } }