Config.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. using Ryujinx.UI.Input;
  2. using Ryujinx.HLE.Logging;
  3. using System;
  4. using System.Globalization;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Reflection;
  9. namespace Ryujinx
  10. {
  11. public static class Config
  12. {
  13. public static JoyConKeyboard JoyConKeyboard { get; private set; }
  14. public static JoyConController JoyConController { get; private set; }
  15. public static float GamePadDeadzone { get; private set; }
  16. public static bool GamePadEnable { get; private set; }
  17. public static int GamePadIndex { get; private set; }
  18. public static float GamePadTriggerThreshold { get; private set; }
  19. public static void Read(Logger Log)
  20. {
  21. string IniFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
  22. string IniPath = Path.Combine(IniFolder, "Ryujinx.conf");
  23. IniParser Parser = new IniParser(IniPath);
  24. AOptimizations.DisableMemoryChecks = !Convert.ToBoolean(Parser.Value("Enable_Memory_Checks"));
  25. Log.SetEnable(LogLevel.Debug, Convert.ToBoolean(Parser.Value("Logging_Enable_Debug")));
  26. Log.SetEnable(LogLevel.Stub, Convert.ToBoolean(Parser.Value("Logging_Enable_Stub")));
  27. Log.SetEnable(LogLevel.Info, Convert.ToBoolean(Parser.Value("Logging_Enable_Info")));
  28. Log.SetEnable(LogLevel.Warning, Convert.ToBoolean(Parser.Value("Logging_Enable_Warn")));
  29. Log.SetEnable(LogLevel.Error, Convert.ToBoolean(Parser.Value("Logging_Enable_Error")));
  30. GamePadEnable = Convert.ToBoolean(Parser.Value("GamePad_Enable"));
  31. GamePadIndex = Convert.ToInt32 (Parser.Value("GamePad_Index"));
  32. GamePadDeadzone = (float)Convert.ToDouble (Parser.Value("GamePad_Deadzone"), CultureInfo.InvariantCulture);
  33. GamePadTriggerThreshold = (float)Convert.ToDouble (Parser.Value("GamePad_Trigger_Threshold"), CultureInfo.InvariantCulture);
  34. string[] FilteredLogClasses = Parser.Value("Logging_Filtered_Classes").Split(',', StringSplitOptions.RemoveEmptyEntries);
  35. //When the classes are specified on the list, we only
  36. //enable the classes that are on the list.
  37. //So, first disable everything, then enable
  38. //the classes that the user added to the list.
  39. if (FilteredLogClasses.Length > 0)
  40. {
  41. foreach (LogClass Class in Enum.GetValues(typeof(LogClass)))
  42. {
  43. Log.SetEnable(Class, false);
  44. }
  45. }
  46. foreach (string LogClass in FilteredLogClasses)
  47. {
  48. if (!string.IsNullOrEmpty(LogClass.Trim()))
  49. {
  50. foreach (LogClass Class in Enum.GetValues(typeof(LogClass)))
  51. {
  52. if (Class.ToString().ToLower().Contains(LogClass.Trim().ToLower()))
  53. {
  54. Log.SetEnable(Class, true);
  55. }
  56. }
  57. }
  58. }
  59. JoyConKeyboard = new JoyConKeyboard
  60. {
  61. Left = new JoyConKeyboardLeft
  62. {
  63. StickUp = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_Stick_Up")),
  64. StickDown = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_Stick_Down")),
  65. StickLeft = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_Stick_Left")),
  66. StickRight = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_Stick_Right")),
  67. StickButton = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_Stick_Button")),
  68. DPadUp = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_DPad_Up")),
  69. DPadDown = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_DPad_Down")),
  70. DPadLeft = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_DPad_Left")),
  71. DPadRight = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_DPad_Right")),
  72. ButtonMinus = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_Button_Minus")),
  73. ButtonL = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_Button_L")),
  74. ButtonZL = Convert.ToInt16(Parser.Value("Controls_Left_JoyConKeyboard_Button_ZL"))
  75. },
  76. Right = new JoyConKeyboardRight
  77. {
  78. StickUp = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Stick_Up")),
  79. StickDown = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Stick_Down")),
  80. StickLeft = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Stick_Left")),
  81. StickRight = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Stick_Right")),
  82. StickButton = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Stick_Button")),
  83. ButtonA = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Button_A")),
  84. ButtonB = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Button_B")),
  85. ButtonX = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Button_X")),
  86. ButtonY = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Button_Y")),
  87. ButtonPlus = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Button_Plus")),
  88. ButtonR = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Button_R")),
  89. ButtonZR = Convert.ToInt16(Parser.Value("Controls_Right_JoyConKeyboard_Button_ZR"))
  90. }
  91. };
  92. JoyConController = new JoyConController
  93. {
  94. Left = new JoyConControllerLeft
  95. {
  96. Stick = Parser.Value("Controls_Left_JoyConController_Stick"),
  97. StickButton = Parser.Value("Controls_Left_JoyConController_Stick_Button"),
  98. DPadUp = Parser.Value("Controls_Left_JoyConController_DPad_Up"),
  99. DPadDown = Parser.Value("Controls_Left_JoyConController_DPad_Down"),
  100. DPadLeft = Parser.Value("Controls_Left_JoyConController_DPad_Left"),
  101. DPadRight = Parser.Value("Controls_Left_JoyConController_DPad_Right"),
  102. ButtonMinus = Parser.Value("Controls_Left_JoyConController_Button_Minus"),
  103. ButtonL = Parser.Value("Controls_Left_JoyConController_Button_L"),
  104. ButtonZL = Parser.Value("Controls_Left_JoyConController_Button_ZL")
  105. },
  106. Right = new JoyConControllerRight
  107. {
  108. Stick = Parser.Value("Controls_Right_JoyConController_Stick"),
  109. StickButton = Parser.Value("Controls_Right_JoyConController_Stick_Button"),
  110. ButtonA = Parser.Value("Controls_Right_JoyConController_Button_A"),
  111. ButtonB = Parser.Value("Controls_Right_JoyConController_Button_B"),
  112. ButtonX = Parser.Value("Controls_Right_JoyConController_Button_X"),
  113. ButtonY = Parser.Value("Controls_Right_JoyConController_Button_Y"),
  114. ButtonPlus = Parser.Value("Controls_Right_JoyConController_Button_Plus"),
  115. ButtonR = Parser.Value("Controls_Right_JoyConController_Button_R"),
  116. ButtonZR = Parser.Value("Controls_Right_JoyConController_Button_ZR")
  117. }
  118. };
  119. }
  120. }
  121. //https://stackoverflow.com/a/37772571
  122. public class IniParser
  123. {
  124. private readonly Dictionary<string, string> Values;
  125. public IniParser(string Path)
  126. {
  127. Values = File.ReadLines(Path)
  128. .Where(Line => !string.IsNullOrWhiteSpace(Line) && !Line.StartsWith('#'))
  129. .Select(Line => Line.Split('=', 2))
  130. .ToDictionary(Parts => Parts[0].Trim(), Parts => Parts.Length > 1 ? Parts[1].Trim() : null);
  131. }
  132. public string Value(string Name)
  133. {
  134. return Values.TryGetValue(Name, out string Value) ? Value : null;
  135. }
  136. }
  137. }