protected override Job TryGiveTerminalJob(Pawn pawn)
        {
            if (!(pawn is DroidPawn))
            {
                return(null);
            }

            DroidPawn droid = (DroidPawn)pawn;

            if (droid.storedEnergy < this.chargeThreshold * DroidPawn.storedEnergyMax)
            {
                IEnumerable <Building_DroidCharger> buildings = Find.ListerBuildings.AllBuildingsColonistOfClass <Building_DroidCharger> ();
                Thing target = GenClosest.ClosestThingReachableGlobal(pawn.Position,
                                                                      buildings,
                                                                      PathMode.OnSquare,
                                                                      RegionTraverseParameters.For(pawn),
                                                                      this.maxDistance,
                                                                      (Thing thing) => { return(((Building_DroidCharger)thing).IsOnAndAvailable(pawn)); });

                if (target != null)
                {
                    return(new Job(DefDatabase <JobDef> .GetNamed("DroidCharge"), new TargetPack(target)));
                }
            }

            return(null);
        }
Esempio n. 2
0
        public override TipSignal GetTooltip()
        {
            TipSignal tip = base.GetTooltip();

            tip.text += "\n" + DroidPawn.StoredEnergyText(this);
            return(tip);
        }
Esempio n. 3
0
        private void Activate()
        {
            this.Destroy(DestroyMode.Vanish);
            String kindName = base.def.defName;

            if (kindName.EndsWith(endStr))
            {
                String      pawnKindName = kindName.Remove(kindName.Length - endStr.Length);
                PawnKindDef pawnKind     = DefDatabase <PawnKindDef> .GetNamed(pawnKindName);

                DroidPawn droid = (DroidPawn)PawnGenerator.GeneratePawn(pawnKind, Find.FactionManager.FirstFactionOfDef(DefDatabase <FactionDef> .GetNamed("Droids")));
                droid.health       = base.health;
                droid.storedEnergy = this.storedEnergy;
                GenSpawn.Spawn(droid, base.Position);
            }
            else
            {
                Log.Error("The defName must end in Inactive; is " + kindName);
            }
        }
        protected override IEnumerable <Toil> MakeNewToils()
        {
            Building_DroidCharger building = (Building_DroidCharger)TargetThingA;

            // Go to the charging pad, but stop trying if it isn't on or is taken.
            Toil gotoToil = Toils_Goto.GotoThing(TargetIndex.A, PathMode.OnSquare);

            gotoToil.AddFailCondition(() => {
                return(!building.IsOnAndAvailable(pawn));
            });
            yield return(gotoToil);

            // Charge until at least 99% full, or the charger is off or taken.
            DroidPawn droid      = (DroidPawn)this.pawn;
            Toil      chargeToil = new Toil();

            chargeToil.initAction = () => {
                if (building.Position != pawn.Position)
                {
                    pawn.jobs.EndCurrentJob(JobCondition.Errored);
                }
            };
            chargeToil.defaultCompleteMode = ToilCompleteMode.Never;
            chargeToil.AddFailCondition(() => {
                return(!building.IsOnAndAvailable(pawn));
            });
            chargeToil.AddEndCondition(() => {
                if (droid.storedEnergy >= 0.99 * DroidPawn.storedEnergyMax)
                {
                    return(JobCondition.Succeeded);
                }
                return(JobCondition.Ongoing);
            });

            yield return(chargeToil);
        }
Esempio n. 5
0
 public override string GetInspectString()
 {
     return(base.GetInspectString() + DroidPawn.StoredEnergyText(this) + "\n");
 }