Config.cs 8.5 KB

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