/// <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); }
/// <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); }
/// <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); }
/// <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); }