Esempio n. 1
0
        internal NetworkObject InternalCreateNetworkObject(INetworkable networkableObject)
        {
            if (networkableObject == null)
            {
                throw new ArgumentNullException(nameof(networkableObject));
            }

            if (InternalFindNetworkObjectForObject(networkableObject) != null)
            {
                throw new InvalidOperationException($"Object \"{networkableObject}\" already has a network object associated with it");
            }

            var type = networkableObject.GetType();

            var metaData = _listManager.TypeRegistry.LookupRootType(type);

            if (metaData == null)
            {
                throw new InvalidOperationException($"Type {type.FullName} has not been registered to be networked");
            }

            var networkObject = new NetworkObject(metaData, networkableObject);

            _networkObjects.Add(networkObject);

            return(networkObject);
        }
 public void Unsubscribe(INetworkable observer, params PacketType[] types)
 {
     for (int i = 0; i < types.Length; i++)
     {
         NetworkIdentities.Remove(types[i]);
     }
 }
Esempio n. 3
0
 /// <summary>関係を断つ</summary>
 /// <param name="related">関係者</param>
 public void Remove(INetworkable related)
 {
     if (!Parents.Contains(related) && !Children.Contains(related))
     {
         return;
     }
     Parents  = Parents.Except(new[] { related });
     Children = Children.Except(new[] { related });
     related.Remove(this);
 }
    public void Subscribe(INetworkable observer, params PacketType[] types)
    {
        for (int i = 0; i < types.Length; i++)
        {
#if UNITY_EDITOR
            if (NetworkIdentities.ContainsKey(types[i]))
            {
                Debug.Log(NetworkIdentities[types[i]]);
                Debug.Log(observer);
            }
#endif
            NetworkIdentities[types[i]] = observer;
        }
    }
Esempio n. 5
0
        public NetworkObject InternalFindNetworkObjectForObject(INetworkable networkableObject)
        {
            if (networkableObject == null)
            {
                throw new ArgumentNullException(nameof(networkableObject));
            }

            foreach (var networkObject in _networkObjects)
            {
                if (ReferenceEquals(networkObject.Instance, networkableObject))
                {
                    return(networkObject);
                }
            }

            return(null);
        }
 public void Unsubscribe(INetworkable observer)
 {
     Unsubscribe(observer, observer.packetTypes);
 }
Esempio n. 7
0
 public INetworkObject FindNetworkObjectForObject(INetworkable networkableObject)
 {
     return(InternalFindNetworkObjectForObject(networkableObject));
 }
Esempio n. 8
0
 public INetworkObject CreateNetworkObject(INetworkable networkableObject)
 {
     return(InternalCreateNetworkObject(networkableObject));
 }
 public void OnNetworkObjectDestroyed(INetworkObjectList networkObjectList, INetworkObject networkObject, INetworkable networkableObject)
 {
     if (_listeners.TryGetValue(networkObjectList.Id, out var listener))
     {
         listener.OnNetworkObjectDestroyed(networkObjectList, networkObject, networkableObject);
     }
 }