protected override void Update(IScrollComponent <TData> component) { var delta = component.PointerEventData?.delta.ProjectTo(GrowDirection) ?? Vector2.zero; MoveAll(component, delta); Shift(component, delta); }
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); }
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); }
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); }
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; }
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; } }
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)); }
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)); }
void ICarrier <TData> .Update(IScrollComponent <TData> component) { Update(component); }
protected abstract void Update(IScrollComponent <TData> component);
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; }