コード例 #1
0
        public void ProcessReplicationCreate(MyPacket packet)
        {
            m_receiveStream.ResetRead(packet);

            TypeId typeId = m_receiveStream.ReadTypeId();
            NetworkId networkID = m_receiveStream.ReadNetworkId();
            byte groupCount = m_receiveStream.ReadByte();

            var pendingReplicable = new MyPendingReplicable();
            for (int i = 0; i < groupCount; i++)
            {
                var id = m_receiveStream.ReadNetworkId();
                pendingReplicable.StateGroupIds.Add(id);
            }

            Type type = GetTypeByTypeId(typeId);
            IMyReplicable replicable = (IMyReplicable)Activator.CreateInstance(type);
            pendingReplicable.DebugObject = replicable;
            m_pendingReplicables.Add(networkID, pendingReplicable);

            replicable.OnLoad(m_receiveStream, () => SetReplicableReady(networkID, replicable));
        }
コード例 #2
0
        public void ProcessReplicationCreateBegin(MyPacket packet)
        {
            m_receiveStream.ResetRead(packet);

            TypeId typeId = m_receiveStream.ReadTypeId();
            NetworkId networkID = m_receiveStream.ReadNetworkId();
            byte groupCount = m_receiveStream.ReadByte();

            var pendingReplicable = new MyPendingReplicable();
            for (int i = 0; i < groupCount; i++)
            {
                var id = m_receiveStream.ReadNetworkId();
                pendingReplicable.StateGroupIds.Add(id);
            }

            Type type = GetTypeByTypeId(typeId);
            IMyReplicable replicable = (IMyReplicable)Activator.CreateInstance(type);
            pendingReplicable.DebugObject = replicable;

            m_pendingReplicables.Add(networkID, pendingReplicable);

            var ids = pendingReplicable.StateGroupIds;

            using (m_tmpGroups)
            {
                IMyStreamableReplicable streamable = replicable as IMyStreamableReplicable;
                if (streamable != null)
                {
                    pendingReplicable.IsStreaming = true;
                    var group = streamable.GetStreamingStateGroup();
                    m_tmpGroups.Add(group);
                }

                for (int i = 0; i < m_tmpGroups.Count; i++)
                {
                    if (m_tmpGroups[i] != replicable)
                    {
                        AddNetworkObjectClient(ids[i], m_tmpGroups[i]);
                        pendingReplicable.StreamingGroupId = ids[i];
                    }
                }
            }

            replicable.OnLoadBegin(m_receiveStream, (loaded) => SetReplicableReady(networkID, replicable, loaded));
        }