예제 #1
0
        private GamePadStatus getStatus()
        {
            var state  = GamePad.GetState(_playerIndex);
            var status = new GamePadStatus();

            status.isConnected = state.IsConnected;
            status.buttons     = new bool[buttonCodes.Length];
            for (var i = 0; i < buttonCodes.Length; i++)
            {
                status.buttons[i] = state.IsButtonDown((Buttons)buttonCodes[i]);
            }
            status.axes = new []
            {
                state.ThumbSticks.Left.X,
                state.ThumbSticks.Left.Y,
                state.ThumbSticks.Right.X,
                state.ThumbSticks.Right.Y,
                state.Triggers.Left,
                state.Triggers.Right
            };
            status.povs = new[]
            {
                getPov(0)
            };
            status.accelerometers = new Vector3[0];

            return(status);
        }
예제 #2
0
        public GamepadManager(/*GamePadStatusChanged statusChange*/)
        {
            //this.statusChange = statusChange;

            gamePadStatus = new GamePadStatus[4];
            for (int i = 0; i < gamePadStatus.Length; i++)
            {
                gamePadStatus[i] = new GamePadStatus();
            }


            updateThread = new Thread(delegate()
            {
                while (true)
                {
                    PollInputs();
                    //Thread.Sleep(-1);
                }
            });
            updateThread.Start();

            Program.Log(TAG, ".OK");
        }
예제 #3
0
 public MonoGameGamePad(int index)
 {
     _playerIndex      = index;
     _gamePadListeners = new LinkedList <GamePadListener>();
     _prevStatus       = getStatus();
 }
예제 #4
0
        public void update()
        {
            var currentStatus = getStatus();

            if (currentStatus.isConnected != _prevStatus.isConnected)
            {
                if (currentStatus.isConnected)
                {
                    var node = _gamePadListeners.First;
                    while (node != null)
                    {
                        node.Value.onConnect(this);
                        node = node.Next;
                    }
                }
                else
                {
                    var node = _gamePadListeners.First;
                    while (node != null)
                    {
                        node.Value.onDisconnect(this);
                        node = node.Next;
                    }
                }
            }

            for (int i = 0; i < _prevStatus.buttons.Length; i++)
            {
                if (_prevStatus.buttons[i] != currentStatus.buttons[i])
                {
                    if (currentStatus.buttons[i])
                    {
                        var node = _gamePadListeners.First;
                        while (node != null)
                        {
                            node.Value.onButtonDown(this, buttonCodes[i]);
                            node = node.Next;
                        }
                    }
                    else
                    {
                        var node = _gamePadListeners.First;
                        while (node != null)
                        {
                            node.Value.onButtonUp(this, buttonCodes[i]);
                            node = node.Next;
                        }
                    }
                }
            }

            for (int i = 0; i < currentStatus.axes.Length; i++)
            {
                if (_prevStatus.axes[i] != currentStatus.axes[i])
                {
                    var node = _gamePadListeners.First;
                    while (node != null)
                    {
                        node.Value.onAxisChanged(this, i, currentStatus.axes[i]);
                        node = node.Next;
                    }
                }
            }

            for (int i = 0; i < currentStatus.povs.Length; i++)
            {
                if (_prevStatus.povs[i] != currentStatus.povs[i])
                {
                    var node = _gamePadListeners.First;
                    while (node != null)
                    {
                        node.Value.onPovChanged(this, i, currentStatus.povs[i]);
                        node = node.Next;
                    }
                }
            }

            for (int i = 0; i < currentStatus.accelerometers.Length; i++)
            {
                if (_prevStatus.accelerometers[i] != currentStatus.accelerometers[i])
                {
                    var node = _gamePadListeners.First;
                    while (node != null)
                    {
                        node.Value.onAccelerometerChanged(this, i, currentStatus.accelerometers[i]);
                        node = node.Next;
                    }
                }
            }

            _prevStatus = currentStatus;
        }
예제 #5
0
        public void PollInputs()
        {
            for (int i = 0; i < 4; i++)
            {
                GamePadState  state     = GamePad.GetState(i);
                GamePadStatus statusNew = new GamePadStatus().Set(state);
                GamePadStatus statusOld = gamePadStatus[i];

                if (statusNew.isConnected)
                {
                    /**
                     * BUTTONS
                     **/
                    if (statusNew.buttonStart != statusOld.buttonStart)                         //BUTTON -START-
                    {
                        if (statusNew.buttonStart)
                        {
                            Program.TriggerInput("pad_start");
                            Program.GamepadInput(i, GamepadKey.Start);
                        }
                    }

                    if (statusNew.buttonSelect != statusOld.buttonSelect)                       //BUTTON -SELECT-
                    {
                        if (statusNew.buttonSelect)
                        {
                            Program.TriggerInput("pad_select");
                            Program.GamepadInput(i, GamepadKey.Select);
                        }
                    }

                    if (statusNew.buttonA != statusOld.buttonA)                                 //BUTTON -A-
                    {
                        if (statusNew.buttonA)
                        {
                            Program.TriggerInput("pad_action");
                            Program.GamepadInput(i, GamepadKey.A);
                        }
                    }

                    if (statusNew.buttonB != statusOld.buttonB)                                 //BUTTON -B-
                    {
                        if (statusNew.buttonB)
                        {
                            Program.TriggerInput("pad_action2");
                            Program.GamepadInput(i, GamepadKey.B);
                        }
                    }

                    /**
                     * DPAD
                     **/
                    if (statusNew.dpadUp != statusOld.dpadUp)                                 //BUTTON -DPad Up-
                    {
                        if (statusNew.dpadUp)
                        {
                            Program.TriggerInput("pad_up");
                            Program.GamepadInput(i, GamepadKey.Up);
                        }
                    }

                    if (statusNew.dpadRight != statusOld.dpadRight)                                 //BUTTON -DPad Right-
                    {
                        if (statusNew.dpadRight)
                        {
                            Program.TriggerInput("pad_right");
                            Program.GamepadInput(i, GamepadKey.Right);
                        }
                    }

                    if (statusNew.dpadDown != statusOld.dpadDown)                                 //BUTTON -DPad Down-
                    {
                        if (statusNew.dpadDown)
                        {
                            Program.TriggerInput("pad_down");
                            Program.GamepadInput(i, GamepadKey.Down);
                        }
                    }

                    if (statusNew.dpadLeft != statusOld.dpadLeft)                                 //BUTTON -DPad Left-
                    {
                        if (statusNew.dpadLeft)
                        {
                            Program.TriggerInput("pad_left");
                            Program.GamepadInput(i, GamepadKey.Left);
                        }
                    }
                }

                if (statusNew.isConnected != statusOld.isConnected)
                {
                    if (statusNew.isConnected)
                    {
                        //statusChange.OnDeviceConnected(i, GamePad.GetName(i));
                        Program.Log(TAG, string.Format("GamePad({0}) connected", i));
                    }
                    else
                    {
                        //statusChange.OnDeviceDisconnected(i);
                        Program.Log(TAG, string.Format("GamePad({0}) disconnected", i));
                    }
                }

                //Update
                gamePadStatus[i] = statusNew;
            }
        }