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);
                }
            }
        }
Пример #2
0
        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();
        }