コード例 #1
0
        /// <summary>
        /// Creates a frame for a specific transmitter and list
        /// </summary>
        /// <param name="transmitter"></param>
        /// <param name="objectList"></param>
        /// <returns></returns>
        private Frame CreateFrame(NetworkFrameListTransmitter transmitter, NetworkObjectList objectList)
        {
            var previousFrame = transmitter.CurrentList?.FindFrameByListId(objectList.Id);

            var frame = new Frame(objectList.Id);

            transmitter.Listener.OnBeginProcessList(objectList);

            foreach (var networkObject in objectList.InternalNetworkObjects)
            {
                if (networkObject.Destroyed)
                {
                    frame.CreateObjectDestruction(networkObject.Handle.Id);

                    //Don't remove a destroyed object's data from previous frames, we may need to reconstruct it for lag compensation
                }
                else
                {
                    if (transmitter.Listener.FilterNetworkObject(objectList, networkObject))
                    {
                        frame.CreateUpdate(networkObject, previousFrame);
                    }
                }
            }

            transmitter.Listener.OnEndProcessList(objectList);

            return(frame);
        }
コード例 #2
0
        /// <summary>
        /// Creates a new network frame transmitter
        /// </summary>
        /// <param name="listener">Listener to use when determining which objects to include in a list</param>
        /// <returns></returns>
        public INetworkFrameListTransmitter CreateTransmitter(IFrameListTransmitterListener listener)
        {
            var transmitter = new NetworkFrameListTransmitter(this, _maxFrameLists, listener);

            _transmitters.Add(transmitter);

            return(transmitter);
        }