Example #1
0
        protected override void Update(GameTime gameTime)
        {
            PerformanceProfiler.Instance.Update(gameTime.ElapsedGameTime);
            PerformanceProfiler.Instance.BeginCounter(_fullUpdateCounter);

            if (!IsActive)
            {
                return;
            }

            bool shouldRedraw = _redrawInNextFrame;

            _redrawInNextFrame = false;

            _timeTillRedraw -= gameTime.ElapsedGameTime.TotalSeconds;

            if (_timeTillRedraw <= 0)
            {
                _timeTillRedraw = _redrawPeriod;
                shouldRedraw    = true;
            }

            _shouldRedraw = false;

            PlatformUpdate(gameTime);

            float time = (float)gameTime.ElapsedGameTime.TotalSeconds;

            TotalGameTime = gameTime.TotalGameTime.TotalSeconds;

            //Accelerators.Instance.Process(_currentFocus == null);
            if (disableUpdate > 0)
            {
                UiTask.Process();
                DelayedActionInvoker.Instance.Update(time);

                var newSize = new Point(GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);

                if (_lastSize != newSize)
                {
                    if (MainView != null)
                    {
                        OnSize(newSize.X, newSize.Y);
                        _top = MainView.Bounds.Top;
                    }

                    _lastSize     = newSize;
                    _shouldRedraw = true;
                    Redraw(true);
                    RedrawNextFrame();
                }
            }

            if (_currentVerticalOffset != _desiredVerticalOffset)
            {
                if (time >= 0.2)
                {
                    _currentVerticalOffset = _desiredVerticalOffset;
                }
                else
                {
                    _currentVerticalOffset = _desiredVerticalOffset * time * 5 + (1 - time * 5) * _currentVerticalOffset;
                    _currentVerticalOffset = _desiredVerticalOffset * time * 5 + (1 - time * 5) * _currentVerticalOffset;
                    _currentVerticalOffset = _desiredVerticalOffset * time * 5 + (1 - time * 5) * _currentVerticalOffset;
                    _currentVerticalOffset = _desiredVerticalOffset * time * 5 + (1 - time * 5) * _currentVerticalOffset;
                }

                if (Math.Abs(_currentVerticalOffset - _desiredVerticalOffset) < 10)
                {
                    _currentVerticalOffset = _desiredVerticalOffset;
                }
            }

            if (MainView != null && MainView.OffsetBoundsVertical != (int)_currentVerticalOffset + _top)
            {
                MainView.OffsetBoundsVertical = (int)_currentVerticalOffset + _top;
            }

            if (disableUpdate > 0)
            {
                TouchPad.Instance.Update(time, IsActive);
                GamePads.Instance.Update();
            }

            bool shouldUpdate = shouldRedraw;

            _cumulativeFrameTime += time;

            //disableUpdate -= gameTime.ElapsedGameTime.TotalSeconds;

            if (shouldUpdate && disableUpdate > 0)
            {
                for (int idx = 0; idx < _updatables.Count; ++idx)
                {
                    _updatables[idx].Update(time);
                }

                if (MainView != null)
                {
                    PerformanceProfiler.Instance.BeginCounter(_viewUpdateCounter);
                    MainView.ViewUpdate(_cumulativeFrameTime);
                    PerformanceProfiler.Instance.EndCounter(_viewUpdateCounter);
                }
                _cumulativeFrameTime = 0;
                updatesCount++;
            }

            secTime += gameTime.ElapsedGameTime.TotalSeconds;

            if (secTime >= 1)
            {
                //Console.WriteLine("Updates per sec: {0:0.00}", updatesCount / secTime);
                updatesCount -= updatesCount / secTime;
                secTime       = 0;
            }

            _redrawInNextFrame |= _shouldRedraw;
            shouldRedraw       |= _shouldRedraw;

            if (!shouldRedraw)
            {
                SuppressDraw();
            }

            PerformanceProfiler.Instance.EndCounter(_fullUpdateCounter);
        }
Example #2
0
        protected override void Update(GameTime gameTime)
        {
            bool shouldRedraw = _redrawInNextFrame;

            _redrawInNextFrame = false;

            _timeTillRedraw -= gameTime.ElapsedGameTime.TotalSeconds;

            if (_timeTillRedraw <= 0)
            {
                _timeTillRedraw = _redrawPeriod;
                shouldRedraw    = true;
            }

            _shouldRedraw = false;

            PlatformUpdate(gameTime);

            float time = (float)gameTime.ElapsedGameTime.TotalSeconds;

            PerformanceProfiler.Instance.Update(gameTime.ElapsedGameTime);

            TotalGameTime = gameTime.TotalGameTime.TotalSeconds;

            //Accelerators.Instance.Process(_currentFocus == null);

            UiTask.Process();
            DelayedActionInvoker.Instance.Update(time);

            var newSize = new Point(GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);

            if (_lastSize != newSize)
            {
                if (MainView != null)
                {
                    OnSize(newSize.X, newSize.Y);
                    _top = MainView.Bounds.Top;
                }

                _lastSize = newSize;
            }

            if (_currentVerticalOffset != _desiredVerticalOffset)
            {
                if (time >= 0.2)
                {
                    _currentVerticalOffset = _desiredVerticalOffset;
                }
                else
                {
                    _currentVerticalOffset = _desiredVerticalOffset * time * 5 + (1 - time * 5) * _currentVerticalOffset;
                    _currentVerticalOffset = _desiredVerticalOffset * time * 5 + (1 - time * 5) * _currentVerticalOffset;
                    _currentVerticalOffset = _desiredVerticalOffset * time * 5 + (1 - time * 5) * _currentVerticalOffset;
                    _currentVerticalOffset = _desiredVerticalOffset * time * 5 + (1 - time * 5) * _currentVerticalOffset;
                }

                if (Math.Abs(_currentVerticalOffset - _desiredVerticalOffset) < 10)
                {
                    _currentVerticalOffset = _desiredVerticalOffset;
                }
            }

            if (MainView.OffsetBoundsVertical != (int)_currentVerticalOffset + _top)
            {
                MainView.OffsetBoundsVertical = (int)_currentVerticalOffset + _top;
            }

            TouchPad.Instance.Update(time, IsActive);
            GamePads.Instance.Update();

            for (int idx = 0; idx < _updatables.Count; ++idx)
            {
                _updatables[idx].Update(time);
            }

            MainView.ViewUpdate(time);

            shouldRedraw |= _shouldRedraw;

            if (!shouldRedraw)
            {
                SuppressDraw();
            }
        }