SystemStateMgr.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using Ryujinx.HLE.Loaders.Npdm;
  2. using System;
  3. namespace Ryujinx.HLE.OsHle
  4. {
  5. public class SystemStateMgr
  6. {
  7. internal static Npdm TitleMetadata { get; set; }
  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 DesiredLanguageCode { get; private set; }
  35. internal string ActiveAudioOutput { get; private set; }
  36. public SystemStateMgr()
  37. {
  38. SetLanguage(SystemLanguage.AmericanEnglish);
  39. SetAudioOutputAsBuiltInSpeaker();
  40. }
  41. public void SetLanguage(SystemLanguage Language)
  42. {
  43. DesiredLanguageCode = GetLanguageCode((int)Language);
  44. }
  45. public void SetAudioOutputAsTv()
  46. {
  47. ActiveAudioOutput = AudioOutputs[0];
  48. }
  49. public void SetAudioOutputAsStereoJack()
  50. {
  51. ActiveAudioOutput = AudioOutputs[1];
  52. }
  53. public void SetAudioOutputAsBuiltInSpeaker()
  54. {
  55. ActiveAudioOutput = AudioOutputs[2];
  56. }
  57. internal static long GetLanguageCode(int Index)
  58. {
  59. if ((uint)Index >= LanguageCodes.Length)
  60. {
  61. throw new ArgumentOutOfRangeException(nameof(Index));
  62. }
  63. long Code = 0;
  64. int Shift = 0;
  65. foreach (char Chr in LanguageCodes[Index])
  66. {
  67. Code |= (long)(byte)Chr << Shift++ * 8;
  68. }
  69. return Code;
  70. }
  71. }
  72. }