public static Building_Bed FindCribFor(Pawn baby, Pawn traveler) { Building_Bed crib = null; // Is a crib already assigned to the baby? if (baby.ownership != null && baby.ownership.OwnedBed != null && ChildrenUtility.IsBedCrib(baby.ownership.OwnedBed)) { Building_Bed bedThing = baby.ownership.OwnedBed; if (RestUtility.IsValidBedFor(bedThing, baby, traveler, false, false)) { crib = baby.ownership.OwnedBed; } } // If not, let's look for one else { foreach (var thingDef in RestUtility.AllBedDefBestToWorst) { if (RestUtility.CanUseBedEver(baby, thingDef) && thingDef.building.bed_maxBodySize <= 0.6f) { Building_Bed find_crib = (Building_Bed)GenClosest.ClosestThingReachable(baby.Position, baby.Map, ThingRequest.ForDef(thingDef), PathEndMode.OnCell, TraverseParms.For(traveler), 9999f, (Thing b) => (RestUtility.IsValidBedFor(b, baby, traveler, false, false)), null); if (find_crib != null) { crib = find_crib; } } } } return(crib); }