示例#1
0
        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);
        }