Beispiel #1
0
 public static T FailOnNonMedicalBedNotOwned <T>(this T f, TargetIndex bedIndex, TargetIndex claimantIndex = TargetIndex.None) where T : IJobEndable
 {
     f.AddEndCondition(delegate
     {
         Pawn actor = f.GetActor();
         Pawn pawn  = (claimantIndex != TargetIndex.None) ? ((Pawn)actor.CurJob.GetTarget(claimantIndex).Thing) : actor;
         if (pawn.ownership != null)
         {
             Building_Bed building_Bed = (Building_Bed)actor.CurJob.GetTarget(bedIndex).Thing;
             if (building_Bed.Medical)
             {
                 if ((!pawn.InBed() || pawn.CurrentBed() != building_Bed) && !building_Bed.AnyUnoccupiedSleepingSlot)
                 {
                     return(JobCondition.Incompletable);
                 }
             }
             else
             {
                 if (!building_Bed.owners.Contains(pawn))
                 {
                     return(JobCondition.Incompletable);
                 }
                 if (pawn.InBed() && pawn.CurrentBed() == building_Bed)
                 {
                     int curOccupantSlotIndex = building_Bed.GetCurOccupantSlotIndex(pawn);
                     if (curOccupantSlotIndex >= building_Bed.owners.Count || building_Bed.owners[curOccupantSlotIndex] != pawn)
                     {
                         return(JobCondition.Incompletable);
                     }
                 }
             }
         }
         return(JobCondition.Ongoing);
     });
     return(f);
 }