Config.cs 5.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using Ryujinx.Core.Input;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Reflection;
  7. namespace Ryujinx.Core
  8. {
  9. public static class Config
  10. {
  11. public static bool LoggingEnableInfo { get; private set; }
  12. public static bool LoggingEnableTrace { get; private set; }
  13. public static bool LoggingEnableDebug { get; private set; }
  14. public static bool LoggingEnableWarn { get; private set; }
  15. public static bool LoggingEnableError { get; private set; }
  16. public static bool LoggingEnableFatal { get; private set; }
  17. public static bool LoggingEnableIpc { get; private set; }
  18. public static bool LoggingEnableLogFile { get; private set; }
  19. public static JoyCon FakeJoyCon { get; private set; }
  20. public static void Read()
  21. {
  22. var iniFolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
  23. var iniPath = Path.Combine(iniFolder, "Ryujinx.conf");
  24. IniParser Parser = new IniParser(iniPath);
  25. LoggingEnableInfo = Convert.ToBoolean(Parser.Value("Logging_Enable_Info"));
  26. LoggingEnableTrace = Convert.ToBoolean(Parser.Value("Logging_Enable_Trace"));
  27. LoggingEnableDebug = Convert.ToBoolean(Parser.Value("Logging_Enable_Debug"));
  28. LoggingEnableWarn = Convert.ToBoolean(Parser.Value("Logging_Enable_Warn"));
  29. LoggingEnableError = Convert.ToBoolean(Parser.Value("Logging_Enable_Error"));
  30. LoggingEnableFatal = Convert.ToBoolean(Parser.Value("Logging_Enable_Fatal"));
  31. LoggingEnableIpc = Convert.ToBoolean(Parser.Value("Logging_Enable_Ipc"));
  32. LoggingEnableLogFile = Convert.ToBoolean(Parser.Value("Logging_Enable_LogFile"));
  33. FakeJoyCon = new JoyCon
  34. {
  35. Left = new JoyConLeft
  36. {
  37. StickUp = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Up")),
  38. StickDown = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Down")),
  39. StickLeft = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Left")),
  40. StickRight = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Right")),
  41. StickButton = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Stick_Button")),
  42. DPadUp = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Up")),
  43. DPadDown = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Down")),
  44. DPadLeft = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Left")),
  45. DPadRight = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_DPad_Right")),
  46. ButtonMinus = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Button_Minus")),
  47. ButtonL = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Button_L")),
  48. ButtonZL = Convert.ToInt16(Parser.Value("Controls_Left_FakeJoycon_Button_ZL"))
  49. },
  50. Right = new JoyConRight
  51. {
  52. StickUp = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Up")),
  53. StickDown = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Down")),
  54. StickLeft = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Left")),
  55. StickRight = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Right")),
  56. StickButton = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Stick_Button")),
  57. ButtonA = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_A")),
  58. ButtonB = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_B")),
  59. ButtonX = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_X")),
  60. ButtonY = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_Y")),
  61. ButtonPlus = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_Plus")),
  62. ButtonR = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_R")),
  63. ButtonZR = Convert.ToInt16(Parser.Value("Controls_Right_FakeJoycon_Button_ZR"))
  64. }
  65. };
  66. }
  67. }
  68. // https://stackoverflow.com/a/37772571
  69. public class IniParser
  70. {
  71. private readonly Dictionary<string, string> Values;
  72. public IniParser(string Path)
  73. {
  74. Values = File.ReadLines(Path)
  75. .Where(Line => !string.IsNullOrWhiteSpace(Line) && !Line.StartsWith('#'))
  76. .Select(Line => Line.Split('=', 2))
  77. .ToDictionary(Parts => Parts[0].Trim(), Parts => Parts.Length > 1 ? Parts[1].Trim() : null);
  78. }
  79. /// <summary>
  80. /// Gets the setting value for the requested setting <see cref="Name"/>.
  81. /// </summary>
  82. /// <param name="Name">Setting Name</param>
  83. /// <param name="defaultValue">Default value of the setting</param>
  84. public string Value(string Name, string defaultValue = null)
  85. {
  86. return Values.TryGetValue(Name, out var value) ? value : defaultValue;
  87. }
  88. }
  89. }