Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);