public void Construct(float bottom, float contentHeight, float viewHeight) { /** Native scroll */ _scrollFriction = scrollFriction; _scrollDamping = scrollDamping; _scrollBoundaryAcc = scrollBoundaryAcc; _scrollMinVel = scrollMinVelocity; _scrollMaxVel = scrollMaxVelocity; _scrollTracks = new float[trackSize]; _scrollPrev = 0f; _scrollTouch = 0f; _scrollVel = 0f; _scrollFixBoundary = FixBoundary.None; /** Easing */ _easing = easing; _easingMinVel = easingMinVelocity; _easingSource = 0f; _easingTarget = 0f; /** */ _maxPos2 = bottom; _maxPos1 = _maxPos2 - bottomPadding; _minPos2 = bottom - (contentHeight - viewHeight); _minPos1 = _minPos2 + topPadding; _position = _maxPos1; _friction = 0f; _isScrolling = false; _isHolding = false; }
public void OnTouchPressed(Vector3 position) { /** Native scroll */ // Clear array of y-positions for (int i = 0; i < trackSize; i++) { _scrollTracks[i] = 0; } // Set previous y-position _scrollPrev = position.y; // Save the current touch y-position _scrollTouch = position.y; // Set velocity to zero _scrollVel = 0f; // Set type of fix boundary _scrollFixBoundary = FixBoundary.None; /** Easing */ // Set source y-position _easingSource = position.y; // Set target y-position _easingTarget = position.y; /** */ // Sets friction _friction = _scrollFriction; // _isHolding = true; }
bool UpdateScrolling(float deltaTime) { bool isFinished = true; /** Update native scroll */ // Update y-velocity if (_scrollVel != 0f) { _scrollVel *= _friction; if (Mathf.Abs(_scrollVel) < _scrollMinVel) { _scrollVel = 0f; } else { // Update y-position _position += _scrollVel; } // bool isReverse = false; // Clamp y-position if (_position < _minPos2) { _position = _minPos2; isReverse = true; } else if (_position <= _minPos1) { if (_friction >= _scrollFriction) { _friction *= _scrollDamping; } } else if (_position > _maxPos2) { _position = _maxPos2; isReverse = true; } else if (_position >= _maxPos1) { if (_friction >= _scrollFriction) { _friction *= _scrollDamping; } } // if (isReverse) { // Clamp scroll velocity if (_scrollVel > 0) { if (_scrollVel > _scrollMaxVel) { _scrollVel = _scrollMaxVel; } } else { if (-_scrollVel > _scrollMaxVel) { _scrollVel = -_scrollMaxVel; } } _scrollVel = -_scrollVel; _friction = _scrollFriction * _scrollDamping * 1.01f; } isFinished = false; } // Check boundary if (_scrollFixBoundary != FixBoundary.None) { if (_scrollFixBoundary == FixBoundary.Top) { if (_position > _minPos1) { _position = _minPos1; _scrollVel = 0f; _scrollFixBoundary = FixBoundary.None; } else { _scrollVel += _scrollBoundaryAcc; isFinished = false; } } else if (_scrollFixBoundary == FixBoundary.Bottom) { if (_position < _maxPos1) { _position = _maxPos1; _scrollVel = 0f; _scrollFixBoundary = FixBoundary.None; } else { _scrollVel -= _scrollBoundaryAcc; isFinished = false; } } } else { if (_position < _minPos1) { _scrollFixBoundary = FixBoundary.Top; isFinished = false; } else if (_position > _maxPos1) { _scrollFixBoundary = FixBoundary.Bottom; isFinished = false; } } return(isFinished); }