// Make custom writer(private) private static void MakeCustomSyncWriter(NetworkIdentity behaviorOwner, Type targetType, Action <NetworkWriter> customSyncObject, Action <NetworkWriter> customSyncVar, NetworkWriter owner, NetworkWriter observer) { ulong dirty = 0ul; ulong dirty_o = 0ul; NetworkBehaviour behaviour = null; for (int i = 0; i < behaviorOwner.NetworkBehaviours.Length; i++) { behaviour = behaviorOwner.NetworkBehaviours[i]; if (behaviour.GetType() == targetType) { dirty |= 1UL << i; if (behaviour.syncMode == SyncMode.Observers) { dirty_o |= 1UL << i; } } } owner.WritePackedUInt64(dirty); observer.WritePackedUInt64(dirty & dirty_o); int position = owner.Position; owner.WriteInt32(0); int position2 = owner.Position; if (customSyncObject != null) { customSyncObject.Invoke(owner); } else { behaviour.SerializeObjectsDelta(owner); } customSyncVar?.Invoke(owner); int position3 = owner.Position; owner.Position = position; owner.WriteInt32(position3 - position2); owner.Position = position3; if (dirty_o != 0ul) { ArraySegment <byte> arraySegment = owner.ToArraySegment(); observer.WriteBytes(arraySegment.Array, position, owner.Position - position); } }
void Start() { controller = GetComponentInParent <StationController>(); if (controller == null) { controller = GetComponentInParent <GeneratorController>(); } if (controller == null) { controller = GetComponentInParent <VillageController>(); } type = controller.GetType(); buttonUI = GameObject.Find("/Game/UI/EnterStationControl"); }
public void ParseNetworkBehaviour(NetworkBehaviour nb, string nbname) { var nbtype = nb.GetType(); foreach (var f in nbtype.GetFields()) { if (f.IsDefined(typeof(SyncVarAttribute), true)) { syncvar_nb_so[f.Name + "@" + nbname] = new PropertyAccess(nbtype, "Network" + f.Name); } } foreach (var m in nbtype.GetMethods()) { if (m.Name.StartsWith("CallRpc")) { clientrpc_nb_so[m.Name.Substring(4) + "@" + nbname] = new MethodAccess(nbtype, m.Name); } } }
public RPCReference(NetworkBehaviour targetBehaviour) { m_NetworkBehaviour = targetBehaviour; rpcDefinition = RPCTypeDefinition.Get(targetBehaviour.GetType()); rpcDelegates = rpcDefinition.CreateTargetedDelegates(m_NetworkBehaviour); }