public void AddComponent <TComponent>(Entity entity, TComponent component) where TComponent : IComponent { if (typeof(TComponent) == _iComponentType) { throw new InvalidTComponentException(); } Type componentType = typeof(TComponent); ComponentArray <TComponent> entityComponentMap = GetComponentMap <TComponent>(true); if (entityComponentMap.Add(entity, component)) { var type = component.GetType(); _entityComponents[entity].Add(componentType); InspectComponentGroups(entity); _componentAddedToEntityEvent.CallEvent(this, ref entity, componentType); } }
public void AddComponent <TComponent>(Entity entity, TComponent component) where TComponent : IComponent { if (typeof(TComponent) == _iComponentType) { throw new InvalidTComponentException(); } Type componentType = typeof(TComponent); ComponentArray <TComponent> entityComponentMap = GetComponentMap <TComponent>(true); HashSet <Type> componentTypes = _entityComponents[entity]; if (!componentTypes.Contains(componentType)) { _entityComponents[entity].Add(componentType); entityComponentMap.Add(entity, component); InspectComponentGroups(entity); } }