/ src / Ryujinx.HLE / HOS / SystemState / SystemStateMgr.cs
SystemStateMgr.cs
 1  using System;
 2  
 3  namespace Ryujinx.HLE.HOS.SystemState
 4  {
 5      public class SystemStateMgr
 6      {
 7          internal static string[] LanguageCodes = {
 8              "ja",
 9              "en-US",
10              "fr",
11              "de",
12              "it",
13              "es",
14              "zh-CN",
15              "ko",
16              "nl",
17              "pt",
18              "ru",
19              "zh-TW",
20              "en-GB",
21              "fr-CA",
22              "es-419",
23              "zh-Hans",
24              "zh-Hant",
25              "pt-BR",
26          };
27  
28          internal long DesiredKeyboardLayout { get; private set; }
29  
30          internal SystemLanguage DesiredSystemLanguage { get; private set; }
31  
32          internal long DesiredLanguageCode { get; private set; }
33  
34          internal uint DesiredRegionCode { get; private set; }
35  
36          public TitleLanguage DesiredTitleLanguage { get; private set; }
37  
38          public bool DockedMode { get; set; }
39  
40          public ColorSet ThemeColor { get; set; }
41  
42          public string DeviceNickName { get; set; }
43  
44          public SystemStateMgr()
45          {
46              // TODO: Let user specify fields.
47              DesiredKeyboardLayout = (long)KeyboardLayout.Default;
48              DeviceNickName = "Ryujinx's Switch";
49          }
50  
51          public void SetLanguage(SystemLanguage language)
52          {
53              DesiredSystemLanguage = language;
54              DesiredLanguageCode = GetLanguageCode((int)DesiredSystemLanguage);
55  
56              DesiredTitleLanguage = language switch
57              {
58                  SystemLanguage.Taiwanese or
59                  SystemLanguage.TraditionalChinese => TitleLanguage.TraditionalChinese,
60                  SystemLanguage.Chinese or
61                  SystemLanguage.SimplifiedChinese => TitleLanguage.SimplifiedChinese,
62                  _ => Enum.Parse<TitleLanguage>(Enum.GetName<SystemLanguage>(language)),
63              };
64          }
65  
66          public void SetRegion(RegionCode region)
67          {
68              DesiredRegionCode = (uint)region;
69          }
70  
71          internal static long GetLanguageCode(int index)
72          {
73              if ((uint)index >= LanguageCodes.Length)
74              {
75                  throw new ArgumentOutOfRangeException(nameof(index));
76              }
77  
78              long code = 0;
79              int shift = 0;
80  
81              foreach (char chr in LanguageCodes[index])
82              {
83                  code |= (long)(byte)chr << shift++ * 8;
84              }
85  
86              return code;
87          }
88      }
89  }