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