protected override void Update(GameTime gameTime) { if (System.Windows.Input.Keyboard.IsKeyDown(System.Windows.Input.Key.Escape)) { Exit(); } // move camera _camera.Update(gameTime); if (!_gamePaused) { // Simulate level if 0.25f seconds passed. _cumulatedFrameTime += gameTime.ElapsedGameTime.TotalSeconds; if (_cumulatedFrameTime > 0.25) { _cumulatedFrameTime -= 0.25; _currentLevel.Tick(); } _seedbar.Update(); // the permanent picking var ray = _camera.GetPickingRay(GraphicsDevice.BackBuffer.Width, GraphicsDevice.BackBuffer.Height); _pickPosAvailable = this._currentLevel.GetMap().PickPosition(ray, out _pickedPos); // stop game? if (_currentLevel.IsVictory() || _currentLevel.IsLost()) { _gamePaused = true; // TODO: Display message } // next/prev level cheat if (System.Windows.Input.Keyboard.IsKeyDown(System.Windows.Input.Key.OemPlus) && !wasCheatPlusPressed) { NextLevel(); wasCheatPlusPressed = true; } wasCheatPlusPressed = !System.Windows.Input.Keyboard.IsKeyUp(System.Windows.Input.Key.OemPlus); } else { if (System.Windows.Input.Keyboard.IsKeyDown(System.Windows.Input.Key.Enter)) { if (_currentLevel.IsVictory()) { NextLevel(); } else if (_currentLevel.IsLost()) { _currentLevel = (Level)_currentLevel.GetType().GetConstructor(new[] { typeof(VoxelRenderer) }).Invoke(new object[] { (object)_voxelRenderer }); } _gamePaused = false; } } // Handle base.Update base.Update(gameTime); }