DungeonMasterEngine.Player.FreeLookCamera.GetRotation C# (CSharp) Method

GetRotation() protected method

protected GetRotation ( GameTime time ) : Microsoft.Xna.Framework.Quaternion
time Microsoft.Xna.Framework.GameTime
return Microsoft.Xna.Framework.Quaternion
        protected virtual Quaternion GetRotation(GameTime time)
        {
            var coor = Mouse.GetState().Position;
            
            Vector2 mouseMove = new Vector2(sceenCenter.X - coor.X, coor.Y - sceenCenter.Y);
            Mouse.SetPosition(sceenCenter.X, sceenCenter.Y);

            float verticalAngle = 0;
            float horizontalAngle = 0;
            if (mouseMove != Vector2.Zero)
            {
                verticalAngle = mouseMove.X / Game.GraphicsDevice.Viewport.Width * FieldOfView;
                horizontalAngle = mouseMove.Y / Game.GraphicsDevice.Viewport.Width * FieldOfView;
            }
            else
            {
                KeyboardState keys = Keyboard.GetState();
                const float move = 0.03f;
                if (keys.IsKeyDown(Keys.Left))
                    verticalAngle = move;
                if (keys.IsKeyDown(Keys.Right))
                    verticalAngle = -move;
                if (keys.IsKeyDown(Keys.Up))
                    horizontalAngle = -move;
                if (keys.IsKeyDown(Keys.Down))
                    horizontalAngle = move;
            }



            horizontalAngle = MathHelper.Clamp(horizontalAngle, -0.13f, 0.13f);
            
            Quaternion rotationUp = Quaternion.CreateFromAxisAngle(Up, verticalAngle);
            Quaternion rotationLeft = Quaternion.CreateFromAxisAngle(-Vector3.Normalize(Vector3.Cross(ForwardDirection, Up)), horizontalAngle);

            return Quaternion.Concatenate(rotationUp, rotationLeft);
        }
    }