static void Postfix(Pawn __instance) { if (!__instance.Dead) { EscapeTracker.Of(__instance)?.Tick(); } }
static void Postfix(Pawn __instance) { var escapeTracker = EscapeTracker.Of(__instance); Scribe_Deep.Look(ref escapeTracker, "EscapeTracker", new object[] { __instance }); EscapeTracker.Save(__instance, escapeTracker); }
protected override bool Satisfied(Pawn pawn) { if (pawn.IsPrisoner) { //show tutorials Tutorials.Introduction(); Tutorials.Management(); IntVec3 c; var need = pawn.needs.TryGetNeed <Need_Motivation>(); if (need == null) { if (!pawn.guest.PrisonerIsSecure || RCellFinder.TryFindBestExitSpot(pawn, out c, TraverseMode.ByPawn)) { return(false); } else if (PrisonLaborUtility.LaborEnabled(pawn)) { return(true); } else { return(false); } } // Prisoner will escape if get ready to run. // If he can run he will start ticking impatient, once complete he will get ready. var escapeTracker = EscapeTracker.Of(pawn, true); if (pawn.guest.PrisonerIsSecure && RCellFinder.TryFindBestExitSpot(pawn, out c, TraverseMode.ByPawn)) { if (escapeTracker.ReadyToEscape) { return(false); } else { escapeTracker.CanEscape = true; } } else { escapeTracker.CanEscape = false; } if (PrisonLaborUtility.LaborEnabled(pawn)) { return(true); } need.IsPrisonerWorking = false; } return(false); }
protected override string GetTip(Pawn pawn) { var escapeTracker = EscapeTracker.Of(pawn); if (escapeTracker != null) { return($"(Cap:{ escapeTracker.EscapeLevel})"); } return(""); }
public static void AppendDevLines(Listing_Standard listingStandard) { var pawn = Find.Selector.SingleSelectedThing as Pawn; var escapeTracker = EscapeTracker.Of(pawn); if (escapeTracker != null) { listingStandard.Label("Dev: Ready to escape: " + (escapeTracker.ReadyToEscape ? "ready" : escapeTracker.ReadyToRunPercentage + "%") + $" (Cap:{escapeTracker.EscapeLevel})", -1f); } }
protected override string GetTextFor(Pawn pawn) { var escapeTracker = EscapeTracker.Of(pawn); if (escapeTracker != null) { return(escapeTracker.ReadyToEscape ? "ready" : escapeTracker.ReadyToRunPercentage + " %"); } return("0 %"); }
public static bool IsReadyToEscape(Pawn pawn) { var escapeTracker = EscapeTracker.Of(pawn, true); if (escapeTracker.ReadyToEscape) { return(true); } else { return(false); } }
public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false) { var prisoner = t as Pawn; var need = prisoner?.needs.TryGetNeed <Need_Motivation>(); if (need == null || prisoner == null) { return(null); } if (!ShouldTakeCareOfPrisoner(pawn, prisoner)) { return(null); } if (prisoner.Downed || !pawn.CanReserve(t, 1, -1, null, false) || !prisoner.Awake()) { return(null); } if (pawn.IsPrisoner) { return(null); } var escapeTracker = EscapeTracker.Of(prisoner, true); if (!PrisonLaborUtility.LaborEnabled(prisoner) && !escapeTracker.CanEscape) { return(null); } if (PrisonLaborUtility.RecruitInLaborEnabled(prisoner)) { return(new Job(JobDefOf.PrisonerAttemptRecruit, t)); } if (PrisonLaborUtility.ConvertInLaborEnabled(prisoner)) { return(new Job(JobDefOf.PrisonerConvert, t)); } if ((!PrisonLaborUtility.WorkTime(prisoner) || !need.ShouldBeMotivated) && !escapeTracker.CanEscape) { return(null); } return(new Job(DefDatabase <JobDef> .GetNamed("PrisonLabor_PrisonerSupervise"), prisoner)); }