/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { MouseState m = Mouse.GetState(); if (previousMouse.LeftButton == ButtonState.Pressed && m.LeftButton == ButtonState.Pressed) { float sensitivity = 0.01f; Vector2 move = new Vector2(m.X - previousMouse.X, m.Y - previousMouse.Y) * sensitivity; world *= Matrix.CreateRotationY(move.X); world *= Matrix.CreateRotationX(-move.Y); } previousMouse = m; KeyboardState k = Keyboard.GetState(); if (previousKeyboard.IsKeyDown(Keys.Up) && k.IsKeyUp(Keys.Up)) { foreach (var face in mesh.Faces.Cast <ProceduralFace>().Where(a => a.Development != null)) { var d = face.Develop(); diminisher = diminisher ?? d; mesh.CleanEdges(); mesh.CleanVertices(); } } if (previousKeyboard.IsKeyDown(Keys.Down) && k.IsKeyUp(Keys.Down)) { if (diminisher != null) { if (!diminisher.DeleteLeaves()) { diminisher = null; } } } previousKeyboard = k; base.Update(gameTime); }