Exemplo n.º 1
0
        /// <summary>
        /// Process each input section from the config file
        /// </summary>
        void ParseInputs()
        {
            String InterfaceName, ClassName;
            AltDirectInputDevice Device;

            print("AltInput: (re)loading configuration");
            ini = null;
            DeviceList.Clear();
            DetectedList.Clear();
            if (!File.Exists(ini_path))
                return;

            ini = new IniFile(ini_path);
            iniVersion = new System.Version(ini.IniReadValue("global", "Version"));
            if (iniVersion != currentVersion)
                return;

            List<String> sections = ini.IniReadAllSections();
            // Remove the [global] and [___.Mode] sections from our list
            sections.RemoveAll(s => s.Equals("global"));
            foreach (var modeName in GameState.ModeName)
                sections.RemoveAll(s => s.EndsWith("." + modeName));

            foreach (var dev in directInput.GetDevices(DeviceClass.GameControl, DeviceEnumerationFlags.AllDevices))
            {
                Joystick js = new Joystick(directInput, dev.InstanceGuid);
                DetectedList.Add("AltInput: Detected Controller '" + dev.InstanceName + "': " +
                    js.Capabilities.AxeCount + " Axes, " + js.Capabilities.ButtonCount + " Buttons, " +
                    js.Capabilities.PovCount + " POV(s)");

                foreach(var section in sections)
                {
                    if (dev.InstanceName.Contains(section))
                    {
                        InterfaceName = ini.IniReadValue(section, "Interface");
                        if ((InterfaceName == "") || (ini.IniReadValue(section, "Ignore") == "true"))
                            break;
                        if (InterfaceName != "DirectInput")
                        {
                            print("AltInput[" + section + "]: Only 'DirectInput' is supported for Interface type");
                            continue;
                        }
                        ClassName = ini.IniReadValue(section, "Class");
                        if (ClassName == "")
                            ClassName = "GameControl";
                        else if (ClassName != "GameControl")
                        {
                            print("AltInput[" + section + "]: '" + ClassName + "' is not an allowed Class value");
                            continue;   // ignore the device
                        }
                        // Only add this device if not already in our list
                        if (DeviceList.Where(item => ((AltDirectInputDevice)item).InstanceGuid == dev.InstanceGuid).Any())
                            continue;
                        Device = new AltDirectInputDevice(directInput, DeviceClass.GameControl, dev.InstanceGuid);
                        SetAttributes(Device, section);
                        DeviceList.Add(Device);
                        print("AltInput: Added controller '" + dev.InstanceName + "'");
                    }
                }
            }
        }