public GameRunning(string gameLocation, GameProfiles gameProfile, bool isTest, SettingsData settingsData, string testMenuString, JoystickMapping joystickMapping1, JoystickMapping joystickMapping2, XInputMapping xinputMapping1, XInputMapping xinputMapping2, bool testMenuIsExe = false, string testMenuExe = "") { InitializeComponent(); _gameLocation = gameLocation; InputCode.ButtonMode = gameProfile; _isTest = isTest; _serialPortHandler = new SerialPortHandler(); _settingsData = settingsData; _testMenuString = testMenuString; _joystickMapping1 = joystickMapping1; _joystickMapping2 = joystickMapping2; _xinputMapping1 = xinputMapping1; _xinputMapping2 = xinputMapping2; _testMenuIsExe = testMenuIsExe; _testMenuExe = testMenuExe; }
private void UpdateButtonState(IButtonInputElement deviceElement, IEnumerable <ElementMapping> mappings) { bool pressed = false; foreach (ElementMapping mapping in mappings) { if (mapping is KeyboardMapping) { pressed = this.KeyboardReader.GetKeyState(((KeyboardMapping)mapping).Key); } else if (mapping is XInputMapping) { XInputMapping xInputMapping = (XInputMapping)mapping; pressed = this.XInputReader.GetButtonState(xInputMapping.Controller, xInputMapping.Element); } if (pressed) { break; } } deviceElement.State = pressed; }
private void BtnSaveKeys(object sender, RoutedEventArgs e) { try { if (_playerId == 1) { // Save player 1 xml var map = new XInputMapping() { Button1 = GetTagButtonInfo(TxtButton1), Button2 = GetTagButtonInfo(TxtButton2), Button3 = GetTagButtonInfo(TxtButton3), Button4 = GetTagButtonInfo(TxtButton4), Button5 = GetTagButtonInfo(TxtButton5), Button6 = GetTagButtonInfo(TxtButton6), Start = GetTagButtonInfo(TxtStart), Test = GetTagButtonInfo(TxtTestSw), Service = GetTagButtonInfo(TxtService), Up = GetTagButtonInfo(TxtUp), Down = GetTagButtonInfo(TxtDown), Left = GetTagButtonInfo(TxtLeft), Right = GetTagButtonInfo(TxtRight), GunUp = GetTagButtonInfo(TxtLgiUp), GunDown = GetTagButtonInfo(TxtLgiDown), GunLeft = GetTagButtonInfo(TxtLgiLeft), GunRight = GetTagButtonInfo(TxtLgiRight), GunTrigger = GetTagButtonInfo(TxtGunTrigger), SonicItem = GetTagButtonInfo(TxtSonicItemButton), GasAxis = GetTagButtonInfo(TxtGas), BrakeAxis = GetTagButtonInfo(TxtBrake), WheelAxis = GetTagButtonInfo(TxtWheel), SrcGearChange1 = GetTagButtonInfo(TxtSrcGearChange1), SrcGearChange2 = GetTagButtonInfo(TxtSrcGearChange2), SrcGearChange3 = GetTagButtonInfo(TxtSrcGearChange3), SrcGearChange4 = GetTagButtonInfo(TxtSrcGearChange4), SrcViewChange1 = GetTagButtonInfo(TxtSrcViewChange1), SrcViewChange2 = GetTagButtonInfo(TxtSrcViewChange2), SrcViewChange3 = GetTagButtonInfo(TxtSrcViewChange3), SrcViewChange4 = GetTagButtonInfo(TxtSrcViewChange4), InitialD6MenuDown = GetTagButtonInfo(TxtInitialD6MenuDown), InitialD6MenuLeft = GetTagButtonInfo(TxtInitialD6MenuLeft), InitialD6MenuRight = GetTagButtonInfo(TxtInitialD6MenuRight), InitialD6MenuUp = GetTagButtonInfo(TxtInitialD6MenuUp), InitialD6ShiftDown = GetTagButtonInfo(TxtInitialD6ShiftDown), InitialD6ShiftUp = GetTagButtonInfo(TxtInitialD6ShiftUp), InitialD6ViewChange = GetTagButtonInfo(TxtInitialD6ViewChange), }; map.GunMultiplier = IUpDownMovementMultiplier.Value ?? 1; JoystickHelper.SerializeXInput(map, 1); } if (_playerId == 2) { // Save player 2 xml var map = new XInputMapping() { Button1 = GetTagButtonInfo(TxtButton1), Button2 = GetTagButtonInfo(TxtButton2), Button3 = GetTagButtonInfo(TxtButton3), Button4 = GetTagButtonInfo(TxtButton4), Button5 = GetTagButtonInfo(TxtButton5), Button6 = GetTagButtonInfo(TxtButton6), Start = GetTagButtonInfo(TxtStart), Test = GetTagButtonInfo(TxtTestSw), Service = GetTagButtonInfo(TxtService), Up = GetTagButtonInfo(TxtUp), Down = GetTagButtonInfo(TxtDown), Left = GetTagButtonInfo(TxtLeft), Right = GetTagButtonInfo(TxtRight), GunUp = GetTagButtonInfo(TxtLgiUp), GunDown = GetTagButtonInfo(TxtLgiDown), GunLeft = GetTagButtonInfo(TxtLgiLeft), GunRight = GetTagButtonInfo(TxtLgiRight), GunTrigger = GetTagButtonInfo(TxtGunTrigger) }; map.GunMultiplier = IUpDownMovementMultiplier.Value ?? 1; JoystickHelper.SerializeXInput(map, 2); } MessageBox.Show("Save Complete", "Information", MessageBoxButton.OK, MessageBoxImage.Information); } catch (Exception ex) { MessageBox.Show($"Saving failed with error: {ex.InnerException} {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } Close(); }
/// <summary> /// Creates DirectInput thread. /// </summary> /// <param name="joystickGuid">Joysticks GUID.</param> /// <param name="playerNumber">Player number.</param> /// <param name="directInputListener">Direct Input listener class.</param> /// <param name="joystickMapping"></param> /// <param name="xinputMapping"></param> /// <param name="useXinput">If we use xinput instead.</param> /// <returns>Thread id.</returns> private Thread CreateDirectInputThread(Guid joystickGuid, int playerNumber, DirectInputListener directInputListener, XInputListener xinputListener, JoystickMapping joystickMapping, XInputMapping xinputMapping, bool useXinput) { Thread inputThread; if (!useXinput) { if (joystickGuid == Guid.Empty) { return(null); } inputThread = new Thread(() => directInputListener.Listen(joystickGuid, playerNumber, _settingsData.UseSto0ZDrivingHack, joystickMapping)); inputThread.Start(); } else { inputThread = new Thread(() => xinputListener.Listen(playerNumber, _settingsData.UseSto0ZDrivingHack, xinputMapping)); inputThread.Start(); } return(inputThread); }
/// <summary> /// Validates that the game exists and then runs it with the emulator. /// </summary> /// <param name="gameLocation">Game executable location.</param> /// <param name="gameProfile">Input profile.</param> /// <param name="testMenuString">Command to run test menu.</param> /// <param name="testMenuIsExe">If uses separate exe.</param> /// <param name="exeName">Test menu exe name.</param> private void ValidateAndRun(string gameLocation, GameProfiles gameProfile, string testMenuString, bool testMenuIsExe = false, string exeName = "") { if (!File.Exists(gameLocation)) { MessageBox.Show($"Cannot find game exe at: {gameLocation}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (!File.Exists("ParrotLoader.exe")) { MessageBox.Show($"Cannot find ParrotLoader.exe", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (!File.Exists("TeknoParrot.dll")) { MessageBox.Show($"Cannot find TeknoParrot.dll", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } var testMenu = ChkTestMenu.IsChecked != null && ChkTestMenu.IsChecked.Value; JoystickMapping jmap1 = null; JoystickMapping jmap2 = null; XInputMapping xmap1 = null; XInputMapping xmap2 = null; try { if (File.Exists("JoystickMapping1.xml")) { jmap1 = JoystickHelper.DeSerialize(1); } if (File.Exists("JoystickMapping2.xml")) { jmap2 = JoystickHelper.DeSerialize(2); } } catch (Exception ex) { MessageBox.Show($"Loading joystick mapping failed with error: {ex.InnerException} {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } try { if (File.Exists("XInputMapping1.xml")) { xmap1 = JoystickHelper.DeSerializeXInput(1); } if (File.Exists("XInputMapping2.xml")) { xmap2 = JoystickHelper.DeSerializeXInput(2); } } catch (Exception ex) { MessageBox.Show($"Loading joystick mapping failed with error: {ex.InnerException} {ex.Message}", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } if (jmap1 == null) { jmap1 = new JoystickMapping(); } if (jmap2 == null) { jmap2 = new JoystickMapping(); } if (xmap1 == null) { xmap1 = new XInputMapping(); } if (xmap2 == null) { xmap2 = new XInputMapping(); } var gameRunning = new GameRunning(gameLocation, gameProfile, testMenu, _settingsData, testMenuString, jmap1, jmap2, xmap1, xmap2, testMenuIsExe, exeName); gameRunning.ShowDialog(); gameRunning.Close(); }