Exemplo n.º 1
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 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 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));
            }
        }
Exemplo n.º 3
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>());
        }