Files
LuaCsForBarotraumaEP/Libraries/Facepunch.Steamworks/SteamNative/SteamNative.Platform.cs
2019-03-18 20:39:27 +02:00

114 lines
3.6 KiB
C#

using System;
using System.IO;
using System.Runtime.InteropServices;
namespace Facepunch.Steamworks
{
public enum OperatingSystem
{
Unset,
Windows,
Linux,
macOS,
}
public enum Architecture
{
Unset,
x86,
x64
}
}
namespace SteamNative
{
internal static partial class Platform
{
private static Facepunch.Steamworks.OperatingSystem _os;
private static Facepunch.Steamworks.Architecture _arch;
public static Facepunch.Steamworks.OperatingSystem RunningPlatform()
{
switch (Environment.OSVersion.Platform)
{
case PlatformID.Unix:
// macOS sometimes reports to .NET as Unix. Fix is to check against macOS root folders
if (Directory.Exists("/Applications") && Directory.Exists("/System") && Directory.Exists("/Users") && Directory.Exists("/Volumes"))
return Facepunch.Steamworks.OperatingSystem.macOS;
else
return Facepunch.Steamworks.OperatingSystem.Linux;
case PlatformID.MacOSX:
return Facepunch.Steamworks.OperatingSystem.macOS;
default:
return Facepunch.Steamworks.OperatingSystem.Windows;
}
}
internal static Facepunch.Steamworks.OperatingSystem Os
{
get
{
//
// Work out our platform
//
if ( _os == Facepunch.Steamworks.OperatingSystem.Unset )
{
_os = Facepunch.Steamworks.OperatingSystem.Windows;
#if !NET_CORE
// Fixed Bet
_os = RunningPlatform();
#endif
}
return _os;
}
set
{
_os = value;
}
}
internal static Facepunch.Steamworks.Architecture Arch
{
get
{
//
// Work out whether we're 64bit or 32bit
//
if ( _arch == Facepunch.Steamworks.Architecture.Unset )
{
if ( IntPtr.Size == 8 )
_arch = Facepunch.Steamworks.Architecture.x64;
else if ( IntPtr.Size == 4 )
_arch = Facepunch.Steamworks.Architecture.x86;
else
throw new System.Exception( "Unsupported Architecture!" );
}
return _arch;
}
set
{
_arch = value;
}
}
public static bool IsWindows { get { return Os == Facepunch.Steamworks.OperatingSystem.Windows; } }
public static bool IsWindows64 { get { return Arch == Facepunch.Steamworks.Architecture.x64 && IsWindows; } }
public static bool IsWindows32 { get { return Arch == Facepunch.Steamworks.Architecture.x86 && IsWindows; } }
public static bool IsLinux64 { get { return Arch == Facepunch.Steamworks.Architecture.x64 && Os == Facepunch.Steamworks.OperatingSystem.Linux; } }
public static bool IsLinux32 { get { return Arch == Facepunch.Steamworks.Architecture.x86 && Os == Facepunch.Steamworks.OperatingSystem.Linux; } }
public static bool IsOsx { get { return Os == Facepunch.Steamworks.OperatingSystem.macOS; } }
/// <summary>
/// We're only Pack = 8 on Windows
/// </summary>
public static bool PackSmall { get { return Os != Facepunch.Steamworks.OperatingSystem.Windows; } }
}
}