public void OnNetworkInstantiatedServer(string type, string owner, NetDataWriter writer) { netStates.Clear(); netIDs.Clear(); netStates.Add(SerializeNetworkState(writer)); netIDs.Add(ID); foreach (NetComponent nComponent in Owner.GetAllComponents <NetComponent>()) { // Skip NetworkIdentity component since it's already processed. if (nComponent is NetworkIdentity) { continue; } nComponent.Setup(CurrentNetworkID, owner == "SERVER"); NetworkObjects.TryAdd(CurrentNetworkID, nComponent); CurrentNetworkID++; if (nComponent is INetPersistable netPersist) { netStates.Add(NetLogicHelper.SerializePersistable(netPersist)); } else { netStates.Add(null); // Padding for deserialization. } netIDs.Add(nComponent.ID); } }
public void OnNetworkInstantiatedClient(string type, bool isOwner, NetDataReader reader) { InstantiateData buffer = new InstantiateData(reader); List <byte[]> netStates = buffer.NetStates; uint[] netIDs = buffer.NetIDs; // Handle any NetComponents on the GameObject. int index = 1; foreach (NetComponent nComponent in Owner.GetAllComponents <NetComponent>()) { // Skip NetworkIdentity component since it's already processed. if (nComponent is NetworkIdentity) { continue; } nComponent.Setup(netIDs[index], isOwner); if (nComponent is INetPersistable persist && netStates[index] != null) { NetLogicHelper.RestorePersistable(persist, netStates[index]); } NetworkObjects.TryAdd(netIDs[index], nComponent); index++; } }
public byte[] GetBufferedData(NetDataWriter writer) { netStates.Clear(); netIDs.Clear(); netStates.Add(SerializeNetworkState(writer)); netIDs.Add(ID); foreach (NetComponent nComponent in Owner.GetAllComponents <NetComponent>()) { if (nComponent is INetPersistable netPersist) { netStates.Add(NetLogicHelper.SerializePersistable(netPersist)); } else { netStates.Add(null); // Padding for deserialization. } netIDs.Add(nComponent.ID); } InstantiateData buffer = new InstantiateData(netStates, netIDs.ToArray()); return(buffer.Serialize(new NetDataWriter())); }