Skip to content

Commit 4419a14

Browse files
committed
Fixed observer status in Add_Object
1 parent b3e4596 commit 4419a14

File tree

2 files changed

+82
-66
lines changed

2 files changed

+82
-66
lines changed

MLAPI/MonoBehaviours/Core/NetworkingManager.cs

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,33 +1157,39 @@ internal void HandleApproval(uint clientId, bool approved, Vector3 position, Qua
11571157

11581158
//Inform old clients of the new player
11591159

1160-
using (BitWriter writer = BitWriter.Get())
1160+
foreach (var clientPair in connectedClients)
11611161
{
1162-
if (NetworkConfig.HandleObjectSpawning)
1163-
{
1164-
writer.WriteBool(true);
1165-
writer.WriteUInt(connectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().NetworkId);
1166-
writer.WriteUInt(clientId);
1167-
writer.WriteInt(-1);
1168-
writer.WriteBool(false);
1169-
writer.WriteBool(connectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().observers.Contains(clientId));
1170-
1171-
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.position.x);
1172-
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.position.y);
1173-
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.position.z);
1174-
1175-
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.x);
1176-
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.y);
1177-
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.z);
1178-
1179-
connectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().WriteFormattedSyncedVarData(writer);
1180-
}
1181-
else
1162+
if (clientPair.Key == clientId)
1163+
continue; //The new client.
1164+
1165+
using (BitWriter writer = BitWriter.Get())
11821166
{
1183-
writer.WriteUInt(clientId);
1184-
}
1167+
if (NetworkConfig.HandleObjectSpawning)
1168+
{
1169+
writer.WriteBool(true);
1170+
writer.WriteUInt(connectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().NetworkId);
1171+
writer.WriteUInt(clientId);
1172+
writer.WriteInt(-1);
1173+
writer.WriteBool(false);
1174+
writer.WriteBool(connectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().observers.Contains(clientPair.Key));
1175+
1176+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.position.x);
1177+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.position.y);
1178+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.position.z);
1179+
1180+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.x);
1181+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.y);
1182+
writer.WriteFloat(connectedClients[clientId].PlayerObject.transform.rotation.eulerAngles.z);
1183+
1184+
connectedClients[clientId].PlayerObject.GetComponent<NetworkedObject>().WriteFormattedSyncedVarData(writer);
1185+
}
1186+
else
1187+
{
1188+
writer.WriteUInt(clientId);
1189+
}
11851190

1186-
InternalMessageHandler.Send("MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", writer, clientId, null);
1191+
InternalMessageHandler.Send(clientPair.Key, "MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", writer, null);
1192+
}
11871193
}
11881194
}
11891195
else

MLAPI/NetworkingManagerComponents/Core/SpawnManager.cs

Lines changed: 52 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using MLAPI.MonoBehaviours.Core;
1+
using MLAPI.Data;
2+
using MLAPI.MonoBehaviours.Core;
23
using MLAPI.NetworkingManagerComponents.Binary;
34
using System.Collections.Generic;
45
using UnityEngine;
@@ -112,36 +113,41 @@ internal static void FlushSceneObjects()
112113
if (!NetworkingManager.singleton.isServer)
113114
return;
114115

115-
List<NetworkedObject> sceneObjectsToSync = new List<NetworkedObject>();
116-
foreach (KeyValuePair<uint, NetworkedObject> pair in SpawnManager.spawnedObjects)
116+
//This loop is bad. For each client, we loop over every object twice.
117+
foreach (KeyValuePair<uint, NetworkedClient> client in netManager.connectedClients)
117118
{
118-
if (pair.Value.sceneObject == null || pair.Value.sceneObject == true)
119-
sceneObjectsToSync.Add(pair.Value);
120-
}
121-
122-
using (BitWriter writer = BitWriter.Get())
123-
{
124-
writer.WriteUShort((ushort)sceneObjectsToSync.Count);
119+
int sceneObjects = 0;
120+
foreach (var netObject in SpawnManager.spawnedObjects)
121+
if (netObject.Value.sceneObject == null || netObject.Value.sceneObject == true)
122+
sceneObjects++;
125123

126-
for (int i = 0; i < sceneObjectsToSync.Count; i++)
124+
using (BitWriter writer = BitWriter.Get())
127125
{
128-
writer.WriteBool(false); //isLocalPlayer
129-
writer.WriteUInt(sceneObjectsToSync[i].NetworkId);
130-
writer.WriteUInt(sceneObjectsToSync[i].OwnerClientId);
131-
writer.WriteInt(NetworkingManager.singleton.NetworkConfig.NetworkPrefabIds[sceneObjectsToSync[i].NetworkedPrefabName]);
132-
writer.WriteBool(sceneObjectsToSync[i].sceneObject == null ? true : sceneObjectsToSync[i].sceneObject.Value);
133-
134-
writer.WriteFloat(sceneObjectsToSync[i].transform.position.x);
135-
writer.WriteFloat(sceneObjectsToSync[i].transform.position.y);
136-
writer.WriteFloat(sceneObjectsToSync[i].transform.position.z);
137-
138-
writer.WriteFloat(sceneObjectsToSync[i].transform.rotation.eulerAngles.x);
139-
writer.WriteFloat(sceneObjectsToSync[i].transform.rotation.eulerAngles.y);
140-
writer.WriteFloat(sceneObjectsToSync[i].transform.rotation.eulerAngles.z);
141-
142-
sceneObjectsToSync[i].WriteFormattedSyncedVarData(writer);
126+
writer.WriteUShort((ushort)sceneObjects);
127+
foreach (var netObject in SpawnManager.spawnedObjects)
128+
{
129+
if (netObject.Value.sceneObject == null || netObject.Value.sceneObject == true)
130+
{
131+
writer.WriteBool(false); //isLocalPlayer
132+
writer.WriteUInt(netObject.Value.NetworkId);
133+
writer.WriteUInt(netObject.Value.OwnerClientId);
134+
writer.WriteInt(NetworkingManager.singleton.NetworkConfig.NetworkPrefabIds[netObject.Value.NetworkedPrefabName]);
135+
writer.WriteBool(netObject.Value.sceneObject == null ? true : netObject.Value.sceneObject.Value);
136+
writer.WriteBool(netObject.Value.observers.Contains(client.Key));
137+
138+
writer.WriteFloat(netObject.Value.transform.position.x);
139+
writer.WriteFloat(netObject.Value.transform.position.y);
140+
writer.WriteFloat(netObject.Value.transform.position.z);
141+
142+
writer.WriteFloat(netObject.Value.transform.rotation.eulerAngles.x);
143+
writer.WriteFloat(netObject.Value.transform.rotation.eulerAngles.y);
144+
writer.WriteFloat(netObject.Value.transform.rotation.eulerAngles.z);
145+
146+
netObject.Value.WriteFormattedSyncedVarData(writer);
147+
}
148+
}
149+
InternalMessageHandler.Send(client.Key, "MLAPI_ADD_OBJECTS", "MLAPI_INTERNAL", writer, null);
143150
}
144-
InternalMessageHandler.Send("MLAPI_ADD_OBJECTS", "MLAPI_INTERNAL", writer, null);
145151
}
146152
}
147153

@@ -209,25 +215,29 @@ internal static void SpawnPrefabIndexServer(NetworkedObject netObject, uint? cli
209215
netObject.ownerClientId = clientOwnerId.Value;
210216
NetworkingManager.singleton.connectedClients[clientOwnerId.Value].OwnedObjects.Add(netObject);
211217
}
212-
using (BitWriter writer = BitWriter.Get())
213-
{
214-
writer.WriteBool(false);
215-
writer.WriteUInt(netObject.NetworkId);
216-
writer.WriteUInt(netObject.OwnerClientId);
217-
writer.WriteInt(netManager.NetworkConfig.NetworkPrefabIds[netObject.NetworkedPrefabName]);
218-
writer.WriteBool(netObject.sceneObject == null ? true : netObject.sceneObject.Value);
218+
foreach (var client in netManager.connectedClients)
219+
{
220+
using (BitWriter writer = BitWriter.Get())
221+
{
222+
writer.WriteBool(false);
223+
writer.WriteUInt(netObject.NetworkId);
224+
writer.WriteUInt(netObject.OwnerClientId);
225+
writer.WriteInt(netManager.NetworkConfig.NetworkPrefabIds[netObject.NetworkedPrefabName]);
226+
writer.WriteBool(netObject.sceneObject == null ? true : netObject.sceneObject.Value);
227+
writer.WriteBool(netObject.observers.Contains(client.Key));
219228

220-
writer.WriteFloat(netObject.transform.position.x);
221-
writer.WriteFloat(netObject.transform.position.y);
222-
writer.WriteFloat(netObject.transform.position.z);
229+
writer.WriteFloat(netObject.transform.position.x);
230+
writer.WriteFloat(netObject.transform.position.y);
231+
writer.WriteFloat(netObject.transform.position.z);
223232

224-
writer.WriteFloat(netObject.transform.rotation.eulerAngles.x);
225-
writer.WriteFloat(netObject.transform.rotation.eulerAngles.y);
226-
writer.WriteFloat(netObject.transform.rotation.eulerAngles.z);
233+
writer.WriteFloat(netObject.transform.rotation.eulerAngles.x);
234+
writer.WriteFloat(netObject.transform.rotation.eulerAngles.y);
235+
writer.WriteFloat(netObject.transform.rotation.eulerAngles.z);
227236

228-
netObject.WriteFormattedSyncedVarData(writer);
237+
netObject.WriteFormattedSyncedVarData(writer);
229238

230-
InternalMessageHandler.Send("MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", writer, null);
239+
InternalMessageHandler.Send(client.Key, "MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", writer, null);
240+
}
231241
}
232242
}
233243

0 commit comments

Comments
 (0)