Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 private bool IsComponentTypesMatchGroup(HashSet <Type> componentTypes, ComponentGroupKey groupKey)
 {
     foreach (Type componentType in groupKey.Types)
     {
         if (!componentTypes.Contains(componentType))
         {
             return(false);
         }
     }
     return(true);
 }