public StockpileCriteriaEditable(IItemMaterialFilter source)
 {
     this.ItemIDs = new ObservableCollection<ItemID>(source.ItemIDs);
     this.ItemCategories = new ObservableCollection<ItemCategory>(source.ItemCategories);
     this.MaterialIDs = new ObservableCollection<MaterialID>(source.MaterialIDs);
     this.MaterialCategories = new ObservableCollection<MaterialCategory>(source.MaterialCategories);
 }
        public void AddConstructJob(ConstructMode mode, IntGrid2Z area, IItemMaterialFilter userItemFilter)
        {
            var locations = area.Range().Where(p => m_environment.Contains(p));

            ITerrainFilter filter;
            IItemFilter coreItemFilter;

            switch (mode)
            {
                case ConstructMode.Floor:
                    filter = WorkHelpers.ConstructFloorTerrainFilter;
                    coreItemFilter = WorkHelpers.ConstructFloorItemFilter;
                    break;

                case ConstructMode.Pavement:
                    filter = WorkHelpers.ConstructPavementTerrainFilter;
                    coreItemFilter = WorkHelpers.ConstructPavementItemFilter;
                    break;

                case ConstructMode.Wall:
                    filter = WorkHelpers.ConstructWallTerrainFilter;
                    coreItemFilter = WorkHelpers.ConstructWallItemFilter;
                    break;

                default:
                    throw new Exception();
            }

            IItemFilter itemFilter;

            if (userItemFilter != null)
                itemFilter = new AndItemFilter(coreItemFilter, userItemFilter);
            else
                itemFilter = coreItemFilter;

            locations = locations.Where(p => filter.Match(m_environment.GetTileData(p)));

            foreach (var l in locations)
            {
                var data = new ConstructJobData()
                {
                    Mode = mode,
                    Location = l,
                    ItemFilter = itemFilter,
                };

                m_jobDataList.Add(data);
            }
        }
Exemple #3
0
        public void SetCriteria(IItemMaterialFilter itemFilter)
        {
            this.Criteria = itemFilter;

            foreach (var ob in this.Environment.GetContents(this.Area).OfType<ItemObject>())
            {
                Debug.Assert(ob.StockpiledBy == null || ob.StockpiledBy == this);

                if (ob.IsInstalled)
                    continue;

                if (Match(ob))
                {
                    if (ob.StockpiledBy == null)
                        ob.StockpiledBy = this;
                }
                else
                {
                    if (ob.StockpiledBy != null)
                        ob.StockpiledBy = null;
                }
            }

            if (this.Criteria != null && m_itemTracker.IsEnabled == false)
                EnableItemObjectView();
            else if (this.Criteria == null && m_itemTracker.IsEnabled)
                DisableItemObjectView();
            else
                m_itemTracker.Refresh();
        }