/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs

https://github.com/Ryujinx/Ryujinx · C# · 106 lines · 83 code · 22 blank · 1 comment · 2 complexity · a8cd5d77d564bddb6b1616782dba8915 MD5 · raw file

  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 long DesiredKeyboardLayout { get; private set; }
  29. internal SystemLanguage DesiredSystemLanguage { get; private set; }
  30. internal long DesiredLanguageCode { get; private set; }
  31. internal uint DesiredRegionCode { get; private set; }
  32. public TitleLanguage DesiredTitleLanguage { get; private set; }
  33. internal string ActiveAudioOutput { get; private set; }
  34. public bool DockedMode { get; set; }
  35. public ColorSet ThemeColor { get; set; }
  36. public bool InstallContents { get; set; }
  37. public AccountUtils Account { get; private set; }
  38. public SystemStateMgr()
  39. {
  40. Account = new AccountUtils();
  41. Account.AddUser(DefaultUserId, "Player");
  42. Account.OpenUser(DefaultUserId);
  43. // TODO: Let user specify.
  44. DesiredKeyboardLayout = (long)KeyboardLayout.Default;
  45. }
  46. public void SetLanguage(SystemLanguage language)
  47. {
  48. DesiredSystemLanguage = language;
  49. DesiredLanguageCode = GetLanguageCode((int)DesiredSystemLanguage);
  50. switch (language)
  51. {
  52. case SystemLanguage.Taiwanese:
  53. case SystemLanguage.TraditionalChinese:
  54. DesiredTitleLanguage = TitleLanguage.Taiwanese;
  55. break;
  56. case SystemLanguage.Chinese:
  57. case SystemLanguage.SimplifiedChinese:
  58. DesiredTitleLanguage = TitleLanguage.Chinese;
  59. break;
  60. default:
  61. DesiredTitleLanguage = Enum.Parse<TitleLanguage>(Enum.GetName(typeof(SystemLanguage), language));
  62. break;
  63. }
  64. }
  65. public void SetRegion(RegionCode region)
  66. {
  67. DesiredRegionCode = (uint)region;
  68. }
  69. internal static long GetLanguageCode(int index)
  70. {
  71. if ((uint)index >= LanguageCodes.Length)
  72. {
  73. throw new ArgumentOutOfRangeException(nameof(index));
  74. }
  75. long code = 0;
  76. int shift = 0;
  77. foreach (char chr in LanguageCodes[index])
  78. {
  79. code |= (long)(byte)chr << shift++ * 8;
  80. }
  81. return code;
  82. }
  83. }
  84. }