Exemple #1
0
 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);
            }
        }
Exemple #3
0
        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;
            }
        }