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);
}
}