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); }
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"); }
public MonoGameGamePad(int index) { _playerIndex = index; _gamePadListeners = new LinkedList <GamePadListener>(); _prevStatus = getStatus(); }
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; }
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; } }