mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-01-01 03:32:38 +00:00
40 lines
1.2 KiB
C#
40 lines
1.2 KiB
C#
using Mono.Cecil;
|
|
using Mono.Cecil.Cil;
|
|
|
|
namespace Mirror.Weaver
|
|
{
|
|
public static class SyncObjectInitializer
|
|
{
|
|
// generates code like:
|
|
// this.InitSyncObject(m_sizes);
|
|
public static void GenerateSyncObjectInitializer(ILProcessor worker, WeaverTypes weaverTypes, FieldDefinition fd)
|
|
{
|
|
// register syncobject in network behaviour
|
|
worker.Emit(OpCodes.Ldarg_0);
|
|
worker.Emit(OpCodes.Ldarg_0);
|
|
worker.Emit(OpCodes.Ldfld, fd);
|
|
worker.Emit(OpCodes.Call, weaverTypes.InitSyncObjectReference);
|
|
}
|
|
|
|
public static bool ImplementsSyncObject(TypeReference typeRef)
|
|
{
|
|
try
|
|
{
|
|
// value types cant inherit from SyncObject
|
|
if (typeRef.IsValueType)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return typeRef.Resolve().IsDerivedFrom<SyncObject>();
|
|
}
|
|
catch
|
|
{
|
|
// sometimes this will fail if we reference a weird library that can't be resolved, so we just swallow that exception and return false
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|