示例#1
0
        /// <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]);
        }
示例#2
0
        /// <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]);
        }
示例#3
0
        /// <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);
                }
            }
        }
示例#4
0
        //        /// <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);
        }