diff --git a/MechanicalDoor/Door.cs b/MechanicalDoor/Door.cs index 50158d6..9d95d08 100644 --- a/MechanicalDoor/Door.cs +++ b/MechanicalDoor/Door.cs @@ -5,6 +5,21 @@ namespace IngameScript { public class Door { + private MyGridProgram _p; + private List _hinges; + + public bool Locked + { + get + { + foreach (DoorHinge hinge in _hinges) + { + if (!hinge.Locked) return false; + } + return true; + } + } + public Door(MyGridProgram p) { _p = p; @@ -43,17 +58,5 @@ namespace IngameScript } return done; } - - public bool Locked() - { - foreach (DoorHinge hinge in _hinges) - { - if (!hinge.Locked) return false; - } - return true; - } - - private MyGridProgram _p; - private List _hinges; } } \ No newline at end of file diff --git a/MechanicalDoor/DoorHinge.cs b/MechanicalDoor/DoorHinge.cs index f64f57c..bdcaab2 100644 --- a/MechanicalDoor/DoorHinge.cs +++ b/MechanicalDoor/DoorHinge.cs @@ -6,6 +6,16 @@ namespace IngameScript { public class DoorHinge { + public bool Locked { get { return _hinge.RotorLock; } } + + private MyGridProgram _p; + private IMyMotorStator _hinge; + private float _targetAngle; + private float _lastAngle; + private float _openAngle = 90F; + private float _closedAngle = 0F; + private float _velocity = 5F; + public DoorHinge(MyGridProgram p, IMyMotorStator hinge) { _p = p; @@ -42,8 +52,6 @@ namespace IngameScript return Locked; } - public bool Locked { get { return _hinge.RotorLock; } } - private void parseConfig() { string[] lines = _hinge.CustomData.Split('\n'); @@ -70,13 +78,5 @@ namespace IngameScript { return degrees * ((float)Math.PI / 180F); } - - private MyGridProgram _p; - private IMyMotorStator _hinge; - private float _targetAngle; - private float _lastAngle; - private float _openAngle = 90F; - private float _closedAngle = 0F; - private float _velocity = 5F; } } \ No newline at end of file diff --git a/MechanicalDoor/MechanicalDoor.sln b/MechanicalDoor/MechanicalDoor.sln new file mode 100644 index 0000000..211bcf2 --- /dev/null +++ b/MechanicalDoor/MechanicalDoor.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.002.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MechanicalDoor", "MechanicalDoor.csproj", "{2C578770-65D8-4DF9-A207-B884D73781DD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2C578770-65D8-4DF9-A207-B884D73781DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2C578770-65D8-4DF9-A207-B884D73781DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2C578770-65D8-4DF9-A207-B884D73781DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2C578770-65D8-4DF9-A207-B884D73781DD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3F9DC75B-CA4A-4C90-8DEA-EA981315767A} + EndGlobalSection +EndGlobal diff --git a/MechanicalDoor/Program.cs b/MechanicalDoor/Program.cs index e248bd7..a98a09f 100644 --- a/MechanicalDoor/Program.cs +++ b/MechanicalDoor/Program.cs @@ -1,40 +1,23 @@ -using Sandbox.Game.EntityComponents; -using Sandbox.ModAPI.Ingame; -using Sandbox.ModAPI.Interfaces; +using Sandbox.ModAPI.Ingame; using SpaceEngineers.Game.ModAPI.Ingame; -using System; -using System.Collections; using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Text; -using VRage; -using VRage.Collections; -using VRage.Game; -using VRage.Game.Components; -using VRage.Game.GUI.TextPanel; -using VRage.Game.ModAPI.Ingame; -using VRage.Game.ModAPI.Ingame.Utilities; -using VRage.Game.ObjectBuilders.Definitions; -using VRageMath; namespace IngameScript { public partial class Program : MyGridProgram { - MyCommandLine cli; - List> jobs; - Dictionary doors; - int tickCount; - + private MyCommandLine _cli; + private List> _jobs; + private Dictionary _doors; + private int _tickCount; public Program() { - tickCount = 0; - cli = new MyCommandLine(); - jobs = new List>(); + _tickCount = 0; + _cli = new MyCommandLine(); + _jobs = new List>(); - doors = new Dictionary(); + _doors = new Dictionary(); List allHinges = new List(); GridTerminalSystem.GetBlocksOfType(allHinges); @@ -43,33 +26,33 @@ namespace IngameScript if (hinge.CustomName.StartsWith("Door")) { string doorName = hinge.CustomName.Split(' ')[0]; - if (!doors.ContainsKey(doorName)) + if (!_doors.ContainsKey(doorName)) { - doors[doorName] = new Door(this); + _doors[doorName] = new Door(this); } - doors[doorName].AddHinge(hinge); + _doors[doorName].AddHinge(hinge); } } - Echo($"Found {doors.Keys.Count} doors."); + Echo($"Found {_doors.Keys.Count} doors."); } public void Main(string argument, UpdateType updateSource) { - Echo($"index: {tickCount++}"); + Echo($"index: {_tickCount++}"); if (updateSource == UpdateType.Trigger || updateSource == UpdateType.Terminal) { // Create a new job - cli.TryParse(argument); + _cli.TryParse(argument); List doorsToControl = new List(); - if (cli.ArgumentCount == 0) + if (_cli.ArgumentCount == 0) { Echo("No arguments passed. Controlling all doors."); - foreach (Door door in doors.Values) + foreach (Door door in _doors.Values) { - if (!door.Locked()) + if (!door.Locked) { continue; } @@ -77,20 +60,20 @@ namespace IngameScript } } - for (int i = 0; i < cli.ArgumentCount; i++) + for (int i = 0; i < _cli.ArgumentCount; i++) { - string key = "Door" + cli.Argument(i); - if (!doors.ContainsKey(key)) + string key = "Door" + _cli.Argument(i); + if (!_doors.ContainsKey(key)) { Echo($"Door with identifier {key} not found. Skipping."); continue; } - if (!doors[key].Locked()) + if (!_doors[key].Locked) { Echo($"Door {key} already moving. Skipping."); continue; } - doorsToControl.Add(doors[key]); + doorsToControl.Add(_doors[key]); } if (doorsToControl.Count == 0) @@ -100,51 +83,51 @@ namespace IngameScript else { Echo("Creating new job."); - if (cli.Switch("close")) jobs.Add(CloseDoors(doorsToControl)); - else jobs.Add(OpenDoors(doorsToControl)); + if (_cli.Switch("close")) _jobs.Add(closeDoors(doorsToControl)); + else _jobs.Add(openDoors(doorsToControl)); Runtime.UpdateFrequency = UpdateFrequency.Update1; } } // Process running jobs - for (int i = 0; i < jobs.Count; i++) + for (int i = 0; i < _jobs.Count; i++) { - if (!jobs[i].MoveNext()) + if (!_jobs[i].MoveNext()) { - jobs[i].Dispose(); - jobs.Remove(jobs[i]); + _jobs[i].Dispose(); + _jobs.Remove(_jobs[i]); i--; Echo("Operation Complete."); } } - if (jobs.Count == 0) + if (_jobs.Count == 0) { Runtime.UpdateFrequency = UpdateFrequency.None; } } - private IEnumerator OpenDoors(List doorsToControl) + private IEnumerator openDoors(List doorsToControl) { Echo("Opening doors."); foreach (Door door in doorsToControl) { door.OpenDoor(); } - return ActuateDoors(doorsToControl); + return actuateDoors(doorsToControl); } - private IEnumerator CloseDoors(List doorsToControl) + private IEnumerator closeDoors(List doorsToControl) { Echo("Closing doors."); foreach (Door door in doorsToControl) { door.CloseDoor(); } - return ActuateDoors(doorsToControl); + return actuateDoors(doorsToControl); } - private IEnumerator ActuateDoors(List doorsToControl) + private IEnumerator actuateDoors(List doorsToControl) { while (true) {