Skip to content

Commit db9b96f

Browse files
committed
Added NetworkedVar sync on spawn
1 parent cb8f10e commit db9b96f

File tree

4 files changed

+22
-13
lines changed

4 files changed

+22
-13
lines changed

MLAPI/MonoBehaviours/Core/NetworkedObject.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -288,17 +288,20 @@ internal static void NetworkedVarPrepareSend()
288288
NetworkedBehaviours[i].NetworkedVarUpdate();
289289
}
290290
}
291-
292-
internal void WriteNetworkedVarData(BitWriter writer)
291+
292+
internal void WriteNetworkedVarData(BitWriter writer, uint clientId)
293293
{
294294
for (int i = 0; i < childNetworkedBehaviours.Count; i++)
295295
{
296296
childNetworkedBehaviours[i].NetworkedVarInit();
297297
if (childNetworkedBehaviours[i].networkedVarFields.Count == 0)
298298
continue;
299-
writer.WriteUShort(GetOrderIndex(childNetworkedBehaviours[i])); //Write the behaviourId
300299
for (int j = 0; j < childNetworkedBehaviours[i].networkedVarFields.Count; j++)
301-
childNetworkedBehaviours[i].networkedVarFields[j].WriteField(writer);
300+
{
301+
bool canClientRead = childNetworkedBehaviours[i].networkedVarFields[j].CanClientRead(clientId);
302+
writer.WriteBool(canClientRead);
303+
if (canClientRead) childNetworkedBehaviours[i].networkedVarFields[j].WriteField(writer);
304+
}
302305
}
303306
}
304307

@@ -309,9 +312,10 @@ internal void SetNetworkedVarData(BitReader reader)
309312
childNetworkedBehaviours[i].NetworkedVarInit();
310313
if (childNetworkedBehaviours[i].networkedVarFields.Count == 0)
311314
continue;
312-
NetworkedBehaviour behaviour = GetBehaviourAtOrderIndex(reader.ReadUShort());
313315
for (int j = 0; j < childNetworkedBehaviours[i].networkedVarFields.Count; j++)
314-
childNetworkedBehaviours[i].networkedVarFields[j].ReadField(reader);
316+
{
317+
if (reader.ReadBool()) childNetworkedBehaviours[i].networkedVarFields[j].ReadField(reader);
318+
}
315319
}
316320
}
317321

MLAPI/MonoBehaviours/Core/NetworkingManager.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ public void StartHost(Vector3? pos = null, Quaternion? rot = null, int prefabId
583583
if (NetworkConfig.HandleObjectSpawning)
584584
{
585585
prefabId = prefabId == -1 ? NetworkConfig.NetworkPrefabIds[NetworkConfig.PlayerPrefabName] : prefabId;
586-
SpawnManager.CreateSpawnedObject(prefabId, 0, hostClientId, true, pos.GetValueOrDefault(), rot.GetValueOrDefault(), null, false, false);
586+
SpawnManager.CreateSpawnedObject(prefabId, 0, hostClientId, true, pos.GetValueOrDefault(), rot.GetValueOrDefault(), null, false, false, false);
587587
}
588588

589589
SpawnSceneObjects();
@@ -1124,7 +1124,7 @@ internal void HandleApproval(uint clientId, int prefabId, bool approved, Vector3
11241124
if(NetworkConfig.HandleObjectSpawning)
11251125
{
11261126
prefabId = prefabId == -1 ? NetworkConfig.NetworkPrefabIds[NetworkConfig.PlayerPrefabName] : prefabId;
1127-
netObject = SpawnManager.CreateSpawnedObject(prefabId, 0, clientId, true, position, rotation, null, false, false);
1127+
netObject = SpawnManager.CreateSpawnedObject(prefabId, 0, clientId, true, position, rotation, null, false, false, false);
11281128
ConnectedClients[clientId].PlayerObject = netObject;
11291129
}
11301130

@@ -1186,6 +1186,7 @@ internal void HandleApproval(uint clientId, int prefabId, bool approved, Vector3
11861186

11871187
if (pair.Value.observers.Contains(clientId))
11881188
pair.Value.WriteFormattedSyncedVarData(writer);
1189+
pair.Value.WriteNetworkedVarData(writer, clientId);
11891190
}
11901191
}
11911192
InternalMessageHandler.Send(clientId, "MLAPI_CONNECTION_APPROVED", "MLAPI_INTERNAL", writer, null, null, null, true);
@@ -1224,6 +1225,7 @@ internal void HandleApproval(uint clientId, int prefabId, bool approved, Vector3
12241225

12251226
if (ConnectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().observers.Contains(clientPair.Key))
12261227
ConnectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().WriteFormattedSyncedVarData(writer);
1228+
ConnectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().WriteNetworkedVarData(writer, clientPair.Key);
12271229
}
12281230
else
12291231
{

MLAPI/NetworkingManagerComponents/Core/InternalMessageHandler.Receive.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ internal static void HandleConnectionApproved(uint clientId, BitReader reader, i
105105
float zRot = reader.ReadFloat();
106106

107107
NetworkedObject netObject = SpawnManager.CreateSpawnedObject(prefabId, networkId, ownerId, isPlayerObject,
108-
new Vector3(xPos, yPos, zPos), Quaternion.Euler(xRot, yRot, zRot), reader, visible, false);
108+
new Vector3(xPos, yPos, zPos), Quaternion.Euler(xRot, yRot, zRot), reader, visible, false, true);
109109
netObject.SetLocalVisibility(visible);
110110
netObject.sceneObject = sceneObject;
111111
netObject.gameObject.SetActive(isActive);
@@ -149,7 +149,7 @@ internal static void HandleAddObject(uint clientId, BitReader reader, int channe
149149
netManager.ConnectedClientsList.Add(netManager.ConnectedClients[ownerId]);
150150
}
151151
NetworkedObject netObject = SpawnManager.CreateSpawnedObject(prefabId, networkId, ownerId, isPlayerObject,
152-
new Vector3(xPos, yPos, zPos), Quaternion.Euler(xRot, yRot, zRot), reader, visible, hasPayload);
152+
new Vector3(xPos, yPos, zPos), Quaternion.Euler(xRot, yRot, zRot), reader, visible, hasPayload, true);
153153

154154
netObject.SetLocalVisibility(visible);
155155
netObject.sceneObject = sceneObject;
@@ -274,7 +274,7 @@ internal static void HandleAddObjects(uint clientId, BitReader reader, int chann
274274
netManager.ConnectedClientsList.Add(netManager.ConnectedClients[ownerId]);
275275
}
276276
NetworkedObject netObject = SpawnManager.CreateSpawnedObject(prefabId, networkId, ownerId, isPlayerObject,
277-
new Vector3(xPos, yPos, zPos), Quaternion.Euler(xRot, yRot, zRot), reader, visible, false);
277+
new Vector3(xPos, yPos, zPos), Quaternion.Euler(xRot, yRot, zRot), reader, visible, false, true);
278278
netObject.SetLocalVisibility(visible);
279279
netObject.sceneObject = sceneObject;
280280

MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ internal static void FlushSceneObjects()
147147
}
148148
*/
149149

150-
internal static NetworkedObject CreateSpawnedObject(int networkedPrefabId, uint networkId, uint owner, bool playerObject, Vector3 position, Quaternion rotation, BitReader reader, bool readSyncedVar, bool readPayload)
150+
internal static NetworkedObject CreateSpawnedObject(int networkedPrefabId, uint networkId, uint owner, bool playerObject, Vector3 position, Quaternion rotation, BitReader reader, bool readSyncedVar, bool readPayload, bool readNetworkedVar)
151151
{
152152
if (!netManager.NetworkConfig.NetworkPrefabNames.ContainsKey(networkedPrefabId))
153153
{
@@ -164,6 +164,7 @@ internal static NetworkedObject CreateSpawnedObject(int networkedPrefabId, uint
164164
}
165165

166166
if (readSyncedVar) netObject.SetFormattedSyncedVarData(reader);
167+
if (readNetworkedVar) netObject.SetNetworkedVarData(reader);
167168

168169
netObject.NetworkedPrefabName = netManager.NetworkConfig.NetworkPrefabNames[networkedPrefabId];
169170
netObject.isSpawned = true;
@@ -179,7 +180,7 @@ internal static NetworkedObject CreateSpawnedObject(int networkedPrefabId, uint
179180
netObject.transform.rotation = rotation;
180181
spawnedObjects.Add(netObject.NetworkId, netObject);
181182
if (playerObject) NetworkingManager.singleton.ConnectedClients[owner].PlayerObject = netObject;
182-
netObject.InvokeBehaviourNetworkSpawn(reader);
183+
netObject.InvokeBehaviourNetworkSpawn(readPayload ? reader : null);
183184
return netObject;
184185
}
185186

@@ -267,6 +268,7 @@ internal static void SpawnPlayerObject(NetworkedObject netObject, uint clientId,
267268

268269
if (netObject.observers.Contains(client.Key))
269270
netObject.WriteFormattedSyncedVarData(writer);
271+
netObject.WriteNetworkedVarData(writer, client.Key);
270272

271273
if (payload != null) writer.WriteWriter(payload);
272274

@@ -336,6 +338,7 @@ internal static void SpawnObject(NetworkedObject netObject, uint? clientOwnerId
336338

337339
if (netObject.observers.Contains(client.Key))
338340
netObject.WriteFormattedSyncedVarData(writer);
341+
netObject.WriteNetworkedVarData(writer, client.Key);
339342

340343
if (payload != null) writer.WriteWriter(payload);
341344

0 commit comments

Comments
 (0)