protected override Job TryGiveJob(Pawn pawn) { //Log.Message("Trying to give job"); int transportersGroup = pawn.mindState.duty.transportersGroup; List <Pawn> allPawnsSpawned = pawn.Map.mapPawns.AllPawnsSpawned; for (int i = 0; i < allPawnsSpawned.Count; i++) { if (allPawnsSpawned[i] != pawn && allPawnsSpawned[i].CurJobDef == DefDatabase <JobDef> .GetNamed("PD_HaulToPit")) { CompPit transporter = ((JobDriver_HaulToPit)allPawnsSpawned[i].jobs.curDriver).Transporter; if (transporter != null && transporter.groupID == transportersGroup) { return(null); } } } PitUtility.GetTransportersInGroup(transportersGroup, pawn.Map, JobGiver_EnterPit.tmpTransporters); CompPit compTransporter = JobGiver_EnterPit.FindMyTransporter(JobGiver_EnterPit.tmpTransporters, pawn); JobGiver_EnterPit.tmpTransporters.Clear(); if (compTransporter == null || !pawn.CanReach(compTransporter.parent, PathEndMode.Touch, Danger.Deadly, false, TraverseMode.ByPawn)) { return(null); } return(new Job(DefDatabase <JobDef> .GetNamed("PD_EnterPit"), compTransporter.parent)); }
public List <CompPit> TransportersInGroup(Map map) { if (!this.LoadingInProgressOrReadyToLaunch) { return(null); } PitUtility.GetTransportersInGroup(this.groupID, map, CompPit.tmpTransportersInGroup); return(CompPit.tmpTransportersInGroup); }
public void TryRemoveLord(Map map) { if (!this.LoadingInProgressOrReadyToLaunch) { return; } Lord lord = PitUtility.FindLord(this.groupID, map); if (lord != null) { map.lordManager.RemoveLord(lord); } }
protected override Job TryGiveJob(Pawn pawn) { int transportersGroup = pawn.mindState.duty.transportersGroup; PitUtility.GetTransportersInGroup(transportersGroup, pawn.Map, JobGiver_HaulToPit.tmpTransporters); for (int i = 0; i < JobGiver_HaulToPit.tmpTransporters.Count; i++) { CompPit transporter = JobGiver_HaulToPit.tmpTransporters[i]; if (LoadPitJobUtility.HasJobOnTransporter(pawn, transporter)) { return(LoadPitJobUtility.JobOnTransporter(pawn, transporter)); } } return(null); }