Example #1
0
        public static void Postfix(ref IEnumerable <Gizmo> __result, Building_PlantGrower __instance)
        {
            var list = __result.ToList();

            Priority priority = PriorityTracker.plantBuildingPriorities.TryGetValue(__instance, out PriorityIntHolder intp) ? (Priority)intp.Int : Priority.Normal;

            list.Add(new Command_GrowingPriority((int)priority)
            {
                defaultLabel = $"Priority {priority}",
                defaultDesc  = $"Set this growing zone's priority. Current priority = {priority}",
                icon         = TexCommand.ForbidOff,
                onChanged    = (x) => {
                    var p = PriorityTracker.plantBuildingPriorities;
                    if (p.ContainsKey(__instance))
                    {
                        p[__instance].Int = x;
                    }
                    else
                    {
                        p[__instance] = new PriorityIntHolder(x);
                    }
                }
            });

            __result = list;
        }
        //public override IEnumerable<Gizmo> GetGizmos()
        static void Postfix(Building_PlantGrower __instance, ref IEnumerable <Gizmo> __result)
        {
            if (!Mod.settings.zoneHarvestableToggle)
            {
                return;
            }

            List <Gizmo> result = new List <Gizmo>(__result);

            Gizmo harvestGizmo = new Command_Toggle
            {
                defaultLabel = "TD.AllowHarvesting".Translate(),
                defaultDesc  = "TD.AllowHarvestingDesc".Translate(),
                icon         = ContentFinder <UnityEngine.Texture2D> .Get("UI/Designators/Harvest", true),
                isActive     = (() => __instance.CanHarvest()),
                toggleAction = delegate
                {
                    __instance.ToggleHarvest();
                }
            };

            result.Add(harvestGizmo);

            // make caller use the list
            __result = result.AsEnumerable();
        }
        private void GatherSingleZoneData(Building_PlantGrower plantGrower, out SinglePlantGrowerData data)
        {
            data             = new SinglePlantGrowerData();
            data.plantGrower = plantGrower;

            int   growthRate;
            float harvestMinGrowth = plantGrower.GetPlantDefToGrow().plant.harvestMinGrowth * 100;

            //analyze growth values
            foreach (Plant plant in plantGrower.PlantsOnMe)
            {
                if (plant != null)
                {
                    growthRate = (int)(plant.Growth * 100);
                    data.growRatesAbsolute[growthRate]++;
                    data.totalPlantedCount++;

                    if (growthRate >= 100)
                    {
                        data.fullyGrownPlants.Add(plant);
                    }

                    if (growthRate >= harvestMinGrowth)
                    {
                        data.harvestablePlants.Add(plant);
                    }
                }
            }

            //add curve points
            growthValueDrawInfo.curve = new SimpleCurve();
            float maxYValue = 0;

            if (data.totalPlantedCount > 0)
            {
                for (int i = 0; i < data.growRatesAbsolute.Length; i++)
                {
                    growthValueDrawInfo.curve.Add(new CurvePoint((float)i, 100 * data.growRatesAbsolute[i] / data.totalPlantedCount), false);
                }
                maxYValue = 100 * data.growthRateMaxCount / data.totalPlantedCount + 5;
            }
            else
            {
                growthValueDrawInfo.curve.Add(new CurvePoint(0f, 0f), false);
                growthValueDrawInfo.curve.Add(new CurvePoint(100f, 0f), false);
                maxYValue = 5;
            }

            //draw vertical marker
            harvestableMarkerDrawInfo.color = Color.white;
            harvestableMarkerDrawInfo.curve = new SimpleCurve();
            harvestableMarkerDrawInfo.curve.Add(-5, -5f, false);
            harvestableMarkerDrawInfo.curve.Add(harvestMinGrowth, -5f, false);
            harvestableMarkerDrawInfo.curve.Add(harvestMinGrowth, Math.Min(100, maxYValue), false);
            harvestableMarkerDrawInfo.curve.Add(harvestMinGrowth, -5f, false);

            curves.Add(growthValueDrawInfo);
            curves.Add(harvestableMarkerDrawInfo);
        }
        public override IEnumerable <IntVec3> PotentialWorkCellsGlobal(Pawn pawn)
        {
            Danger          maxDanger = pawn.NormalMaxDanger();
            List <Building> bList     = pawn.Map.listerBuildings.allBuildingsColonist;

            for (int i = 0; i < bList.Count; i++)
            {
                Building_PlantGrower b = bList[i] as Building_PlantGrower;
                if ((b != null) && b.TryGetComp <CompBotanyPlanter>().GetIsBotanyPlanter)
                {
                    if (this.ExtraRequirements(b, pawn))
                    {
                        if (!b.IsForbidden(pawn))
                        {
                            if (pawn.CanReach(b, PathEndMode.OnCell, maxDanger, false, TraverseMode.ByPawn))
                            {
                                if (!b.IsBurning())
                                {
                                    foreach (IntVec3 intVec in b.OccupiedRect())
                                    {
                                        yield return(intVec);
                                    }
                                    WorkGiver_GrowerBotany.wantedPlantDef = null;
                                }
                            }
                        }
                    }
                }
            }
            WorkGiver_GrowerBotany.wantedPlantDef = null;
            List <Zone> zonesList = pawn.Map.zoneManager.AllZones;

            for (int j = 0; j < zonesList.Count; j++)
            {
                Zone_GrowingBotanics growZone = zonesList[j] as Zone_GrowingBotanics;
                if (growZone != null)
                {
                    if (growZone.cells.Count == 0)
                    {
                        Log.ErrorOnce("Grow zone has 0 cells: " + growZone, -563487, false);
                    }
                    else if (this.ExtraRequirements(growZone, pawn))
                    {
                        if (!growZone.ContainsStaticFire)
                        {
                            if (pawn.CanReach(growZone.Cells[0], PathEndMode.OnCell, maxDanger, false, TraverseMode.ByPawn))
                            {
                                for (int k = 0; k < growZone.cells.Count; k++)
                                {
                                    yield return(growZone.cells[k]);
                                }
                                WorkGiver_GrowerBotany.wantedPlantDef = null;
                            }
                        }
                    }
                }
            }
            WorkGiver_GrowerBotany.wantedPlantDef = null;
        }
        public static void Postfix(ref IEnumerable <Gizmo> __result, Building_PlantGrower __instance)
        {
            var priority = PriorityTracker.plantBuildingPriorities.TryGetValue(__instance, out var intp)
                ? (Priority)intp.Int
                : Priority.Normal;

            __result = __result.Append(new Command_GrowingPriority(priority));
        }
        public static void GetInspectString_PostFix(Building_PlantGrower __instance, ref string __result)
        {
            if (__result.Substring(1, 1) == "G")
            {
                __result = __result.Substring(1, __result.Length - 1);
            }

            return;
        }
        public static void Postfix(Building_PlantGrower __instance)
        {
            if (!PriorityTracker.plantBuildingPriorities.ContainsKey(__instance))
            {
                PriorityTracker.plantBuildingPriorities[__instance] = new PriorityIntHolder((int)Priority.Normal);
            }


            Scribe_Values.Look <int>(ref PriorityTracker.plantBuildingPriorities[__instance].Int, "growingPriority", (int)Priority.Normal, false);
        }
 public static void SetPlantDefToGrow(Building_PlantGrower __instance, ThingDef plantDef)
 {
     if (Current.ProgramState == ProgramState.Playing)
     {
         foreach (IntVec3 c in __instance.OccupiedRect())
         {
             PlantSowing_Cache.ReregisterObject(__instance.Map, c, WorkGiver_Grower_Patch.awaitingPlantCellsMapDict);
         }
     }
 }
Example #9
0
 public void Clear()
 {
     plantGrower        = null;
     totalOccupiedCells = 0;
     totalPlantedCount  = 0;
     harvestablePlants.Clear();
     fullyGrownPlants.Clear();
     for (int i = 0; i < 101; i++)
     {
         growRatesAbsolute[i] = 0;
     }
 }
        // Note: this function must be overriden as the one in WorkGiver_Grower class only takes into account colony's hydroponics basins.
        // Growing zone are not managed though!
        public override IEnumerable <IntVec3> PotentialWorkCellsGlobal(Pawn pawn)
        {
            List <IntVec3> workCells = new List <IntVec3>();

            List <Thing> hydroponicsList = Find.ListerThings.ThingsOfDef(ThingDef.Named("HydroponicsBasin"));

            for (int plantGrowerIndex = 0; plantGrowerIndex < hydroponicsList.Count; plantGrowerIndex++)
            {
                Thing potentialPlantGrower = hydroponicsList[plantGrowerIndex];
                if ((potentialPlantGrower.Faction != null) &&
                    (potentialPlantGrower.Faction == OG_Util.FactionOfMAndCo))
                {
                    Building_PlantGrower plantGrower = potentialPlantGrower as Building_PlantGrower;
                    if (plantGrower == null)
                    {
                        Log.Warning("WorkGiver_GrowerOutpost: found a thing of def HydroponicsBasin or PlantPot which is not a Building_PlantGrower.");
                        continue;
                    }
                    if (GenPlant.GrowthSeasonNow(plantGrower.Position) == false)
                    {
                        continue;
                    }
                    if (this.ExtraRequirements(plantGrower) == false)
                    {
                        continue;
                    }
                    if (plantGrower.IsForbidden(pawn))
                    {
                        continue;
                    }
                    if (pawn.CanReach(plantGrower, PathEndMode.OnCell, pawn.NormalMaxDanger(), false) == false)
                    {
                        continue;
                    }
                    if (plantGrower.IsBurning())
                    {
                        continue;
                    }
                    base.DetermineWantedPlantDef(plantGrower.Position);
                    if (WorkGiver_Grower.wantedPlantDef == null)
                    {
                        continue;
                    }
                    foreach (IntVec3 cell in plantGrower.OccupiedRect().Cells)
                    {
                        workCells.Add(cell);
                    }
                }
            }
            return(workCells);
        }
Example #11
0
        public static void GenerateBigRoomHydroponics(IntVec3 areaSouthWestOrigin, int zoneAbs, int zoneOrd, Rot4 rotation, ref OG_OutpostData outpostData)
        {
            IntVec3 origin        = Zone.GetZoneOrigin(areaSouthWestOrigin, zoneAbs, zoneOrd);
            IntVec3 rotatedOrigin = Zone.GetZoneRotatedOrigin(areaSouthWestOrigin, zoneAbs, zoneOrd, rotation);

            OG_Common.GenerateEmptyRoomAt(rotatedOrigin, Genstep_GenerateOutpost.zoneSideSize, Genstep_GenerateOutpost.zoneSideSize, rotation, TerrainDefOf.Concrete, TerrainDef.Named("SterileTile"), ref outpostData);

            // Spawn doors.
            OG_Common.SpawnDoorAt(rotatedOrigin + new IntVec3(5, 0, 10).RotatedBy(rotation), ref outpostData);
            OG_Common.SpawnDoorAt(rotatedOrigin + new IntVec3(10, 0, 5).RotatedBy(rotation), ref outpostData);
            OG_Common.SpawnDoorAt(rotatedOrigin + new IntVec3(5, 0, 0).RotatedBy(rotation), ref outpostData);
            OG_Common.SpawnDoorAt(rotatedOrigin + new IntVec3(0, 0, 5).RotatedBy(rotation), ref outpostData);

            // Spawn sun lamp.
            OG_Common.TrySpawnThingAt(ThingDef.Named("SunLamp"), null, rotatedOrigin + new IntVec3(5, 0, 5).RotatedBy(rotation), false, Rot4.Invalid, ref outpostData);

            // Spawn hydroponics basins.
            Building_PlantGrower hydroponics = OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(1, 0, 2).RotatedBy(rotation), true, rotation, ref outpostData) as Building_PlantGrower;

            hydroponics.SetPlantDefToGrow(ThingDef.Named("PlantStrawberry"));
            hydroponics = OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(3, 0, 2).RotatedBy(rotation), true, rotation, ref outpostData) as Building_PlantGrower;
            hydroponics.SetPlantDefToGrow(ThingDef.Named("PlantCorn"));
            hydroponics = OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(4, 0, 2).RotatedBy(rotation), true, rotation, ref outpostData) as Building_PlantGrower;
            hydroponics.SetPlantDefToGrow(ThingDef.Named("PlantCorn"));
            hydroponics = OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(6, 0, 2).RotatedBy(rotation), true, rotation, ref outpostData) as Building_PlantGrower;
            hydroponics.SetPlantDefToGrow(ThingDef.Named("PlantCorn"));
            hydroponics = OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(7, 0, 2).RotatedBy(rotation), true, rotation, ref outpostData) as Building_PlantGrower;
            hydroponics.SetPlantDefToGrow(ThingDef.Named("PlantCorn"));
            hydroponics = OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(9, 0, 2).RotatedBy(rotation), true, rotation, ref outpostData) as Building_PlantGrower;
            hydroponics.SetPlantDefToGrow(ThingDef.Named("PlantStrawberry"));

            OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(1, 0, 7).RotatedBy(rotation), true, rotation, ref outpostData);
            OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(3, 0, 7).RotatedBy(rotation), true, rotation, ref outpostData);
            OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(4, 0, 7).RotatedBy(rotation), true, rotation, ref outpostData);
            OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(6, 0, 7).RotatedBy(rotation), true, rotation, ref outpostData);
            OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(7, 0, 7).RotatedBy(rotation), true, rotation, ref outpostData);
            OG_Common.TrySpawnThingAt(ThingDef.Named("HydroponicsBasin"), null, rotatedOrigin + new IntVec3(9, 0, 7).RotatedBy(rotation), true, rotation, ref outpostData);

            // Spawn heaters and coolers.
            OG_Common.TrySpawnHeaterAt(rotatedOrigin + new IntVec3(2, 0, 1).RotatedBy(rotation), ref outpostData);
            OG_Common.TrySpawnHeaterAt(rotatedOrigin + new IntVec3(8, 0, 1).RotatedBy(rotation), ref outpostData);
            OG_Common.TrySpawnHeaterAt(rotatedOrigin + new IntVec3(2, 0, 9).RotatedBy(rotation), ref outpostData);
            OG_Common.TrySpawnHeaterAt(rotatedOrigin + new IntVec3(8, 0, 9).RotatedBy(rotation), ref outpostData);
            OG_Common.SpawnCoolerAt(rotatedOrigin + new IntVec3(2, 0, 0).RotatedBy(rotation), new Rot4(Rot4.South.AsInt + rotation.AsInt), ref outpostData);
            OG_Common.SpawnCoolerAt(rotatedOrigin + new IntVec3(8, 0, 0).RotatedBy(rotation), new Rot4(Rot4.South.AsInt + rotation.AsInt), ref outpostData);
            OG_Common.SpawnCoolerAt(rotatedOrigin + new IntVec3(2, 0, 10).RotatedBy(rotation), new Rot4(Rot4.North.AsInt + rotation.AsInt), ref outpostData);
            OG_Common.SpawnCoolerAt(rotatedOrigin + new IntVec3(8, 0, 10).RotatedBy(rotation), new Rot4(Rot4.North.AsInt + rotation.AsInt), ref outpostData);

            OG_Common.GenerateHorizontalAndVerticalPavedAlleys(origin);
        }
Example #12
0
        private static IEnumerable <IntVec3> PotentialWorkCellsGlobalIE(WorkGiver_Grower __instance, Pawn pawn)
        {
            Danger          maxDanger = pawn.NormalMaxDanger();
            List <Building> bList     = pawn.Map.listerBuildings.allBuildingsColonist;

            for (int j = 0; j < bList.Count; j++)
            {
                Building_PlantGrower building_PlantGrower = bList[j] as Building_PlantGrower;
                if (building_PlantGrower == null || !__instance.ExtraRequirements(building_PlantGrower, pawn) || building_PlantGrower.IsForbidden(pawn) ||
                    //!pawn.CanReach(building_PlantGrower, PathEndMode.OnCell, maxDanger) ||
                    building_PlantGrower.IsBurning())
                {
                    continue;
                }
                foreach (IntVec3 item in building_PlantGrower.OccupiedRect())
                {
                    yield return(item);
                }
                wantedPlantDef = null;
            }
            wantedPlantDef = null;
            List <Zone> zonesList = pawn.Map.zoneManager.AllZones;

            for (int j = 0; j < zonesList.Count; j++)
            {
                Zone_Growing growZone = zonesList[j] as Zone_Growing;
                if (growZone == null)
                {
                    continue;
                }
                if (growZone.cells.Count == 0)
                {
                    Log.ErrorOnce("Grow zone has 0 cells: " + growZone, -563487);
                }
                else if (__instance.ExtraRequirements(growZone, pawn) && !growZone.ContainsStaticFire &&
                         pawn.CanReach(growZone.Cells.First(), PathEndMode.OnCell, maxDanger))
                {
                    for (int k = 0; k < growZone.cells.Count; k++)
                    {
                        yield return(growZone.cells[k]);
                    }
                    wantedPlantDef = null;
                    growZone       = null;
                }
            }
            wantedPlantDef = null;
        }
Example #13
0
 public static void IsResting(Plant __instance, ref bool __result)
 {
     bool isInBasin = false;
     foreach (var cri in __instance.OccupiedRect())
     {
         List<Thing> thingList = __instance.Map.thingGrid.ThingsListAt(cri);
         for (int i = 0; i < thingList.Count; i++)
         {
             Building_PlantGrower pg = thingList[i] as Building_PlantGrower;
             if (pg != null)
             {
                 isInBasin = true;
                 break;
             }
         }
     }
     if (isInBasin) __result = false;
 }
Example #14
0
/*
 *      public void Initialize()
 *      {
 *          // Plant Traps
 *          for (int i = 0; i < this.def.comps.Count; i++) {
 *              ThingComp thingComp = (ThingComp)Activator.CreateInstance (this.def.comps [i].compClass);
 *              thingComp.parent = this;
 *              this.comps.Add (thingComp);
 *              thingComp.Initialize (this.def.comps [i]);
 *          }
 *      }
 */

        // find the pot this is in
        protected bool initPot()
        {
            if (base.Map == null)
            {
                return(false);
            }
            List <Thing> list = base.Map.thingGrid.ThingsListAt(base.Position);

            for (int i = 0; i < list.Count; i++)
            {
                Thing thing = list[i];
                if (thing is Building_PlantGrower)
                {
                    // Log.Warning("PlantTrap found pot");
                    this.thepot = (Building_PlantGrower)thing;
                }
            }
            // Log.Warning("PlantTrap pot : "+this.thepot);
            //            Log.Warning("Creating Plant_Trap with properties:");
            //            Helpers.PrintObject(this.def.planttraps);
            //((DruidPlantProperties)this.def.plant).planttraps);

            return(true);
        }
Example #15
0
        private void SyncAllGroups()
        {
            for (int i = 0; i < plantGrowerGroups.Count; i++)
            {
                ThingDef groupPlantDef = (plantGrowerGroups[i][0] as Building_PlantGrower).GetPlantDefToGrow();

                /*
                 * NOTE
                 * The following code is heavily based on the plant syncing code in Plant Growth Sync by Lanilor.
                 * This is so that people using this alongside Plant Growth Sync will have their crops synced in a similar way.
                 *
                 * LINKS
                 * https://steamcommunity.com/sharedfiles/filedetails/?id=1454228967&searchtext=Plant+Growth+Sync
                 * https://github.com/Lanilor/Simple-Mods-Collection
                 * */

                List <Plant> plantsToSync  = new List <Plant>();
                float        averageGrowth = 0f;
                for (int j = 0; j < plantGrowerGroups[i].Count; j++)
                {
                    Building_PlantGrower plantGrower = plantGrowerGroups[i][j] as Building_PlantGrower;
                    foreach (Plant plant in plantGrower.PlantsOnMe)
                    {
                        if (plant.def == groupPlantDef && plant.IsCrop && plant.LifeStage == PlantLifeStage.Growing)
                        {
                            plantsToSync.Add(plant);
                            averageGrowth += plant.Growth;
                        }
                    }
                }
                if (plantsToSync.Count < 2)
                {
                    continue;
                }
                averageGrowth /= plantsToSync.Count;

                float marginFromAverage = SyncRatePerFullGrowth / (groupPlantDef.plant.growDays * 30f);
                int   numUnderAverage   = 0;
                int   numAboveAverage   = 0;
                for (int k = plantsToSync.Count - 1; 0 <= k; k--)
                {
                    if (Mathf.Abs(averageGrowth - plantsToSync[k].Growth) <= marginFromAverage)
                    {
                        plantsToSync[k].Growth = averageGrowth;
                        plantsToSync.RemoveAt(k);
                    }
                    else
                    {
                        if (plantsToSync[k].Growth > averageGrowth)
                        {
                            numAboveAverage++;
                        }
                        if (plantsToSync[k].Growth < averageGrowth)
                        {
                            numUnderAverage++;
                        }
                    }
                }

                float underMultiplier = 1f;
                float aboveMultiplier = 1f;
                if (numUnderAverage > 0 && numAboveAverage > 0)
                {
                    if (numUnderAverage > numAboveAverage)
                    {
                        underMultiplier = numAboveAverage / (float)numUnderAverage;
                    }
                    else
                    {
                        aboveMultiplier = numUnderAverage / (float)numAboveAverage;
                    }
                }

                for (int l = 0; l < plantsToSync.Count; l++)
                {
                    if (plantsToSync[l].Growth < averageGrowth)
                    {
                        plantsToSync[l].Growth += marginFromAverage * underMultiplier;
                    }
                    if (plantsToSync[l].Growth > averageGrowth)
                    {
                        plantsToSync[l].Growth -= marginFromAverage * aboveMultiplier;
                    }
                }
            }
        }
 public static bool CanBeGroupedTo(this Building_PlantGrower lhs, Building_PlantGrower rhs)
 {
     return(lhs.IsConnectedTo(rhs) && lhs.GetPlantDefToGrow() == rhs.GetPlantDefToGrow());
 }
Example #17
0
 public static void Postfix(Building_PlantGrower __instance)
 {
     PriorityTracker.plantBuildingPriorities.Remove(__instance);
 }
Example #18
0
        public static bool PotentialWorkCellsGlobal(WorkGiver_Grower __instance, ref IEnumerable <IntVec3> __result, Pawn pawn)
        {
            List <IntVec3> result             = new List <IntVec3>();
            Danger         maxDanger          = pawn.NormalMaxDanger();
            List <Building_PlantGrower> bList = ListerBuildings_Patch.get_AllBuildingsColonistBuilding_PlantGrower(pawn.Map.listerBuildings);

            //List<Building> bList = pawn.Map.listerBuildings.allBuildingsColonist;
            sw1.Reset();
            sw2.Reset();
            sw3.Reset();
            sw4.Reset();
            sw5.Reset();
            sw6.Reset();
            sw7.Reset();
            sw7.Start();
            for (int j = 0; j < bList.Count; j++)
            {
                bool flag = false;;
                Building_PlantGrower building_PlantGrower = bList[j]; // as Building_PlantGrower;
                sw1.Start();
                flag = building_PlantGrower == null;
                sw1.Stop();
                if (flag)
                {
                    continue;
                }

                sw2.Start();
                flag = !ExtraRequirements(building_PlantGrower, pawn);
                sw2.Stop();
                if (flag)
                {
                    continue;
                }

                sw3.Start();
                flag = building_PlantGrower.IsForbidden(pawn);
                sw3.Stop();
                if (flag)
                {
                    continue;
                }

                sw4.Start();
                flag = !pawn.CanReach(building_PlantGrower, PathEndMode.OnCell, maxDanger);
                sw4.Stop();
                if (flag)
                {
                    continue;
                }

                sw5.Start();
                flag = building_PlantGrower.IsBurning();
                sw5.Stop();
                if (flag)
                {
                    continue;
                }

                sw6.Start();
                foreach (IntVec3 item in building_PlantGrower.OccupiedRect())
                {
                    result.Add(item);
                }
                sw6.Stop();

                wantedPlantDef = null;
            }
            sw7.Stop();
            Log.Message("1: " + sw1.ElapsedMilliseconds.ToString() + "ms");
            Log.Message("2: " + sw2.ElapsedMilliseconds.ToString() + "ms");
            Log.Message("3: " + sw3.ElapsedMilliseconds.ToString() + "ms");
            Log.Message("4: " + sw4.ElapsedMilliseconds.ToString() + "ms");
            Log.Message("5: " + sw5.ElapsedMilliseconds.ToString() + "ms");
            Log.Message("6: " + sw6.ElapsedMilliseconds.ToString() + "ms");
            Log.Message("7: " + sw6.ElapsedMilliseconds.ToString() + "ms");
            wantedPlantDef = null;
            List <Zone> zonesList = pawn.Map.zoneManager.AllZones;

            for (int j = 0; j < zonesList.Count; j++)
            {
                Zone_Growing growZone = zonesList[j] as Zone_Growing;
                if (growZone == null)
                {
                    continue;
                }

                if (growZone.cells.Count == 0)
                {
                    Log.ErrorOnce("Grow zone has 0 cells: " + growZone, -563487);
                }
                else if (ExtraRequirements(growZone, pawn) && !growZone.ContainsStaticFire && pawn.CanReach(growZone.Cells[0], PathEndMode.OnCell, maxDanger))
                {
                    for (int k = 0; k < growZone.cells.Count; k++)
                    {
                        result.Add(growZone.cells[k]);
                    }
                    wantedPlantDef = null;
                }
            }

            wantedPlantDef = null;
            __result       = result;
            return(false);
        }