private static IEnumerable <Pawn> GetPawnsInRadius(CompPowerPlantWind __instance) { var map = __instance.parent.Map; var cellsToCheck = map.AllCells.Where(cell => cell.DistanceTo(__instance.parent.Position) <= TrumpCancerWindmill.Settings.cancerRadius); return(cellsToCheck.Select(cell => cell.GetFirstPawn(map)).Where(pawn => pawn != null)); }
static void Postfix(CompPowerPlantWind __instance) { foreach (var pawn in GetPawnsInRadius(__instance)) { if (Rand.Value < TrumpCancerWindmill.Settings.cancerChance) { var cancerOnPawn = pawn.health?.hediffSet?.GetFirstHediffOfDef(HediffDefOf.Carcinoma); var severity = Rand.Range(0.15f, 0.30f); if (cancerOnPawn != null) { cancerOnPawn.Severity += severity; Messages.Message("CancerWorsenedMessage".Translate(pawn.Name), MessageTypeDefOf.NegativeHealthEvent); } else { var cancer = HediffMaker.MakeHediff(HediffDefOf.Carcinoma, pawn); cancer.Severity = severity; pawn.health.AddHediff(cancer); Messages.Message("GotCancerMessage".Translate(pawn.Name), MessageTypeDefOf.NegativeHealthEvent); } } } }
private bool IsObstructedGenerator(CompPowerTrader pct) { if (Power_Alerts.obstructedSolarEnabled) { CompPowerPlantSolar solar = pct as CompPowerPlantSolar; if (solar != null) { foreach (IntVec3 current in pct.parent.OccupiedRect()) { if (pct.parent.Map.roofGrid.Roofed(current)) { return(true); } } return(false); } } if (Power_Alerts.obstructedWindEnabled) { CompPowerPlantWind wind = pct as CompPowerPlantWind; if (wind != null) { return((windPathBlockedCellsField.GetValue(wind) as List <IntVec3>).Count() > 0); } } if (Power_Alerts.obstructedWaterEnabled) { CompPowerPlantWater water = pct as CompPowerPlantWater; if (water != null) { return(!((bool)waterUsableField.GetValue(water)) || ((bool)waterDoubleUsedField.GetValue(water))); } } return(false); }
public static List <IntVec3> WindPathBlockedCells(CompPowerPlantWind comp) => (List <IntVec3>)cellsInfo.GetValue(comp);