private static bool IsPressed(KeyBinding keyBinding) { foreach (var key in keyBinding.Keys) { if (DoomApplication.IsKeyPressed(key)) { return(true); } } foreach (var mouseButton in keyBinding.MouseButtons) { if (Mouse.IsButtonPressed((Mouse.Button)mouseButton)) { return(true); } } return(false); }
public void BuildTicCmd(TicCmd cmd) { var keyForward = IsPressed(config.key_forward); var keyBackward = IsPressed(config.key_backward); var keyStrafeLeft = IsPressed(config.key_strafeleft); var keyStrafeRight = IsPressed(config.key_straferight); var keyTurnLeft = IsPressed(config.key_turnleft); var keyTurnRight = IsPressed(config.key_turnright); var keyFire = IsPressed(config.key_fire); var keyUse = IsPressed(config.key_use); var keyRun = IsPressed(config.key_run); var keyStrafe = IsPressed(config.key_strafe); weaponKeys[0] = DoomApplication.IsKeyPressed(DoomKey.Num1); weaponKeys[1] = DoomApplication.IsKeyPressed(DoomKey.Num2); weaponKeys[2] = DoomApplication.IsKeyPressed(DoomKey.Num3); weaponKeys[3] = DoomApplication.IsKeyPressed(DoomKey.Num4); weaponKeys[4] = DoomApplication.IsKeyPressed(DoomKey.Num5); weaponKeys[5] = DoomApplication.IsKeyPressed(DoomKey.Num6); weaponKeys[6] = DoomApplication.IsKeyPressed(DoomKey.Num7); cmd.Clear(); var strafe = keyStrafe; var speed = keyRun ? 1 : 0; var forward = 0; var side = 0; if (config.game_alwaysrun) { speed = 1 - speed; } if (keyTurnLeft || keyTurnRight) { turnHeld++; } else { turnHeld = 0; } int turnSpeed; if (turnHeld < PlayerBehavior.SlowTurnTics) { turnSpeed = 2; } else { turnSpeed = speed; } if (strafe) { if (keyTurnRight) { side += PlayerBehavior.SideMove[speed]; } if (keyTurnLeft) { side -= PlayerBehavior.SideMove[speed]; } } else { if (keyTurnRight) { cmd.AngleTurn -= (short)PlayerBehavior.AngleTurn[turnSpeed]; } if (keyTurnLeft) { cmd.AngleTurn += (short)PlayerBehavior.AngleTurn[turnSpeed]; } } if (keyForward) { forward += PlayerBehavior.ForwardMove[speed]; } if (keyBackward) { forward -= PlayerBehavior.ForwardMove[speed]; } if (keyStrafeLeft) { side -= PlayerBehavior.SideMove[speed]; } if (keyStrafeRight) { side += PlayerBehavior.SideMove[speed]; } if (keyFire) { cmd.Buttons |= TicCmdButtons.Attack; } if (keyUse) { cmd.Buttons |= TicCmdButtons.Use; } // Check weapon keys. for (var i = 0; i < weaponKeys.Length; i++) { if (weaponKeys[i]) { cmd.Buttons |= TicCmdButtons.Change; cmd.Buttons |= (byte)(i << TicCmdButtons.WeaponShift); break; } } if (useMouse) { UpdateMouse(); var ms = 0.5F * config.mouse_sensitivity; var mx = (int)MathF.Round(ms * mouseX); var my = (int)MathF.Round(ms * mouseY); forward += my; if (strafe) { side += mx * 2; } else { cmd.AngleTurn -= (short)(mx * 0x8); } } if (forward > PlayerBehavior.MaxMove) { forward = PlayerBehavior.MaxMove; } else if (forward < -PlayerBehavior.MaxMove) { forward = -PlayerBehavior.MaxMove; } if (side > PlayerBehavior.MaxMove) { side = PlayerBehavior.MaxMove; } else if (side < -PlayerBehavior.MaxMove) { side = -PlayerBehavior.MaxMove; } cmd.ForwardMove += (sbyte)forward; cmd.SideMove += (sbyte)side; }