/// <inheritdoc /> public void UnionWith(IEnumerable <T> other) { foreach (T value in other) { if (!set.Contains(value)) { if (NetworkManager.Get().isServer) { set.Add(value); } NetworkedSetEvent <T> setEvent = new NetworkedSetEvent <T>() { eventType = NetworkedSetEvent <T> .EventType.Add, value = value }; dirtyEvents.Add(setEvent); if (NetworkManager.Get().isServer&& OnSetChanged != null) { OnSetChanged(setEvent); } } } }
/// <inheritdoc /> public void SymmetricExceptWith(IEnumerable <T> other) { foreach (T value in other) { if (set.Contains(value)) { Remove(value); } else { if (NetworkingManager.Singleton.IsServer) { set.Add(value); } NetworkedSetEvent <T> setEvent = new NetworkedSetEvent <T>() { eventType = NetworkedSetEvent <T> .EventType.Add, value = value }; dirtyEvents.Add(setEvent); if (NetworkingManager.Singleton.IsServer && OnSetChanged != null) { OnSetChanged(setEvent); } } } }
/// <inheritdoc /> public void Clear() { if (NetworkManager.Get().isServer) { set.Clear(); } NetworkedSetEvent <T> setEvent = new NetworkedSetEvent <T>() { eventType = NetworkedSetEvent <T> .EventType.Clear }; dirtyEvents.Add(setEvent); if (NetworkManager.Get().isServer&& OnSetChanged != null) { OnSetChanged(setEvent); } }
/// <inheritdoc /> void ICollection <T> .Add(T item) { if (NetworkManager.Get().isServer) { set.Add(item); } NetworkedSetEvent <T> setEvent = new NetworkedSetEvent <T>() { eventType = NetworkedSetEvent <T> .EventType.Add, value = item }; dirtyEvents.Add(setEvent); if (NetworkManager.Get().isServer&& OnSetChanged != null) { OnSetChanged(setEvent); } }
/// <inheritdoc /> public bool Remove(T item) { if (NetworkManager.Get().isServer) { set.Remove(item); } NetworkedSetEvent <T> setEvent = new NetworkedSetEvent <T>() { eventType = NetworkedSetEvent <T> .EventType.Remove, value = item }; dirtyEvents.Add(setEvent); if (NetworkManager.Get().isServer&& OnSetChanged != null) { OnSetChanged(setEvent); } return(true); }
/// <inheritdoc /> bool ISet <T> .Add(T item) { if (NetworkingManager.Singleton.IsServer) { set.Add(item); } NetworkedSetEvent <T> setEvent = new NetworkedSetEvent <T>() { eventType = NetworkedSetEvent <T> .EventType.Add, value = item }; dirtyEvents.Add(setEvent); if (NetworkingManager.Singleton.IsServer && OnSetChanged != null) { OnSetChanged(setEvent); } return(true); }
/// <inheritdoc /> public void ReadDelta(Stream stream, bool keepDirtyDelta) { using (PooledBitReader reader = PooledBitReader.Get(stream)) { ushort deltaCount = reader.ReadUInt16Packed(); for (int i = 0; i < deltaCount; i++) { NetworkedSetEvent <T> .EventType eventType = (NetworkedSetEvent <T> .EventType)reader.ReadBits(2); switch (eventType) { case NetworkedSetEvent <T> .EventType.Add: { T value = (T)reader.ReadObjectPacked(typeof(T)); //BOX set.Add(value); if (OnSetChanged != null) { OnSetChanged(new NetworkedSetEvent <T> { eventType = eventType, value = value }); } if (keepDirtyDelta) { dirtyEvents.Add(new NetworkedSetEvent <T>() { eventType = eventType, value = value }); } } break; case NetworkedSetEvent <T> .EventType.Remove: { T value = (T)reader.ReadObjectPacked(typeof(T)); //BOX set.Remove(value); if (OnSetChanged != null) { OnSetChanged(new NetworkedSetEvent <T> { eventType = eventType, value = value }); } if (keepDirtyDelta) { dirtyEvents.Add(new NetworkedSetEvent <T>() { eventType = eventType, value = value }); } } break; case NetworkedSetEvent <T> .EventType.Clear: { //Read nothing set.Clear(); if (OnSetChanged != null) { OnSetChanged(new NetworkedSetEvent <T> { eventType = eventType, }); } if (keepDirtyDelta) { dirtyEvents.Add(new NetworkedSetEvent <T>() { eventType = eventType }); } } break; } } } }