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); } } } } } }
public static Room FindNearbyPrivateRoom(Pawn pawn) { Region currentRegion = RegionAndRoomQuery.GetRegion(pawn); Room currentRoom = RegionAndRoomQuery.GetRoom(pawn); return(null); }
// 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); }
public Room GetRoom(RegionType type) { return(RegionAndRoomQuery.GetRoom(this, type)); }
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); }
public static float GetRoomSurface(Thing thing) { return(RegionAndRoomQuery.GetRoom(thing).CellCount); }