public static IntVec3 GetBedSleepingSlotPosFor(Pawn pawn, Building_Bed bed) { for (int i = 0; i < bed.owners.Count; i++) { if (bed.owners[i] == pawn) { return(bed.GetSleepingSlotPos(i)); } } for (int j = 0; j < bed.SleepingSlotsCount; j++) { Pawn curOccupant = bed.GetCurOccupant(j); if ((j >= bed.owners.Count || bed.owners[j] == null) && curOccupant == pawn) { return(bed.GetSleepingSlotPos(j)); } } for (int k = 0; k < bed.SleepingSlotsCount; k++) { Pawn curOccupant2 = bed.GetCurOccupant(k); if ((k >= bed.owners.Count || bed.owners[k] == null) && curOccupant2 == null) { return(bed.GetSleepingSlotPos(k)); } } Log.Error("Could not find good sleeping slot position for " + pawn + ". Perhaps AnyUnoccupiedSleepingSlot check is missing somewhere."); return(bed.GetSleepingSlotPos(0)); }