From 2311019f4e4bd71163b3d55fe870e2ebff847e3b Mon Sep 17 00:00:00 2001 From: annabunches Date: Tue, 11 Feb 2025 13:10:32 -0500 Subject: [PATCH] Refactor to do non-dependent initializations before construction. --- AirMonitor/AirZone.cs | 15 ++++++--------- AirMonitor/Program.cs | 22 +++++++--------------- Airlock/Airlock.cs | 15 ++++++--------- Airlock/Program.cs | 12 ++++-------- MechanicalDoor/Program.cs | 13 +++++-------- 5 files changed, 28 insertions(+), 49 deletions(-) diff --git a/AirMonitor/AirZone.cs b/AirMonitor/AirZone.cs index 198b07c..82435c5 100644 --- a/AirMonitor/AirZone.cs +++ b/AirMonitor/AirZone.cs @@ -1,5 +1,6 @@ using Sandbox.ModAPI.Ingame; using SpaceEngineers.Game.ModAPI.Ingame; +using System.Collections; using System.Collections.Generic; using VRageMath; @@ -9,16 +10,16 @@ namespace IngameScript { public class AirZone { - public bool Triggered { get; private set; } = false; public string Name { get; private set; } - public List Vents { get; private set; } + public bool Triggered { get; private set; } = false; + public List Vents { get; } = new List(); private IConsoleProgram _program; - private List _doors; - private List _displays; + private List _doors = new List(); + private List _displays = new List(); + private List _lights = new List(); private PrefixedConsole _console; private Sequencer _sequencer; - private List _lights; private const float TriggerLevel = 0.75F; @@ -28,10 +29,6 @@ namespace IngameScript _program = program; _console = new PrefixedConsole(program.Console, zoneName); _sequencer = new Sequencer(zoneName, _console); - Vents = new List(); - _doors = new List(); - _displays = new List(); - _lights = new List(); } public void AddBlock(IMyTerminalBlock block) diff --git a/AirMonitor/Program.cs b/AirMonitor/Program.cs index cd6ac9d..848c709 100644 --- a/AirMonitor/Program.cs +++ b/AirMonitor/Program.cs @@ -10,28 +10,20 @@ namespace IngameScript { public partial class Program : MyGridProgram, IConsoleProgram { - public MyIni Ini { get; private set; } + public MyIni Ini { get; } = new MyIni(); public IConsole Console { get; private set; } - private MyCommandLine _cli; - private Dictionary _zones; - private List> _jobs; - private List _displays; - private StringBuilder _displayBuffer; - private List _oxygenTanks; + private MyCommandLine _cli = new MyCommandLine(); + private Dictionary _zones = new Dictionary(); + private List> _jobs = new List>(); + private List _displays = new List(); + private StringBuilder _displayBuffer = new StringBuilder(); + private List _oxygenTanks = new List(); public Program() { - Ini = new MyIni(); Console = new MainConsole(this, "Air Pressure Monitor"); - _cli = new MyCommandLine(); - _zones = new Dictionary(); - _jobs = new List>(); - _displays = new List(); - _displayBuffer = new StringBuilder(); - _oxygenTanks = new List(); - // Find all tagged objects and build out zones List blocks = new List(); GridTerminalSystem.GetBlocksOfType(blocks, block => MyIni.HasSection(block.CustomData, "airMonitor")); diff --git a/Airlock/Airlock.cs b/Airlock/Airlock.cs index 868b4d3..48ce888 100644 --- a/Airlock/Airlock.cs +++ b/Airlock/Airlock.cs @@ -41,7 +41,7 @@ namespace IngameScript { get { - return ((_airVent.Depressurize && _airVent.GetOxygenLevel() <= targetOxygenLevel) || + return ((_airVent.Depressurize && _airVent.GetOxygenLevel() <= _targetOxygenLevel) || (!_airVent.Depressurize && _airVent.Status == VentStatus.Pressurized)); } } @@ -74,14 +74,14 @@ namespace IngameScript private string _name; private PrefixedConsole _console; private MyIni _ini; - private float targetOxygenLevel = 0.0F; + private List _lights = new List(); private IMyDoor _innerDoor; private IMyDoor _outerDoor; - private List _lights; private IMyGasTank _oxygenTank; private IMyAirVent _airVent; - // private List _displays; + + private float _targetOxygenLevel = 0.0F; private const int CooldownTicks = 120; private const int SealTimeoutTicks = 30; @@ -91,8 +91,6 @@ namespace IngameScript _ini = _program.Ini; _name = name; _console = new PrefixedConsole(_program.Console, _name); - _lights = new List(); - // _displays = new List(); } public void AddBlock(IMyTerminalBlock block) @@ -101,7 +99,6 @@ namespace IngameScript else if (block is IMyLightingBlock) _lights.Add(block as IMyLightingBlock); else if (block is IMyAirVent) addVent(block as IMyAirVent); else if (block is IMyGasTank) addOxygenTank(block as IMyGasTank); - // else if (block is IMyTextSurfaceProvider) _displays.Add(((IMyTextSurfaceProvider)block).GetSurface(0)); else _console.Print($"Tried to add invalid block '{block.CustomName}'"); } @@ -216,8 +213,8 @@ namespace IngameScript // TODO: test this for floating point errors if (_airVent.Depressurize && ReferenceVent != null) { - targetOxygenLevel = ReferenceVent.GetOxygenLevel(); - _console.Print($"Set depressurization target to {targetOxygenLevel}"); + _targetOxygenLevel = ReferenceVent.GetOxygenLevel(); + _console.Print($"Set depressurization target to {_targetOxygenLevel}"); } } diff --git a/Airlock/Program.cs b/Airlock/Program.cs index fa14fe0..e9441b0 100644 --- a/Airlock/Program.cs +++ b/Airlock/Program.cs @@ -7,20 +7,16 @@ namespace IngameScript { public partial class Program : MyGridProgram, IConsoleProgram { + public MyIni Ini { get; } = new MyIni(); public IConsole Console { get; private set; } - public MyIni Ini { get; private set; } - private Dictionary _airlocks; - private List> _jobs; - private MyCommandLine _cli; + private Dictionary _airlocks = new Dictionary(); + private List> _jobs = new List>(); + private MyCommandLine _cli = new MyCommandLine(); public Program() { - Ini = new MyIni(); Console = new MainConsole(this, "Airlock Controller"); - _cli = new MyCommandLine(); - _jobs = new List>(); - _airlocks = new Dictionary(); List airlockBlocks = new List(); GridTerminalSystem.GetBlocksOfType(airlockBlocks, block => MyIni.HasSection(block.CustomData, "airlock")); diff --git a/MechanicalDoor/Program.cs b/MechanicalDoor/Program.cs index 19fedef..ccbfeb4 100644 --- a/MechanicalDoor/Program.cs +++ b/MechanicalDoor/Program.cs @@ -7,19 +7,16 @@ namespace IngameScript { public partial class Program : MyGridProgram, IConsoleProgram { - private MyCommandLine _cli; - public MyIni Ini { get; private set; } + public MyIni Ini { get; } = new MyIni(); public IConsole Console { get; private set; } - private List> _jobs; - private Dictionary _doors; + + private MyCommandLine _cli = new MyCommandLine(); + private List> _jobs = new List>(); + private Dictionary _doors = new Dictionary(); public Program() { - _cli = new MyCommandLine(); - Ini = new MyIni(); Console = new MainConsole(this, "Door Controller"); - _jobs = new List>(); - _doors = new Dictionary(); List doorBlocks = new List(); GridTerminalSystem.GetBlocksOfType(doorBlocks, block => MyIni.HasSection(block.CustomData, "mechDoor"));