From fb211a94269013901295bc1f49b4b2f514bf94d5 Mon Sep 17 00:00:00 2001 From: annabunches Date: Tue, 11 Feb 2025 18:25:13 -0500 Subject: [PATCH] Add ability to manually trigger O2 alarms, plus some more tidying. --- ActionSequencer/Program.cs | 1 + AirMonitor/AirZone.cs | 2 +- AirMonitor/Program.cs | 36 ++++++++++++++++++++++++++---------- Airlock/Program.cs | 2 +- MechanicalDoor/Program.cs | 1 + Mixins/Console/Console.cs | 2 +- 6 files changed, 31 insertions(+), 13 deletions(-) diff --git a/ActionSequencer/Program.cs b/ActionSequencer/Program.cs index aad3513..372c48e 100644 --- a/ActionSequencer/Program.cs +++ b/ActionSequencer/Program.cs @@ -65,6 +65,7 @@ namespace IngameScript } Console.Print($"Found {_sequences.Count} sequences."); + Console.UpdateTickCount(); } public void Main(string argument, UpdateType updateSource) diff --git a/AirMonitor/AirZone.cs b/AirMonitor/AirZone.cs index 6bd4942..c916516 100644 --- a/AirMonitor/AirZone.cs +++ b/AirMonitor/AirZone.cs @@ -11,7 +11,7 @@ namespace IngameScript public class AirZone { public string Name { get; private set; } - public bool Triggered { get; private set; } = false; + public bool Triggered { get; set; } = false; public List Vents { get; } = new List(); private Program _program; diff --git a/AirMonitor/Program.cs b/AirMonitor/Program.cs index 757fd59..10f6529 100644 --- a/AirMonitor/Program.cs +++ b/AirMonitor/Program.cs @@ -86,6 +86,7 @@ namespace IngameScript _jobs.Add(zone.Monitor()); } Runtime.UpdateFrequency = UpdateFrequency.Update100; + Console.UpdateTickCount(); } public void Main(string argument, UpdateType updateSource) @@ -95,19 +96,33 @@ namespace IngameScript if (argument != "") { _cli.TryParse(argument); - if (_cli.Switch("reset")) + if (_cli.Switch("reset") || _cli.Switch("trigger")) { - List zonesToReset; - if (_cli.ArgumentCount == 0) zonesToReset = _zones.Keys.ToList(); - else zonesToReset = new List(); - for (int i = 0; i < _cli.ArgumentCount; i++) zonesToReset.Add(_cli.Argument(i)); - - foreach (string zone in zonesToReset) + List zonesToControl; + if (_cli.ArgumentCount == 0) zonesToControl = _zones.Keys.ToList(); + else zonesToControl = new List(); + for (int i = 0; i < _cli.ArgumentCount; i++) { + string zone = _cli.Argument(i); + if (!_zones.ContainsKey(zone)) + { + Console.Print($"Ignoring non-existent zone '{zone}'"); + continue; + } + zonesToControl.Add(zone); + } + + foreach (string zone in zonesToControl) + { + if (_cli.Switch("reset")) { Console.Print($"Resetting {zone}."); - if (_zones.ContainsKey(zone)) _zones[zone].Reset(); - + _zones[zone].Reset(); + } + if (_cli.Switch("trigger")) + { + Console.Print($"Manually triggering {zone}."); + _zones[zone].Triggered = true; } } } @@ -119,6 +134,7 @@ namespace IngameScript Console.Print("WARNING: Monitoring job exited. Zone no longer being monitored."); } + _updateDisplays(); } // write diagnostics to any configured display screens @@ -132,7 +148,7 @@ namespace IngameScript { _displayBuffer.Append(zone.Name); _displayBuffer.Append(": "); - _displayBuffer.Append(zone.Triggered ? "ALARM TRIPPED " : "NOMINAL "); + _displayBuffer.Append(zone.Triggered ? "ALARM TRIPPED " : "nominal "); foreach (IMyAirVent vent in zone.Vents) { _displayBuffer.Append((int)(vent.GetOxygenLevel() * 100F)); diff --git a/Airlock/Program.cs b/Airlock/Program.cs index e9441b0..832d0c5 100644 --- a/Airlock/Program.cs +++ b/Airlock/Program.cs @@ -51,7 +51,7 @@ namespace IngameScript if (referenceVent != null) foreach (Airlock airlock in _airlocks.Values) { airlock.ReferenceVent = referenceVent; } Console.Print($"Found {_airlocks.Count} airlocks."); - Console.PrintLower($"Airlock Controller\nTotal Ticks: 0"); + Console.UpdateTickCount(); } public void Main(string argument, UpdateType updateSource) diff --git a/MechanicalDoor/Program.cs b/MechanicalDoor/Program.cs index 97e3660..e85eebc 100644 --- a/MechanicalDoor/Program.cs +++ b/MechanicalDoor/Program.cs @@ -38,6 +38,7 @@ namespace IngameScript } Console.Print($"Found {_doors.Keys.Count} doors."); + Console.UpdateTickCount(); } public void Main(string argument, UpdateType updateSource) diff --git a/Mixins/Console/Console.cs b/Mixins/Console/Console.cs index d3a1456..23e3c7b 100644 --- a/Mixins/Console/Console.cs +++ b/Mixins/Console/Console.cs @@ -64,7 +64,7 @@ namespace IngameScript // Write the "standard" text to the lower console public void UpdateTickCount() { - PrintLower($"Airlock Controller\nTotal Ticks: {++_tickCount}"); + PrintLower($"{_programName}\nTotal Ticks: {++_tickCount}"); } // Most programs probably want to use UpdateTickCount to get program name and