コード例 #1
0
        public static void NotifyNearbyPawnsPathOfVehicleTrack(VehiclePawn vehicle)
        {
            Room room = RegionAndRoomQuery.GetRoom(vehicle, RegionType.Set_Passable);

            for (int i = 0; i < PawnNotifyCellCount; i++)
            {
                IntVec3 c = vehicle.Position + GenRadial.RadialPattern[i];
                if (c.InBounds(vehicle.Map))
                {
                    List <Thing> thingList = c.GetThingList(vehicle.Map);
                    for (int j = 0; j < thingList.Count; j++)
                    {
                        Pawn pawn = thingList[j] as Pawn;
                        if (pawn != null && pawn.RaceProps.intelligence >= Intelligence.ToolUser)
                        {
                            Room room2 = RegionAndRoomQuery.GetRoom(pawn, RegionType.Set_Passable);
                            if (room2 == null || room2.CellCount == 1 || (room2 == room && GenSight.LineOfSight(vehicle.Position, pawn.Position, vehicle.Map, true, null, 0, 0)))
                            {
                                pawn.Notify_DangerousVehiclePath(vehicle);
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        public static Room FindNearbyPrivateRoom(Pawn pawn)
        {
            Region currentRegion = RegionAndRoomQuery.GetRegion(pawn);
            Room   currentRoom   = RegionAndRoomQuery.GetRoom(pawn);

            return(null);
        }
コード例 #3
0
        // RimWorld.WorkGiver_Warden_DeliverFood
        //[DetourMethod(typeof(RimWorld.WorkGiver_Warden_DeliverFood), "FoodAvailableInRoomTo")]
        private static bool FoodAvailableInRoomTo(Pawn prisoner)
        {
            if (prisoner.carryTracker.CarriedThing != null && WorkGiver_Warden_DeliverFood.NutritionAvailableForFrom(prisoner, prisoner.carryTracker.CarriedThing) > 0f)
            {
                return(true);
            }
            float num  = 0f;
            float num2 = 0f;
            Room  room = RegionAndRoomQuery.GetRoom(prisoner);

            if (room == null)
            {
                return(false);
            }
            for (int i = 0; i < room.RegionCount; i++)
            {
                Region       region = room.Regions[i];
                List <Thing> list   = region.ListerThings.ThingsInGroup(ThingRequestGroup.FoodSourceNotPlantOrTree);
                for (int j = 0; j < list.Count; j++)
                {
                    Thing thing = list[j];
                    // --------- mod ------------
                    if ((thing.def == ThingDefOf.NutrientPasteDispenser & prisoner.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation)) || thing.def.ingestible.preferability > FoodPreferability.NeverForNutrition)
                    {
                        num2 += WorkGiver_Warden_DeliverFood.NutritionAvailableForFrom(prisoner, thing);
                    }
                    // --------- mod end ------------
                }
                //if (region.ListerThings.ThingsOfDef(ThingDefOf.NutrientPasteDispenser).Any<Thing>() && prisoner.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation))
                //{
                //	return true;
                //}
                List <Thing> list2 = region.ListerThings.ThingsInGroup(ThingRequestGroup.Pawn);
                for (int k = 0; k < list2.Count; k++)
                {
                    Pawn pawn = list2[k] as Pawn;
                    if (pawn.IsPrisonerOfColony && pawn.needs.food.CurLevelPercentage < pawn.needs.food.PercentageThreshHungry + 0.02f && (pawn.carryTracker.CarriedThing == null || !pawn.RaceProps.WillAutomaticallyEat(pawn.carryTracker.CarriedThing)))
                    {
                        num += pawn.needs.food.NutritionWanted;
                    }
                }
            }

            return(num2 + 0.5f >= num);
        }
コード例 #4
0
 public Room GetRoom(RegionType type)
 {
     return(RegionAndRoomQuery.GetRoom(this, type));
 }
コード例 #5
0
ファイル: JobGiver_NekoNuzzle.cs プロジェクト: thakyZ/Nekos
        protected override Job TryGiveJob(Pawn pawn)
        {
            bool flag = pawn.RaceProps.nuzzleMtbHours <= 0f;
            Job  result;

            if (!flag)
            {
                List <Pawn> source = pawn.Map.mapPawns.SpawnedPawnsInFaction(pawn.Faction);
                bool        flag2  = !GenCollection.TryRandomElement <Pawn>(from p in source
                                                                            where p.RaceProps.Humanlike && p.Position.InHorDistOf(pawn.Position, 15f) && RegionAndRoomQuery.GetRoom(pawn, RegionType.Set_Passable) == RegionAndRoomQuery.GetRoom(p, RegionType.Set_Passable) && !ForbidUtility.IsForbidden(p.Position, pawn) && PawnUtility.CanCasuallyInteractNow(p, false) && p != pawn && p.relations.OpinionOf(pawn) > 30
                                                                            select p, out Pawn pawn2);
                if (flag2)
                {
                    result = null;
                }
                else
                {
                    result = new Job(JobDefOf.Nuzzle, pawn2)
                    {
                        locomotionUrgency = LocomotionUrgency.Walk,
                        expiryInterval    = 3000
                    };
                }
            }
            else
            {
                result = null;
            }
            return(result);
        }
コード例 #6
0
 public static float GetRoomSurface(Thing thing)
 {
     return(RegionAndRoomQuery.GetRoom(thing).CellCount);
 }