public TComponentGroup GetComponentGroup <TComponentGroup>() where TComponentGroup : class, IComponentGroup { ComponentGroupKey groupKey = new ComponentGroupKey(typeof(TComponentGroup).GetGenericArguments()); IComponentGroup group; if (componentGroups.TryGetValue(groupKey, out group)) { return((TComponentGroup)group); } TComponentGroup componentGroup = (TComponentGroup)Activator.CreateInstance(typeof(TComponentGroup), this); foreach (var componentTypes in entityComponentTypes) { Entity entity = componentTypes.Key; HashSet <Type> entityComponents = componentTypes.Value; if (IsComponentTypesMatchGroup(entityComponents, groupKey)) { componentGroup.AddEntity(entity); } } componentGroups.Add(groupKey, componentGroup); return(componentGroup); }
private bool IsComponentTypesMatchGroup(HashSet <Type> componentTypes, ComponentGroupKey groupKey) { foreach (Type componentType in groupKey.Types) { if (!componentTypes.Contains(componentType)) { return(false); } } return(true); }