diff --git a/.gitignore b/.gitignore index 95dcbcf..87fcdba 100644 --- a/.gitignore +++ b/.gitignore @@ -135,4 +135,3 @@ $RECYCLE.BIN/ .DS_Store _NCrunch* -/PML/.$pml.drawio.bkp diff --git a/PML/PML.csproj b/PML/PML.csproj deleted file mode 100644 index 7718844..0000000 --- a/PML/PML.csproj +++ /dev/null @@ -1,34 +0,0 @@ - - - - netframework48 - IngameScript - 6 - false - Release;Debug - x64 - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - diff --git a/PML/PML.mdk.ini b/PML/PML.mdk.ini deleted file mode 100644 index 5add8f4..0000000 --- a/PML/PML.mdk.ini +++ /dev/null @@ -1,22 +0,0 @@ -; This file is project specific and should be checked in to source control. - -[mdk] -; This is a programmable block script project. -; You should not change this. -type=programmableblock - -; Toggle trace (on|off) (verbose output) -trace=off - -; What type of minification to use (none|trim|stripcomments|lite|full) -; none: No minification -; trim: Removes unused types (NOT members). -; stripcomments: trim + removes comments. -; lite: stripcomments + removes leading/trailing whitespace. -; full: lite + renames identifiers to shorter names. -minify=none - -; A list of files and folder to ignore when creating the script. -; This is a comma separated list of glob patterns. -; See https://code.visualstudio.com/docs/editor/glob-patterns -ignores=obj/**/*,MDK/**/*,**/*.debug.cs diff --git a/PML/PML.mdk.local.ini b/PML/PML.mdk.local.ini deleted file mode 100644 index 4b66820..0000000 --- a/PML/PML.mdk.local.ini +++ /dev/null @@ -1,7 +0,0 @@ -; This file is _local_ to your machine and should not be checked in to source control. - -[mdk] -; Where to output the script to (auto|specific path) -output=auto -; Override the default binary path (auto|specific path) -binarypath=auto \ No newline at end of file diff --git a/PML/Program.cs b/PML/Program.cs deleted file mode 100644 index a19bc9b..0000000 --- a/PML/Program.cs +++ /dev/null @@ -1,402 +0,0 @@ -using Sandbox.Game.EntityComponents; -using Sandbox.ModAPI.Ingame; -using Sandbox.ModAPI.Interfaces; - -using SpaceEngineers.Game.ModAPI.Ingame; - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.ComponentModel; -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 VRage.ObjectBuilders; - -using VRageMath; - -namespace IngameScript -{ - partial class Program : MyGridProgram - { - const int NUMBER_OF_MISSILES = 52; // The quantity of components will be created to build this quantity of missiles. - const int NUMBER_OF_CANNON_SHELL = 160; - const int NUMBER_OF_ARTILLERY_SHELL = 40; - - const int CONSOLE_NB_LINES = 14; - const string GRID_PREFIX = "[PML]"; - - const float EPSILON = 0.05f; - - readonly IMyCubeGrid grid; - - readonly Output output; - - readonly Output topPanel; - readonly Output bottomPanel; - - readonly IMyAssembler assembler; - - readonly List missileComponents = new List{ - new ComponentQuantity(MyItemType.MakeComponent("SteelPlate"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/SteelPlate"), 256), - new ComponentQuantity(MyItemType.MakeComponent("Construction"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/ConstructionComponent"), 166), - new ComponentQuantity(MyItemType.MakeComponent("Motor"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/MotorComponent"), 18), - new ComponentQuantity(MyItemType.MakeComponent("InteriorPlate"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/InteriorPlate"), 40), - new ComponentQuantity(MyItemType.MakeComponent("Computer"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/ComputerComponent"), 48), - new ComponentQuantity(MyItemType.MakeComponent("PowerCell"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/PowerCell"), 2), - new ComponentQuantity(MyItemType.MakeComponent("Display"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/Display"), 1), - new ComponentQuantity(MyItemType.MakeComponent("SmallTube"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/SmallTube"), 29), - new ComponentQuantity(MyItemType.MakeComponent("MetalGrid"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/MetalGrid"), 48), - new ComponentQuantity(MyItemType.MakeComponent("LargeTube"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/LargeTube"), 16), - new ComponentQuantity(MyItemType.MakeComponent("Detector"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/DetectorComponent"), 8), - new ComponentQuantity(MyItemType.MakeComponent("Girder"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/GirderComponent"), 12), - new ComponentQuantity(MyItemType.MakeComponent("Explosives"), MyDefinitionId.Parse("MyObjectBuilder_BlueprintDefinition/ExplosivesComponent"), 24), - }; - - public Program() - { - this.grid = this.Me.CubeGrid; - - var output = this.Me.GetSurface(0); - this.output = new Output(output, CONSOLE_NB_LINES); - - this.output.Print("PML system starting..."); - - this.topPanel = new Output(this.GridTerminalSystem.GetBlock("LCD Panel - Main 02", this.grid)); - - this.assembler = this.GridTerminalSystem.GetBlock("Assembler Main", this.grid); - - Runtime.UpdateFrequency = UpdateFrequency.Update100; - } - - public void Save() - { - } - - public void Main(string argument, UpdateType updateSource) - { - if ((updateSource & UpdateType.Update100) != 0) - { - this.UpdateState(); - } - else if ((updateSource & (UpdateType.Terminal | UpdateType.Trigger)) != 0) - { - switch (argument) - { - case "COMMAND": - this.output.Print("BLA..."); - break; - - case "START_MINING": - - default: - this.output.Print($"Uknown command: {argument}"); - break; - } - } - } - - void UpdateState() - { - this.BuildComponentForMissiles(); - this.BuildAmmo(); - this.DisplayStatus(); - } - - void BuildComponentForMissiles() - { - var existingAmounts = this.GetCurrentItemQuantity(missileComponents.Select(quantity => quantity.ItemType)); - - int i = 0; - foreach (var missileComponent in this.missileComponents) - { - var existing = existingAmounts[i]; - - var queue = new List(); - this.assembler.GetQueue(queue); - foreach (var item in queue) - { - if (item.BlueprintId == missileComponent.blueprintId) - existing += item.Amount; - } - - var desired = missileComponent.Quantity * NUMBER_OF_MISSILES; - - if (existing < desired) - { - var toBuild = desired - existing; - this.output.Print($"Requesting {toBuild} of {missileComponent.blueprintId.SubtypeName}"); - this.assembler.AddQueueItem(missileComponent.blueprintId, toBuild); - } - i += 1; - } - } - - void BuildAmmo() - { - //var ammoDefinitionIds = new List - //{ - // MyDefinitionId.Parse("MyObjectBuilder_AmmoMagazine/Missile200mm"), - // MyDefinitionId.Parse("MyObjectBuilder_AmmoMagazine/Missile400mm"), - // MyDefinitionId.Parse("MyObjectBuilder_AmmoMagazine/Missile800mm"), - // MyDefinitionId.Parse("MyObjectBuilder_AmmoMagazine/Missile1200mm"), - // MyDefinitionId.Parse("MyObjectBuilder_AmmoMagazine/Projectile200mm"), - // MyDefinitionId.Parse("MyObjectBuilder_AmmoMagazine/Projectile400mm"), - // MyDefinitionId.Parse("MyObjectBuilder_AmmoMagazine/Projectile800mm"), - // MyDefinitionId.Parse("MyObjectBuilder_AmmoMagazine/Projectile1200mm"), - // MyDefinitionId.Parse("MyObjectBuilder_AmmoMagazine/ArtilleryShell"), - //}; - //var existingAmounts = this.GetCurrentItemQuantity(ammoDefinitionIds); - //var desiredAmounts = new List - //{ - // (MyFixedPoint)(NUMBER_OF_MISSILES * 4), // Missile200mm - // (MyFixedPoint)(NUMBER_OF_MISSILES * 4), // Missile400mm - // (MyFixedPoint)(NUMBER_OF_MISSILES * 2), // Missile800mm - // (MyFixedPoint)(NUMBER_OF_MISSILES * 2), // Missile1200mm - // (MyFixedPoint)(NUMBER_OF_CANNON_SHELL / 4), // Projectile200mm - // (MyFixedPoint)(NUMBER_OF_CANNON_SHELL / 4), // Projectile400mm - // (MyFixedPoint)(NUMBER_OF_CANNON_SHELL / 4), // Projectile800mm - // (MyFixedPoint)(NUMBER_OF_CANNON_SHELL / 4), // Projectile1200mm - // (MyFixedPoint)(NUMBER_OF_ARTILLERY_SHELL), // ArtilleryShell - //}; - //foreach (var tuple in ammoDefinitionIds.Zip(existingAmounts, desiredAmounts, (id, existing, desired) => (id, existing, desired))) - //{ - // if (tuple.existing < tuple.desired - EPSILON) - // { - // var toBuild = tuple.desired - tuple.existing; - // this.assembler.AddQueueItem(tuple.id, toBuild); - // this.output.Print($"Requesting {toBuild} of {tuple.id.SubtypeName}"); - // } - //} - } - - void DisplayStatus() - { - var cargoSpace = this.GetCargoSpace(); - var energyState = this.GetEnergyState(); - var hydrogenVolume = this.GetHydrogenVolume(); - var oxygenVolume = this.GetOxygenVolume(); - - this.topPanel.Display( - $@" -{cargoSpace.ToString("Cargo volume", "kL")} - -{energyState.ToString("Energy", "MWh")} - -{hydrogenVolume.ToString("Hydrogen", "L")} - -{oxygenVolume.ToString("Oxygen", "L")}" - ); - } - - List GetCurrentItemQuantity(IEnumerable itemTypes) - { - var total = new List(new MyFixedPoint[itemTypes.Count()]); - - foreach (var container in this.GridTerminalSystem.GetBlocks(null, this.grid)) - { - //this.output.Print($"Container: {container.CustomName}"); - int i = 0; - foreach (var itemType in itemTypes) - { - var items = container.GetInventory().FindItem(itemType); - //this.output.Print($"{itemType}: {items}"); - if (items.HasValue) - total[i] += items.Value.Amount; - i += 1; - } - } - - foreach (var assembler in this.GridTerminalSystem.GetBlocks(null, this.grid)) - { - int i = 0; - foreach (var itemType in itemTypes) - { - var items = assembler.OutputInventory.FindItem(itemType); - if (items.HasValue) - total[i] += items.Value.Amount; - i += 1; - } - } - - foreach (var sorter in this.GridTerminalSystem.GetBlocks(null, this.grid)) - { - int i = 0; - foreach (var itemType in itemTypes) - { - var items = sorter.GetInventory().FindItem(itemType); - if (items.HasValue) - total[i] += items.Value.Amount; - i += 1; - } - } - - foreach (var welder in this.GridTerminalSystem.GetBlocks(null, this.grid)) - { - int i = 0; - foreach (var itemType in itemTypes) - { - var items = welder.GetInventory().FindItem(itemType); - if (items.HasValue) - total[i] += items.Value.Amount; - i += 1; - } - } - - foreach (var turret in this.GridTerminalSystem.GetBlocks(null, this.grid)) - { - int i = 0; - foreach (var itemType in itemTypes) - { - var items = turret.GetInventory().FindItem(itemType); - if (items.HasValue) - total[i] += items.Value.Amount; - i += 1; - } - } - - return total; - } - - class ComponentQuantity - { - public ComponentQuantity(MyItemType itemType, MyDefinitionId blueprintId, MyFixedPoint quantity) - { - this.ItemType = itemType; - this.blueprintId = blueprintId; - - //if (!MyDefinitionId.TryParse("MyObjectBuilder_BlueprintDefinition", this.ItemType.SubtypeId, out this.Id)) - // throw new ArgumentException($"Cannot parse {this.ItemType} into a MyDefinitionId"); - - this.Quantity = quantity; - } - - public readonly MyItemType ItemType; - public readonly MyDefinitionId blueprintId; - public readonly MyFixedPoint Quantity; - } - - struct Quantity - { - public Quantity(double current, double total) - { - this.Current = current; - this.Total = total; - } - - public readonly double Current; - public readonly double Total; - - public string ToString(string name, string unit) - { - var firstLineLength = 50; - var secondLineLength = 50; - - var firstLine = new StringBuilder(); - firstLine.Append(name).Append(": "); - var values = $"{this.Current:N1} {unit} / {this.Total:N1} {unit}"; - firstLine.Append(values.PadLeft(firstLineLength - firstLine.Length)); - - var secondLine = new StringBuilder(); - secondLine.Append("["); - var ratio = this.Current / this.Total; - var percentStr = $"{ratio * 100.0,8:N1}%"; - // "-2" because of the starting and ending characters: '[', ']'. - var gaugeSize = secondLineLength - percentStr.Length - 2; - var n = (int)((double)gaugeSize * ratio); - secondLine.Append(new string('|', n)); - secondLine.Append(new string(' ', gaugeSize - n)).Append("]"); - secondLine.Append(percentStr); - - return $"{firstLine}\n{secondLine}"; - } - } - - Quantity GetCargoSpace() - { - var containers = this.GridTerminalSystem.GetBlocks(null, this.grid); - - double currentVolume = 0; - double totalVolume = 0; - - foreach (var container in containers) - { - var inventory = container.GetInventory(); - currentVolume += (double)inventory.CurrentVolume; - totalVolume += (double)inventory.MaxVolume; - } - - return new Quantity(currentVolume, totalVolume); - } - - Quantity GetEnergyState() - { - double currentkWh = 0; - double maxkWh = 0; - var batteries = this.GridTerminalSystem.GetBlocks(null, this.grid); - - foreach (var battery in batteries) - { - currentkWh += (double)battery.CurrentStoredPower; - maxkWh += (double)battery.MaxStoredPower; - } - - return new Quantity(currentkWh, maxkWh); - } - - Quantity GetHydrogenVolume() - { - double currentVolume = 0; - double totalVolume = 0; - var tanks = this.GridTerminalSystem.GetBlocks(null, this.grid, tank => tank.CustomName.Contains("Hydrogen")); - - //var tanks = new List(); - //GridTerminalSystem.GetBlocksOfType(tanks, - // (IMyGasTank tank) => - // { - // return tank.CustomName.Contains("Mammouth") && tank.CustomName.Contains("hydro"); - // } - //); - - foreach (var tank in tanks) - { - currentVolume += (double)tank.Capacity * (double)tank.FilledRatio; - totalVolume += (double)tank.Capacity; - } - - return new Quantity(currentVolume, totalVolume); - } - - Quantity GetOxygenVolume() - { - double currentVolume = 0; - double totalVolume = 0; - var tanks = this.GridTerminalSystem.GetBlocks(null, this.grid, tank => tank.CustomName.Contains("Oxygen")); - //var tanks = new List(); - //GridTerminalSystem.GetBlocksOfType(tanks, - // (IMyGasTank tank) => - // { - // return tank.CustomName.Contains("Mammouth") && tank.CustomName.Contains("oxygène"); - // } - //); - - foreach (var tank in tanks) - { - currentVolume += (double)tank.Capacity * (double)tank.FilledRatio; - totalVolume += (double)tank.Capacity; - } - - return new Quantity(currentVolume, totalVolume); - } - } -} - diff --git a/PML/packages.config b/PML/packages.config deleted file mode 100644 index 0653ff6..0000000 --- a/PML/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/PML/pml.drawio b/PML/pml.drawio deleted file mode 100644 index 5e69641..0000000 --- a/PML/pml.drawio +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -