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);
			}
Exemplo n.º 4
0
 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>()));
 }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
        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));
        }
Exemplo n.º 8
0
        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
        }
Exemplo n.º 9
0
            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));
            }
        }