mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 02:50:32 +00:00
syntax
This commit is contained in:
parent
10e34488e2
commit
10296e0586
@ -960,61 +960,6 @@ internal void SerializeAll(bool initialState, NetworkWriter ownerWriter, Network
|
||||
}
|
||||
}
|
||||
|
||||
// get cached serialization for this tick (or serialize if none yet)
|
||||
// IMPORTANT: int tick avoids floating point inaccuracy over days/weeks
|
||||
internal NetworkIdentitySerialization GetSerializationAtTick(int tick)
|
||||
{
|
||||
// only rebuild serialization once per tick. reuse otherwise.
|
||||
// except for tests, where Time.frameCount never increases.
|
||||
// so during tests, we always rebuild.
|
||||
// (otherwise [SyncVar] changes would never be serialized in tests)
|
||||
//
|
||||
// NOTE: != instead of < because int.max+1 overflows at some point.
|
||||
if (lastSerialization.tick != tick
|
||||
#if UNITY_EDITOR
|
||||
|| !Application.isPlaying
|
||||
#endif
|
||||
)
|
||||
{
|
||||
// reset
|
||||
lastSerialization.ownerWriter.Position = 0;
|
||||
lastSerialization.observersWriter.Position = 0;
|
||||
|
||||
// serialize
|
||||
SerializeAll(false,
|
||||
lastSerialization.ownerWriter,
|
||||
lastSerialization.observersWriter);
|
||||
|
||||
// clear dirty bits for the components that we serialized.
|
||||
// previously we did this in NetworkServer.BroadcastToConnection
|
||||
// for every connection, for every entity.
|
||||
// but we only serialize each entity once, right here in this
|
||||
// 'lastSerialization.tick != tick' scope.
|
||||
// so only do it once.
|
||||
//
|
||||
// NOTE: not in Serializell as that should only do one
|
||||
// thing: serialize data.
|
||||
//
|
||||
//
|
||||
// NOTE: DO NOT clear ALL component's dirty bits, because
|
||||
// components can have different syncIntervals and we
|
||||
// don't want to reset dirty bits for the ones that were
|
||||
// not synced yet.
|
||||
//
|
||||
// NOTE: this used to be very important to avoid ever growing
|
||||
// SyncList changes if they had no observers, but we've
|
||||
// added SyncObject.isRecording since.
|
||||
ClearDirtyComponentsDirtyBits();
|
||||
|
||||
// set tick
|
||||
lastSerialization.tick = tick;
|
||||
//Debug.Log($"{name} (netId={netId}) serialized for tick={tickTimeStamp}");
|
||||
}
|
||||
|
||||
// return it
|
||||
return lastSerialization;
|
||||
}
|
||||
|
||||
void Deserialize(NetworkBehaviour comp, NetworkReader reader, bool initialState)
|
||||
{
|
||||
// read header as 4 bytes and calculate this chunk's start+end
|
||||
@ -1078,6 +1023,61 @@ internal void DeserializeAll(NetworkReader reader, bool initialState)
|
||||
}
|
||||
}
|
||||
|
||||
// get cached serialization for this tick (or serialize if none yet)
|
||||
// IMPORTANT: int tick avoids floating point inaccuracy over days/weeks
|
||||
internal NetworkIdentitySerialization GetSerializationAtTick(int tick)
|
||||
{
|
||||
// only rebuild serialization once per tick. reuse otherwise.
|
||||
// except for tests, where Time.frameCount never increases.
|
||||
// so during tests, we always rebuild.
|
||||
// (otherwise [SyncVar] changes would never be serialized in tests)
|
||||
//
|
||||
// NOTE: != instead of < because int.max+1 overflows at some point.
|
||||
if (lastSerialization.tick != tick
|
||||
#if UNITY_EDITOR
|
||||
|| !Application.isPlaying
|
||||
#endif
|
||||
)
|
||||
{
|
||||
// reset
|
||||
lastSerialization.ownerWriter.Position = 0;
|
||||
lastSerialization.observersWriter.Position = 0;
|
||||
|
||||
// serialize
|
||||
SerializeAll(false,
|
||||
lastSerialization.ownerWriter,
|
||||
lastSerialization.observersWriter);
|
||||
|
||||
// clear dirty bits for the components that we serialized.
|
||||
// previously we did this in NetworkServer.BroadcastToConnection
|
||||
// for every connection, for every entity.
|
||||
// but we only serialize each entity once, right here in this
|
||||
// 'lastSerialization.tick != tick' scope.
|
||||
// so only do it once.
|
||||
//
|
||||
// NOTE: not in Serializell as that should only do one
|
||||
// thing: serialize data.
|
||||
//
|
||||
//
|
||||
// NOTE: DO NOT clear ALL component's dirty bits, because
|
||||
// components can have different syncIntervals and we
|
||||
// don't want to reset dirty bits for the ones that were
|
||||
// not synced yet.
|
||||
//
|
||||
// NOTE: this used to be very important to avoid ever growing
|
||||
// SyncList changes if they had no observers, but we've
|
||||
// added SyncObject.isRecording since.
|
||||
ClearDirtyComponentsDirtyBits();
|
||||
|
||||
// set tick
|
||||
lastSerialization.tick = tick;
|
||||
//Debug.Log($"{name} (netId={netId}) serialized for tick={tickTimeStamp}");
|
||||
}
|
||||
|
||||
// return it
|
||||
return lastSerialization;
|
||||
}
|
||||
|
||||
// Helper function to handle Command/Rpc
|
||||
internal void HandleRemoteCall(byte componentIndex, ushort functionHash, RemoteCallType remoteCallType, NetworkReader reader, NetworkConnectionToClient senderConnection = null)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user