public override IEnumerable <FloatMenuOption> GetFloatMenuOptions(Pawn myPawn) { if (myPawn.RaceProps.Humanlike && !ForPrisoners && Medical && !myPawn.Drafted && Faction == Faction.OfPlayer && RestUtility.CanUseBedEver(myPawn, def)) { if (!MedPodHealthAIUtility.IsValidRaceForMedPod(myPawn, DisallowedRaces)) { yield return(new FloatMenuOption("UseMedicalBed".Translate() + " (" + "MedPod_FloatMenu_RaceNotAllowed".Translate(myPawn.def.label.CapitalizeFirst()) + ")", null)); yield break; } if (!MedPodHealthAIUtility.ShouldPawnSeekMedPod(myPawn, AlwaysTreatableHediffs, NeverTreatableHediffs)) { yield return(new FloatMenuOption("UseMedicalBed".Translate() + " (" + "NotInjured".Translate() + ")", null)); yield break; } if (MedPodHealthAIUtility.ShouldPawnSeekMedPod(myPawn, AlwaysTreatableHediffs, NeverTreatableHediffs) && !powerComp.PowerOn) { yield return(new FloatMenuOption("UseMedicalBed".Translate() + " (" + "MedPod_FloatMenu_Unpowered".Translate() + ")", null)); yield break; } if (MedPodHealthAIUtility.ShouldPawnSeekMedPod(myPawn, AlwaysTreatableHediffs, NeverTreatableHediffs) && this.IsForbidden(myPawn)) { yield return(new FloatMenuOption("UseMedicalBed".Translate() + " (" + "ForbiddenLower".Translate() + ")", null)); yield break; } Action action = delegate { if (!ForPrisoners && Medical && myPawn.CanReserveAndReach(this, PathEndMode.ClosestTouch, Danger.Deadly, SleepingSlotsCount, -1, null, ignoreOtherReservations: true)) { if (myPawn.CurJobDef == JobDefOf.LayDown && myPawn.CurJob.GetTarget(TargetIndex.A).Thing == this) { myPawn.CurJob.restUntilHealed = true; } else { Job job = JobMaker.MakeJob(JobDefOf.LayDown, this); job.restUntilHealed = true; myPawn.jobs.TryTakeOrderedJob(job); } myPawn.mindState.ResetLastDisturbanceTick(); } }; yield return(FloatMenuUtility.DecoratePrioritizedTask(new FloatMenuOption("UseMedicalBed".Translate(), action), myPawn, this, (AnyUnoccupiedSleepingSlot ? "ReservedBy" : "SomeoneElseSleeping").CapitalizeFirst())); } }
static void Postfix(ref bool __result, Thing bedThing, Pawn sleeper) { if (bedThing is Building_BedMedPod bedMedPod && (!bedMedPod.powerComp.PowerOn || !MedPodHealthAIUtility.ShouldPawnSeekMedPod(sleeper) || !MedPodHealthAIUtility.IsValidRaceForMedPod(sleeper, bedMedPod.DisallowedRaces))) { __result = false; } }
static void Postfix(ref bool __result, Thing bedThing, Pawn sleeper) { if (bedThing is Building_BedMedPod bedMedPod && (!bedMedPod.powerComp.PowerOn || bedMedPod.IsForbidden(sleeper) || !MedPodHealthAIUtility.ShouldPawnSeekMedPod(sleeper, bedMedPod.AlwaysTreatableHediffs, bedMedPod.NeverTreatableHediffs) || MedPodHealthAIUtility.HasUsageBlockingHediffs(sleeper, bedMedPod.UsageBlockingHediffs) || !MedPodHealthAIUtility.IsValidRaceForMedPod(sleeper, bedMedPod.DisallowedRaces) || bedMedPod.Aborted)) { __result = false; } }