public static void DoClamor(Thing source, IntVec3 position, float radius, ClamorDef type) { if (source.MapHeld == null) { return; } Region region = position.GetRegion(source.MapHeld); if (region == null) { return; } RegionTraverser.BreadthFirstTraverse(region, (Region from, Region r) => r.door == null || r.door.Open, delegate(Region r) { List <Thing> list = r.ListerThings.ThingsInGroup(ThingRequestGroup.Pawn); for (int i = 0; i < list.Count; i++) { Pawn pawn = list[i] as Pawn; float num = Mathf.Clamp01(pawn.health.capacities.GetLevel(PawnCapacityDefOf.Hearing)); if (num > 0f && pawn.Position.InHorDistOf(position, radius * num)) { pawn.HearClamor(source, type); } } return(false); }, 15); }
public static void DoClamor(Thing source, float radius, ClamorDef type) { IntVec3 root = source.Position; Region region = source.GetRegion(RegionType.Set_Passable); if (region != null) { RegionTraverser.BreadthFirstTraverse(region, (Region from, Region r) => r.portal == null || r.portal.Open, delegate(Region r) { List <Thing> list = r.ListerThings.ThingsInGroup(ThingRequestGroup.Pawn); for (int i = 0; i < list.Count; i++) { Pawn pawn = list[i] as Pawn; float num = Mathf.Clamp01(pawn.health.capacities.GetLevel(PawnCapacityDefOf.Hearing)); if (num > 0f && pawn.Position.InHorDistOf(root, radius * num)) { pawn.HearClamor(source, type); } } return(false); }, 15, RegionType.Set_Passable); } }
public static void DoClamor(Thing source, float radius, ClamorDef type) { DoClamor(source, source.Position, radius, type); }