コード例 #1
0
    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;
    }
コード例 #2
0
    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;
    }
コード例 #3
0
    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);
    }