diff options
Diffstat (limited to 'Assembly_Firstpass/Steamworks/CGameID.cs')
-rw-r--r-- | Assembly_Firstpass/Steamworks/CGameID.cs | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/Assembly_Firstpass/Steamworks/CGameID.cs b/Assembly_Firstpass/Steamworks/CGameID.cs new file mode 100644 index 0000000..7e8063e --- /dev/null +++ b/Assembly_Firstpass/Steamworks/CGameID.cs @@ -0,0 +1,170 @@ +using System; + +namespace Steamworks; + +[Serializable] +public struct CGameID : IEquatable<CGameID>, IComparable<CGameID> +{ + public enum EGameIDType + { + k_EGameIDTypeApp, + k_EGameIDTypeGameMod, + k_EGameIDTypeShortcut, + k_EGameIDTypeP2P + } + + public ulong m_GameID; + + public CGameID(ulong GameID) + { + m_GameID = GameID; + } + + public CGameID(AppId_t nAppID) + { + m_GameID = 0uL; + SetAppID(nAppID); + } + + public CGameID(AppId_t nAppID, uint nModID) + { + m_GameID = 0uL; + SetAppID(nAppID); + SetType(EGameIDType.k_EGameIDTypeGameMod); + SetModID(nModID); + } + + public bool IsSteamApp() + { + return Type() == EGameIDType.k_EGameIDTypeApp; + } + + public bool IsMod() + { + return Type() == EGameIDType.k_EGameIDTypeGameMod; + } + + public bool IsShortcut() + { + return Type() == EGameIDType.k_EGameIDTypeShortcut; + } + + public bool IsP2PFile() + { + return Type() == EGameIDType.k_EGameIDTypeP2P; + } + + public AppId_t AppID() + { + return new AppId_t((uint)(m_GameID & 0xFFFFFF)); + } + + public EGameIDType Type() + { + return (EGameIDType)((m_GameID >> 24) & 0xFF); + } + + public uint ModID() + { + return (uint)((m_GameID >> 32) & 0xFFFFFFFFu); + } + + public bool IsValid() + { + switch (Type()) + { + case EGameIDType.k_EGameIDTypeApp: + return AppID() != AppId_t.Invalid; + case EGameIDType.k_EGameIDTypeGameMod: + if (AppID() != AppId_t.Invalid) + { + return (ModID() & 0x80000000u) != 0; + } + return false; + case EGameIDType.k_EGameIDTypeShortcut: + return (ModID() & 0x80000000u) != 0; + case EGameIDType.k_EGameIDTypeP2P: + if (AppID() == AppId_t.Invalid) + { + return (ModID() & 0x80000000u) != 0; + } + return false; + default: + return false; + } + } + + public void Reset() + { + m_GameID = 0uL; + } + + public void Set(ulong GameID) + { + m_GameID = GameID; + } + + private void SetAppID(AppId_t other) + { + m_GameID = (m_GameID & 0xFFFFFFFFFF000000uL) | ((ulong)(uint)other & 0xFFFFFFuL); + } + + private void SetType(EGameIDType other) + { + m_GameID = (m_GameID & 0xFFFFFFFF00FFFFFFuL) | (((ulong)other & 0xFFuL) << 24); + } + + private void SetModID(uint other) + { + m_GameID = (m_GameID & 0xFFFFFFFFu) | (((ulong)other & 0xFFFFFFFFuL) << 32); + } + + public override string ToString() + { + return m_GameID.ToString(); + } + + public override bool Equals(object other) + { + if (other is CGameID) + { + return this == (CGameID)other; + } + return false; + } + + public override int GetHashCode() + { + return m_GameID.GetHashCode(); + } + + public static bool operator ==(CGameID x, CGameID y) + { + return x.m_GameID == y.m_GameID; + } + + public static bool operator !=(CGameID x, CGameID y) + { + return !(x == y); + } + + public static explicit operator CGameID(ulong value) + { + return new CGameID(value); + } + + public static explicit operator ulong(CGameID that) + { + return that.m_GameID; + } + + public bool Equals(CGameID other) + { + return m_GameID == other.m_GameID; + } + + public int CompareTo(CGameID other) + { + return m_GameID.CompareTo(other.m_GameID); + } +} |