Config.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using Ryujinx.HLE.Input;
  2. using Ryujinx.HLE.Logging;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Reflection;
  8. namespace Ryujinx
  9. {
  10. public static class Config
  11. {
  12. public static JoyCon FakeJoyCon { get; private set; }
  13. public static void Read(Logger Log)
  14. {
  15. string IniFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
  16. string IniPath = Path.Combine(IniFolder, "Ryujinx.conf");
  17. IniParser Parser = new IniParser(IniPath);
  18. AOptimizations.DisableMemoryChecks = !Convert.ToBoolean(Parser.Value("Enable_Memory_Checks"));
  19. Log.SetEnable(LogLevel.Debug, Convert.ToBoolean(Parser.Value("Logging_Enable_Debug")));
  20. Log.SetEnable(LogLevel.Stub, Convert.ToBoolean(Parser.Value("Logging_Enable_Stub")));
  21. Log.SetEnable(LogLevel.Info, Convert.ToBoolean(Parser.Value("Logging_Enable_Info")));
  22. Log.SetEnable(LogLevel.Warning, Convert.ToBoolean(Parser.Value("Logging_Enable_Warn")));
  23. Log.SetEnable(LogLevel.Error, Convert.ToBoolean(Parser.Value("Logging_Enable_Error")));
  24. string[] FilteredLogClasses = Parser.Value("Logging_Filtered_Classes").Split(',', StringSplitOptions.RemoveEmptyEntries);
  25. //When the classes are specified on the list, we only
  26. //enable the classes that are on the list.
  27. //So, first disable everything, then enable
  28. //the classes that the user added to the list.
  29. if (FilteredLogClasses.Length > 0)
  30. {
  31. foreach (LogClass Class in Enum.GetValues(typeof(LogClass)))
  32. {
  33. Log.SetEnable(Class, false);
  34. }
  35. }
  36. foreach (string LogClass in FilteredLogClasses)
  37. {
  38. if (!string.IsNullOrEmpty(LogClass.Trim()))
  39. {
  40. foreach (LogClass Class in Enum.GetValues(typeof(LogClass)))
  41. {
  42. if (Class.ToString().ToLower().Contains(LogClass.Trim().ToLower()))
  43. {
  44. Log.SetEnable(Class, true);
  45. }
  46. }
  47. }
  48. }
  49. FakeJoyCon = new JoyCon
  50. {
  51. Left = new JoyConLeft
  52. {
  53. StickUp = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Up")),
  54. StickDown = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Down")),
  55. StickLeft = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Left")),
  56. StickRight = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Right")),
  57. StickButton = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Button")),
  58. DPadUp = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Up")),
  59. DPadDown = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Down")),
  60. DPadLeft = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Left")),
  61. DPadRight = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Right")),
  62. ButtonMinus = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Button_Minus")),
  63. ButtonL = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Button_L")),
  64. ButtonZL = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Button_ZL"))
  65. },
  66. Right = new JoyConRight
  67. {
  68. StickUp = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Up")),
  69. StickDown = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Down")),
  70. StickLeft = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Left")),
  71. StickRight = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Right")),
  72. StickButton = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Button")),
  73. ButtonA = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_A")),
  74. ButtonB = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_B")),
  75. ButtonX = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_X")),
  76. ButtonY = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_Y")),
  77. ButtonPlus = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_Plus")),
  78. ButtonR = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_R")),
  79. ButtonZR = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_ZR"))
  80. }
  81. };
  82. }
  83. }
  84. // https://stackoverflow.com/a/37772571
  85. public class IniParser
  86. {
  87. private readonly Dictionary<string, string> Values;
  88. public IniParser(string Path)
  89. {
  90. Values = File.ReadLines(Path)
  91. .Where(Line => !string.IsNullOrWhiteSpace(Line) && !Line.StartsWith('#'))
  92. .Select(Line => Line.Split('=', 2))
  93. .ToDictionary(Parts => Parts[0].Trim(), Parts => Parts.Length > 1 ? Parts[1].Trim() : null);
  94. }
  95. public string Value(string Name)
  96. {
  97. return Values.TryGetValue(Name, out string Value) ? Value : null;
  98. }
  99. }
  100. }