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); }
public override TipSignal GetTooltip() { TipSignal tip = base.GetTooltip(); tip.text += "\n" + DroidPawn.StoredEnergyText(this); return(tip); }
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); }
public override string GetInspectString() { return(base.GetInspectString() + DroidPawn.StoredEnergyText(this) + "\n"); }