示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 bool SubProcessDoSomeOtherCheck(StringWrapper log)
 {
     log.Append("other check...");
     log.Append("other check 222...");
     return(true);
 }