/// <summary> /// Return all entities containing all of the component types with a comparer /// </summary> /// <typeparam name="T"></typeparam> /// <param name="componentTypes"></param> /// <param name="comparer"></param> /// <returns></returns> public FilteredCollection Get(Type[] componentTypes, IComparer <Entity> comparer) { var hashCode = FilteredCollection.GetHashCode(componentTypes, comparer); if (!filteredCollections.ContainsKey(hashCode)) { filteredCollections.Add(hashCode, new FilteredCollection(this, componentTypes, comparer)); } return(filteredCollections[hashCode]); }
/// <summary> /// Return all entities containing all of the component types /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public FilteredCollection Get(params Type[] componentTypes) { var hashCode = FilteredCollection.GetHashCode(componentTypes); if (!filteredCollections.ContainsKey(hashCode)) { filteredCollections.Add(hashCode, new FilteredCollection(this, componentTypes)); } return(filteredCollections[hashCode]); }
/// <summary> /// Constructor with a null comparer /// </summary> /// <param name="entityManager"></param> /// <param name="types"></param> internal FilteredCollection(EntityManager entityManager, Type[] types) { entities = entities ?? new SortedSet <Entity>(); hashCode = FilteredCollection.GetHashCode(types, null); // Check that all types are really components if (!types.All(t => typeof(EntityComponent).IsAssignableFrom(t))) { throw new Exception("Type is not of IComponent - cannot filter."); } manager = entityManager; filter = types; // Add any existing entities foreach (var entity in manager) { if (MatchesFilter(entity)) { Add(entity); } } }
// /// <summary> // /// Constructor with lambda comparer // /// </summary> // /// <param name="entityManager"></param> // /// <param name="types"></param> // /// <param name="comparer"></param> // internal FilteredCollection(EntityManager entityManager, Type[] types, Func<Entity, Entity, int> comparer) // : this(entityManager, types, new Engine.Tools.LambdaComparer<Entity>(comparer)) // { } /// <summary> /// Constructor with comparer /// </summary> /// <param name="entityManager"></param> /// <param name="types"></param> /// <param name="comparer"></param> internal FilteredCollection(EntityManager entityManager, Type[] types, IComparer <Entity> comparer) : this(entityManager, types) { entities = new SortedSet <Entity>(comparer); hashCode = FilteredCollection.GetHashCode(types, comparer); }