r2mods/ilspy_dump/ror2_csproj/RoR2/PlatformID.cs

275 lines
5.0 KiB
C#

using System;
using System.Globalization;
using Epic.OnlineServices;
namespace RoR2;
public struct PlatformID : IEquatable<PlatformID>
{
public enum EAccountType
{
k_EAccountTypeInvalid,
k_EAccountTypeIndividual,
k_EAccountTypeMultiseat,
k_EAccountTypeGameServer,
k_EAccountTypeAnonGameServer,
k_EAccountTypePending,
k_EAccountTypeContentServer,
k_EAccountTypeClan,
k_EAccountTypeChat,
k_EAccountTypeConsoleUser,
k_EAccountTypeAnonUser,
k_EAccountTypeMax
}
public enum EUniverse
{
k_EUniverseInvalid,
k_EUniversePublic,
k_EUniverseBeta,
k_EUniverseInternal,
k_EUniverseDev,
k_EUniverseMax
}
public ulong ID;
public ulong ID2;
public string stringID;
public static readonly PlatformID nil = new PlatformID(0uL, string.Empty);
public object value
{
get
{
if (ID != 0L)
{
return ID;
}
if (stringID != string.Empty)
{
return stringID;
}
return null;
}
}
public bool isValid => isSteam ^ isEGS;
public bool isSteam => ID != 0;
public bool isEGS => !string.IsNullOrEmpty(stringID);
public ProductUserId productUserID => ProductUserId.FromString(stringID);
public uint accountId => GetBitField(0, 32);
public uint accountInstance => GetBitField(32, 20);
public EAccountType accountType => (EAccountType)GetBitField(52, 4);
public EUniverse universe => (EUniverse)GetBitField(56, 8);
public bool isLobby => accountType == EAccountType.k_EAccountTypeChat;
public PlatformID(ulong id)
{
ID = id;
ID2 = ID;
stringID = string.Empty;
}
public PlatformID(string stringid)
{
ID = 0uL;
ID2 = ID;
stringID = stringid;
}
public PlatformID(ulong id, string stringid)
{
ID = id;
ID2 = ID;
stringID = stringid;
}
public static explicit operator PlatformID(ulong id)
{
return new PlatformID(id);
}
public static bool operator ==(PlatformID first, PlatformID second)
{
return first.Compare(second);
}
public static bool operator !=(PlatformID first, PlatformID second)
{
return !first.Compare(second);
}
public static bool operator ==(PlatformID first, ulong second)
{
return first.ID == second;
}
public static bool operator !=(PlatformID first, ulong second)
{
return first.ID != second;
}
public override string ToString()
{
if (value == null)
{
return "";
}
return value.ToString();
}
public bool IsDefault()
{
return ID == 0;
}
public bool Equals(PlatformID other)
{
return Compare(other);
}
public bool Compare(PlatformID other)
{
if (value is ulong)
{
if (other.value is ulong)
{
return (ulong)value == (ulong)other.value;
}
return false;
}
if (value is string)
{
if (other.value is string)
{
return (string)value == (string)other.value;
}
return false;
}
if (value == null)
{
return other.value == null;
}
return false;
}
public override int GetHashCode()
{
if (value != null)
{
return value.GetHashCode();
}
return 0;
}
public PlatformID(ProductUserId id)
{
stringID = id.ToString();
ID = 0uL;
ID2 = 0uL;
}
public static bool TryParse(string str, out PlatformID result)
{
if (!string.IsNullOrEmpty(str))
{
return ParseFromString(str, out result);
}
result = nil;
return false;
}
private static bool ParseFromString(string str, out PlatformID result)
{
if (str[0] <= '9')
{
ulong result2;
bool flag = TextSerialization.TryParseInvariant(str, out result2);
if (flag)
{
result = new PlatformID(flag ? result2 : 0);
return flag;
}
}
if (PlatformSystems.EgsToggleConVar.value == 1 && str.Length <= 32)
{
ProductUserId productUserId = ProductUserId.FromString(str);
if (productUserId != null)
{
result = new PlatformID(productUserId);
return true;
}
}
result = default(PlatformID);
return false;
}
private uint GetBitField(int bitOffset, int bitCount)
{
uint num = uint.MaxValue >> 32 - bitCount;
return (uint)(int)(ID >> bitOffset) & num;
}
public string ToSteamID()
{
uint num = accountId;
return string.Format(CultureInfo.InvariantCulture, "STEAM_{0}:{1}:{2}", (uint)universe, num & 1u, num >> 1);
}
public string ToCommunityID()
{
char c = 'I';
switch (accountType)
{
case EAccountType.k_EAccountTypeInvalid:
c = 'I';
break;
case EAccountType.k_EAccountTypeIndividual:
c = 'U';
break;
case EAccountType.k_EAccountTypeMultiseat:
c = 'M';
break;
case EAccountType.k_EAccountTypeGameServer:
c = 'G';
break;
case EAccountType.k_EAccountTypeAnonGameServer:
c = 'A';
break;
case EAccountType.k_EAccountTypePending:
c = 'P';
break;
case EAccountType.k_EAccountTypeContentServer:
c = 'C';
break;
case EAccountType.k_EAccountTypeClan:
c = 'g';
break;
case EAccountType.k_EAccountTypeChat:
c = 'T';
break;
case EAccountType.k_EAccountTypeConsoleUser:
c = 'I';
break;
case EAccountType.k_EAccountTypeAnonUser:
c = 'a';
break;
case EAccountType.k_EAccountTypeMax:
c = 'I';
break;
}
return string.Format(CultureInfo.InvariantCulture, "[{0}:{1}:{2}]", c, 1, accountId);
}
}