Example #1
0
        /// <summary>
        /// Writes a mod loader controller configuration.
        /// </summary>
        /// <param name="configLocation">States the location of the controller configuration.</param>
        /// <param name="controller">A DirectInput or XInput controller instance.</param>
        public static void WriteConfig(string configLocation, ControllerCommon.IController controller)
        {
            // Convert structure to JSON
            string json = JsonConvert.SerializeObject(controller.InputMappings, Strings.Parsers.SerializerSettings);

            // Write to disk
            File.WriteAllText(configLocation, json);
        }
Example #2
0
        /// <summary>
        /// Parses a Mod Loader Controller Configuration.
        /// </summary>
        /// <param name="configLocation">States the location of the controller configuration.</param>
        /// <param name="controller">A DirectInput or XInput controller instance.</param>
        public ControllerCommon.IController ParseConfig(string configLocation, ControllerCommon.IController controller)
        {
            // Instantiate the individual mapping structs.
            ControllerCommon.AxisMapping            axisMapping      = new ControllerCommon.AxisMapping();
            ControllerCommon.EmulationButtonMapping emulationMapping = new ControllerCommon.EmulationButtonMapping();
            ControllerCommon.ButtonMapping          buttonMapping    = new ControllerCommon.ButtonMapping();

            // Check if the config exists, if it doesn't, first write an empty config.
            if (!File.Exists(configLocation))
            {
                // Check if directory exists first.
                // Unpack sample themes
                if (!Directory.Exists(Path.GetDirectoryName(configLocation)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(configLocation));
                }

                // Write Sample Config
                File.WriteAllText(configLocation, SampleConfig.Sample);
            }


            // Read the controller configuration.
            _iniData = _iniParser.ReadFile(configLocation);

            // Read the controller port ID.
            controller.ControllerId = Convert.ToInt32(_iniData["Main Settings"]["Controller_Port"]);

            // Read the controller button mappings.
            #region Button Mappings
            buttonMapping.ButtonA = byte.Parse(_iniData["Button Mappings"]["Button_A"]);
            buttonMapping.ButtonB = byte.Parse(_iniData["Button Mappings"]["Button_B"]);
            buttonMapping.ButtonX = byte.Parse(_iniData["Button Mappings"]["Button_X"]);
            buttonMapping.ButtonY = byte.Parse(_iniData["Button Mappings"]["Button_Y"]);

            buttonMapping.ButtonLb = byte.Parse(_iniData["Button Mappings"]["Button_LB"]);
            buttonMapping.ButtonRb = byte.Parse(_iniData["Button Mappings"]["Button_RB"]);

            buttonMapping.ButtonLs = byte.Parse(_iniData["Button Mappings"]["Button_LS"]);
            buttonMapping.ButtonRs = byte.Parse(_iniData["Button Mappings"]["Button_RS"]);

            buttonMapping.ButtonBack  = byte.Parse(_iniData["Button Mappings"]["Button_Back"]);
            buttonMapping.ButtonGuide = byte.Parse(_iniData["Button Mappings"]["Button_Guide"]);
            buttonMapping.ButtonStart = byte.Parse(_iniData["Button Mappings"]["Button_Start"]);
            #endregion

            // Read the controller axis emulation mappings.
            #region Emulation Mappings
            emulationMapping.DpadUp    = byte.Parse(_iniData["Emulation Mapping"]["DPAD_UP"]);
            emulationMapping.DpadLeft  = byte.Parse(_iniData["Emulation Mapping"]["DPAD_LEFT"]);
            emulationMapping.DpadRight = byte.Parse(_iniData["Emulation Mapping"]["DPAD_RIGHT"]);
            emulationMapping.DpadDown  = byte.Parse(_iniData["Emulation Mapping"]["DPAD_DOWN"]);

            emulationMapping.RightTrigger = byte.Parse(_iniData["Emulation Mapping"]["Right_Trigger"]);
            emulationMapping.LeftTrigger  = byte.Parse(_iniData["Emulation Mapping"]["Left_Trigger"]);

            emulationMapping.LeftStickUp    = byte.Parse(_iniData["Emulation Mapping"]["Left_Stick_Up"]);
            emulationMapping.LeftStickLeft  = byte.Parse(_iniData["Emulation Mapping"]["Left_Stick_Left"]);
            emulationMapping.LeftStickDown  = byte.Parse(_iniData["Emulation Mapping"]["Left_Stick_Down"]);
            emulationMapping.LeftStickRight = byte.Parse(_iniData["Emulation Mapping"]["Left_Stick_Right"]);

            emulationMapping.RightStickUp    = byte.Parse(_iniData["Emulation Mapping"]["Right_Stick_Up"]);
            emulationMapping.RightStickLeft  = byte.Parse(_iniData["Emulation Mapping"]["Right_Stick_Left"]);
            emulationMapping.RightStickDown  = byte.Parse(_iniData["Emulation Mapping"]["Right_Stick_Down"]);
            emulationMapping.RightStickRight = byte.Parse(_iniData["Emulation Mapping"]["Right_Stick_Right"]);
            #endregion

            // Read the controller axis mappings.
            #region Axis Mappings
            axisMapping.LeftStickX.SourceAxis      = _iniData["Axis"]["Left_Stick_X"];
            axisMapping.LeftStickX.DestinationAxis = ParseAxisName(_iniData["Axis Type"]["Left_Stick_X"]);
            axisMapping.LeftStickX.DeadZone        = float.Parse(_iniData["Axis Deadzone"]["Left_Stick_X"]);
            axisMapping.LeftStickX.IsReversed      = bool.Parse(_iniData["Axis Inverse"]["Left_Stick_X"]);
            axisMapping.LeftStickX.RadiusScale     = float.Parse(_iniData["Radius Scale"]["Left_Stick_X"]);

            axisMapping.RightStickX.SourceAxis      = _iniData["Axis"]["Right_Stick_X"];
            axisMapping.RightStickX.DestinationAxis = ParseAxisName(_iniData["Axis Type"]["Right_Stick_X"]);
            axisMapping.RightStickX.DeadZone        = float.Parse(_iniData["Axis Deadzone"]["Right_Stick_X"]);
            axisMapping.RightStickX.IsReversed      = bool.Parse(_iniData["Axis Inverse"]["Right_Stick_X"]);
            axisMapping.RightStickX.RadiusScale     = float.Parse(_iniData["Radius Scale"]["Right_Stick_X"]);

            axisMapping.LeftStickY.SourceAxis      = _iniData["Axis"]["Left_Stick_Y"];
            axisMapping.LeftStickY.DestinationAxis = ParseAxisName(_iniData["Axis Type"]["Left_Stick_Y"]);
            axisMapping.LeftStickY.DeadZone        = float.Parse(_iniData["Axis Deadzone"]["Left_Stick_Y"]);
            axisMapping.LeftStickY.IsReversed      = bool.Parse(_iniData["Axis Inverse"]["Left_Stick_Y"]);
            axisMapping.LeftStickY.RadiusScale     = float.Parse(_iniData["Radius Scale"]["Left_Stick_Y"]);

            axisMapping.RightStickY.SourceAxis      = _iniData["Axis"]["Right_Stick_Y"];
            axisMapping.RightStickY.DestinationAxis = ParseAxisName(_iniData["Axis Type"]["Right_Stick_Y"]);
            axisMapping.RightStickY.DeadZone        = float.Parse(_iniData["Axis Deadzone"]["Right_Stick_Y"]);
            axisMapping.RightStickY.IsReversed      = bool.Parse(_iniData["Axis Inverse"]["Right_Stick_Y"]);
            axisMapping.RightStickY.RadiusScale     = float.Parse(_iniData["Radius Scale"]["Right_Stick_Y"]);

            axisMapping.LeftTrigger.SourceAxis      = _iniData["Axis"]["Left_Trigger"];
            axisMapping.LeftTrigger.DestinationAxis = ParseAxisName(_iniData["Axis Type"]["Left_Trigger"]);
            axisMapping.LeftTrigger.DeadZone        = float.Parse(_iniData["Axis Deadzone"]["Left_Trigger"]);
            axisMapping.LeftTrigger.IsReversed      = bool.Parse(_iniData["Axis Inverse"]["Left_Trigger"]);
            axisMapping.LeftTrigger.RadiusScale     = float.Parse(_iniData["Radius Scale"]["Left_Trigger"]);

            axisMapping.RightTrigger.SourceAxis      = _iniData["Axis"]["Right_Trigger"];
            axisMapping.RightTrigger.DestinationAxis = ParseAxisName(_iniData["Axis Type"]["Right_Trigger"]);
            axisMapping.RightTrigger.DeadZone        = float.Parse(_iniData["Axis Deadzone"]["Right_Trigger"]);
            axisMapping.RightTrigger.IsReversed      = bool.Parse(_iniData["Axis Inverse"]["Right_Trigger"]);
            axisMapping.RightTrigger.RadiusScale     = float.Parse(_iniData["Radius Scale"]["Right_Trigger"]);
            #endregion

            // Assign Mappings back to Controller
            controller.AxisMapping      = axisMapping;
            controller.ButtonMapping    = buttonMapping;
            controller.EmulationMapping = emulationMapping;

            // Return controller.
            return(controller);
        }
Example #3
0
        /// <summary>
        /// Writes a mod loader controller configuration.
        /// </summary>
        /// <param name="configLocation">States the location of the controller configuration.</param>
        /// <param name="controller">A DirectInput or XInput controller instance.</param>
        public void WriteConfig(string configLocation, ControllerCommon.IController controller)
        {
            // Controller port ID.
            _iniData["Main Settings"]["Controller_Port"] = Convert.ToString(controller.ControllerId);

            // Controller button mappings.
            #region Button Mappings
            _iniData["Button Mappings"]["Button_A"] = Convert.ToString((int)controller.ButtonMapping.ButtonA);
            _iniData["Button Mappings"]["Button_B"] = Convert.ToString((int)controller.ButtonMapping.ButtonB);
            _iniData["Button Mappings"]["Button_X"] = Convert.ToString((int)controller.ButtonMapping.ButtonX);
            _iniData["Button Mappings"]["Button_Y"] = Convert.ToString((int)controller.ButtonMapping.ButtonY);

            _iniData["Button Mappings"]["Button_LB"] = Convert.ToString((int)controller.ButtonMapping.ButtonLb);
            _iniData["Button Mappings"]["Button_RB"] = Convert.ToString((int)controller.ButtonMapping.ButtonRb);

            _iniData["Button Mappings"]["Button_LS"] = Convert.ToString((int)controller.ButtonMapping.ButtonLs);
            _iniData["Button Mappings"]["Button_RS"] = Convert.ToString((int)controller.ButtonMapping.ButtonRs);

            _iniData["Button Mappings"]["Button_Back"]  = Convert.ToString((int)controller.ButtonMapping.ButtonBack);
            _iniData["Button Mappings"]["Button_Guide"] = Convert.ToString((int)controller.ButtonMapping.ButtonGuide);
            _iniData["Button Mappings"]["Button_Start"] = Convert.ToString((int)controller.ButtonMapping.ButtonStart);
            #endregion

            // Controller axis emulation mappings.
            #region Emulation Mappings
            _iniData["Emulation Mapping"]["DPAD_UP"]    = Convert.ToString((int)controller.EmulationMapping.DpadUp);
            _iniData["Emulation Mapping"]["DPAD_LEFT"]  = Convert.ToString((int)controller.EmulationMapping.DpadLeft);
            _iniData["Emulation Mapping"]["DPAD_RIGHT"] = Convert.ToString((int)controller.EmulationMapping.DpadRight);
            _iniData["Emulation Mapping"]["DPAD_DOWN"]  = Convert.ToString((int)controller.EmulationMapping.DpadDown);

            _iniData["Emulation Mapping"]["Right_Trigger"] = Convert.ToString((int)controller.EmulationMapping.RightTrigger);
            _iniData["Emulation Mapping"]["Left_Trigger"]  = Convert.ToString((int)controller.EmulationMapping.LeftTrigger);

            _iniData["Emulation Mapping"]["Left_Stick_Up"]    = Convert.ToString((int)controller.EmulationMapping.LeftStickUp);
            _iniData["Emulation Mapping"]["Left_Stick_Left"]  = Convert.ToString((int)controller.EmulationMapping.LeftStickLeft);
            _iniData["Emulation Mapping"]["Left_Stick_Down"]  = Convert.ToString((int)controller.EmulationMapping.LeftStickDown);
            _iniData["Emulation Mapping"]["Left_Stick_Right"] = Convert.ToString((int)controller.EmulationMapping.LeftStickRight);

            _iniData["Emulation Mapping"]["Right_Stick_Up"]    = Convert.ToString((int)controller.EmulationMapping.RightStickUp);
            _iniData["Emulation Mapping"]["Right_Stick_Left"]  = Convert.ToString((int)controller.EmulationMapping.RightStickLeft);
            _iniData["Emulation Mapping"]["Right_Stick_Down"]  = Convert.ToString((int)controller.EmulationMapping.RightStickDown);
            _iniData["Emulation Mapping"]["Right_Stick_Right"] = Convert.ToString((int)controller.EmulationMapping.RightStickRight);
            #endregion

            // Controller axis mappings.
            #region Axis Mappings
            _iniData["Axis"]["Left_Stick_X"]          = Convert.ToString(controller.AxisMapping.LeftStickX.SourceAxis);
            _iniData["Axis Type"]["Left_Stick_X"]     = GetAxisName(controller.AxisMapping.LeftStickX.DestinationAxis);
            _iniData["Axis Deadzone"]["Left_Stick_X"] = Convert.ToString((int)controller.AxisMapping.LeftStickX.DeadZone);
            _iniData["Axis Inverse"]["Left_Stick_X"]  = Convert.ToString(controller.AxisMapping.LeftStickX.IsReversed);
            _iniData["Radius Scale"]["Left_Stick_X"]  = Convert.ToString(controller.AxisMapping.LeftStickX.RadiusScale, CultureInfo.InvariantCulture);

            _iniData["Axis"]["Right_Stick_X"]          = Convert.ToString(controller.AxisMapping.RightStickX.SourceAxis);
            _iniData["Axis Type"]["Right_Stick_X"]     = GetAxisName(controller.AxisMapping.RightStickX.DestinationAxis);
            _iniData["Axis Deadzone"]["Right_Stick_X"] = Convert.ToString((int)controller.AxisMapping.RightStickX.DeadZone);
            _iniData["Axis Inverse"]["Right_Stick_X"]  = Convert.ToString(controller.AxisMapping.RightStickX.IsReversed);
            _iniData["Radius Scale"]["Right_Stick_X"]  = Convert.ToString(controller.AxisMapping.RightStickX.RadiusScale, CultureInfo.InvariantCulture);

            _iniData["Axis"]["Left_Stick_Y"]          = Convert.ToString(controller.AxisMapping.LeftStickY.SourceAxis);
            _iniData["Axis Type"]["Left_Stick_Y"]     = GetAxisName(controller.AxisMapping.LeftStickY.DestinationAxis);
            _iniData["Axis Deadzone"]["Left_Stick_Y"] = Convert.ToString((int)controller.AxisMapping.LeftStickY.DeadZone);
            _iniData["Axis Inverse"]["Left_Stick_Y"]  = Convert.ToString(controller.AxisMapping.LeftStickY.IsReversed);
            _iniData["Radius Scale"]["Left_Stick_Y"]  = Convert.ToString(controller.AxisMapping.LeftStickY.RadiusScale, CultureInfo.InvariantCulture);

            _iniData["Axis"]["Right_Stick_Y"]          = Convert.ToString(controller.AxisMapping.RightStickY.SourceAxis);
            _iniData["Axis Type"]["Right_Stick_Y"]     = GetAxisName(controller.AxisMapping.RightStickY.DestinationAxis);
            _iniData["Axis Deadzone"]["Right_Stick_Y"] = Convert.ToString((int)controller.AxisMapping.RightStickY.DeadZone);
            _iniData["Axis Inverse"]["Right_Stick_Y"]  = Convert.ToString(controller.AxisMapping.RightStickY.IsReversed);
            _iniData["Radius Scale"]["Right_Stick_Y"]  = Convert.ToString(controller.AxisMapping.RightStickY.RadiusScale, CultureInfo.InvariantCulture);

            _iniData["Axis"]["Left_Trigger"]          = Convert.ToString(controller.AxisMapping.LeftTrigger.SourceAxis);
            _iniData["Axis Type"]["Left_Trigger"]     = GetAxisName(controller.AxisMapping.LeftTrigger.DestinationAxis);
            _iniData["Axis Deadzone"]["Left_Trigger"] = Convert.ToString((int)controller.AxisMapping.LeftTrigger.DeadZone);
            _iniData["Axis Inverse"]["Left_Trigger"]  = Convert.ToString(controller.AxisMapping.LeftTrigger.IsReversed);
            _iniData["Radius Scale"]["Left_Trigger"]  = Convert.ToString(controller.AxisMapping.LeftTrigger.RadiusScale, CultureInfo.InvariantCulture);

            _iniData["Axis"]["Right_Trigger"]          = Convert.ToString(controller.AxisMapping.RightTrigger.SourceAxis);
            _iniData["Axis Type"]["Right_Trigger"]     = GetAxisName(controller.AxisMapping.RightTrigger.DestinationAxis);
            _iniData["Axis Deadzone"]["Right_Trigger"] = Convert.ToString((int)controller.AxisMapping.RightTrigger.DeadZone);
            _iniData["Axis Inverse"]["Right_Trigger"]  = Convert.ToString(controller.AxisMapping.RightTrigger.IsReversed);
            _iniData["Radius Scale"]["Right_Trigger"]  = Convert.ToString(controller.AxisMapping.RightTrigger.RadiusScale, CultureInfo.InvariantCulture);
            #endregion

            // Write config.
            _iniParser.WriteFile(configLocation, _iniData);
        }
Example #4
0
        /// <summary>
        /// Parses a Mod Loader Controller Configuration.
        /// </summary>
        /// <param name="configLocation">States the location of the controller configuration.</param>
        /// <param name="controller">A DirectInput or XInput controller instance.</param>
        public static ControllerCommon.IController ParseConfig(string configLocation, ControllerCommon.IController controller)
        {
            // Store input mappings before parsing
            ControllerCommon.InputMappings inputMappings;

            // Try parsing input mappings.
            try
            {
                inputMappings =
                    File.Exists(configLocation)
                        ? JsonConvert.DeserializeObject <ControllerCommon.InputMappings>(File.ReadAllText(configLocation))
                        : new ControllerCommon.InputMappings();
            }
            catch { inputMappings = new ControllerCommon.InputMappings(); }

            // Reassign input mappings.
            controller.InputMappings = inputMappings;

            // Return controller.
            return(controller);
        }