/// <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); }
/// <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); }