public override bool HasJobOnCell(Pawn pawn, IntVec3 c) { if (!((Area)pawn.Map.areaManager.BuildRoof)[c]) { return(false); } if (c.Roofed(pawn.Map)) { return(false); } if (c.IsForbidden(pawn)) { return(false); } LocalTargetInfo target = c; ReservationLayerDef ceiling = ReservationLayerDefOf.Ceiling; if (!pawn.CanReserve(target, 1, -1, ceiling, false)) { return(false); } if (!pawn.CanReach(c, PathEndMode.Touch, pawn.NormalMaxDanger(), false, TraverseMode.ByPawn) && this.BuildingToTouchToBeAbleToBuildRoof(c, pawn) == null) { return(false); } if (!RoofCollapseUtility.WithinRangeOfRoofHolder(c, pawn.Map)) { return(false); } if (!RoofCollapseUtility.ConnectedToRoofHolder(c, pawn.Map, true)) { return(false); } return(true); }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOn(() => !this.$this.Map.areaManager.BuildRoof[this.$this.Cell]); this.FailOn(() => !RoofCollapseUtility.WithinRangeOfRoofHolder(this.$this.Cell, this.$this.Map, false)); this.FailOn(() => !RoofCollapseUtility.ConnectedToRoofHolder(this.$this.Cell, this.$this.Map, true)); foreach (Toil t in base.MakeNewToils()) { yield return(t); } }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOn(() => !base.Map.areaManager.BuildRoof[base.Cell]); this.FailOn(() => !RoofCollapseUtility.WithinRangeOfRoofHolder(base.Cell, base.Map)); this.FailOn(() => !RoofCollapseUtility.ConnectedToRoofHolder(base.Cell, base.Map, assumeRoofAtRoot: true)); foreach (Toil item in base.MakeNewToils()) { yield return(item); } }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOn(() => !base.Map.areaManager.BuildRoof[base.Cell]); this.FailOn(() => !RoofCollapseUtility.WithinRangeOfRoofHolder(base.Cell, base.Map, false)); this.FailOn(() => !RoofCollapseUtility.ConnectedToRoofHolder(base.Cell, base.Map, true)); foreach (Toil t in this.< MakeNewToils > __BaseCallProxy0()) { yield return(t); } yield break; }
public bool MoveNext() { uint num = (uint)this.$PC; this.$PC = -1; bool flag = false; switch (num) { case 0u: this.FailOn(() => !base.Map.areaManager.BuildRoof[base.Cell]); this.FailOn(() => !RoofCollapseUtility.WithinRangeOfRoofHolder(base.Cell, base.Map, false)); this.FailOn(() => !RoofCollapseUtility.ConnectedToRoofHolder(base.Cell, base.Map, true)); enumerator = base.< MakeNewToils > __BaseCallProxy0().GetEnumerator(); num = 4294967293u; break; case 1u: break; default: return(false); } try { switch (num) { } if (enumerator.MoveNext()) { t = enumerator.Current; this.$current = t; if (!this.$disposing) { this.$PC = 1; } flag = true; return(true); } } finally { if (!flag) { if (enumerator != null) { enumerator.Dispose(); } } } this.$PC = -1; return(false); }
public override bool HasJobOnCell(Pawn pawn, IntVec3 c, bool forced = false) { bool result; if (!pawn.Map.areaManager.BuildRoof[c]) { result = false; } else if (c.Roofed(pawn.Map)) { result = false; } else if (c.IsForbidden(pawn)) { result = false; } else { LocalTargetInfo target = c; ReservationLayerDef ceiling = ReservationLayerDefOf.Ceiling; if (!pawn.CanReserve(target, 1, -1, ceiling, forced)) { result = false; } else if (!pawn.CanReach(c, PathEndMode.Touch, pawn.NormalMaxDanger(), false, TraverseMode.ByPawn) && this.BuildingToTouchToBeAbleToBuildRoof(c, pawn) == null) { result = false; } else if (!RoofCollapseUtility.WithinRangeOfRoofHolder(c, pawn.Map, false)) { result = false; } else if (!RoofCollapseUtility.ConnectedToRoofHolder(c, pawn.Map, true)) { result = false; } else { Thing thing = RoofUtility.FirstBlockingThing(c, pawn.Map); result = (thing == null || RoofUtility.CanHandleBlockingThing(thing, pawn, forced)); } } return(result); }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOn(() => !((Area)((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_0029: stateMachine*/)._0024this.Map.areaManager.BuildRoof)[((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_0029: stateMachine*/)._0024this.Cell]); this.FailOn(() => !RoofCollapseUtility.WithinRangeOfRoofHolder(((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_0041: stateMachine*/)._0024this.Cell, ((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_0041: stateMachine*/)._0024this.Map)); this.FailOn(() => !RoofCollapseUtility.ConnectedToRoofHolder(((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_0059: stateMachine*/)._0024this.Cell, ((_003CMakeNewToils_003Ec__Iterator0) /*Error near IL_0059: stateMachine*/)._0024this.Map, true)); using (IEnumerator <Toil> enumerator = base.MakeNewToils().GetEnumerator()) { if (enumerator.MoveNext()) { Toil t = enumerator.Current; yield return(t); /*Error: Unable to find new state assignment for yield return*/; } } yield break; IL_0101: /*Error near IL_0102: Unexpected return in MoveNext()*/; }
public override bool HasJobOnCell(Pawn pawn, IntVec3 c, bool forced = false) { if (!pawn.Map.areaManager.BuildRoof[c]) { return(false); } if (c.Roofed(pawn.Map)) { return(false); } if (c.IsForbidden(pawn)) { return(false); } LocalTargetInfo target = c; ReservationLayerDef ceiling = ReservationLayerDefOf.Ceiling; bool ignoreOtherReservations = forced; if (!pawn.CanReserve(target, 1, -1, ceiling, ignoreOtherReservations)) { return(false); } if (!pawn.CanReach(c, PathEndMode.Touch, pawn.NormalMaxDanger()) && BuildingToTouchToBeAbleToBuildRoof(c, pawn) == null) { return(false); } if (!RoofCollapseUtility.WithinRangeOfRoofHolder(c, pawn.Map)) { return(false); } if (!RoofCollapseUtility.ConnectedToRoofHolder(c, pawn.Map, assumeRoofAtRoot: true)) { return(false); } Thing thing = RoofUtility.FirstBlockingThing(c, pawn.Map); if (thing != null) { return(RoofUtility.CanHandleBlockingThing(thing, pawn, forced)); } return(true); }
private void CalculateRoofsAboutToCollapse(CellRect rect) { Map map = BaseGen.globalSettings.map; SymbolResolver_EnsureCanHoldRoof.roofsAboutToCollapse.Clear(); SymbolResolver_EnsureCanHoldRoof.visited.Clear(); CellRect.CellRectIterator iterator = rect.GetIterator(); while (!iterator.Done()) { IntVec3 current = iterator.Current; if (current.Roofed(map)) { if (!RoofCollapseCellsFinder.ConnectsToRoofHolder(current, map, SymbolResolver_EnsureCanHoldRoof.visited)) { map.floodFiller.FloodFill(current, (IntVec3 x) => x.Roofed(map), delegate(IntVec3 x) { SymbolResolver_EnsureCanHoldRoof.roofsAboutToCollapse.Add(x); }, 2147483647, false, null); } } iterator.MoveNext(); } CellRect.CellRectIterator iterator2 = rect.GetIterator(); while (!iterator2.Done()) { IntVec3 current2 = iterator2.Current; if (current2.Roofed(map)) { if (!SymbolResolver_EnsureCanHoldRoof.roofsAboutToCollapse.Contains(current2)) { if (!RoofCollapseUtility.WithinRangeOfRoofHolder(current2, map, false)) { SymbolResolver_EnsureCanHoldRoof.roofsAboutToCollapse.Add(current2); } } } iterator2.MoveNext(); } }
private void CalculateRoofsAboutToCollapse(CellRect rect) { Map map = BaseGen.globalSettings.map; roofsAboutToCollapse.Clear(); visited.Clear(); foreach (IntVec3 item in rect) { if (item.Roofed(map) && !RoofCollapseCellsFinder.ConnectsToRoofHolder(item, map, visited)) { map.floodFiller.FloodFill(item, (IntVec3 x) => x.Roofed(map), delegate(IntVec3 x) { roofsAboutToCollapse.Add(x); }); } } foreach (IntVec3 item2 in rect) { if (item2.Roofed(map) && !roofsAboutToCollapse.Contains(item2) && !RoofCollapseUtility.WithinRangeOfRoofHolder(item2, map)) { roofsAboutToCollapse.Add(item2); } } }
protected override void DoEffect() { JobDriver_BuildRoof.builtRoofs.Clear(); for (int i = 0; i < 9; i++) { IntVec3 intVec = base.Cell + GenAdj.AdjacentCellsAndInside[i]; if (intVec.InBounds(base.Map)) { if (base.Map.areaManager.BuildRoof[intVec] && !intVec.Roofed(base.Map) && RoofCollapseUtility.WithinRangeOfRoofHolder(intVec, base.Map, false) && RoofUtility.FirstBlockingThing(intVec, base.Map) == null) { base.Map.roofGrid.SetRoof(intVec, RoofDefOf.RoofConstructed); MoteMaker.PlaceTempRoof(intVec, base.Map); JobDriver_BuildRoof.builtRoofs.Add(intVec); } } } JobDriver_BuildRoof.builtRoofs.Clear(); }
public override bool HasJobOnCell(Pawn pawn, IntVec3 c) { if (Find.AreaBuildRoof[c] && !c.Roofed() && pawn.CanReserve(c, 1) && (pawn.CanReach(c, PathEndMode.Touch, pawn.NormalMaxDanger(), false, TraverseMode.ByPawn) || BuildingToTouchToBeAbleToBuildRoof(c, pawn) != null) && RoofCollapseUtility.WithinRangeOfRoofHolder(c) && RoofCollapseUtility.ConnectedToRoofHolder(c, true)) { return(true); } { return(false); } }
public override AcceptanceReport CanDesignateCell(IntVec3 c) { return(c.InBounds(Map) && !c.Fogged(Map) && RoofCollapseUtility.WithinRangeOfRoofHolder(c, Map, true)); }
private void CalculateRoofsAboutToCollapse(CellRect rect) { Map map = BaseGen.globalSettings.map; roofsAboutToCollapse.Clear(); visited.Clear(); CellRect.CellRectIterator iterator = rect.GetIterator(); while (!iterator.Done()) { IntVec3 current = iterator.Current; if (current.Roofed(map) && !RoofCollapseCellsFinder.ConnectsToRoofHolder(current, map, visited)) { map.floodFiller.FloodFill(current, (IntVec3 x) => x.Roofed(map), delegate(IntVec3 x) { roofsAboutToCollapse.Add(x); }); } iterator.MoveNext(); } CellRect.CellRectIterator iterator2 = rect.GetIterator(); while (!iterator2.Done()) { IntVec3 current2 = iterator2.Current; if (current2.Roofed(map) && !roofsAboutToCollapse.Contains(current2) && !RoofCollapseUtility.WithinRangeOfRoofHolder(current2, map)) { roofsAboutToCollapse.Add(current2); } iterator2.MoveNext(); } }