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]); } }
/// <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; } }
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); }
public INetworkObject FindNetworkObjectForObject(INetworkable networkableObject) { return(InternalFindNetworkObjectForObject(networkableObject)); }
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); } }