|
1 |
| -using MLAPI.MonoBehaviours.Core; |
| 1 | +using MLAPI.Data; |
| 2 | +using MLAPI.MonoBehaviours.Core; |
2 | 3 | using MLAPI.NetworkingManagerComponents.Binary;
|
3 | 4 | using System.Collections.Generic;
|
4 | 5 | using UnityEngine;
|
@@ -112,36 +113,41 @@ internal static void FlushSceneObjects()
|
112 | 113 | if (!NetworkingManager.singleton.isServer)
|
113 | 114 | return;
|
114 | 115 |
|
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) |
117 | 118 | {
|
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++; |
125 | 123 |
|
126 |
| - for (int i = 0; i < sceneObjectsToSync.Count; i++) |
| 124 | + using (BitWriter writer = BitWriter.Get()) |
127 | 125 | {
|
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); |
143 | 150 | }
|
144 |
| - InternalMessageHandler.Send("MLAPI_ADD_OBJECTS", "MLAPI_INTERNAL", writer, null); |
145 | 151 | }
|
146 | 152 | }
|
147 | 153 |
|
@@ -209,25 +215,29 @@ internal static void SpawnPrefabIndexServer(NetworkedObject netObject, uint? cli
|
209 | 215 | netObject.ownerClientId = clientOwnerId.Value;
|
210 | 216 | NetworkingManager.singleton.connectedClients[clientOwnerId.Value].OwnedObjects.Add(netObject);
|
211 | 217 | }
|
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)); |
219 | 228 |
|
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); |
223 | 232 |
|
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); |
227 | 236 |
|
228 |
| - netObject.WriteFormattedSyncedVarData(writer); |
| 237 | + netObject.WriteFormattedSyncedVarData(writer); |
229 | 238 |
|
230 |
| - InternalMessageHandler.Send("MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", writer, null); |
| 239 | + InternalMessageHandler.Send(client.Key, "MLAPI_ADD_OBJECT", "MLAPI_INTERNAL", writer, null); |
| 240 | + } |
231 | 241 | }
|
232 | 242 | }
|
233 | 243 |
|
|
0 commit comments