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);
		}
Example #2
0
        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();
    }
Example #4
0
 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;
 }
Example #5
0
        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);
    }
Example #7
0
        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);
                }
            }
        }
Example #9
0
        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);
            }
        }
Example #10
0
        /// <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);
        }
Example #11
0
 private void chip8MappingToolStripMenuItem_Click(object sender, EventArgs e)
 {
     JoystickMapping = JoystickMapping.Chip8;
     chip8MappingToolStripMenuItem.Checked   = true;
     defaultMappingToolStripMenuItem.Checked = false;
 }
Example #12
0
        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();
        }
Example #13
0
        /// <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);
        }
Example #14
0
        /// <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();
        }