Пример #1
0
        public void Commit(ulong updateTick, float deltaTime)
        {
            int controlCount = Controls.Length;

            for (int i = 0; i < controlCount; i++)
            {
                var control = Controls[i];
                if (control != null)
                {
                    control.Commit();

                    if (control.HasChanged)
                    {
                        LastChangeTick = updateTick;
                    }
                }
            }

            if (IsKnown)
            {
                GetControl(InputControlType.Command).CommitWithState(AnyCommandControlIsPressed(), updateTick, deltaTime);
            }

            LeftStickX.CommitWithSides(LeftStickLeft, LeftStickRight, updateTick, deltaTime);
            LeftStickY.CommitWithSides(LeftStickDown, LeftStickUp, updateTick, deltaTime, InputManager.InvertYAxis);
            LeftStick.UpdateWithAxes(LeftStickX, LeftStickY, updateTick, deltaTime);

            RightStickX.CommitWithSides(RightStickLeft, RightStickRight, updateTick, deltaTime);
            RightStickY.CommitWithSides(RightStickDown, RightStickUp, updateTick, deltaTime, InputManager.InvertYAxis);
            RightStick.UpdateWithAxes(RightStickX, RightStickY, updateTick, deltaTime);

            DPadX.CommitWithSides(DPadLeft, DPadRight, updateTick, deltaTime);
            DPadY.CommitWithSides(DPadDown, DPadUp, updateTick, deltaTime, InputManager.InvertYAxis);
            DPad.UpdateWithAxes(DPadX, DPadY, updateTick, deltaTime);
        }
Пример #2
0
    void ProcessLeftStick(ulong updateTick, float deltaTime)
    {
        var x = Utility.ValueFromSides(LeftStickLeft.NextRawValue, LeftStickRight.NextRawValue);
        var y = Utility.ValueFromSides(LeftStickDown.NextRawValue, LeftStickUp.NextRawValue, InputManager.InvertYAxis);

        Vector2 v;

        //if (RawSticks)
        //{
        v = new Vector2(x, y);
        //}


        //LeftStick.Raw = true;
        LeftStick.UpdateWithAxes(v.x, v.y, updateTick, deltaTime);

        //LeftStickX.Raw = true;
        LeftStickX.CommitWithValue(v.x, updateTick, deltaTime);

        //LeftStickY.Raw = true;
        LeftStickY.CommitWithValue(v.y, updateTick, deltaTime);

        LeftStickLeft.SetValue(LeftStick.Left.Value, updateTick);
        LeftStickRight.SetValue(LeftStick.Right.Value, updateTick);
        LeftStickUp.SetValue(LeftStick.Up.Value, updateTick);
        LeftStickDown.SetValue(LeftStick.Down.Value, updateTick);
    }
Пример #3
0
        public void PostUpdate(ulong updateTick, float deltaTime)
        {
            // Apply post-processing to controls.
            foreach (InputControl control in Controls.IgnoreNulls())
            {
                if (control.RawValue != null)
                {
                    control.UpdateWithValue(control.RawValue.Value, updateTick);
                }
                else if (control.PreValue != null)
                {
                    control.UpdateWithValue(ProcessAnalogControlValue(control, deltaTime), updateTick);
                }

                control.PostUpdate(updateTick);

                if (control.HasChanged)
                {
                    LastChangeTick = updateTick;
                }
            }

            // Update two-axis controls.
            LeftStick.Update(LeftStickX, LeftStickY, updateTick);
            RightStick.Update(RightStickX, RightStickY, updateTick);

            Vector2 dpv = DPadVector;

            DPad.Update(dpv.x, dpv.y, updateTick);
        }
Пример #4
0
        public void UpdateSticks()
        {
            if (LeftStick.IsActive())
            {
                _globalActionStick.Angle    = LeftStick.Angle;
                _globalActionStick.Distance = LeftStick.Distance;
            }
            else if (_dpadActionStick.IsActive())
            {
                _globalActionStick.Angle    = _dpadActionStick.Angle;
                _globalActionStick.Distance = _dpadActionStick.Distance;
            }
            else
            {
                _globalActionStick.Distance = 0;
            }

            if (LeftStick.IsActive())
            {
                _globalStick.Angle    = LeftStick.Angle;
                _globalStick.Distance = LeftStick.Distance;
                //ADD X AND Y.
            }
            else if (_dpadStick.IsActive())
            {
                _globalStick.Angle    = _dpadStick.Angle;
                _globalStick.Distance = _dpadStick.Distance;
            }
            else
            {
                _globalStick.Distance = 0;
            }
        }
Пример #5
0
        internal void ProcessLeftStick()
        {
            var x = Utility.ValueFromSides(LeftStickLeft.NextRawValue, LeftStickRight.NextRawValue);
            var y = Utility.ValueFromSides(LeftStickDown.NextRawValue, LeftStickUp.NextRawValue, InputManager.InvertYAxis);

            Vector2 v;

            if (RawSticks)
            {
                v = new Vector2(x, y);
            }
            else
            {
                var lowerDeadZone = Utility.Max(LeftStickLeft.LowerDeadZone, LeftStickRight.LowerDeadZone, LeftStickUp.LowerDeadZone, LeftStickDown.LowerDeadZone);
                var upperDeadZone = Utility.Min(LeftStickLeft.UpperDeadZone, LeftStickRight.UpperDeadZone, LeftStickUp.UpperDeadZone, LeftStickDown.UpperDeadZone);
                v = Utility.ApplyCircularDeadZone(x, y, lowerDeadZone, upperDeadZone);
            }

            LeftStick.Raw = true;
            LeftStick.UpdateWithAxes(v.X, v.Y);

            LeftStickX.Raw = true;
            LeftStickX.CommitWithValue(v.X);

            LeftStickY.Raw = true;
            LeftStickY.CommitWithValue(v.Y);

            LeftStickLeft.SetValue(LeftStick.Left.Value);
            LeftStickRight.SetValue(LeftStick.Right.Value);
            LeftStickUp.SetValue(LeftStick.Up.Value);
            LeftStickDown.SetValue(LeftStick.Down.Value);
        }
Пример #6
0
        void ProcessLeftStick(ulong updateTick, float deltaTime)
        {
            var x = Utility.ValueFromSides(LeftStickLeft.NextRawValue, LeftStickRight.NextRawValue);
            var y = Utility.ValueFromSides(LeftStickDown.NextRawValue, LeftStickUp.NextRawValue, InputManager.InvertYAxis);

            Vector2 v;

            if (RawSticks || LeftStickLeft.Raw || LeftStickRight.Raw || LeftStickUp.Raw || LeftStickDown.Raw)
            {
                v = new Vector2(x, y);
            }
            else
            {
                var lowerDeadZone = Utility.Max(LeftStickLeft.LowerDeadZone, LeftStickRight.LowerDeadZone, LeftStickUp.LowerDeadZone, LeftStickDown.LowerDeadZone);
                var upperDeadZone = Utility.Min(LeftStickLeft.UpperDeadZone, LeftStickRight.UpperDeadZone, LeftStickUp.UpperDeadZone, LeftStickDown.UpperDeadZone);
                v = Utility.ApplyCircularDeadZone(x, y, lowerDeadZone, upperDeadZone);
            }

            LeftStick.Raw = true;
            LeftStick.UpdateWithAxes(v.x, v.y, updateTick, deltaTime);

            LeftStickX.Raw = true;
            LeftStickX.CommitWithValue(v.x, updateTick, deltaTime);

            LeftStickY.Raw = true;
            LeftStickY.CommitWithValue(v.y, updateTick, deltaTime);

            LeftStickLeft.SetValue(LeftStick.Left.Value, updateTick);
            LeftStickRight.SetValue(LeftStick.Right.Value, updateTick);
            LeftStickUp.SetValue(LeftStick.Up.Value, updateTick);
            LeftStickDown.SetValue(LeftStick.Down.Value, updateTick);
        }
Пример #7
0
    public PlayerInput(int ID) : base()
    {
        player = ReInput.players.GetPlayer(ID);


        EventManager.Subscribe <InputActionEventData>(RewiredInputProvider.EVT_INPUT_PRESS, (input) =>
        {
            if (isActive)
            {
                switch (input.actionId)
                {
                case RewiredConsts.Action.MoveHorizontal:
                    LeftStick.SetX(input.GetAxis());
                    LeftStick.Press();
                    break;

                case RewiredConsts.Action.MoveVertical:
                    LeftStick.SetY(input.GetAxis());
                    LeftStick.Press();
                    break;

                case RewiredConsts.Action.CameraHorizontal:
                    RightStick.SetX(input.GetAxis());
                    RightStick.Press();
                    break;

                case RewiredConsts.Action.CameraVertical:
                    RightStick.SetY(input.GetAxis());
                    RightStick.Press();
                    break;
                }
            }
        });
    }
Пример #8
0
        public void ClearInputState()
        {
            LeftStickX.ClearInputState();
            LeftStickY.ClearInputState();
            LeftStick.ClearInputState();

            RightStickX.ClearInputState();
            RightStickY.ClearInputState();
            RightStick.ClearInputState();

            DPadX.ClearInputState();
            DPadY.ClearInputState();
            DPad.ClearInputState();

            var controlCount = Controls.Length;

            for (int i = 0; i < controlCount; i++)
            {
                var control = Controls[i];
                if (control != null)
                {
                    control.ClearInputState();
                }
            }
        }
Пример #9
0
        public ControllerXbox360(params int[] joystickId)
        {
            AddButton(Controls.A);
            AddButton(Controls.B);
            AddButton(Controls.X);
            AddButton(Controls.Y);
            AddButton(Controls.RB);
            AddButton(Controls.LB);
            AddButton(Controls.LStickClick);
            AddButton(Controls.RStickClick);
            AddButton(Controls.Start);
            AddButton(Controls.Back);
            AddButton(Controls.RT);
            AddButton(Controls.LT);
            AddButton(Controls.Up);
            AddButton(Controls.Down);
            AddButton(Controls.Left);
            AddButton(Controls.Right);

            AddAxis(Controls.LStick);
            AddAxis(Controls.RStick);
            AddAxis(Controls.DPad);
            AddAxis(Controls.Triggers);

            foreach (var joy in joystickId)
            {
                A.AddJoyButton(0, joy);
                B.AddJoyButton(1, joy);
                X.AddJoyButton(2, joy);
                Y.AddJoyButton(3, joy);
                LB.AddJoyButton(4, joy);
                RB.AddJoyButton(5, joy);
                Back.AddJoyButton(6, joy);
                Start.AddJoyButton(7, joy);
                LeftStickClick.AddJoyButton(8, joy);
                RightStickClick.AddJoyButton(9, joy);

                RT.AddAxisButton(AxisButton.ZMinus, joy);
                LT.AddAxisButton(AxisButton.ZPlus, joy);

                LeftStick.AddJoyAxis(JoyAxis.X, JoyAxis.Y, joy);
                RightStick.AddJoyAxis(JoyAxis.U, JoyAxis.R, joy);
                DPad.AddJoyAxis(JoyAxis.PovX, JoyAxis.PovY, joy);
                Triggers.AddJoyAxis(JoyAxis.Z, JoyAxis.Z, joy);

                Up
                .AddAxisButton(AxisButton.YMinus, joy)
                .AddAxisButton(AxisButton.PovYMinus, joy);
                Down
                .AddAxisButton(AxisButton.YPlus, joy)
                .AddAxisButton(AxisButton.PovYPlus, joy);
                Right
                .AddAxisButton(AxisButton.XPlus, joy)
                .AddAxisButton(AxisButton.PovXPlus, joy);
                Left
                .AddAxisButton(AxisButton.XMinus, joy)
                .AddAxisButton(AxisButton.PovXMinus, joy);
            }
        }
Пример #10
0
 public void Update(float delta)
 {
     if (!controllerInitted)
     {
         return;
     }
     RightStick.Update();
     LeftStick.Update();
 }
Пример #11
0
        public void ClearInputState()
        {
            LeftStick.ClearInputState();
            RightStick.ClearInputState();
            DPad.ClearInputState();
            int count = Controls.Count;

            for (int i = 0; i < count; i++)
            {
                Controls[i]?.ClearInputState();
            }
        }
Пример #12
0
 void Awake()
 {
     ButtonA         = GetComponentInChildren <AttackButton>();
     StickL          = GetComponentInChildren <LeftStick>();
     I_PlayerData    = PlayerData.Instance;
     FocusBtns       = GameObject.Find("FocusBtns");
     ScoreText       = transform.Find("ScoreTxt").GetComponent <Text>();
     MaxText         = transform.Find("MaxScoreTxt").GetComponent <Text>();
     DifficultyText  = transform.Find("DifficultyTxt").GetComponent <Text>();
     ResultPanel     = transform.Find("ResultPanel");
     DifficultyPanel = transform.Find("DifficultyPanel");
     //audioInactive = GetComponent<AudioSource>();
 }
Пример #13
0
        public void Update(float delta)
        {
            GameController.Update(delta);
            PcController.Update(delta);
            PcAltController.Update(delta);

            RightStick.Update();
            LeftStick.Update();

            //Updating Dpad to use it's joystick emulator
            _actionDPad.Update(delta);
            //Updating KeyboardOnlyDpad to use it's joystick emulator
            _keyboardDPad.Update(delta);

            UpdateSticks();
        }
Пример #14
0
        public void ClearInputState()
        {
            LeftStick.ClearInputState();
            RightStick.ClearInputState();
            DPad.ClearInputState();

            var controlsCount = Controls.Count;

            for (var i = 0; i < controlsCount; i++)
            {
                var control = Controls[i];
                if (control != null)
                {
                    control.ClearInputState();
                }
            }
        }
Пример #15
0
        public ControllerPS3(params int[] joystickId)
        {
            AddButton(Controls.Triangle);
            AddButton(Controls.Circle);
            AddButton(Controls.Cross);
            AddButton(Controls.Square);
            AddButton(Controls.R1);
            AddButton(Controls.L1);
            AddButton(Controls.L3);
            AddButton(Controls.R3);
            AddButton(Controls.Start);
            AddButton(Controls.Select);
            AddButton(Controls.R2);
            AddButton(Controls.L2);

            AddAxis(Controls.LStick);
            AddAxis(Controls.RStick);
            AddAxis(Controls.DPad);

            foreach (var joy in joystickId)
            {
                Triangle.AddJoyButton(0, joy);
                Circle.AddJoyButton(1, joy);
                Cross.AddJoyButton(2, joy);
                Square.AddJoyButton(3, joy);
                L2.AddJoyButton(4, joy);
                R2.AddJoyButton(5, joy);
                L1.AddJoyButton(6, joy);
                R1.AddJoyButton(7, joy);
                Select.AddJoyButton(8, joy);
                Start.AddJoyButton(9, joy);
                L3.AddJoyButton(10, joy);
                R3.AddJoyButton(11, joy);

                R2.AddAxisButton(AxisButton.ZMinus, joy);
                L2.AddAxisButton(AxisButton.ZPlus, joy);

                LeftStick.AddJoyAxis(JoyAxis.X, JoyAxis.Y, joy);
                RightStick.AddJoyAxis(JoyAxis.U, JoyAxis.R, joy);
                DPad.AddJoyAxis(JoyAxis.PovX, JoyAxis.PovY, joy);
            }
        }
Пример #16
0
        public void PostUpdate(ulong updateTick, float deltaTime)
        {
            // Apply post-processing to controls.
            int controlCount = Controls.GetLength(0);

            for (int i = 0; i < controlCount; i++)
            {
                var control = Controls[i];
                if (control != null)
                {
                    if (control.RawValue.HasValue)
                    {
                        control.UpdateWithValue(control.RawValue.Value, updateTick);
                    }
                    else
                    if (control.PreValue.HasValue)
                    {
                        control.UpdateWithValue(ProcessAnalogControlValue(control, deltaTime), updateTick);
                    }

                    control.PostUpdate(updateTick);

                    if (control.HasChanged)
                    {
                        LastChangeTick = updateTick;
                    }
                }
            }

            // Update two-axis controls.
            LeftStick.Update(LeftStickX, LeftStickY, updateTick);
            RightStick.Update(RightStickX, RightStickY, updateTick);

            var dpv = DPadVector;

            DPad.Update(dpv.x, dpv.y, updateTick);
        }
Пример #17
0
    public virtual void Update(float elapsed)
    {
        sinceCheckedConnected += elapsed;
        if (sinceCheckedConnected >= ConnectedCheckFrequency)
        {
            sinceCheckedConnected -= ConnectedCheckFrequency;
            Connected              = GamePad.GetState(PlayerIndex).IsConnected;
        }

        if (!Connected)
        {
            return;
        }

        GamePadState gamepadState;

        try { gamepadState = GamePad.GetState(PlayerIndex, GamePadDeadZone.None); }
        catch { return; }

        // Vibration
        if (leftMotor.Active)
        {
            leftMotor = UpdateMotor(leftMotor, elapsed);
        }
        if (rightMotor.Active)
        {
            rightMotor = UpdateMotor(rightMotor, elapsed);
        }

        if (leftMotor.LastAmount != leftMotor.CurrentAmount || rightMotor.LastAmount != rightMotor.CurrentAmount)
        {
            GamePad.SetVibration(PlayerIndex, leftMotor.CurrentAmount, rightMotor.CurrentAmount);
        }

        // Shoulders
        LeftShoulder  = LeftShoulder.NextState(gamepadState.Buttons.LeftShoulder == ButtonState.Pressed, elapsed);
        RightShoulder = RightShoulder.NextState(gamepadState.Buttons.RightShoulder == ButtonState.Pressed, elapsed);

        // Triggers
        LeftTrigger  = LeftTrigger.NextState(gamepadState.Triggers.Left, elapsed);
        RightTrigger = RightTrigger.NextState(gamepadState.Triggers.Right, elapsed);

        // Buttons
        Start = Start.NextState(gamepadState.Buttons.Start == ButtonState.Pressed);
        Back  = Back.NextState(gamepadState.Buttons.Back == ButtonState.Pressed);

        A = A.NextState(gamepadState.Buttons.A == ButtonState.Pressed, elapsed);
        B = B.NextState(gamepadState.Buttons.B == ButtonState.Pressed, elapsed);
        X = X.NextState(gamepadState.Buttons.X == ButtonState.Pressed, elapsed);
        Y = Y.NextState(gamepadState.Buttons.Y == ButtonState.Pressed, elapsed);

        // D-Pad
        DPad = DPad.NextState(gamepadState.DPad.Up == ButtonState.Pressed,
                              gamepadState.DPad.Down == ButtonState.Pressed,
                              gamepadState.DPad.Left == ButtonState.Pressed,
                              gamepadState.DPad.Right == ButtonState.Pressed, elapsed);

        // Deadzone that shit
        const float DeadZone = 0.2f;

        var left  = new Vector2(gamepadState.ThumbSticks.Left.X, gamepadState.ThumbSticks.Left.Y);
        var right = new Vector2(gamepadState.ThumbSticks.Right.X, gamepadState.ThumbSticks.Right.Y);

        if (Math.Abs(left.x) < DeadZone)
        {
            left.x = 0;
        }
        else
        {
            left.x = (left.x - DeadZone * Math.Sign(left.x)) / (1 - DeadZone);
        }
        if (Math.Abs(left.y) < DeadZone)
        {
            left.y = 0;
        }
        else
        {
            left.y = (left.y - DeadZone * Math.Sign(left.y)) / (1 - DeadZone);
        }
        if (Math.Abs(right.x) < DeadZone)
        {
            right.x = 0;
        }
        else
        {
            right.x = (right.x - DeadZone * Math.Sign(right.x)) / (1 - DeadZone);
        }
        if (Math.Abs(right.y) < DeadZone)
        {
            right.y = 0;
        }
        else
        {
            right.y = (right.y - DeadZone * Math.Sign(right.y)) / (1 - DeadZone);
        }

        // Thumbsticks
        LeftStick  = LeftStick.NextState(left, gamepadState.Buttons.LeftStick == ButtonState.Pressed, elapsed);
        RightStick = LeftStick.NextState(right, gamepadState.Buttons.RightStick == ButtonState.Pressed, elapsed);
    }
Пример #18
0
        public void Update(TimeSpan elapsed)
        {
            if (!Connected)
            {
                return;
            }

            State state        = Controller.GetState();
            var   gamepadState = state.Gamepad;

            // Sadly we can't really use the packet information because everything is temporal
            // Even if everything stayed the same, that's valid data (elapsed time goes up, etc.)

            // Vibration
            if (leftMotor.Active)
            {
                leftMotor = UpdateMotor(leftMotor, elapsed);
            }
            if (rightMotor.Active)
            {
                rightMotor = UpdateMotor(rightMotor, elapsed);
            }

            if (leftMotor.LastAmount != leftMotor.CurrentAmount || rightMotor.LastAmount != rightMotor.CurrentAmount)
            {
                Controller.SetVibration(new Vibration
                {
                    LeftMotorSpeed  = (ushort)(leftMotor.CurrentAmount * ushort.MaxValue),
                    RightMotorSpeed = (ushort)(rightMotor.CurrentAmount * ushort.MaxValue)
                });
            }

            // Shoulders
            LeftShoulder  = LeftShoulder.NextState((gamepadState.Buttons & GamepadButtonFlags.LeftShoulder) != 0, elapsed);
            RightShoulder = RightShoulder.NextState((gamepadState.Buttons & GamepadButtonFlags.RightShoulder) != 0, elapsed);

            // Triggers
            LeftTrigger  = LeftTrigger.NextState(gamepadState.LeftTrigger / (float)byte.MaxValue, elapsed);
            RightTrigger = RightTrigger.NextState(gamepadState.RightTrigger / (float)byte.MaxValue, elapsed);

            // Buttons
            Start = Start.NextState((gamepadState.Buttons & GamepadButtonFlags.Start) != 0);
            Back  = Back.NextState((gamepadState.Buttons & GamepadButtonFlags.Back) != 0);

            A = A.NextState((gamepadState.Buttons & GamepadButtonFlags.A) != 0, elapsed);
            B = B.NextState((gamepadState.Buttons & GamepadButtonFlags.B) != 0, elapsed);
            X = X.NextState((gamepadState.Buttons & GamepadButtonFlags.X) != 0, elapsed);
            Y = Y.NextState((gamepadState.Buttons & GamepadButtonFlags.Y) != 0, elapsed);

            // D-Pad
            DPad = DPad.NextState((gamepadState.Buttons & GamepadButtonFlags.DPadUp) != 0,
                                  (gamepadState.Buttons & GamepadButtonFlags.DPadDown) != 0,
                                  (gamepadState.Buttons & GamepadButtonFlags.DPadLeft) != 0,
                                  (gamepadState.Buttons & GamepadButtonFlags.DPadRight) != 0, elapsed);

            // Thumb sticks
            LeftStick = LeftStick.NextState(
                Normalize(gamepadState.LeftThumbX, gamepadState.LeftThumbY, Gamepad.GamepadLeftThumbDeadZone),
                (gamepadState.Buttons & GamepadButtonFlags.LeftThumb) != 0, elapsed);
            RightStick = RightStick.NextState(
                Normalize(gamepadState.RightThumbX, gamepadState.RightThumbY, Gamepad.GamepadRightThumbDeadZone),
                (gamepadState.Buttons & GamepadButtonFlags.RightThumb) != 0, elapsed);
        }
Пример #19
0
 void Awake()
 {
     StickL = GetComponentInChildren <LeftStick>();
 }
Пример #20
0
    public virtual void Update(float elapsed)
    {
        sinceCheckedConnected += elapsed;
        if (sinceCheckedConnected >= ConnectedCheckFrequency)
        {
            sinceCheckedConnected -= ConnectedCheckFrequency;
            if (Application.platform.IsOSX())
            {
                Connected = Input.GetJoystickNames().Length > (int)playerIndex;
            }
            else if (Application.platform.IsWindows())
            {
                Connected = GamePad.GetState(PlayerIndex).IsConnected;
            }
        }

        if (!Connected)
        {
            return;
        }

        // XInput.NET
        if (Application.platform.IsWindows())
        {
            GamePadState gamepadState;
            try { gamepadState = GamePad.GetState(PlayerIndex, GamePadDeadZone.None); }
            catch { return; }

            // Vibration
            if (leftMotor.Active)
            {
                leftMotor = UpdateMotor(leftMotor, elapsed);
            }
            if (rightMotor.Active)
            {
                rightMotor = UpdateMotor(rightMotor, elapsed);
            }

            if (leftMotor.LastAmount != leftMotor.CurrentAmount || rightMotor.LastAmount != rightMotor.CurrentAmount)
            {
                GamePad.SetVibration(PlayerIndex, leftMotor.CurrentAmount, rightMotor.CurrentAmount);
            }

            // Shoulders
            LeftShoulder  = LeftShoulder.NextState(gamepadState.Buttons.LeftShoulder == ButtonState.Pressed, elapsed);
            RightShoulder = RightShoulder.NextState(gamepadState.Buttons.RightShoulder == ButtonState.Pressed, elapsed);

            // Triggers
            LeftTrigger  = LeftTrigger.NextState(gamepadState.Triggers.Left, elapsed);
            RightTrigger = RightTrigger.NextState(gamepadState.Triggers.Right, elapsed);

            // Buttons
            Start = Start.NextState(gamepadState.Buttons.Start == ButtonState.Pressed, elapsed);
            Back  = Back.NextState(gamepadState.Buttons.Back == ButtonState.Pressed, elapsed);

            A = A.NextState(gamepadState.Buttons.A == ButtonState.Pressed, elapsed);
            B = B.NextState(gamepadState.Buttons.B == ButtonState.Pressed, elapsed);
            X = X.NextState(gamepadState.Buttons.X == ButtonState.Pressed, elapsed);
            Y = Y.NextState(gamepadState.Buttons.Y == ButtonState.Pressed, elapsed);

            // D-Pad
            DPad = DPad.NextState(gamepadState.DPad.Up == ButtonState.Pressed,
                                  gamepadState.DPad.Down == ButtonState.Pressed,
                                  gamepadState.DPad.Left == ButtonState.Pressed,
                                  gamepadState.DPad.Right == ButtonState.Pressed, elapsed);

            // Deadzone that shit
            const float DeadZone = 0.1f;

            var left  = new Vector2(gamepadState.ThumbSticks.Left.X, gamepadState.ThumbSticks.Left.Y);
            var right = new Vector2(gamepadState.ThumbSticks.Right.X, gamepadState.ThumbSticks.Right.Y);

            if (Math.Abs(left.x) < DeadZone)
            {
                left.x = 0;
            }
            else
            {
                left.x = (left.x - DeadZone * Math.Sign(left.x)) / (1 - DeadZone);
            }
            if (Math.Abs(left.y) < DeadZone)
            {
                left.y = 0;
            }
            else
            {
                left.y = (left.y - DeadZone * Math.Sign(left.y)) / (1 - DeadZone);
            }
            if (Math.Abs(right.x) < DeadZone)
            {
                right.x = 0;
            }
            else
            {
                right.x = (right.x - DeadZone * Math.Sign(right.x)) / (1 - DeadZone);
            }
            if (Math.Abs(right.y) < DeadZone)
            {
                right.y = 0;
            }
            else
            {
                right.y = (right.y - DeadZone * Math.Sign(right.y)) / (1 - DeadZone);
            }

            // Thumbsticks
            LeftStick  = LeftStick.NextState(left, gamepadState.Buttons.LeftStick == ButtonState.Pressed, elapsed);
            RightStick = LeftStick.NextState(right, gamepadState.Buttons.RightStick == ButtonState.Pressed, elapsed);
        }

        // Tattiebogle
        if (Application.platform.IsOSX())
        {
            string playerPrefix = "Player" + ((int)PlayerIndex + 1);

            // Shoulders
            LeftShoulder  = LeftShoulder.NextState(Input.GetButton(playerPrefix + " LeftShoulder"), elapsed);
            RightShoulder = RightShoulder.NextState(Input.GetButton(playerPrefix + " RightShoulder"), elapsed);

            // Triggers
            LeftTrigger  = LeftTrigger.NextState(Input.GetAxisRaw(playerPrefix + " LeftTrigger"), elapsed);
            RightTrigger = RightTrigger.NextState(Input.GetAxisRaw(playerPrefix + " RightTrigger"), elapsed);

            // Buttons
            Start = Start.NextState(Input.GetButton(playerPrefix + " Start"), elapsed);
            Back  = Back.NextState(Input.GetButton(playerPrefix + " Back"), elapsed);

            A = A.NextState(Input.GetButton(playerPrefix + " A"), elapsed);
            B = B.NextState(Input.GetButton(playerPrefix + " B"), elapsed);
            X = X.NextState(Input.GetButton(playerPrefix + " X"), elapsed);
            Y = Y.NextState(Input.GetButton(playerPrefix + " Y"), elapsed);

            // D-Pad
            DPad = DPad.NextState(Input.GetButton(playerPrefix + " DPadUp"),
                                  Input.GetButton(playerPrefix + " DPadDown"),
                                  Input.GetButton(playerPrefix + " DPadLeft"),
                                  Input.GetButton(playerPrefix + " DPadRight"), elapsed);

            // Deadzone that shit
            const float DeadZone = 0.1f;

            var left  = new Vector2(Input.GetAxisRaw(playerPrefix + " LeftStick X"), Input.GetAxisRaw(playerPrefix + " LeftStick Y") * -1);
            var right = new Vector2(Input.GetAxisRaw(playerPrefix + " RightStick X"), Input.GetAxisRaw(playerPrefix + " RightStick Y") * -1);

            if (Math.Abs(left.x) < DeadZone)
            {
                left.x = 0;
            }
            else
            {
                left.x = (left.x - DeadZone * Math.Sign(left.x)) / (1 - DeadZone);
            }
            if (Math.Abs(left.y) < DeadZone)
            {
                left.y = 0;
            }
            else
            {
                left.y = (left.y - DeadZone * Math.Sign(left.y)) / (1 - DeadZone);
            }
            if (Math.Abs(right.x) < DeadZone)
            {
                right.x = 0;
            }
            else
            {
                right.x = (right.x - DeadZone * Math.Sign(right.x)) / (1 - DeadZone);
            }
            if (Math.Abs(right.y) < DeadZone)
            {
                right.y = 0;
            }
            else
            {
                right.y = (right.y - DeadZone * Math.Sign(right.y)) / (1 - DeadZone);
            }

            // Thumbsticks
            LeftStick  = LeftStick.NextState(left, Input.GetButton(playerPrefix + " LeftStick Press"), elapsed);
            RightStick = LeftStick.NextState(right, Input.GetButton(playerPrefix + " RightStick Press"), elapsed);
        }
    }
Пример #21
0
 public void PressLeftStick(float x, float y)
 {
     LeftStick.SetX(x);
     LeftStick.SetY(y);
     LeftStick.Press();
 }