public void Update(GameTime gameTime, bool isActive, bool isOverlayed) { _world.Update(gameTime, _camera); #region Camera // Move the camera. var dt = (float)gameTime.ElapsedGameTime.TotalSeconds; var keyboardState = Keyboard.GetState(); if (keyboardState.IsKeyDown(Keys.A)) { _cameraNode.Move(new Vector3(-50.0f * dt, 0.0f, 0.0f)); } if (keyboardState.IsKeyDown(Keys.D)) { _cameraNode.Move(new Vector3(50.0f * dt, 0.0f, 0.0f)); } if (keyboardState.IsKeyDown(Keys.S)) { _cameraNode.Move(new Vector3(0.0f, 50.0f * dt, 0.0f)); } if (keyboardState.IsKeyDown(Keys.W)) { _cameraNode.Move(new Vector3(0.0f, -50.0f * dt, 0.0f)); } if (keyboardState.IsKeyDown(Keys.E)) { _cameraNode.Scale += Vector3.One * 1.0f * dt; } if (keyboardState.IsKeyDown(Keys.Q)) { var scale = _cameraNode.Scale; scale -= Vector3.One * 1.0f * dt; if (scale.X < 0.0f) { scale.X = 0.0f; } if (scale.Y < 0.0f) { scale.Y = 0.0f; } _cameraNode.Scale = scale; } #endregion #region Circle brush var mouseState = Mouse.GetState(); // Translate the mouse position to the scene. var mousePosition = new Vector3(mouseState.X, mouseState.Y, 0.0f); Matrix projectionMatrix, viewMatrix; _camera.GetMatrices(out projectionMatrix, out viewMatrix); mousePosition = _camera.Viewport.Unproject(mousePosition, projectionMatrix, viewMatrix, Matrix.Identity); // Position the brush. _circleBrushNode.Position = new Vector3(mousePosition.X, mousePosition.Y, 0.0f); // Handle mouse click. // Remove quads by setting their state to disabled using the left mouse button. if (mouseState.LeftButton == ButtonState.Pressed && _oldMouseState.LeftButton == ButtonState.Released) { _circleBrushNode.FindMovable <CircleRenderable>().Color = new Vector3(1.0f, 0.0f, 0.0f); } else if (mouseState.LeftButton == ButtonState.Pressed && _oldMouseState.LeftButton == ButtonState.Pressed) { var position = _circleBrushNode.Position; _circleBrush.Position = new Vector2(position.X, position.Y); _terrain.SetQuads(_circleBrush, false); } else if (mouseState.LeftButton == ButtonState.Released && _oldMouseState.LeftButton == ButtonState.Pressed) { _circleBrushNode.FindMovable <CircleRenderable>().Color = Vector3.One; } // Add quads by setting their state to enabled using the right mouse button. if (mouseState.RightButton == ButtonState.Pressed && _oldMouseState.RightButton == ButtonState.Released) { _circleBrushNode.FindMovable <CircleRenderable>().Color = new Vector3(0.0f, 1.0f, 0.0f); } else if (mouseState.RightButton == ButtonState.Pressed && _oldMouseState.RightButton == ButtonState.Pressed) { var position = _circleBrushNode.Position; _circleBrush.Position = new Vector2(position.X, position.Y); _terrain.SetQuads(_circleBrush, true); } else if (mouseState.RightButton == ButtonState.Released && _oldMouseState.RightButton == ButtonState.Pressed) { _circleBrushNode.FindMovable <CircleRenderable>().Color = Vector3.One; } // Store old mouse state. _oldMouseState = mouseState; #endregion }