private void UpdateGamePadButtons(int controllerId) { var curGamePad = GamePadStateArray[controllerId]; for (int i = 0; i < 14; i++) { ButtonState curStateButton = ButtonState.Released; Controller.ButtonsStates curButton = new Controller.ButtonsStates(); if (i <= _abxy.Length - 1) { curButton = (Controller.ButtonsStates)GamePads[controllerId].GetType().GetField(_abxy[i]).GetValue(GamePads[controllerId]); curStateButton = (ButtonState)typeof(GamePadButtons).GetProperty(_abxyXinput[i]).GetValue(GamePadStateArray[controllerId].Buttons, null); } else { int iValue = i - 10; curButton = (Controller.ButtonsStates)GamePads[controllerId].GetType().GetField(_dPad[iValue].ToUpper()).GetValue(GamePads[controllerId]); curStateButton = (ButtonState)typeof(GamePadDPad).GetProperty(_dPad[iValue]).GetValue(GamePadStateArray[controllerId].DPad, null); } #region Failed attempt to cache reflection values /* --> Failed attempt to cache reflection values if(!cachedStates[controllerId]) { if (i <= _abxy.Length - 1) { statesArrayCache[i] = (Controller.ButtonsStates)GamePads[controllerId].GetType().GetField(_abxy[i]).GetValue(GamePads[controllerId]); xinputStatesCache[i] = (ButtonState)typeof(GamePadButtons).GetProperty(_abxyXinput[i]).GetValue(GamePadStateArray[controllerId].Buttons, null); } else { int iValue = i - 10; statesArrayCache[i] = (Controller.ButtonsStates)GamePads[controllerId].GetType().GetField(_dPad[iValue].ToUpper()).GetValue(GamePads[controllerId]); xinputStatesCache[i] = (ButtonState)typeof(GamePadDPad).GetProperty(_dPad[iValue]).GetValue(GamePadStateArray[controllerId].DPad, null); } cachedStates[controllerId] = true; } curButton = statesArrayCache[i]; curStateButton = xinputStatesCache[i]; */ #endregion #region Old code, stopped working for some reason //-----> Old code, stopped working for some reason //Check Button States //if (curButton.Pressed && curStateButton == ButtonState.Released) //{ // curButton.Pressed = false; // //Or use reflection again curButton.GetType().GetField("Pressed").SetValue(curButton, false); //} //if (!curButton.Pressed && (curButton.Released || curButton.Held) && curStateButton == ButtonState.Released) //{ // curButton.Pressed = true; // Debug.Log("Pressed"); // curButton.Held = false; // curButton.Released = false; //} //if (!curButton.Pressed && curButton.Released && curStateButton == ButtonState.Pressed) //{ // curButton.Held = true; // curButton.Released = false; // Debug.Log("Held"); //} //if (!curButton.Pressed && !curButton.Released && !curButton.Held && curStateButton == ButtonState.Pressed) //{ // curButton.Released = true; // Debug.Log("Released"); //} #endregion #region Check Button States (New code, working for now, order of conditions is primordial) //Held if (curButton.Pressed && (!curButton.Released || !curButton.Held) && curStateButton == ButtonState.Pressed) { curButton.Pressed = false; //Debug.Log("Held"); curButton.Held = true; curButton.Released = false; curButton.Zero = false; //Or use reflection again curButton.GetType().GetField("Pressed").SetValue(curButton, false); } else if (!curButton.Pressed && !curButton.Released && !curButton.Zero && curButton.Held && curStateButton == ButtonState.Pressed) { curButton.Pressed = false; //Debug.Log("Held"); curButton.Held = true; curButton.Released = false; curButton.Zero = false; } //Pressed if (curButton.Pressed && curStateButton == ButtonState.Pressed) { curButton.Pressed = false; curButton.Zero = false; } else if (!curButton.Pressed && curButton.Zero && curStateButton == ButtonState.Pressed) { curButton.Pressed = true; //Debug.Log("Pressed"); curButton.Held = false; curButton.Released = false; curButton.Zero = false; } //Zero if (!curButton.Pressed && !curButton.Held && !curButton.Zero && curButton.Released && curStateButton == ButtonState.Released) { curButton.Released = false; curButton.Held = false; curButton.Pressed = false; curButton.Zero = true; //Debug.Log("Zero1"); } else if (!curButton.Pressed && !curButton.Held && !curButton.Released && !curButton.Zero && curStateButton == ButtonState.Released) { curButton.Released = false; curButton.Held = false; curButton.Pressed = false; curButton.Zero = true; //Debug.Log("Zero2"); } //Released if (curButton.Released && curStateButton == ButtonState.Released) { curButton.Pressed = false; curButton.Held = false; curButton.Released = false; curButton.Zero = true; //Debug.Log("Released2"); } else if ((curButton.Pressed || curButton.Held) && !curButton.Released && !curButton.Zero && curStateButton == ButtonState.Released) { curButton.Released = true; //Debug.Log("Released 1"); } #endregion #region Failed attempt to cache reflection values /*--> Failed attempt to cache reflection values * statesArrayCache[i] = curButton; xinputStatesCache[i] = curStateButton; */ #endregion //Finished Checking, Set Values if (i <= _abxy.Length - 1) { GamePads[controllerId].GetType().GetField(_abxy[i]).SetValue(GamePads[controllerId], curButton); } else { int iValue = i - 10; GamePads[controllerId].GetType().GetField(_dPad[iValue].ToUpper()).SetValue(GamePads[controllerId], curButton); } } }
private void SetUnityButtons(int controllerId) { for (int i = 0; i < _controllerClassButtons.Length; i++) { Controller.ButtonsStates curGamePadButton = new Controller.ButtonsStates(); ControllerComputerInputs.ButtonInput curcomputerButton = new ControllerComputerInputs.ButtonInput(); string gamePadButton = _controllerClassButtons[i]; string computerButton = _computerClassButtons[i]; if (gamePadButton == "Start" || gamePadButton == "Select") gamePadButton = gamePadButton.ToLower(); curGamePadButton = (Controller.ButtonsStates)GamePads[controllerId].GetType().GetField(gamePadButton).GetValue(GamePadController.GamePads[controllerId]); curcomputerButton = (ControllerComputerInputs.ButtonInput)computerInputs[controllerId].GetType().GetField(computerButton).GetValue(GamePadController.computerInputs[controllerId]); if (curcomputerButton.inputSetup) { curGamePadButton.Held = SetAndCheckIfUnityButtonIsSetup(controllerId, curcomputerButton, curGamePadButton.Held, curcomputerButton.Held); curGamePadButton.Pressed = SetAndCheckIfUnityButtonIsSetup(controllerId, curcomputerButton, curGamePadButton.Pressed, curcomputerButton.Pressed); curGamePadButton.Released = SetAndCheckIfUnityButtonIsSetup(controllerId, curcomputerButton, curGamePadButton.Released, curcomputerButton.Released); curGamePadButton.Zero = SetAndCheckIfUnityButtonIsSetup(controllerId, curcomputerButton, curGamePadButton.Zero, curcomputerButton.Zero); GamePads[controllerId].GetType().GetField(gamePadButton).SetValue(GamePads[controllerId], curGamePadButton); } } }