public override void PostLoadSpecial(ThingDef parent)
 {
     if (parent.thingClass == typeof(Building_Bed))
     {
         maxAssignedPawnsCount = BedUtility.GetSleepingSlotsCount(parent.size);
     }
 }
Exemple #2
0
        public static IntVec3 GetSleepingSlotPos(int index, IntVec3 bedCenter, Rot4 bedRot, IntVec2 bedSize)
        {
            int sleepingSlotsCount = BedUtility.GetSleepingSlotsCount(bedSize);

            if (index < 0 || index >= sleepingSlotsCount)
            {
                Log.Error(string.Concat(new object[]
                {
                    "Tried to get sleeping slot pos with index ",
                    index,
                    ", but there are only ",
                    sleepingSlotsCount,
                    " sleeping slots available."
                }), false);
                return(bedCenter);
            }
            CellRect cellRect = GenAdj.OccupiedRect(bedCenter, bedRot, bedSize);

            if (bedRot == Rot4.North)
            {
                return(new IntVec3(cellRect.minX + index, bedCenter.y, cellRect.minZ));
            }
            if (bedRot == Rot4.East)
            {
                return(new IntVec3(cellRect.minX, bedCenter.y, cellRect.maxZ - index));
            }
            if (bedRot == Rot4.South)
            {
                return(new IntVec3(cellRect.minX + index, bedCenter.y, cellRect.maxZ));
            }
            return(new IntVec3(cellRect.maxX, bedCenter.y, cellRect.maxZ - index));
        }
        public static bool CanPotentiallyLinkTo_Static(ThingDef facilityDef, IntVec3 facilityPos, Rot4 facilityRot, ThingDef myDef, IntVec3 myPos, Rot4 myRot)
        {
            CompProperties_Facility compProperties = facilityDef.GetCompProperties <CompProperties_Facility>();

            if (compProperties.mustBePlacedAdjacent)
            {
                CellRect rect  = GenAdj.OccupiedRect(myPos, myRot, myDef.size);
                CellRect rect2 = GenAdj.OccupiedRect(facilityPos, facilityRot, facilityDef.size);
                if (!GenAdj.AdjacentTo8WayOrInside(rect, rect2))
                {
                    return(false);
                }
            }
            if (compProperties.mustBePlacedAdjacentCardinalToBedHead)
            {
                if (!myDef.IsBed)
                {
                    return(false);
                }
                CellRect other = GenAdj.OccupiedRect(facilityPos, facilityRot, facilityDef.size);
                bool     flag  = false;
                int      sleepingSlotsCount = BedUtility.GetSleepingSlotsCount(myDef.size);
                for (int i = 0; i < sleepingSlotsCount; i++)
                {
                    IntVec3 sleepingSlotPos = BedUtility.GetSleepingSlotPos(i, myPos, myRot, myDef.size);
                    if (sleepingSlotPos.IsAdjacentToCardinalOrInside(other))
                    {
                        flag = true;
                    }
                }
                if (!flag)
                {
                    return(false);
                }
            }
            if (!compProperties.mustBePlacedAdjacent && !compProperties.mustBePlacedAdjacentCardinalToBedHead)
            {
                Vector3 a = Gen.TrueCenter(myPos, myRot, myDef.size, myDef.Altitude);
                Vector3 b = Gen.TrueCenter(facilityPos, facilityRot, facilityDef.size, facilityDef.Altitude);
                if (Vector3.Distance(a, b) > compProperties.maxDistance)
                {
                    return(false);
                }
            }
            return(true);
        }
Exemple #4
0
 public static IntVec3 GetSleepingSlotPos(int index, IntVec3 bedCenter, Rot4 bedRot, IntVec2 bedSize)
 {
     int sleepingSlotsCount = BedUtility.GetSleepingSlotsCount(bedSize);
     if (index >= 0 && index < sleepingSlotsCount)
     {
         CellRect cellRect = GenAdj.OccupiedRect(bedCenter, bedRot, bedSize);
         if (bedRot == Rot4.North)
         {
             return new IntVec3(cellRect.minX + index, bedCenter.y, cellRect.minZ);
         }
         if (bedRot == Rot4.East)
         {
             return new IntVec3(cellRect.minX, bedCenter.y, cellRect.maxZ - index);
         }
         if (bedRot == Rot4.South)
         {
             return new IntVec3(cellRect.minX + index, bedCenter.y, cellRect.maxZ);
         }
         return new IntVec3(cellRect.maxX, bedCenter.y, cellRect.maxZ - index);
     }
     Log.Error("Tried to get sleeping slot pos with index " + index + ", but there are only " + sleepingSlotsCount + " sleeping slots available.");
     return bedCenter;
 }