SyncObjectInitializer.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using Mono.CecilX;
  2. using Mono.CecilX.Cil;
  3. namespace Mirror.Weaver
  4. {
  5. public static class SyncObjectInitializer
  6. {
  7. // generates code like:
  8. // this.InitSyncObject(m_sizes);
  9. public static void GenerateSyncObjectInitializer(ILProcessor worker, WeaverTypes weaverTypes, FieldDefinition fd)
  10. {
  11. // register syncobject in network behaviour
  12. worker.Emit(OpCodes.Ldarg_0);
  13. worker.Emit(OpCodes.Ldarg_0);
  14. worker.Emit(OpCodes.Ldfld, fd);
  15. worker.Emit(OpCodes.Call, weaverTypes.InitSyncObjectReference);
  16. }
  17. public static bool ImplementsSyncObject(TypeReference typeRef)
  18. {
  19. try
  20. {
  21. // value types cant inherit from SyncObject
  22. if (typeRef.IsValueType)
  23. {
  24. return false;
  25. }
  26. return typeRef.Resolve().IsDerivedFrom<SyncObject>();
  27. }
  28. catch
  29. {
  30. // sometimes this will fail if we reference a weird library that can't be resolved, so we just swallow that exception and return false
  31. }
  32. return false;
  33. }
  34. }
  35. }