diff --git a/AirMonitor/AirDoor.cs b/AirMonitor/AirDoor.cs index 0667a80..11bd97f 100644 --- a/AirMonitor/AirDoor.cs +++ b/AirMonitor/AirDoor.cs @@ -10,7 +10,7 @@ namespace IngameScript public bool Triggered { get; set; } = false; public IMyDoor Door { get; private set; } - public AirDoor(Program program, IMyDoor door) + public AirDoor(IMyDoor door) { Door = door; } diff --git a/AirMonitor/AirZone.cs b/AirMonitor/AirZone.cs index 4588f37..e5450ac 100644 --- a/AirMonitor/AirZone.cs +++ b/AirMonitor/AirZone.cs @@ -38,7 +38,7 @@ namespace IngameScript public List Vents { get; } = new List(); - private Program _program; + private IConsoleProgram _program; // private List _displays = new List(); // TODO: add single-zone displays private List _lights = new List(); @@ -48,7 +48,7 @@ namespace IngameScript private const float TriggerLevel = 0.75F; - public AirZone(Program program, string zoneName) + public AirZone(IConsoleProgram program, string zoneName) { Name = zoneName; _program = program; diff --git a/AirMonitor/Program.cs b/AirMonitor/Program.cs index 183fcbb..a5418fa 100644 --- a/AirMonitor/Program.cs +++ b/AirMonitor/Program.cs @@ -77,7 +77,7 @@ namespace IngameScript else if (block is IMyDoor) { - AirDoor door = new AirDoor(this, block as IMyDoor); + AirDoor door = new AirDoor(block as IMyDoor); _doors.Add(door); foreach (string zone in zones) _zones[zone].AddDoor(door); } diff --git a/Airlock/Airlock.cs b/Airlock/Airlock.cs index ba6d355..0fcf437 100644 --- a/Airlock/Airlock.cs +++ b/Airlock/Airlock.cs @@ -86,7 +86,7 @@ namespace IngameScript private const int CooldownTicks = 12; private const int SealTimeoutTicks = 30; - public Airlock(string name, Program _program) + public Airlock(string name, IConsoleProgram _program) { _ini = _program.Ini; _name = name; diff --git a/Mixins/Console/Console.cs b/Mixins/Console/Console.cs index dd36f80..d280d7f 100644 --- a/Mixins/Console/Console.cs +++ b/Mixins/Console/Console.cs @@ -2,8 +2,8 @@ // Provides a Print() function that will both call MyGridProgram.Echo() // and also output to the Programmable Block's LCD. -using Sandbox.Common.ObjectBuilders; using Sandbox.ModAPI.Ingame; +using System; using System.Collections.Generic; using System.Text; using VRage.Game.GUI.TextPanel; @@ -11,18 +11,23 @@ using VRage.Game.ModAPI.Ingame.Utilities; namespace IngameScript { + // To use this library, your Program class must implement this interface. + // // A Program that supports consoles by initializing a MyIni instance // and providing a public console for member objects to refer back to. - // If you're using this library it is highly advised that you implement this interface - // for a clean, consistent way to avoid errors. // // (It is probably an anti-pattern that this lives outside of the Program class, // but we can't find a cleaner way to implement this.) public interface IConsoleProgram { + // Properties that should be defined by the implementer. MyIni Ini { get; } Program.IConsole Console { get; } + + // Inherited properties that we need access to IMyGridProgramRuntimeInfo Runtime { get; } + IMyProgrammableBlock Me { get; } + Action Echo { get; } } partial class Program @@ -41,13 +46,13 @@ namespace IngameScript private List _buffer = new List(); private StringBuilder _builder = new StringBuilder(); private int _tickCount = 0; - private Program _program; + private IConsoleProgram _program; private string _programName; private int _maxLines = 10; private const int DefaultMaxLines = 10; - public MainConsole(Program program, string programName) + public MainConsole(IConsoleProgram program, string programName) { _program = program; _programName = programName; @@ -57,7 +62,6 @@ namespace IngameScript _program.Ini.TryParse(program.Me.CustomData); _maxLines = _program.Ini.Get("console", "maxLines").ToInt32(DefaultMaxLines); - // Setup the block's screens _program.Me.GetSurface(0).ContentType = ContentType.TEXT_AND_IMAGE; _program.Me.GetSurface(0).WriteText("Initializing..."); diff --git a/Mixins/Sequencer/SequenceableDoor.cs b/Mixins/Sequencer/SequenceableDoor.cs index 8a1e365..3374117 100644 --- a/Mixins/Sequencer/SequenceableDoor.cs +++ b/Mixins/Sequencer/SequenceableDoor.cs @@ -18,7 +18,7 @@ namespace IngameScript private IMyDoor _door; public SequenceableDoor( - Program _program, + IConsoleProgram _program, IMyDoor door, string sectionName) { diff --git a/Mixins/Sequencer/SequenceableFactory.cs b/Mixins/Sequencer/SequenceableFactory.cs index 684b928..1446e79 100644 --- a/Mixins/Sequencer/SequenceableFactory.cs +++ b/Mixins/Sequencer/SequenceableFactory.cs @@ -11,7 +11,7 @@ namespace IngameScript public class SequenceableFactory { public static ISequenceable MakeSequenceable( - Program program, + IConsoleProgram program, IMyTerminalBlock block, string sectionName = "sequence") { diff --git a/Mixins/Sequencer/SequenceablePiston.cs b/Mixins/Sequencer/SequenceablePiston.cs index 433f120..0e8df13 100644 --- a/Mixins/Sequencer/SequenceablePiston.cs +++ b/Mixins/Sequencer/SequenceablePiston.cs @@ -12,13 +12,13 @@ namespace IngameScript public bool Running { get; private set; } = false; public int Step { get; set; } - private Program _program; + private IConsoleProgram _program; private IMyPistonBase _piston; private float _deployPosition; private float _stowPosition; private float _velocity; - public SequenceablePiston(Program program, IMyPistonBase piston, string sectionName) + public SequenceablePiston(IConsoleProgram program, IMyPistonBase piston, string sectionName) { _program = program; _piston = piston; diff --git a/Mixins/Sequencer/SequenceableRotor.cs b/Mixins/Sequencer/SequenceableRotor.cs index 240da5a..fa769a8 100644 --- a/Mixins/Sequencer/SequenceableRotor.cs +++ b/Mixins/Sequencer/SequenceableRotor.cs @@ -12,7 +12,7 @@ namespace IngameScript public bool Running { get; private set; } = false; public int Step { get; set; } - private Program _program; + private IConsoleProgram _program; private float _velocity; private float _deployAngle; private float _stowAngle; @@ -21,7 +21,7 @@ namespace IngameScript private MyRotationDirection _stowDirection; public SequenceableRotor( - Program program, + IConsoleProgram program, IMyMotorStator rotor, string sectionName) { diff --git a/Mixins/Sequencer/Sequencer.cs b/Mixins/Sequencer/Sequencer.cs index b2a3cee..29847d8 100644 --- a/Mixins/Sequencer/Sequencer.cs +++ b/Mixins/Sequencer/Sequencer.cs @@ -18,7 +18,7 @@ namespace IngameScript private SortedDictionary> _sequence = new SortedDictionary>(); - public Sequencer(Program program, string name) + public Sequencer(IConsoleProgram program, string name) { Name = name; _console = new PrefixedConsole(program.Console, Name);