public CleanAreaJob(IJobObserver parent, EnvironmentObject env, IntGrid2Z area) : base(parent) { m_environment = env; m_area = area; m_map = new Dictionary<IntPoint3, IJob>(); foreach (var p in m_area.Range()) m_map[p] = null; m_environment.World.TickStarting += World_TickStarting; }
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 Map(int width, int height, int depth) { this.Grid = new AStarMapTile[depth, height, width]; this.Bounds = new IntGrid3(0, 0, 0, width, height, depth); for (int y = 0; y < 350; ++y) SetBlocked(new IntVector3(5, y, 0), true); for (int y = 2; y < 22; ++y) SetBlocked(new IntVector3(14, y, 0), true); for (int y = 6; y < 11; ++y) SetWeight(new IntVector3(10, y, 0), 40); for (int y = 6; y < 18; ++y) SetBlocked(new IntVector3(3, y, 1), true); for (int y = 6; y < 11; ++y) SetWeight(new IntVector3(5, y, 1), 40); SetStairs(new IntVector3(10, 10, 0), Stairs.Up); SetStairs(new IntVector3(10, 10, 1), Stairs.Down); SetStairs(new IntVector3(15, 12, 0), Stairs.Up); SetStairs(new IntVector3(15, 12, 1), Stairs.Down); var r = new Random(4); var bounds = new IntGrid2Z(16, 0, 30, 30, 0); foreach (var p in bounds.Range()) { var v = r.Next(100); if (v < 30) SetBlocked(p, true); else if (v < 60) SetWeight(p, v); } }
bool TestStartArea(EnvironmentObject env, IntGrid2Z r) { foreach (var p in r.Range()) { var td = env.GetTileData(p); if (td.IsWalkable) continue; else return false; } return true; }
bool TestStartArea(EnvironmentObject env, IntGrid2Z r) { foreach (var p in r.Range()) { var terrainID = env.GetTerrainID(p); var interiorID = env.GetInteriorID(p); if (terrainID == TerrainID.NaturalFloor) continue; else return false; } return true; }