示例#1
0
 static bool IsAwaiting(Pawn p)
 {
     if (HealthAIUtility.ShouldHaveSurgeryDoneNow(p))
     {
         return(p.InBed());
     }
     return(false);
 }
示例#2
0
        public override bool ShouldSkip(Pawn pawn, bool forced = false)
        {
            List <Pawn> allPawnsSpawned = pawn.Map.mapPawns.AllPawnsSpawned;

            for (int i = 0; i < allPawnsSpawned.Count; i++)
            {
                if (HealthAIUtility.ShouldHaveSurgeryDoneNow(allPawnsSpawned[i]))
                {
                    return(false);
                }
            }
            return(true);
        }
示例#3
0
        public override ThinkResult TryIssueJobPackage(Pawn pawn, JobIssueParams jobParams)
        {
            if (!HealthAIUtility.ShouldSeekMedicalRest(pawn))
            {
                return(ThinkResult.NoJob);
            }
            if (respectTimetable && RestUtility.TimetablePreventsLayDown(pawn) && !HealthAIUtility.ShouldHaveSurgeryDoneNow(pawn) && !HealthAIUtility.ShouldBeTendedNowByPlayer(pawn))
            {
                return(ThinkResult.NoJob);
            }
            if (RestUtility.DisturbancePreventsLyingDown(pawn))
            {
                return(ThinkResult.NoJob);
            }
            Thing thing = RestUtility.FindPatientBedFor(pawn);

            if (thing == null)
            {
                return(ThinkResult.NoJob);
            }
            return(new ThinkResult(JobMaker.MakeJob(JobDefOf.LayDown, thing), this));
        }
        public override ThinkResult TryIssueJobPackage(Pawn pawn, JobIssueParams jobParams)
        {
            ThinkResult result;

            if (!HealthAIUtility.ShouldSeekMedicalRest(pawn))
            {
                result = ThinkResult.NoJob;
            }
            else if (this.respectTimetable && RestUtility.TimetablePreventsLayDown(pawn) && !HealthAIUtility.ShouldHaveSurgeryDoneNow(pawn) && !HealthAIUtility.ShouldBeTendedNowByPlayer(pawn))
            {
                result = ThinkResult.NoJob;
            }
            else if (RestUtility.DisturbancePreventsLyingDown(pawn))
            {
                result = ThinkResult.NoJob;
            }
            else
            {
                Thing thing = RestUtility.FindPatientBedFor(pawn);
                if (thing == null)
                {
                    result = ThinkResult.NoJob;
                }
                else
                {
                    Job job = new Job(JobDefOf.LayDown, thing);
                    result = new ThinkResult(job, this, null, false);
                }
            }
            return(result);
        }
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            Pawn pawn2 = t as Pawn;

            if (pawn2 != null && pawn2 != pawn && !pawn2.InBed() && pawn2.RaceProps.IsFlesh && HealthAIUtility.ShouldHaveSurgeryDoneNow(pawn2))
            {
                LocalTargetInfo target = pawn2;
                bool            ignoreOtherReservations = forced;
                if (pawn.CanReserve(target, 1, -1, null, ignoreOtherReservations) && (!pawn2.InMentalState || !pawn2.MentalStateDef.IsAggro))
                {
                    if (!pawn2.Downed)
                    {
                        if (pawn2.IsColonist)
                        {
                            return(false);
                        }
                        if (!pawn2.IsPrisonerOfColony && pawn2.Faction != Faction.OfPlayer)
                        {
                            return(false);
                        }
                        if (pawn2.guest != null && pawn2.guest.Released)
                        {
                            return(false);
                        }
                    }
                    Building_Bed building_Bed = FindBed(pawn, pawn2);
                    if (building_Bed != null && pawn2.CanReserve(building_Bed, building_Bed.SleepingSlotsCount))
                    {
                        return(true);
                    }
                    return(false);
                }
            }
            return(false);
        }
示例#6
0
 public static bool ShouldSeekMedicalRestUrgent(Pawn pawn)
 {
     return(pawn.Downed || pawn.health.HasHediffsNeedingTend(false) || HealthAIUtility.ShouldHaveSurgeryDoneNow(pawn));
 }
 private static bool <get_AwaitingMedicalOperation> m__0(Pawn p)
 {
     return(HealthAIUtility.ShouldHaveSurgeryDoneNow(p) && p.InBed());
 }
示例#8
0
        public override bool HasJobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            Pawn pawn2 = t as Pawn;

            if (pawn2 == null || pawn2 == pawn || pawn2.InBed() || !pawn2.RaceProps.IsFlesh || !HealthAIUtility.ShouldHaveSurgeryDoneNow(pawn2) || !pawn.CanReserve(pawn2, 1, -1, null, forced) || (pawn2.InMentalState && pawn2.MentalStateDef.IsAggro))
            {
                return(false);
            }
            if (!pawn2.Downed)
            {
                if (pawn2.IsColonist)
                {
                    return(false);
                }
                if (!pawn2.IsPrisonerOfColony && pawn2.Faction != Faction.OfPlayer)
                {
                    return(false);
                }
                if (pawn2.guest != null && pawn2.guest.Released)
                {
                    return(false);
                }
            }
            Building_Bed building_Bed = FindBed(pawn, pawn2);

            if (building_Bed != null && pawn2.CanReserve(building_Bed, building_Bed.SleepingSlotsCount))
            {
                return(true);
            }
            return(false);
        }