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); } }
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(); }