SystemStateMgr.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using Ryujinx.HLE.HOS.Services.Account.Acc;
  2. using System;
  3. namespace Ryujinx.HLE.HOS.SystemState
  4. {
  5. public class SystemStateMgr
  6. {
  7. public static readonly UserId DefaultUserId = new UserId("00000000000000010000000000000000");
  8. internal static string[] LanguageCodes = new string[]
  9. {
  10. "ja",
  11. "en-US",
  12. "fr",
  13. "de",
  14. "it",
  15. "es",
  16. "zh-CN",
  17. "ko",
  18. "nl",
  19. "pt",
  20. "ru",
  21. "zh-TW",
  22. "en-GB",
  23. "fr-CA",
  24. "es-419",
  25. "zh-Hans",
  26. "zh-Hant"
  27. };
  28. internal static string[] AudioOutputs = new string[]
  29. {
  30. "AudioTvOutput",
  31. "AudioStereoJackOutput",
  32. "AudioBuiltInSpeakerOutput"
  33. };
  34. internal long DesiredKeyboardLayout { get; private set; }
  35. internal SystemLanguage DesiredSystemLanguage { get; private set; }
  36. internal long DesiredLanguageCode { get; private set; }
  37. internal uint DesiredRegionCode { get; private set; }
  38. public TitleLanguage DesiredTitleLanguage { get; private set; }
  39. internal string ActiveAudioOutput { get; private set; }
  40. public bool DockedMode { get; set; }
  41. public ColorSet ThemeColor { get; set; }
  42. public bool InstallContents { get; set; }
  43. public AccountUtils Account { get; private set; }
  44. public SystemStateMgr()
  45. {
  46. SetAudioOutputAsBuiltInSpeaker();
  47. Account = new AccountUtils();
  48. Account.AddUser(DefaultUserId, "Player");
  49. Account.OpenUser(DefaultUserId);
  50. // TODO: Let user specify.
  51. DesiredKeyboardLayout = (long)KeyboardLayout.Default;
  52. }
  53. public void SetLanguage(SystemLanguage language)
  54. {
  55. DesiredSystemLanguage = language;
  56. DesiredLanguageCode = GetLanguageCode((int)DesiredSystemLanguage);
  57. switch (language)
  58. {
  59. case SystemLanguage.Taiwanese:
  60. case SystemLanguage.TraditionalChinese:
  61. DesiredTitleLanguage = TitleLanguage.Taiwanese;
  62. break;
  63. case SystemLanguage.Chinese:
  64. case SystemLanguage.SimplifiedChinese:
  65. DesiredTitleLanguage = TitleLanguage.Chinese;
  66. break;
  67. default:
  68. DesiredTitleLanguage = Enum.Parse<TitleLanguage>(Enum.GetName(typeof(SystemLanguage), language));
  69. break;
  70. }
  71. }
  72. public void SetRegion(RegionCode region)
  73. {
  74. DesiredRegionCode = (uint)region;
  75. }
  76. public void SetAudioOutputAsTv()
  77. {
  78. ActiveAudioOutput = AudioOutputs[0];
  79. }
  80. public void SetAudioOutputAsStereoJack()
  81. {
  82. ActiveAudioOutput = AudioOutputs[1];
  83. }
  84. public void SetAudioOutputAsBuiltInSpeaker()
  85. {
  86. ActiveAudioOutput = AudioOutputs[2];
  87. }
  88. internal static long GetLanguageCode(int index)
  89. {
  90. if ((uint)index >= LanguageCodes.Length)
  91. {
  92. throw new ArgumentOutOfRangeException(nameof(index));
  93. }
  94. long code = 0;
  95. int shift = 0;
  96. foreach (char chr in LanguageCodes[index])
  97. {
  98. code |= (long)(byte)chr << shift++ * 8;
  99. }
  100. return code;
  101. }
  102. }
  103. }