Example #1
0
        internal Controller(IEqualityComparer <TEntityId> entityEqualityComparer, IComponentKindManager <TComponentKind, TComponentKindSet> componentKindManager)
        {
            _entityEqualityComparer = entityEqualityComparer;
            _componentKindManager   = componentKindManager;
            var componentKindEqualityComparer = componentKindManager.ComponentKindEqualityComparer;

            _queryManager            = new QueryManager <TComponentKind, TComponentKindSet>(componentKindManager);
            _entityIdsByQueryId      = new Dictionary <QueryId, EntityCollection <TEntityId, TComponentKind> >();
            _queryIdsByComponentKind = new Dictionary <TComponentKind, HashSet <QueryId> >(componentKindEqualityComparer);
            _componentKindsByEntity  = new Dictionary <TEntityId, TComponentKindSet>(_entityEqualityComparer);
        }
Example #2
0
 public QueryManager(IComponentKindManager <TComponentKind, TComponentKindSet> componentKindManager)
 {
     _componentKindManager = componentKindManager;
     _queryStorage         = new QueryStorage <TComponentKindSet>(new ProxyComparer <Query <TComponentKindSet> >(this));
 }
Example #3
0
        /// <summary>
        /// Creates a new instance of <see cref="Scope{TEntityId, TComponentKind}"/>
        /// </summary>
        /// <typeparam name="TEntityId">The type of the entity ids.</typeparam>
        /// <typeparam name="TComponentKind">The type used to represent component kinds.</typeparam>
        /// <typeparam name="TComponentKindSet">The type used to store sets of component kinds.</typeparam>
        /// <param name="entityEqualityComparer">The equality comparer used to compare entity ids.</param>
        /// <param name="componentKindManager">The managers for component kinds and sets component kinds.</param>
        public static Scope <TEntityId, TComponentKind> CreateScope <TEntityId, TComponentKind, TComponentKindSet>(IEqualityComparer <TEntityId> entityEqualityComparer, IComponentKindManager <TComponentKind, TComponentKindSet> componentKindManager)
        {
            if (componentKindManager == null)
            {
                throw new ArgumentNullException(nameof(componentKindManager));
            }

            if (entityEqualityComparer == null)
            {
                entityEqualityComparer = EqualityComparer <TEntityId> .Default;
            }

            var controller = new Controller <TEntityId, TComponentKind, TComponentKindSet>
                             (
                entityEqualityComparer,
                componentKindManager
                             );

            return(new Scope <TEntityId, TComponentKind>(controller, componentKindManager.ComponentKindEqualityComparer, entityEqualityComparer));
        }