protected override void Update(IScrollComponent <TData> component)
        {
            var delta = component.PointerEventData?.delta.ProjectTo(GrowDirection) ?? Vector2.zero;

            MoveAll(component, delta);
            Shift(component, delta);
        }
示例#2
0
        protected void Shift(IScrollComponent <TData> component, Vector2 delta)
        {
            //! temporal - item height limit speed
            //delta = delta.magnitude > ScrollerExtensions.SCROLL_SPEED_LIMIT_F ? delta.normalized * ScrollerExtensions.SCROLL_SPEED_LIMIT_F : delta;

            var direction = new Straight {
                Direction = GrowDirection
            };
            VectorGeneric2 intersection;

            if (!component.RectTransform.GetIntersectionInLocalSpace(direction, out intersection))
            {
                return;
            }

            if (Vector2.Dot(delta, GrowDirection) > 0)
            {
                var first = component.VisibleWindow.First;
                if (first != null && !first.RectTransform.IsInsideParentSpace(intersection.Origin) && component.RectTransform.IsOverlapsChild(first.RectTransform))
                {
                    component.ShiftWindowUp();
                }
            }

            if (Vector2.Dot(delta, GrowDirection) < 0)
            {
                var last = component.VisibleWindow.Last;
                if (last != null && !last.RectTransform.IsInsideParentSpace(intersection.Target) && component.RectTransform.IsOverlapsChild(last.RectTransform))
                {
                    component.ShiftWindowDown();
                }
            }
        }
 private void DrawDebug(IScrollComponent <TData> component)
 {
     ScrollerExtensions.MultiLine(component.RectTransform.GetSidesInLocalSpace(), Color.yellow * .5f, true, .5f);
     ScrollerExtensions.MultiLine(component.VisibleWindow.First.RectTransform, Color.yellow, true, .5f);
     ScrollerExtensions.MultiLine(component.VisibleWindow.Last.RectTransform, Color.yellow, true, .5f);
     //ScrollerExtensions.Cross(intersection.Origin, Color.yellow, 30f, 0f);
     //ScrollerExtensions.Cross(intersection.Target, Color.yellow, 30f, 0f);
 }
示例#4
0
        public OneItemHopCoDirectionCarrier(IScrollComponent <TData> component)
        {
            var first = component.VisibleWindow.First;

            first?.RectTransform.GetIntersectionInParentSpace(new Straight {
                Direction = -GrowDirection
            }, out _path);
        }
 // ICarrierFactory
 public void SetDefaultCarrier(IScrollComponent <TData> component)
 {
     if (_current is SuspendedCarrier <TData> )
     {
         return;
     }
     _current = new DefaultCarrier <TData>();
     component.OnCarrierChange(_current);
 }
 // ICarrierFactory
 public void SetBumperCounterDirection(IScrollComponent <TData> component)
 {
     if (_current is SuspendedCarrier <TData> )
     {
         return;
     }
     _current = new BouncingCounterDirectionCarrier <TData>();
     component.OnCarrierChange(_current);
 }
 // ICarrierFactory
 public void SetCarrierCounterDirection(IScrollComponent <TData> component)
 {
     if (_current is SuspendedCarrier <TData> )
     {
         return;
     }
     _current = new OneItemHopCounterDirectionCarrier <TData>(component);
     component.OnCarrierChange(_current);
 }
示例#8
0
 protected void MoveAll(IScrollComponent <TData> component, Vector2 delta)
 {
     //! temporal - item height limit speed
     //delta = delta.magnitude > ScrollerExtensions.SCROLL_SPEED_LIMIT_F ? delta.normalized * ScrollerExtensions.SCROLL_SPEED_LIMIT_F : delta;
     foreach (var item in new ForwardEnumerableWrapper <PageMap <IScrollItem <TData> >, IScrollItem <TData> >(component.VisibleWindow, null))
     {
         item.RectTransform.anchoredPosition += delta;
     }
 }
        public DefaultCarrierFactory(IScrollComponent <TData> component)
        {
            //_carriers = new Dictionary<Type, ICarrier<TData>>(5)
            //{
            //	{ typeof(OneItemHopCoDirectionCarrier<TData>), new OneItemHopCoDirectionCarrier<TData>(component) },
            //	{ typeof(OneItemHopCounterDirectionCarrier<TData>), new OneItemHopCounterDirectionCarrier<TData>(component) },
            //	{ typeof(BouncingCoDirectionCarrier<TData>), new BouncingCoDirectionCarrier<TData>() },
            //	{ typeof(BouncingCounterDirectionCarrier<TData>), new BouncingCounterDirectionCarrier<TData>() },
            //	{ typeof(DefaultCarrier<TData>), new DefaultCarrier<TData>() },
            //};

            SetDefaultCarrier(component);
        }
示例#10
0
        protected override void Update(IScrollComponent <TData> component)
        {
            var time       = _time - Time.deltaTime;
            var normalized = 1f - Mathf.Clamp01(time / TIME_MAX_F);
            var offset     = (1f - Mathf.Cos(Mathf.PI * normalized)) * .5f * _path.Direction;

            MoveAll(component, offset - _distance);
            // Debug.Log(string.Format("<color=magenta>moving DOWN : [ time: {0}, distance: {1}, offset: {2}]</color>", _time, _distance, offset));
            if (_time < 0f)
            {
                component.CarrierFactory.SetDefaultCarrier(component);
            }
            _time = time;
            Shift(component, offset - _distance);
            _distance = offset;
        }
示例#11
0
        protected override void Update(IScrollComponent <TData> component)
        {
            var cutting = new Straight {
                Direction = GrowDirection
            };
            VectorGeneric2 intersection;

            component.RectTransform.GetIntersectionInLocalSpace(cutting, out intersection);
            var isFirst = true;

            foreach (var item in new ForwardEnumerableWrapper <PageMap <IScrollItem <TData> >, IScrollItem <TData> >(component.VisibleWindow, null))
            {
                item.RectTransform.anchoredPosition = isFirst ? intersection.Origin : intersection.Target;
                item.RectTransform.GetIntersectionInParentSpace(cutting, out intersection);
                isFirst = false;
            }
        }
示例#12
0
        public FreeCarrier(IScrollComponent <TData> component)
        {
            //var delta = component.PointerEventData.delta.ProjectTo(component.GrowDirection);
            ////! temporal - item height limit speed
            //_delta = delta.magnitude > ScrollerExtensions.SCROLL_SPEED_LIMIT_F ? delta.normalized * ScrollerExtensions.SCROLL_SPEED_LIMIT_F : delta;
            //var cutting = new Straight { Direction = _delta.normalized, };
            //_isAtTarget = !component.RectTransform.GetIntersectionInLocalSpace(cutting, out _target);
            //var item = component.FirstOrDefault(_ => _.RectTransform.IsInsideParentSpace(_target.Origin)) ?? (Vector2.Dot(_delta, component.GrowDirection) > 0 ? component.First() : component.Last());

            //VectorGeneric2 @internal;
            //item.RectTransform.GetIntersectionInParentSpace(cutting, out @internal);

            //_necessaryDist = (_target.Origin - @internal.Origin).magnitude;
            //_acceleration = -_delta.normalized * (_necessaryDist / (STOP_TIME_F * STOP_TIME_F) + _delta.magnitude / STOP_TIME_F);

            ////ScrollerExtensions.MultiLine(component.RectTransform.GetSidesInLocalSpace(), Color.yellow * .5f, true, 1f);
            ////ScrollerExtensions.Cross(_target.Origin, Color.yellow, 30f, 1f);
            ////ScrollerExtensions.Cross(@internal.Origin, Color.yellow, 30f, 1f);

            ////Debug.Log(string.Format("speed: {0}, acceleration: {1}, distance is: {2}", _delta, _acceleration, _necessuaryDist));
        }
示例#13
0
        protected override void Update(IScrollComponent <TData> component)
        {
            //if(_isAtTarget)
            //{
            //	component.CarrierFactory.SetDefaultCarrier(component);
            //	return;
            //}

            //var direction = new Straight { Direction = component.GrowDirection };
            //VectorGeneric2 intersection;
            //if(!component.RectTransform.GetIntersectionInLocalSpace(direction, out intersection))
            //	return;

            //if(Vector2.Dot(_delta, component.GrowDirection) > 0)
            //{
            //	if(!component.First().RectTransform.IsInsideParentSpace(intersection.Origin) && component.RectTransform.IsOverlapsChild(component.First().RectTransform))
            //	{
            //		component.ShiftWindowUp();
            //	}
            //}
            //else
            //{
            //	if(!component.Last().RectTransform.IsInsideParentSpace(intersection.Target) && component.RectTransform.IsOverlapsChild(component.Last().RectTransform))
            //	{
            //		component.ShiftWindowDown();
            //	}
            //}

            //var delta = _passedDist + _delta.magnitude < _necessaryDist ? _delta : _delta.normalized * (_necessaryDist - _passedDist);
            //foreach(var item in component)
            //	item.RectTransform.anchoredPosition += delta;

            //_passedDist += delta.magnitude;
            //_delta = delta + Time.deltaTime * _acceleration;
            //_isAtTarget = _necessaryDist - _passedDist <= 0f;

            ////Debug.Log(string.Format("speed: {0} nDis: {1} pDis: {2} delta: {3}", _delta.magnitude, _necessuaryDist, _passedDist, delta.magnitude));
        }
示例#14
0
 void ICarrier <TData> .Update(IScrollComponent <TData> component)
 {
     Update(component);
 }
示例#15
0
 protected abstract void Update(IScrollComponent <TData> component);
示例#16
0
 protected override void Update(IScrollComponent <TData> component)
 {
 }
 // ICarrierFactory
 public void UpdateController(IScrollComponent <TData> component)
 {
     _current.Update(component);
 }
 public DefaultItemFactory(IScrollComponent <TData> container, IItemAssetProvider assetProvider)
 {
     _container     = container;
     _assetProvider = assetProvider;
 }