aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs')
-rw-r--r--src/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs90
1 files changed, 90 insertions, 0 deletions
diff --git a/src/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs b/src/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs
new file mode 100644
index 00000000..6627700f
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs
@@ -0,0 +1,90 @@
+using System;
+
+namespace Ryujinx.HLE.HOS.SystemState
+{
+ public class SystemStateMgr
+ {
+ internal static string[] LanguageCodes = new string[]
+ {
+ "ja",
+ "en-US",
+ "fr",
+ "de",
+ "it",
+ "es",
+ "zh-CN",
+ "ko",
+ "nl",
+ "pt",
+ "ru",
+ "zh-TW",
+ "en-GB",
+ "fr-CA",
+ "es-419",
+ "zh-Hans",
+ "zh-Hant",
+ "pt-BR"
+ };
+
+ internal long DesiredKeyboardLayout { get; private set; }
+
+ internal SystemLanguage DesiredSystemLanguage { get; private set; }
+
+ internal long DesiredLanguageCode { get; private set; }
+
+ internal uint DesiredRegionCode { get; private set; }
+
+ public TitleLanguage DesiredTitleLanguage { get; private set; }
+
+ public bool DockedMode { get; set; }
+
+ public ColorSet ThemeColor { get; set; }
+
+ public string DeviceNickName { get; set; }
+
+ public SystemStateMgr()
+ {
+ // TODO: Let user specify fields.
+ DesiredKeyboardLayout = (long)KeyboardLayout.Default;
+ DeviceNickName = "Ryujinx's Switch";
+ }
+
+ public void SetLanguage(SystemLanguage language)
+ {
+ DesiredSystemLanguage = language;
+ DesiredLanguageCode = GetLanguageCode((int)DesiredSystemLanguage);
+
+ DesiredTitleLanguage = language switch
+ {
+ SystemLanguage.Taiwanese or
+ SystemLanguage.TraditionalChinese => TitleLanguage.TraditionalChinese,
+ SystemLanguage.Chinese or
+ SystemLanguage.SimplifiedChinese => TitleLanguage.SimplifiedChinese,
+ _ => Enum.Parse<TitleLanguage>(Enum.GetName<SystemLanguage>(language)),
+ };
+ }
+
+ public void SetRegion(RegionCode region)
+ {
+ DesiredRegionCode = (uint)region;
+ }
+
+ internal static long GetLanguageCode(int index)
+ {
+ if ((uint)index >= LanguageCodes.Length)
+ {
+ throw new ArgumentOutOfRangeException(nameof(index));
+ }
+
+ long code = 0;
+ int shift = 0;
+
+ foreach (char chr in LanguageCodes[index])
+ {
+ code |= (long)(byte)chr << shift++ * 8;
+ }
+
+ return code;
+ }
+ }
+} \ No newline at end of file