Exemple #1
0
        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);
        }
Exemple #2
0
 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);
     }
 }
Exemple #4
0
 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;
 }
Exemple #5
0
            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);
        }
Exemple #7
0
        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()*/;
        }
Exemple #8
0
        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();
            }
        }
Exemple #10
0
        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);
                }
            }
        }
Exemple #11
0
 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();
 }
Exemple #12
0
 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));
 }
Exemple #14
0
        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();
            }
        }