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); }
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(); } }