private void RegisterEntity(Entity Entity) { if (!EntitiesTracked.Add(Entity)) { return; } foreach (var Component in Entity.Components) { var ComponentType = Component.GetType(); foreach (var Filter in GetFiltersForType(ComponentType)) { Filter.Components.Add(Component); } } Entity.Components.ComponentAdded += Components_ComponentAdded; Entity.Components.ComponentRemoved += Components_ComponentRemoved; }
private void UnregisterEntity(Entity Entity) { if (!EntitiesTracked.Contains(Entity)) { return; } foreach (var Component in Entity.Components) { var ComponentType = Component.GetType(); foreach (var Filter in GetFiltersForType(ComponentType)) { bool Result = Filter.Components.Remove(Component); if (!Result) { throw new KeyNotFoundException(); } } } EntitiesTracked.Remove(Entity); Entity.Components.ComponentAdded -= Components_ComponentAdded; Entity.Components.ComponentRemoved -= Components_ComponentRemoved; }