public float PotentialProduction(CompPowerTrader comp) { #if DEBUG CompPowerPlant _plant = comp as CompPowerPlant; CompRefuelable _refuelable = _plant?.parent.RefuelableComp(); CompBreakdownable _breakdownable = _plant?.parent.BreakdownableComp(); string msg = comp.parent.def.defName; msg += $"\n\tpowerplant: {_plant != null}"; if (_plant != null) { msg += $"\n\trefuelable: {_refuelable != null}"; msg += $"\n\tfueled: {_refuelable?.HasFuel}"; msg += $"\n\tbreakdownable: {_breakdownable != null}"; msg += $"\n\tbroken: {_breakdownable?.BrokenDown}"; msg += $"\n\tdesired: {_plant.DesiredOutput()}"; msg += $"\n\tcurrent: {_plant.PowerOutput}"; } Log.Message(msg); #endif if (!(comp is CompPowerPlant plant)) { return(0); } CompRefuelable refuelable = plant.parent.RefuelableComp(); if (refuelable != null && !refuelable.HasFuel) { return(0); } CompBreakdownable breakdownable = plant.parent.BreakdownableComp(); if (breakdownable != null && breakdownable.BrokenDown) { return(0); } // TODO: check how this interacts with variable power output buildings, e.g. solar, wind. return(Mathf.Max(plant.DesiredOutput(), plant.PowerOutput, 0)); }
/* * public override void CompTick() * { * if (GenTicks.TicksGame % GenTicks.TickLongInterval == 0) * { * HistoricalPowerUsage.Add(GenTicks.TicksGame, PowerUsage); * HistoricalUptime.Add(GenTicks.TicksGame, Uptime); * HistoricalUsetime.Add(GenTicks.TicksGame, Usetime); * } * } * * public override void CompTickRare() * { * if (GenTicks.TicksGame % GenTicks.TickLongInterval == 0) * { * HistoricalPowerUsage.Add(GenTicks.TicksGame, PowerUsage); * HistoricalUptime.Add(GenTicks.TicksGame, Uptime); * HistoricalUsetime.Add(GenTicks.TicksGame, Usetime); * } * } */ public override void Initialize(CompProperties props) { CompPowerBattery powerBattery = parent.GetComp <CompPowerBattery>(); if (powerBattery != null) { intMaxPowerUsage = Math.Max(Math.Abs(powerBattery.Props.storedEnergyMax), maxPowerUsage); } CompPowerPlant powerPlant = parent.GetComp <CompPowerPlant>(); if (powerPlant != null) { intMaxPowerUsage = Math.Max(Math.Abs(powerPlant.Props.basePowerConsumption), maxPowerUsage); } CompPowerTrader powerTrader = parent.GetComp <CompPowerTrader>(); if (powerTrader != null) { intMaxPowerUsage = Math.Max(Math.Abs(powerTrader.Props.basePowerConsumption), maxPowerUsage); } }
public static float DesiredOutput(this CompPowerPlant plant) { return((float)_desiredOutputGetter_MI.Invoke(plant, null)); }