public void AddConstructJob(ConstructMode mode, IntGrid2Z area, IItemFilter 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 AddConstructJob(ConstructMode mode, IntGrid2Z area, IItemFilter 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); } }