public void ResetCamera(CameraTurnTable camera) { camera.SetClippingPlanes(0.05f, 150.0f); camera.FieldOfViewHorizontal = MathHelper.ToRadians(CameraParamsDialog.DefaultCameraFOV); camera.Target = CameraParamsDialog.DefaultCameraTarget; camera.Distance = CameraParamsDialog.DefaultCameraDistance; camera.SetRotation(MathHelper.ToRadians(CameraParamsDialog.DefaultCameraRotationHoriz), MathHelper.ToRadians(CameraParamsDialog.DefaultCameraRotationVert)); }
private void LoadCamera(BinaryReader file, ushort versionMajor, ushort versionMinor, bool loadCamera) { float cameraFov = file.ReadSingle(); Vector3 cameraTarget = new Vector3(); cameraTarget.X = file.ReadSingle(); cameraTarget.Y = file.ReadSingle(); cameraTarget.Z = file.ReadSingle(); float cameraDistance = file.ReadSingle(); float cameraRotationHoriz = file.ReadSingle(); float cameraRotationVert = file.ReadSingle(); if (loadCamera) { CameraTurnTable camera = game.Camera; camera.FieldOfViewHorizontal = cameraFov; camera.Target = cameraTarget; camera.Distance = cameraDistance; camera.SetRotation(cameraRotationHoriz, cameraRotationVert); } }
private void ProcessMouse(float deltaMilliseconds) { MouseState mouseState = Mouse.GetState(); KeyboardState keyboardState = Keyboard.GetState(); bool axisKeyPressed = keyboardState.IsKeyDown(Keys.NumPad1) || keyboardState.IsKeyDown(Keys.NumPad2) || keyboardState.IsKeyDown(Keys.NumPad3) || keyboardState.IsKeyDown(Keys.Q) || keyboardState.IsKeyDown(Keys.W) || keyboardState.IsKeyDown(Keys.E); bool ctrlKeyPressed = keyboardState.IsKeyDown(Keys.LeftControl) || keyboardState.IsKeyDown(Keys.RightControl); bool shiftKeyPressed = keyboardState.IsKeyDown(Keys.LeftShift) || keyboardState.IsKeyDown(Keys.RightShift); bool altKeyPressed = keyboardState.IsKeyDown(Keys.LeftAlt) || keyboardState.IsKeyDown(Keys.RightAlt); if (axisKeyPressed || ctrlKeyPressed || shiftKeyPressed || altKeyPressed) { disableBoneSelection = true; } else { if (!mouseLeftDragging) { disableBoneSelection = false; } } if (mouseState.LeftButton == ButtonState.Pressed) { if (displayBones && !disableBoneSelection) { Armature.Bone selectedBone = boneSelector.SelectedBone; if (selectedBone != null) { controlGUI.HandleBoneSelectedIn3D(selectedBone); } } if (!mouseLeftDragging) { mouseLeftDragging = true; mouseAnchor = new Point(mouseState.X, mouseState.Y); } } else { mouseLeftDragging = false; disableBoneSelection = false; if (boneTransformActive) { boneTransformActive = false; controlGUI.UndoSaveInterrupt(); } } if (mouseState.RightButton == ButtonState.Pressed) { if (!mouseRightDragging) { mouseRightDragging = true; mouseAnchor = new Point(mouseState.X, mouseState.Y); } } else { mouseRightDragging = false; } if (mouseLeftDragging && mouseRightDragging) { int dx = mouseState.X - mouseAnchor.X; int dy = mouseState.Y - mouseAnchor.Y; mouseAnchor = new Point(mouseState.X, mouseState.Y); if (!controlGUI.IsCameraLocked) { camera.Target -= (camera.Left * dx - camera.Up * dy) * 0.005f; } return; } if (mouseLeftDragging) { int dx = mouseState.X - mouseAnchor.X; int dy = mouseState.Y - mouseAnchor.Y; mouseAnchor = new Point(mouseState.X, mouseState.Y); if (axisKeyPressed) { Armature.Bone selectedBone = controlGUI.SelectedBone; if (selectedBone != null) { boneTransformActive = true; if (keyboardState.IsKeyDown(Keys.NumPad1) || keyboardState.IsKeyDown(Keys.Q)) { float angle = controlGUI.GetBoneRotationX(selectedBone); controlGUI.HandleBoneRotationXChanged(selectedBone, angle + (dx + dy) * 0.5f); } if (keyboardState.IsKeyDown(Keys.NumPad2) || keyboardState.IsKeyDown(Keys.W)) { float angle = controlGUI.GetBoneRotationY(selectedBone); controlGUI.HandleBoneRotationYChanged(selectedBone, angle + (dx + dy) * 0.5f); } if (keyboardState.IsKeyDown(Keys.NumPad3) || keyboardState.IsKeyDown(Keys.E)) { float angle = controlGUI.GetBoneRotationZ(selectedBone); controlGUI.HandleBoneRotationZChanged(selectedBone, angle + (dx + dy) * 0.5f); } } return; } if (ctrlKeyPressed) { Item selectedItem = controlGUI.SelectedItem; if (selectedItem != null) { Vector3 point; if (ProjectMouseToGround(mouseState.X, mouseState.Y, out point)) { Armature armature = selectedItem.Model.Armature; float height = armature.WorldTranslation.Y; armature.WorldTranslation = new Vector3(point.X, height, point.Z); controlGUI.HandlePositionChanged(armature.WorldTranslation); } } return; } if (!controlGUI.IsCameraLocked) { if (shiftKeyPressed) { camera.Target -= (camera.Left * dx - camera.Up * dy) * 0.005f; return; } float rotationHorizontal = camera.RotationHorizontal - dx * 0.01f; float rotationVertical = camera.RotationVertical + dy * 0.01f; camera.SetRotation(rotationHorizontal, rotationVertical); } } if (mouseRightDragging) { if (!controlGUI.IsCameraLocked) { int dy = mouseState.Y - mouseAnchor.Y; mouseAnchor = new Point(mouseState.X, mouseState.Y); if (!shiftKeyPressed) { camera.Distance += dy * 0.01f; } else { camera.Target -= camera.Forward * dy * 0.005f; } } } if (!mouseLeftDragging && !mouseRightDragging) { boneSelector.HandleMouseMoved(mouseState.X, mouseState.Y); } if (mouseWheel != mouseState.ScrollWheelValue) { if (!controlGUI.IsCameraLocked) { int delta = mouseWheel - mouseState.ScrollWheelValue; camera.Distance += delta * 0.002f; } mouseWheel = mouseState.ScrollWheelValue; } }