bool SubProcessCheckRemainingBatteryCapacity(StringWrapper log) { var batteries = new List <IMyBatteryBlock>(); GridTerminalSystem.GetBlocksOfType(batteries, blk => CollectSameConstruct(blk) && blk.IsFunctional && blk.Enabled); if (batteries.Count() > 0) { float remainingCapacity = RemainingBatteryCapacity(batteries); if (remainingCapacity < CriticalBatteryCapacity) { log.Append("Critical power detected"); criticalBatteryCapacityDetected = true; var timerblocks = new List <IMyTimerBlock>(); GridTerminalSystem.GetBlocksOfType(timerblocks, tb => MyIni.HasSection(tb.CustomData, TriggerOnCriticalCurrentDetectedTag)); timerblocks.ForEach(tb => tb.Trigger()); // disable blocks with DisableOnEmergencyTag DisableBlocks(blk => MyIni.HasSection(blk.CustomData, DisableOnEmergencyTag)); informationTerminals.Text = string.Format("Critical power detected"); } else if (criticalBatteryCapacityDetected) { criticalBatteryCapacityDetected = false; var timerblocks = new List <IMyTimerBlock>(); GridTerminalSystem.GetBlocksOfType(timerblocks, tb => MyIni.HasSection(tb.CustomData, TriggerOnNormalCurrentReestablishedTag)); timerblocks.ForEach(tb => tb.Trigger()); // enable blocks with DisableOnEmergencyTag EnableBlocks(blk => MyIni.HasSection(blk.CustomData, DisableOnEmergencyTag)); } log.Append(string.Format("Battery capacity: {0}%", Math.Round(remainingCapacity * 100, 0))); } return(true); }
bool SubProcessActivateEmergencyPower(StringWrapper log) { var generators = new List <IMyPowerProducer>(); GridTerminalSystem.GetBlocksOfType(generators, blk => CollectSameConstruct(blk) && MyIni.HasSection(blk.CustomData, EmergencyPowerTag)); if (criticalBatteryCapacityDetected) { log.Append("Emergency power on"); generators.ForEach(blk => blk.Enabled = true); } else { generators.ForEach(blk => blk.Enabled = false); } return(true); }
bool SubProcessDoSomeOtherCheck(StringWrapper log) { log.Append("other check..."); log.Append("other check 222..."); return(true); }