示例#1
0
        public override void Tick()
        {
            base.Tick();

            if (!this.IsHashIntervalTick(AutoDef.dischargePeriodTicks))
            {
                return;
            }

            AutocleanerJobDef job = CurJobDef as AutocleanerJobDef;

            if (job == null)
            {
                return;
            }

            charge -= job.dischargePerSecond * GenTicks.TicksToSeconds(AutoDef.dischargePeriodTicks);
            if (charge < 0)
            {
                charge = 0;
            }
            if (charge > AutoDef.charge)
            {
                charge = AutoDef.charge;
            }
        }
示例#2
0
        protected override IEnumerable <Toil> MakeNewToils()
        {
            PawnAutocleaner   cleaner = pawn as PawnAutocleaner;
            AutocleanerJobDef def     = job.def as AutocleanerJobDef;

            if (cleaner == null || def == null)
            {
                EndJobWith(JobCondition.Incompletable);
                yield break;
            }

            yield return(new Toil()
            {
                initAction = delegate()
                {
                    Map.pawnDestinationReservationManager.Reserve(pawn, job, pawn.Position);
                    pawn.pather.StopDead();
                },
                tickAction = delegate()
                {
                    if (!pawn.IsHashIntervalTick(60))
                    {
                        return;
                    }

                    if (cleaner.charge < cleaner.AutoDef.charge * 0.75f)
                    {
                        EndJobWith(JobCondition.InterruptForced);
                        return;
                    }
                    if (cleaner.health.summaryHealth.SummaryHealthPercent >= 1)
                    {
                        EndJobWith(JobCondition.Succeeded);
                        return;
                    }
                },
                defaultCompleteMode = ToilCompleteMode.Never,
            });

            yield break;
        }
        protected override IEnumerable <Toil> MakeNewToils()
        {
            PawnAutocleaner   cleaner = pawn as PawnAutocleaner;
            AutocleanerJobDef def     = job.def as AutocleanerJobDef;

            CompPowerTrader comp = pawn.TryGetComp <CompPowerTrader>();

            if (comp != null)
            {
                PowerConnectionMaker.DisconnectFromPowerNet(comp);
            }

            Toil initExtractTargetFromQueue = Toils_JobTransforms.ClearDespawnedNullOrForbiddenQueuedTargets(TargetIndex.A, null);

            yield return(initExtractTargetFromQueue);

            yield return(Toils_JobTransforms.SucceedOnNoTargetInQueue(TargetIndex.A));

            yield return(Toils_JobTransforms.ExtractNextTargetFromQueue(TargetIndex.A, true));

            yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.OnCell).JumpIfDespawnedOrNullOrForbidden(TargetIndex.A, initExtractTargetFromQueue).JumpIfOutsideHomeArea(TargetIndex.A, initExtractTargetFromQueue));

            Toil clean = new Toil();

            clean.initAction = delegate()
            {
                cleaningWorkDone          = 0f;
                totalCleaningWorkDone     = 0f;
                totalCleaningWorkRequired = Filth.def.filth.cleaningWorkToReduceThickness * Filth.thickness;
            };
            clean.tickAction = delegate()
            {
                Filth filth = Filth;
                cleaningWorkDone      += 1f;
                totalCleaningWorkDone += 1f;

                if (cleaner != null && def != null)
                {
                    cleaner.charge -= def.activeDischargePerSecond / cleaner.AutoDef.dischargePeriodTicks;

                    if (cleaner.LowPower)
                    {
                        EndJobWith(JobCondition.Incompletable);
                        return;
                    }
                }

                if (cleaningWorkDone > filth.def.filth.cleaningWorkToReduceThickness)
                {
                    filth.ThinFilth();
                    cleaningWorkDone = 0f;
                    if (filth.Destroyed)
                    {
                        clean.actor.records.Increment(RecordDefOf.MessesCleaned);
                        ReadyForNextToil();
                        return;
                    }
                }
            };
            clean.defaultCompleteMode = ToilCompleteMode.Never;
            clean.WithProgressBar(TargetIndex.A, () => totalCleaningWorkDone / totalCleaningWorkRequired, true, -0.5f);
            clean.PlaySustainerOrSound(() => SoundDefOf.Interact_CleanFilth);
            clean.JumpIfDespawnedOrNullOrForbidden(TargetIndex.A, initExtractTargetFromQueue);
            clean.JumpIfOutsideHomeArea(TargetIndex.A, initExtractTargetFromQueue);
            yield return(clean);

            yield return(Toils_Jump.Jump(initExtractTargetFromQueue));

            yield break;
        }