예제 #1
0
        protected override void Complete()
        {
            this.tickComplete = Find.TickManager.TicksGame;
            CompTreeConnection compTreeConnection = this.tree.TryGetComp <CompTreeConnection>();

            if (compTreeConnection != null)
            {
                int CounterFixed = this.innerContainer.Count;
                for (int i = 0; i < CounterFixed; i++)
                {
                    Pawn pawn;

                    if ((pawn = (this.innerContainer[i] as Pawn)) != null)
                    {
                        compTreeConnection.RemoveDryad(pawn);
                    }
                }
                foreach (Pawn p in innerContainer)
                {
                    Find.WorldPawns.PassToWorld(p, PawnDiscardDecideMode.Discard);
                }

                ((Plant)GenSpawn.Spawn(ThingMaker.MakeThing(ThingDef.Named("AA_Plant_CorruptedPodGauranlen"), null), this.parent.Position, this.parent.Map, WipeMode.Vanish)).Growth = 1f;
            }
            this.parent.Destroy(DestroyMode.Vanish);
        }
        public bool ShouldEnterCorruptedPod(CompTreeConnection compTreeConnection, Pawn dryad)
        {
            List <Pawn> dryads = (List <Pawn>) typeof(CompTreeConnection).GetField("dryads", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(compTreeConnection);

            List <Pawn> tmpDryads = (List <Pawn>) typeof(CompTreeConnection).GetField("tmpDryads", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(compTreeConnection);

            if (compTreeConnection.parent.Map.listerThings.ThingsOfDef(ThingDef.Named("AA_CorruptedGaumakerCocoon")).Count == 0)
            {
                IntVec3 loc;
                if (CellFinder.TryFindRandomCellNear(compTreeConnection.parent.Position, compTreeConnection.parent.Map, 10, delegate(IntVec3 x)
                {
                    Thing thing;
                    return(ThingDefOf.Plant_PodGauranlen.CanEverPlantAt(x, compTreeConnection.parent.Map, out thing, true, false).Accepted);
                }, out loc, -1))
                {
                    podthing = GenSpawn.Spawn(ThingMaker.MakeThing(ThingDef.Named("AA_CorruptedGaumakerCocoon"), null), loc, compTreeConnection.parent.Map, WipeMode.Vanish);
                }
            }
            if (dryads.NullOrEmpty <Pawn>() || dryads.Count < 3 || !dryads.Contains(dryad))
            {
                return(false);
            }
            tmpDryads.Clear();
            for (int i = 0; i < dryads.Count; i++)
            {
                if (dryads[i].kindDef == PawnKindDef.Named("AA_Dryad_Corruptor"))
                {
                    tmpDryads.Add(dryads[i]);
                }
            }
            if (tmpDryads.Count < 3)
            {
                tmpDryads.Clear();

                return(false);
            }
            tmpDryads.SortBy((Pawn x) => - x.ageTracker.AgeChronologicalTicks);
            for (int j = 0; j < 3; j++)
            {
                if (tmpDryads[j] == dryad)
                {
                    tmpDryads.Clear();

                    return(true);
                }
            }
            tmpDryads.Clear();

            return(false);
        }
 protected override Job TryGiveJob(Pawn pawn)
 {
     if (!ModsConfig.IdeologyActive)
     {
         return(null);
     }
     if (pawn.connections == null || pawn.connections.ConnectedThings.NullOrEmpty <Thing>())
     {
         return(null);
     }
     foreach (Thing thing in pawn.connections.ConnectedThings)
     {
         CompTreeConnection compTreeConnection = thing.TryGetComp <CompTreeConnection>();
         if (compTreeConnection != null && this.ShouldEnterCorruptedPod(compTreeConnection, pawn) && pawn.CanReach(podthing, PathEndMode.Touch, Danger.Deadly, false, false, TraverseMode.ByPawn))
         {
             return(JobMaker.MakeJob(DefDatabase <JobDef> .GetNamed("AA_MergeIntoCorruptedPod"), thing, podthing));
         }
     }
     return(null);
 }