コード例 #1
0
    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();
        }
    }
コード例 #2
0
    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);
    }
コード例 #3
0
    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();
    }
コード例 #4
0
    public static void LoadData(byte[] data)
    {
        LoadAggregationContainer container = ReadData(data);

        NetworkPartSpawner.Data.AddRange(container.data);
    }