/// <summary> /// Update camera for mouse input. /// </summary> private static void UpdateForMouse(Camera3DBase actCamera, bool isControlKeyDown, MouseOrPointerState mouseState) { // Handle mouse move if (mouseState.MoveDistanceDip != Vector2.Zero) { var moving = mouseState.MoveDistanceDip; if (mouseState.IsButtonDown(MouseButton.Left) && mouseState.IsButtonDown(MouseButton.Right)) { actCamera.Zoom(moving.Y / -50f); } else if (mouseState.IsButtonDown(MouseButton.Left)) { actCamera.Strave(moving.X / 50f); actCamera.UpDown(-moving.Y / 50f); } else if (mouseState.IsButtonDown(MouseButton.Right)) { actCamera.Rotate(-moving.X / 200f, -moving.Y / 200f); } } // Handle mouse wheel if (mouseState.WheelDelta != 0) { var multiplier = 1f; if (isControlKeyDown) { multiplier = 2f; } actCamera.Zoom(mouseState.WheelDelta / 100f * multiplier); } }
/// <summary> /// Update camera for keyboard input. /// </summary> private static void UpdateForKeyboard( Camera3DBase actCamera, KeyboardState actKeyboardState, out bool isControlKeyDown) { // Define multiplier var multiplier = 1f; isControlKeyDown = false; if (actKeyboardState.IsKeyDown(WinVirtualKey.ControlKey) || actKeyboardState.IsKeyDown(WinVirtualKey.LControlKey) || actKeyboardState.IsKeyDown(WinVirtualKey.RControlKey)) { multiplier = 2f; isControlKeyDown = true; } foreach (var actKey in actKeyboardState.KeysDown) { switch (actKey) { case WinVirtualKey.Up: case WinVirtualKey.W: actCamera.Zoom(MOVEMENT * multiplier); break; case WinVirtualKey.Down: case WinVirtualKey.S: actCamera.Zoom(-MOVEMENT * multiplier); break; case WinVirtualKey.Left: case WinVirtualKey.A: actCamera.Strave(-MOVEMENT * multiplier); break; case WinVirtualKey.Right: case WinVirtualKey.D: actCamera.Strave(MOVEMENT * multiplier); break; case WinVirtualKey.Q: case WinVirtualKey.NumPad3: actCamera.Move(new Vector3(0f, -MOVEMENT * multiplier, 0f)); break; case WinVirtualKey.E: case WinVirtualKey.NumPad9: actCamera.Move(new Vector3(0f, MOVEMENT * multiplier, 0f)); break; case WinVirtualKey.NumPad4: actCamera.Rotate(ROTATION, 0f); break; case WinVirtualKey.NumPad2: actCamera.Rotate(0f, -ROTATION); break; case WinVirtualKey.NumPad6: actCamera.Rotate(-ROTATION, 0f); break; case WinVirtualKey.NumPad8: actCamera.Rotate(0f, ROTATION); break; } } }