public static GraveDig_JobParameters RetrieveGDJP(this Pawn p, GraveDiggerDef GDD, bool MyDebug = false) { string myDebugStr = MyDebug ? p.LabelShort + " RetrieveGraveDiggerDef RetrieveGDJP " : ""; GraveDig_JobParameters GDJP = p.WorkerFulfillsRequirements(GDD); if (GDJP == null) { if (MyDebug) { Log.Warning(myDebugStr + "pawns does not fulfil requirements; exit"); } return(null); } if (!GDJP.target.HasEligibleGraves) { if (MyDebug) { Log.Warning(myDebugStr + "CRS has no eligible category def; exit"); } return(null); } return(GDJP); }
protected override Job TryGiveJob(Pawn pawn) { string myDebugStr = PreRetrieveDebug ? pawn.LabelShort + " Ai_GraveDigger_JobGiver TryGiveJob " : ""; if (pawn.NegligiblePawn()) { if (PreRetrieveDebug) { Log.Warning(myDebugStr + "negligible; exit"); } return(null); } GraveDiggerDef DefToUse = pawn.RetrieveGDD(out MyDebug, PreRetrieveDebug); GraveDig_JobParameters GDJP = pawn.RetrieveGDJP(DefToUse, MyDebug); if (!pawn.GetClosestCompatibleGrave(GDJP.target, out Thing FoundGrave, out Thing FoundCorpse, MyDebug)) { if (MyDebug) { Log.Warning(myDebugStr + "grave or corpse " + FoundGrave?.Label + " " + FoundGrave?.Position + " is not ok; exit"); } return(null); } if (MyDebug) { Log.Warning(myDebugStr + " accepting " + DefToUse.jobDef.defName + " for grave " + FoundGrave?.Label + " " + FoundGrave?.Position + " => go go"); } Job job = JobMaker.MakeJob(DefToUse.jobDef, FoundGrave, FoundCorpse); return(job); }
private bool CheckAndFillWorkFlow() { if (!HasGDJP) { if (MyCsDebug || MyDebug) { Log.Warning("Ai_GraveDig_JobDriver cant work without workflow, Loading it"); } if (pawn.RetrieveGDD(out MyDebug, MyCsDebug) is GraveDiggerDef DefToUse && pawn.RetrieveGDJP(DefToUse, MyDebug) is GraveDig_JobParameters GDJP) { RetrievedGDJP = GDJP; return(true); } return(false); } return(true); }