private void LoadBuiltInMappings() { TextAsset textAsset = Resources.Load<TextAsset>("joystick_mapping_index"); if(textAsset == null) { Debug.LogError("Failed to load built-in joystick mappings. Index file is missing or corrupted."); return; } try { XmlDocument doc = new XmlDocument(); doc.LoadXml(textAsset.text); foreach(XmlNode item in doc.DocumentElement) { JoystickMapping mapping = new JoystickMapping(); mapping.LoadFromResources(item.Attributes["path"].InnerText); if(mapping.AxisCount > 0) { _mappings.Add(mapping); } else { Debug.LogError("Failed to load mapping from Resources folder at path: " + item.Attributes["path"].InnerText); } } } catch(System.Exception ex) { Debug.LogException(ex); Debug.LogError("Failed to load built-in joystick mappings. File format is invalid."); } Resources.UnloadAsset(textAsset); }
private void LoadBuiltInMappings() { TextAsset textAsset = Resources.Load <TextAsset>("joystick_mapping_index"); if (textAsset == null) { Debug.LogError("Failed to load built-in joystick mappings. Index file is missing or corrupted."); return; } try { XmlDocument doc = new XmlDocument(); doc.LoadXml(textAsset.text); foreach (XmlNode item in doc.DocumentElement) { JoystickMapping mapping = new JoystickMapping(); mapping.LoadFromResources(item.Attributes["path"].InnerText); if (mapping.AxisCount > 0) { _mappings.Add(mapping); } else { Debug.LogError("Failed to load mapping from Resources folder at path: " + item.Attributes["path"].InnerText); } } } catch (System.Exception ex) { Debug.LogException(ex); Debug.LogError("Failed to load built-in joystick mappings. File format is invalid."); } Resources.UnloadAsset(textAsset); }
// Use this for initialization void Awake() { _joystickMapping = JoystickMapping.LoadFromFile("joystick-mapping.json"); _optionsPanel = this.OptionsPanel.GetComponent <OptionsPanel>(); _buttonMaster = new ButtonMaster(_bossFight, _joystickMapping, DuplicateButtons, FullSpread); AssembleGamePanelsAndScripts(); }
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; }
public MainForm(string[] args) { InitializeComponent(); KeyPreview = true; vm.OnPCChange += vm_OnPCChange; // show version in window title var assemblyInfoReader = new AssemblyInfoHelper(GetType()); Text = assemblyInfoReader.Title + " v" + assemblyInfoReader.AssemblyVersion; // dynamically create all register TextBox's and add them to both Form and Registers array for (int i = 0; i < 16; i++) { Registers.Add(CreateRegisterTextBox("R" + i.ToString("X1"), new Point(25 + (i / 8 * 70), 70 + ((i % 8) * 25)), i)); } // setup tags for SP and PC and for Flag textboxes tbPC.Tag = PcTag; tbSP.Tag = SpTag; tbFlagC.Tag = CTag; tbFlagN.Tag = NTag; tbFlagO.Tag = OTag; tbFlagZ.Tag = ZTag; // is a single parameter used? Then this is a Chip16 file to load at startup if (args.Length == 2) { FileDropped = args[1]; } vm.Memory.OnWriteByte += Memory_OnWriteByte; vm.Memory.OnWriteWord += Memory_OnWriteWord; LoadAndRestart(); var filterDropDown = PopulateInterpolationDropDown(); fullScreenFilterToolStripMenuItem.DropDown = filterDropDown; defaultMappingToolStripMenuItem.Checked = true; JoystickMapping = JoystickMapping.Default; }
//private JoystickAssignment AccessiblePositionAJoystickAssignment = JoystickAssignment.Joystick10; //private JoystickAssignment AccessiblePositionBJoystickAssignment = JoystickAssignment.Joystick11; #endregion #region Constructors/Initializers public ButtonMaster(bool bIsBossFight, JoystickMapping joystickMapping, bool bDuplicatedButtons, bool bFullSpread) { _bDuplicatedButtons = bDuplicatedButtons; _bFullSpread = bFullSpread; this.Party1PositonAJoystickAssignment = (JoystickAssignment)joystickMapping.BlueA; this.Party1PositonBJoystickAssignment = (JoystickAssignment)joystickMapping.BlueB; this.Party1PositonCJoystickAssignment = (JoystickAssignment)joystickMapping.BlueC; this.Party1PositonDJoystickAssignment = (JoystickAssignment)joystickMapping.BlueD; this.Party2PositonAJoystickAssignment = (JoystickAssignment)joystickMapping.GreenA; this.Party2PositonBJoystickAssignment = (JoystickAssignment)joystickMapping.GreenB; this.Party2PositonCJoystickAssignment = (JoystickAssignment)joystickMapping.GreenC; this.Party2PositonDJoystickAssignment = (JoystickAssignment)joystickMapping.GreenD; this.AdminPositionJoystickAssignment = (JoystickAssignment)joystickMapping.Admin; this._testMode = joystickMapping.TestMode; this._bFullSpread = joystickMapping.FullSpread; SetupButtons(bIsBossFight); }
private void LoadExternalMappings() { string folder = Application.dataPath.Substring(0, Application.dataPath.Length - 6) + "JoystickMappings/"; if (!Directory.Exists(folder)) { return; } string[] files = Directory.GetFiles(folder, "*.xml"); foreach (string file in files) { JoystickMapping mapping = new JoystickMapping(); mapping.Load(file); if (mapping.AxisCount > 0) { _mappings.Add(mapping); } else { Debug.LogError("Failed to load mapping from: " + file); } } }
private void LoadExternalMappings() { string folder = Application.dataPath.Substring(0, Application.dataPath.Length - 6) + "JoystickMappings/"; if(!Directory.Exists(folder)) return; string[] files = Directory.GetFiles(folder, "*.xml"); foreach(string file in files) { JoystickMapping mapping = new JoystickMapping(); mapping.Load(file); if(mapping.AxisCount > 0) { _mappings.Add(mapping); } else { Debug.LogError("Failed to load mapping from: " + file); } } }
static void Main(string[] args) { if (!LoadSettingsData()) { return; } var last = (int)Enum.GetValues(typeof(GameProfiles)).Cast <GameProfiles>().Last(); if (args.Length != 1) { PrintGameModes(last); return; } int gameSelection; if (!int.TryParse(args[0], out gameSelection)) { PrintGameModes(last); return; } if (gameSelection > last) { PrintGameModes(last); return; } JoystickMapping jmap1 = null; JoystickMapping jmap2 = null; try { if (File.Exists("JoystickMapping1.xml")) { jmap1 = JoystickHelper.DeSerialize(1); } if (File.Exists("JoystickMapping2.xml")) { jmap2 = JoystickHelper.DeSerialize(2); } } catch (Exception ex) { Console.WriteLine($"Loading joystick mapping failed with error: {ex.InnerException} {ex.Message}"); return; } if (jmap1 == null) { jmap1 = new JoystickMapping(); } if (jmap2 == null) { jmap2 = new JoystickMapping(); } InputCode.ButtonMode = (GameProfiles)gameSelection; var _serialPortHandler = new SerialPortHandler(); var directInputListener = new DirectInputListener(); KeyboardController kc = new KeyboardController(); var jvsThread = new Thread(() => _serialPortHandler.ListenSerial("COM14")); jvsThread.Start(); var processQueueThread = new Thread(_serialPortHandler.ProcessQueue); processQueueThread.Start(); var directInputThreadP1 = CreateDirectInputThread(_settingsData.PlayerOneGuid, 1, directInputListener, jmap1); // Wait before launching second thread. Thread.Sleep(1000); var directInputThreadP2 = CreateDirectInputThread(_settingsData.PlayerTwoGuid, 2, directInputListener, jmap2); if (_settingsData.UseKeyboard) { kc.Subscribe(directInputThreadP1 == null, directInputThreadP2 == null); } var gameThread = new Thread(() => { while (true) { // We only resurrect this since I had no crashes ever in the other threads. Feel free to improve! if (directInputThreadP1 != null && !directInputThreadP1.IsAlive) { directInputThreadP1 = CreateDirectInputThread(_settingsData.PlayerOneGuid, 1, directInputListener, jmap1); } if (directInputThreadP2 != null && !directInputThreadP2.IsAlive) { directInputThreadP2 = CreateDirectInputThread(_settingsData.PlayerTwoGuid, 2, directInputListener, jmap2); } Thread.Sleep(5000); } }); gameThread.Start(); while (gameThread.IsAlive) { Thread.Sleep(1000); } }
/// <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">Joystick map.</param> /// <returns>Thread id.</returns> private static Thread CreateDirectInputThread(Guid joystickGuid, int playerNumber, DirectInputListener directInputListener, JoystickMapping joystickMapping) { if (joystickGuid == Guid.Empty) { return(null); } var dinputThread = new Thread(() => directInputListener.Listen(joystickGuid, playerNumber, _settingsData.UseSto0ZDrivingHack, joystickMapping)); dinputThread.Start(); return(dinputThread); }
private void chip8MappingToolStripMenuItem_Click(object sender, EventArgs e) { JoystickMapping = JoystickMapping.Chip8; chip8MappingToolStripMenuItem.Checked = true; defaultMappingToolStripMenuItem.Checked = false; }
private void BtnSaveKeys(object sender, RoutedEventArgs e) { try { if (_playerId == 1) { // Save player 1 xml var map = new JoystickMapping { 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), }; if (map.BrakeAxis != null) { if (ChkBrakeFullAxis.IsChecked.HasValue) { map.BrakeAxis.IsFullAxis = ChkBrakeFullAxis.IsChecked.Value; } if (ChkBrakeReverseAxis.IsChecked.HasValue) { map.BrakeAxis.IsReverseAxis = ChkBrakeReverseAxis.IsChecked.Value; } } if (map.GasAxis != null) { if (ChkGasFullAxis.IsChecked.HasValue) { map.GasAxis.IsFullAxis = ChkGasFullAxis.IsChecked.Value; } if (ChkGasReverseAxis.IsChecked.HasValue) { map.GasAxis.IsReverseAxis = ChkGasReverseAxis.IsChecked.Value; } } map.GunMultiplier = IUpDownMovementMultiplier.Value ?? 1; JoystickHelper.Serialize(map, 1); } if (_playerId == 2) { // Save player 2 xml var map = new JoystickMapping { 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.Serialize(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(); }