using Sandbox.ModAPI.Ingame; using System.Collections.Generic; using VRage.Game.ModAPI.Ingame.Utilities; namespace IngameScript { public partial class Program : MyGridProgram { private Dictionary _airlocks; private List> _jobs; private int _tickCount = 0; private MyCommandLine _cli; public Program() { _cli = new MyCommandLine(); _jobs = new List>(); _airlocks = new Dictionary(); List doors = new List(); GridTerminalSystem.GetBlocksOfType(doors); foreach (IMyDoor door in doors) { if (!door.CustomName.StartsWith("Airlock")) continue; string airlockName = door.CustomName.Split(' ')[0]; if (_airlocks.ContainsKey(airlockName)) continue; Airlock newAirlock = new Airlock(this, airlockName); if (!newAirlock.Functional) { Echo($"{airlockName} is missing one or more required blocks."); continue; } _airlocks[airlockName] = newAirlock; } Echo($"Found {_airlocks.Count} airlocks."); } public void Main(string argument, UpdateType updateSource) { Echo($"index: {_tickCount++}"); if (updateSource == UpdateType.Trigger || updateSource == UpdateType.Terminal) { _cli.TryParse(argument); if (_cli.ArgumentCount == 0) { Echo("You must provide an airlock ID."); } else { string airlockName = $"Airlock{_cli.Argument(0)}"; if (!_airlocks.ContainsKey(airlockName)) { Echo($"Invalid airlock ID {_cli.Argument(0)}"); } else { _jobs.Add(_airlocks[airlockName].CycleAirlock()); Runtime.UpdateFrequency |= UpdateFrequency.Update1; } } } for (int i = 0; i < _jobs.Count; i++) { IEnumerator job = _jobs[i]; if (!job.MoveNext()) { job.Dispose(); _jobs.Remove(job); i--; Echo("Airlock Cycling Complete."); } } if (_jobs.Count == 0) Runtime.UpdateFrequency = UpdateFrequency.None; } } }