void CheckKeyboard(float time)
{
if (ModifierKeys == Keys.None)
{
// Movement forwards and backwards and body rotation
Client.Self.Movement.AtPos = Instance.Keyboard.IsKeyDown(Keys.Up);
Client.Self.Movement.AtNeg = Instance.Keyboard.IsKeyDown(Keys.Down);
Client.Self.Movement.TurnLeft = Instance.Keyboard.IsKeyDown(Keys.Left);
Client.Self.Movement.TurnRight = Instance.Keyboard.IsKeyDown(Keys.Right);
if (Client.Self.Movement.Fly)
{
//Find whether we are going up or down
Client.Self.Movement.UpPos = Instance.Keyboard.IsKeyDown(Keys.PageUp);
Client.Self.Movement.UpNeg = Instance.Keyboard.IsKeyDown(Keys.PageDown);
//The nudge positions are required to land (at least Neg is, unclear whether we should send Pos)
Client.Self.Movement.NudgeUpPos = Client.Self.Movement.UpPos;
Client.Self.Movement.NudgeUpNeg = Client.Self.Movement.UpNeg;
if (Client.Self.Velocity.Z > 0 && Client.Self.Movement.UpNeg)//HACK: Sometimes, stop fly fails
Client.Self.Fly(false);//We've hit something, stop flying
}
else
{
//Don't send the nudge pos flags, we don't need them
Client.Self.Movement.NudgeUpPos = false;
Client.Self.Movement.NudgeUpNeg = false;
Client.Self.Movement.UpPos = Instance.Keyboard.IsKeyDown(Keys.PageUp);
Client.Self.Movement.UpNeg = Instance.Keyboard.IsKeyDown(Keys.PageDown);
}
if (Instance.Keyboard.IsKeyDown(Keys.Home))//Flip fly settings
{
//Holding the home key only makes it change once,
// not flip over and over, so keep track of it
if (!isHoldingHome)
{
Client.Self.Movement.Fly = !Client.Self.Movement.Fly;
isHoldingHome = true;
}
}
else
isHoldingHome = false;
if (!Client.Self.Movement.Fly &&
Instance.Keyboard.IsKeyDown(Keys.PageUp))
{
upKeyHeld += time;
if (upKeyHeld > upKeyHeldBeforeFly)//Wait for a bit before we fly, they may be trying to jump
Client.Self.Movement.Fly = true;
}
else
upKeyHeld = 0;//Reset the count
if (Client.Self.Movement.TurnLeft)
{
Client.Self.Movement.BodyRotation = Client.Self.Movement.BodyRotation * Quaternion.CreateFromAxisAngle(Vector3.UnitZ, time);
}
else if (client.Self.Movement.TurnRight)
{
Client.Self.Movement.BodyRotation = Client.Self.Movement.BodyRotation * Quaternion.CreateFromAxisAngle(Vector3.UnitZ, -time);
}
if (Instance.Keyboard.IsKeyDown(Keys.Escape))
{
InitCamera();
Camera.Manual = false;
trackedObject = myself;
}
}
else if (ModifierKeys == Keys.Shift)
{
// Strafe
Client.Self.Movement.LeftNeg = Instance.Keyboard.IsKeyDown(Keys.Right);
Client.Self.Movement.LeftPos = Instance.Keyboard.IsKeyDown(Keys.Left);
}
else if (ModifierKeys == Keys.Alt)
{
// Camera horizontal rotation
if (Instance.Keyboard.IsKeyDown(Keys.Left))
{
Camera.Rotate(-time, true);
}
else if (Instance.Keyboard.IsKeyDown(Keys.Right))
{
Camera.Rotate(time, true);
} // Camera vertical rotation
else if (Instance.Keyboard.IsKeyDown(Keys.PageDown))
{
Camera.Rotate(-time, false);
}
else if (Instance.Keyboard.IsKeyDown(Keys.PageUp))
{
Camera.Rotate(time, false);
} // Camera zoom
else if (Instance.Keyboard.IsKeyDown(Keys.Down))
{
Camera.MoveToTarget(time);
}
else if (Instance.Keyboard.IsKeyDown(Keys.Up))
{
Camera.MoveToTarget(-time);
}
}
else if (ModifierKeys == (Keys.Alt | Keys.Control))
{
// Camera horizontal rotation
if (Instance.Keyboard.IsKeyDown(Keys.Left))
{
Camera.Rotate(-time, true);
}
else if (Instance.Keyboard.IsKeyDown(Keys.Right))
{
Camera.Rotate(time, true);
} // Camera vertical rotation
else if (Instance.Keyboard.IsKeyDown(Keys.Down))
{
Camera.Rotate(-time, false);
}
else if (Instance.Keyboard.IsKeyDown(Keys.Up))
{
Camera.Rotate(time, false);
}
}
else if (ModifierKeys == Keys.Control)
{
// Camera pan
float timeFactor = 3f;
if (Instance.Keyboard.IsKeyDown(Keys.Left))
{
Camera.Pan(time * timeFactor, 0f);
}
else if (Instance.Keyboard.IsKeyDown(Keys.Right))
{
Camera.Pan(-time * timeFactor, 0f);
}
else if (Instance.Keyboard.IsKeyDown(Keys.Up))
{
Camera.Pan(0f, time * timeFactor);
}
else if (Instance.Keyboard.IsKeyDown(Keys.Down))
{
Camera.Pan(0f, -time * timeFactor);
}
}
}