protected override bool TryRemoveEntity(int key, TEntity entity, Component changedComponent) { if (Index.TryGetValue(key, out var referencingEntities)) { if (!_sortValueGetter.TryGetKey(entity, new IPropertyValueChange[0], getOldValue: false, out var sortKey)) { sortKey = referencingEntities.Where(p => p.Value == entity).Select(p => p.Key).FirstOrDefault(); } if (sortKey != default && referencingEntities.Remove(sortKey)) { if (referencingEntities.Count == 0) { Index.Remove(key); } OnEntityRemoved(entity, changedComponent, FindReferenced(key, entity, fallback: true)); return(true); } } if (OrphanedEntities != null && OrphanedEntities.TryGetValue(key, out var orphanedEntities)) { orphanedEntities.Remove(entity); if (orphanedEntities.Count == 0) { OrphanedEntities.Remove(key); } } return(false); }
private HashSet <TEntity> GetOrAddOrphanedEntities(int key) { if (!OrphanedEntities.TryGetValue(key, out var entities)) { entities = new HashSet <TEntity>(EntityEqualityComparer <TEntity> .Instance); OrphanedEntities.Add(key, entities); } return(entities); }