protected void Shift(IScrollController <TData> controller, 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 = controller.GrowDirection
            };
            VectorGeneric2 intersection;

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

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

            if (Vector2.Dot(delta, controller.GrowDirection) < 0)
            {
                var last = controller.LastOrDefault();
                if (last != null && !last.RectTransform.IsInsideParentSpace(intersection.Target) && controller.RectTransform.IsOverlapsChild(controller.Last().RectTransform))
                {
                    controller.ShiftWindowDown();
                }
            }
        }
Esempio n. 2
0
        protected override void Update(IScrollController <TData> controller)
        {
            if (_isAtTarget)
            {
                controller.CarrierFactory.SetDefaultCarrier(controller);
                return;
            }

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

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

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

            var delta = _passedDist + _delta.magnitude < _necessaryDist ? _delta : _delta.normalized * (_necessaryDist - _passedDist);

            foreach (var item in controller)
            {
                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));
        }