gaming-scripts/Space Engineers/iceMonitoringScript.cs

66 lines
1.8 KiB
C#

/** CUSTOMIZE HERE
* Set the thresholds here
*/
const int upperThreshold = 25000000;
const int lowerThreshold = 1000000;
/**
* DO NOT CHANGE ANYTHING BELOW THIS LINE
*/
string collectorState = "";
List<IMyCargoContainer> oreContainers = new List<IMyCargoContainer>();
List<MyInventoryItem> Items = new List<MyInventoryItem>();
IMyBlockGroup collectorGroup;
List<IMyCollector> collectors = new List<IMyCollector>();
public Program() {
Runtime.UpdateFrequency = UpdateFrequency.Update100;
}
public void Main(string args) {
collectorGroup = GridTerminalSystem.GetBlockGroupWithName("Collectors");
collectorGroup.GetBlocksOfType(collectors);
int iceamount = getCurrentIceAmount();
collectorState = collectors[0].Enabled ? "Active" : "Inactive";
Echo($"Current Ice Amount: {iceamount}");
Echo($"Collectors are {collectorState}");
if(iceamount > upperThreshold) {
toggleCollectors(false);
Echo($"Collectors are OFF");
} else if (iceamount < lowerThreshold) {
toggleCollectors(true);
Echo($"Collectors are ON");
}
}
public int getCurrentIceAmount() {
int totalAmount = 0;
GridTerminalSystem.GetBlocksOfType(oreContainers);
foreach (var osc in oreContainers) {
var inventory = osc.GetInventory(0);
Items.Clear();
inventory.GetItems(Items);
foreach (var item in Items) {
string key = item.Type.ToString();
if (key == "MyObjectBuilder_Ore/Ice") {
totalAmount = totalAmount + item.Amount.ToIntSafe();
}
}
}
return totalAmount;
}
public void toggleCollectors(bool targetState) {
if (collectors == null) {
Echo("Group collectors not found");
return;
}
foreach (var collector in collectors) {
collector.Enabled = targetState;
}
}