public static void UpdateData(byte[] data) { LoadAggregationContainer container = ReadData(data); Dictionary <int, GameObject> checkFrozen = new Dictionary <int, GameObject>(); foreach (KeyValuePair <int, GameObject> pair in GlobalReferences.FrozenParts) { checkFrozen.Add(pair.Key, pair.Value); } foreach (PartSpawnData item in container.data) { GameObject checkGo = GlobalReferences.FrozenParts[item.id]; if (checkGo == null) { Debug.LogError("Part " + item.id + " not found in check"); continue; } Vector3 oldPos = checkGo.transform.position; List <Connection> connections = checkGo.GetComponent <Part>().Connections; if (Vector3.Distance(oldPos, item.Position) > 0.001f) { CollisionVoxelContainer.RemoveGameObject(checkGo); foreach (Connection con in connections) { ConnectionVoxelContainer.RemoveConnection(con); } } checkGo.transform.position = item.Position; checkGo.transform.rotation = item.Rotation; if (Vector3.Distance(oldPos, item.Position) > 0.001f) { CollisionVoxelContainer.StoreGameObject(checkGo); foreach (Connection con in connections) { ConnectionVoxelContainer.StoreConnection(con); } } checkFrozen.Remove(item.id); } GameObject[] leftovers = checkFrozen.Values.ToArray <GameObject>(); for (int i = leftovers.Length - 1; i >= 0; --i) { GameObject go = leftovers[i]; Part leftover = go.GetComponent <Part>(); Debug.LogError("Part " + leftover.ID + " was left over in check and will be deleted"); leftover.LocalDelete(); } }
public override void OnEvent(PlayerJoined evnt) { if (!BoltNetwork.IsServer) { return; } LoadAggregationContainer loadData = new LoadAggregationContainer(GlobalReferences.FrozenParts.Values.ToList <GameObject>()); loadData.data.AddRange(NetworkPartSpawner.LoadData.data); loadData.StreamData(false, NetworkCallbacks.StreamAggregationChannel, evnt.RaisedBy); }
public override void StreamDataReceived(BoltConnection connection, UdpStreamData data) { Debug.Log("Received :" + data.Channel.ToString()); if (data.Channel.ToString() == StreamAggregationChannel.ToString()) { LoadAggregationContainer.LoadData(data.Data); return; } if (data.Channel.ToString() == UpdateAggregationChannel.ToString()) { LoadAggregationContainer.UpdateData(data.Data); return; } if (data.Channel.ToString() == InitJsonChannel.ToString()) { InitJsonReceived = true; initJsonData = data.Data; } else if (data.Channel.ToString() == WaspJsonChannel.ToString()) { WaspJsonReceived = true; waspJsonData = data.Data; } else if (data.Channel.ToString() == PlayerJsonChannel.ToString()) { PlayerJsonReceived = true; playerJsonData = data.Data; } else { return; } CheckStreamsReceived(); }
public static void LoadData(byte[] data) { LoadAggregationContainer container = ReadData(data); NetworkPartSpawner.Data.AddRange(container.data); }