private void OnNetUpdate(NetUpdatePacket obj) { //Debug.Log($"[Client] - NetObject updated with id {obj.NetID}. Update: {obj.Update}"); DebugUtils.Assert(NetObjectExists(obj.NetID), $"Net object with id {obj.NetID} doesn't exist on the client."); var netObj = netObjects[obj.NetID]; if (netObj.IsGameObject) { netObj.OnUpdate(obj.Update); } else { if (netObj.HasParentHandler) { var parent = netObjects[netObj.ParentHandlerID]; parent.OnChildUpdate(netObj, obj.Update); } } }
public void SendUpdates() { foreach (var objID in objectsToBeUpdated) { if (removedObjects.Contains(objID)) { continue; } DebugUtils.Assert(netObjects.ContainsKey(objID), $"NetObject with ID {objID} doesn't exist!"); var obj = netObjects[objID]; var onUpdate = obj.OnUpdate; DebugUtils.Assert(onUpdate != null, $"NetObject has no OnUpdate function."); var update = onUpdate(); DebugUtils.Assert(update != null, $"NetObject update is null."); // Send update or something var method = DeliveryMethod.ReliableOrdered; switch (obj.NetMode) { case NetMode.LATEST: method = DeliveryMethod.Sequenced; break; case NetMode.IMPORTANT: method = DeliveryMethod.ReliableOrdered; break; } var updatePacket = new NetUpdatePacket { NetID = obj.ID, Update = update }; if (obj.SendToAllClients) { server.SendToAllClients(updatePacket, method); } else { server.SendToSingleClient(updatePacket, obj.ClientID, method); } } objectsToBeUpdated.Clear(); }