コード例 #1
0
        public IObservableGroup GetObservableGroup(IGroup group, params int[] collectionIds)
        {
            var requiredComponents = ComponentTypeLookup.GetComponentTypes(group.RequiredComponents);
            var excludedComponents = ComponentTypeLookup.GetComponentTypes(group.ExcludedComponents);
            var lookupGroup        = new LookupGroup(requiredComponents, excludedComponents);

            var observableGroupToken = new ObservableGroupToken(lookupGroup, collectionIds);

            if (_observableGroups.Contains(observableGroupToken))
            {
                return(_observableGroups[observableGroupToken]);
            }

            var entityMatches = GetEntitiesFor(lookupGroup, collectionIds);
            var configuration = new ObservableGroupConfiguration
            {
                ObservableGroupToken = observableGroupToken,
                InitialEntities      = entityMatches
            };

            if (collectionIds != null && collectionIds.Length > 0)
            {
                configuration.NotifyingCollections = _collections.Where(x => collectionIds.Contains(x.Id));
            }
            else
            {
                configuration.NotifyingCollections = new [] { this };
            }

            var observableGroup = ObservableGroupFactory.Create(configuration);

            _observableGroups.Add(observableGroup);

            return(_observableGroups[observableGroupToken]);
        }