gaming-scripts/Space Engineers/iceMonitoringScript.cs

69 lines
2.2 KiB
C#

/* CUSTOMIZE BEHAVIOR 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");
}
var msg = string.Format("\n\nIce Manager by Firq\n----------------------------\nCurrent Time: {0}\n----------------------------\nCollectors are {1}\nIce Amount: {2}M",
DateTime.UtcNow.ToLocalTime().ToLongTimeString(), collectorState, Math.Round((iceamount / 1000000.0), 2));
var screen = Me.GetSurface(0);
screen.ContentType = ContentType.TEXT_AND_IMAGE;
screen.Alignment = TextAlignment.CENTER;
screen.WriteText(msg, false);
}
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;
}
}