Exemplo n.º 1
0
        internal void UpdateInputState()
        {
            var s = _session;

            WheelForward  = false;
            WheelBackward = false;
            AimRay        = new LineD();

            if (!s.InGridAiBlock)
            {
                s.UpdateLocalAiAndCockpit();
            }

            if (s.InGridAiBlock && !s.InMenu)
            {
                MouseButtonPressed = MyAPIGateway.Input.IsAnyMousePressed();

                MouseButtonLeftWasPressed  = ClientInputState.MouseButtonLeft;
                MouseButtonMenuWasPressed  = ClientInputState.MouseButtonMenu;
                MouseButtonRightWasPressed = ClientInputState.MouseButtonRight;

                WasInMenu = ClientInputState.InMenu;
                ClientInputState.InMenu = _session.InMenu;

                if (MouseButtonPressed)
                {
                    ClientInputState.MouseButtonLeft  = MyAPIGateway.Input.IsMousePressed(MyMouseButtonsEnum.Left);
                    ClientInputState.MouseButtonMenu  = MyAPIGateway.Input.IsMousePressed(MouseButtonMenu);
                    ClientInputState.MouseButtonRight = MyAPIGateway.Input.IsMousePressed(MyMouseButtonsEnum.Right);
                }
                else
                {
                    ClientInputState.MouseButtonLeft  = false;
                    ClientInputState.MouseButtonMenu  = false;
                    ClientInputState.MouseButtonRight = false;
                }

                _session.PlayerMouseStates[_session.PlayerId] = ClientInputState;

                if (_session.MpActive)
                {
                    var shootButtonActive = ClientInputState.MouseButtonLeft || ClientInputState.MouseButtonRight;

                    MouseShootWasOn = MouseShootOn;
                    if (_session.ManualShot && shootButtonActive && !MouseShootOn)
                    {
                        MouseShootOn = true;
                    }
                    else if (MouseShootOn && !shootButtonActive)
                    {
                        MouseShootOn = false;
                    }

                    InputChanged        = MouseShootOn != MouseShootWasOn || WasInMenu != ClientInputState.InMenu;
                    _session.ManualShot = false;
                }

                ShiftReleased     = MyAPIGateway.Input.IsNewKeyReleased(MyKeys.LeftShift);
                ShiftPressed      = MyAPIGateway.Input.IsKeyPress(MyKeys.LeftShift);
                ActionKeyReleased = MyAPIGateway.Input.IsNewKeyReleased(ActionKey);

                if (ShiftPressed)
                {
                    ShiftTime++;
                    LongShift = ShiftTime > 59;
                }
                else
                {
                    if (LongShift)
                    {
                        ShiftReleased = false;
                    }
                    ShiftTime = 0;
                    LongShift = false;
                }

                AltPressed      = MyAPIGateway.Input.IsAnyAltKeyPressed();
                CtrlPressed     = MyAPIGateway.Input.IsKeyPress(MyKeys.Control);
                KeyPrevPressed  = AnyKeyPressed;
                AnyKeyPressed   = MyAPIGateway.Input.IsAnyKeyPress();
                UiKeyWasPressed = UiKeyPressed;
                UiKeyPressed    = CtrlPressed || AltPressed || ShiftPressed;
                PlayerCamera    = MyAPIGateway.Session.IsCameraControlledObject;
                FirstPersonView = PlayerCamera && MyAPIGateway.Session.CameraController.IsInFirstPersonView;

                if ((!UiKeyPressed && !UiKeyWasPressed) || !AltPressed && CtrlPressed && !FirstPersonView)
                {
                    PreviousWheel = MyAPIGateway.Input.PreviousMouseScrollWheelValue();
                    CurrentWheel  = MyAPIGateway.Input.MouseScrollWheelValue();
                }
            }
            else if (!s.InMenu)
            {
                CtrlPressed      = MyAPIGateway.Input.IsKeyPress(MyKeys.Control);
                ActionKeyPressed = MyAPIGateway.Input.IsKeyPress(ActionKey);

                if (CtrlPressed && ActionKeyPressed && GetAimRay(s, out AimRay) && Debug)
                {
                    DsDebugDraw.DrawLine(AimRay, Color.Red, 0.1f);
                }
            }

            if (_session.MpActive && !s.InGridAiBlock)
            {
                if (ClientInputState.InMenu || ClientInputState.MouseButtonRight || ClientInputState.MouseButtonMenu || ClientInputState.MouseButtonRight)
                {
                    ClientInputState.InMenu           = false;
                    ClientInputState.MouseButtonLeft  = false;
                    ClientInputState.MouseButtonMenu  = false;
                    ClientInputState.MouseButtonRight = false;
                    InputChanged = true;
                }
            }

            if (CurrentWheel != PreviousWheel && CurrentWheel > PreviousWheel)
            {
                WheelForward = true;
            }
            else if (s.UiInput.CurrentWheel != s.UiInput.PreviousWheel)
            {
                WheelBackward = true;
            }
        }