diff options
Diffstat (limited to 'Ryujinx.HLE/OsHle/SystemStateMgr.cs')
| -rw-r--r-- | Ryujinx.HLE/OsHle/SystemStateMgr.cs | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/Ryujinx.HLE/OsHle/SystemStateMgr.cs b/Ryujinx.HLE/OsHle/SystemStateMgr.cs new file mode 100644 index 00000000..e78082c4 --- /dev/null +++ b/Ryujinx.HLE/OsHle/SystemStateMgr.cs @@ -0,0 +1,84 @@ +using System; + +namespace Ryujinx.HLE.OsHle +{ + 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" + }; + + internal static string[] AudioOutputs = new string[] + { + "AudioTvOutput", + "AudioStereoJackOutput", + "AudioBuiltInSpeakerOutput" + }; + + internal long DesiredLanguageCode { get; private set; } + + internal string ActiveAudioOutput { get; private set; } + + public SystemStateMgr() + { + SetLanguage(SystemLanguage.AmericanEnglish); + + SetAudioOutputAsBuiltInSpeaker(); + } + + public void SetLanguage(SystemLanguage Language) + { + DesiredLanguageCode = GetLanguageCode((int)Language); + } + + public void SetAudioOutputAsTv() + { + ActiveAudioOutput = AudioOutputs[0]; + } + + public void SetAudioOutputAsStereoJack() + { + ActiveAudioOutput = AudioOutputs[1]; + } + + public void SetAudioOutputAsBuiltInSpeaker() + { + ActiveAudioOutput = AudioOutputs[2]; + } + + 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 |
