MonoGdx.Scene2D.UI.ScrollPane.Act C# (CSharp) Method

Act() public method

public Act ( float delta ) : void
delta float
return void
        public override void Act(float delta)
        {
            base.Act(delta);

            bool panning = false; // TODO: flickScrollListener

            if (_fadeAlpha > 0 && _fadeScrollBars && !panning && !_touchScrollH && !_touchScrollV) {
                _fadeDelay -= delta;
                if (_fadeDelay <= 0)
                    _fadeAlpha = Math.Max(0, _fadeAlpha - delta);
            }

            if (_flingTimer > 0) {
                ResetFade();

                float alpha = _flingTimer / FlingTime;
                ScrollX -= _velocityX * alpha * delta;
                ScrollY -= _velocityY * alpha * delta;
                Clamp();

                // Stop fling if hit overscroll distance.
                if (ScrollX == -OverscrollDistance)
                    _velocityX = 0;
                if (ScrollX >= MaxX + OverscrollDistance)
                    _velocityX = 0;
                if (ScrollY == -OverscrollDistance)
                    _velocityY = 0;
                if (ScrollY >= MaxY + OverscrollDistance)
                    _velocityY = 0;

                _flingTimer -= delta;
                if (_flingTimer <= 0) {
                    _velocityX = 0;
                    _velocityY = 0;
                }
            }

            if (SmoothScrolling && _flingTimer <= 0 && !_touchScrollH && !_touchScrollV && !panning) {
                if (_visualAmountX != ScrollX) {
                    if (_visualAmountX < ScrollX)
                        VisualScrollX = Math.Min(ScrollX, _visualAmountX + Math.Max(150 * delta, (ScrollX - _visualAmountX) * 5 * delta));
                    else
                        VisualScrollX = Math.Max(ScrollX, _visualAmountX - Math.Max(150 * delta, (_visualAmountX - ScrollX) * 5 * delta));
                }
                if (_visualAmountY != ScrollY) {
                    if (_visualAmountY < ScrollY)
                        VisualScrollY = Math.Min(ScrollY, _visualAmountY + Math.Max(150 * delta, (ScrollY - _visualAmountY) * 5 * delta));
                    else
                        VisualScrollY = Math.Max(ScrollY, _visualAmountY - Math.Max(150 * delta, (_visualAmountY - ScrollY) * 5 * delta));
                }
            }
            else {
                if (_visualAmountX != ScrollX)
                    VisualScrollX = ScrollX;
                if (_visualAmountY != ScrollY)
                    VisualScrollY = ScrollY;
            }

            if (!panning) {
                if (OverscrollX && IsScrollX) {
                    if (ScrollX < 0) {
                        ResetFade();
                        ScrollX += (OverscrollSpeedMin + (OverscrollSpeedMax - OverscrollSpeedMin) * -ScrollX / OverscrollDistance) * delta;
                        if (ScrollX > 0)
                            ScrollX = 0;
                    }
                    else if (ScrollX > MaxX) {
                        ResetFade();
                        ScrollX -= (OverscrollSpeedMin + (OverscrollSpeedMax - OverscrollSpeedMin) * (-MaxX - ScrollX) / OverscrollDistance) * delta;
                        if (ScrollX < MaxX)
                            ScrollX = MaxX;
                    }
                }

                if (OverscrollY && IsScrollY) {
                    if (ScrollY < 0) {
                        ResetFade();
                        ScrollY += (OverscrollSpeedMin + (OverscrollSpeedMax - OverscrollSpeedMin) * -ScrollY / OverscrollDistance) * delta;
                        if (ScrollY > 0)
                            ScrollY = 0;
                    }
                    else if (ScrollY > MaxY) {
                        ResetFade();
                        ScrollY -= (OverscrollSpeedMin + (OverscrollSpeedMax - OverscrollSpeedMin) * (-MaxY - ScrollY) / OverscrollDistance) * delta;
                        if (ScrollY < MaxY)
                            ScrollY = MaxY;
                    }
                }
            }
        }