OS.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Linq;
  3. using System.Runtime.CompilerServices;
  4. namespace GodotSharpTools.Utils
  5. {
  6. public static class OS
  7. {
  8. [MethodImpl(MethodImplOptions.InternalCall)]
  9. extern static string GetPlatformName();
  10. const string HaikuName = "Haiku";
  11. const string OSXName = "OSX";
  12. const string ServerName = "Server";
  13. const string UWPName = "UWP";
  14. const string WindowsName = "Windows";
  15. const string X11Name = "X11";
  16. public static bool IsHaiku()
  17. {
  18. return HaikuName.Equals(GetPlatformName(), StringComparison.OrdinalIgnoreCase);
  19. }
  20. public static bool IsOSX()
  21. {
  22. return OSXName.Equals(GetPlatformName(), StringComparison.OrdinalIgnoreCase);
  23. }
  24. public static bool IsServer()
  25. {
  26. return ServerName.Equals(GetPlatformName(), StringComparison.OrdinalIgnoreCase);
  27. }
  28. public static bool IsUWP()
  29. {
  30. return UWPName.Equals(GetPlatformName(), StringComparison.OrdinalIgnoreCase);
  31. }
  32. public static bool IsWindows()
  33. {
  34. return WindowsName.Equals(GetPlatformName(), StringComparison.OrdinalIgnoreCase);
  35. }
  36. public static bool IsX11()
  37. {
  38. return X11Name.Equals(GetPlatformName(), StringComparison.OrdinalIgnoreCase);
  39. }
  40. static bool? IsUnixCache = null;
  41. static readonly string[] UnixPlatforms = new string[] { HaikuName, OSXName, ServerName, X11Name };
  42. public static bool IsUnix()
  43. {
  44. if (IsUnixCache.HasValue)
  45. return IsUnixCache.Value;
  46. string osName = GetPlatformName();
  47. IsUnixCache = UnixPlatforms.Any(p => p.Equals(osName, StringComparison.OrdinalIgnoreCase));
  48. return IsUnixCache.Value;
  49. }
  50. }
  51. }