private void Awake() { if (instance == null) { instance = this; } }
public InventoriesGroomer(GridManager gridManager, ContainerManager contManager, AssemblerManager assemblerManager, MiscInventoryManager miscInventoryManager, RefineryManager refineryManager, IProcessSpawner spawner, Action <string> logger) { this.logger = logger; this._outputInventories = new List <IOutputInventoryCollection> { assemblerManager, miscInventoryManager, refineryManager }; spawner.Spawn(p => this._groomContainers(contManager), "container-groomer", period: 100); spawner.Spawn(p => this.groomOutputInventories(gridManager, contManager), "producer-groomer", period: 47); }
public Program() { this.Runtime.UpdateFrequency = UpdateFrequency.Update1; this.manager = Process.CreateManager(this.Echo); var logger = new Logger(this.manager, this.Me.GetSurface(0), echo: this.Echo); this.command = new CommandLine("Inventory Manager", logger.Log, this.manager); int counter = 0; var ini = new MyIni(); ini.TryParse(this.Me.CustomData); this.manager.Spawn(p => this.gridManager = new GridManager(this, ini, this.manager, logger.Log), "gm-init", period: ++counter, useOnce: true); this.manager.Spawn(p => this.containerManager = new ContainerManager(this.GridTerminalSystem, this.gridManager, this.manager, logger.Log), "cm-init", period: ++counter, useOnce: true); this.manager.Spawn(p => this.assemblerManager = new AssemblerManager(this.GridTerminalSystem, this.gridManager, this.manager), "am-init", period: ++counter, useOnce: true); this.manager.Spawn(p => this.refineryManager = new RefineryManager(this.GridTerminalSystem, this.gridManager, this.manager), "rm-init", period: ++counter, useOnce: true); this.manager.Spawn(p => this.miscInventoryManager = new MiscInventoryManager(this.GridTerminalSystem, this.gridManager, this.manager, logger.Log), "mim-init", period: ++counter, useOnce: true); this.manager.Spawn(p => new InventoriesGroomer(this.gridManager, this.containerManager, this.assemblerManager, this.miscInventoryManager, this.refineryManager, this.manager, logger.Log), "ig-init", period: ++counter, useOnce: true); }
bool Init() { var connectors = new List <IMyShipConnector>(); var containers = new List <IMyCargoContainer>(); var drills = new List <IMyShipDrill>(); var ejectors = new List <IMyShipConnector>(); var pistons = new List <IMyPistonBase>(); var refineries = new List <IMyRefinery>(); var sorters = new List <IMyConveyorSorter>(); IMyMotorStator rotor = null; try { GridTerminalSystem.GetBlocksOfType((List <IMyTerminalBlock>)null, block => { if (!Me.IsSameConstructAs(block)) { return(false); } var drill = block as IMyShipDrill; if (drill != null) { drills.Add(drill); return(false); } var sorter = block as IMyConveyorSorter; if (sorter != null) { sorters.Add(sorter); return(false); } var piston = block as IMyPistonBase; if (piston != null) { pistons.Add(piston); return(false); } var connector = block as IMyShipConnector; if (connector != null) { (connector.ThrowOut ? ejectors : connectors).Add(connector); return(false); } var refinery = block as IMyRefinery; if (refinery != null) { refineries.Add(refinery); return(false); } var container = block as IMyCargoContainer; if (container != null) { containers.Add(container); return(false); } var _rotor = block as IMyMotorStator; if (rotor == null) { rotor = _rotor; return(false); } else if (_rotor != null) { throw new ConstraintException("Structure must include a single rotor"); } return(false); }); } catch (ConstraintException ex) { Log.Error(ex.Message); return(false); } if (drills.Count == 0) { Log.Error("Structure must include drills"); return(false); } if (pistons.Count == 0) { Log.Error("Structure must include pistons"); return(false); } if (ejectors.Count == 0) { Log.Error("Structure must include connectors with \"Throw out\" enabled"); return(false); } if (refineries.Count == 0) { Log.Error("Structure must include refineries"); return(false); } if (containers.Count == 0) { Log.Error("Structure must include containers"); return(false); } Ejectors = new EjectionManager(this, ejectors); Containers = new ContainerManager(this, containers); Drills = new DrillManager(this, drills); Pistons = new PistonManager(this, pistons); Refineries = new RefineryManager(this, refineries); Rotor = new RotorTracker(this, rotor); rotor.RotorLock = true; rotor.TargetVelocityRPM = RotorSpeed; rotor.Torque = rotor.BrakingTorque = RotorTorque; if (!IsFullyConnected()) { Log.Error("Inventories must be fully connected"); return(false); } //foreach(var sorter in sorters) { // sorter.DrainAll = false; //} Updater = new UpdateManager(this) { Ejectors, Containers, Drills, Pistons, Refineries, Rotor }; float capTotal = 0; float capUsed = 0; foreach (var container in containers) { var inv = container.GetInventory(0); capTotal += (float)inv.MaxVolume; capUsed += (float)inv.CurrentVolume; } capTotal *= 1000; capUsed *= 1000; float capAvail = capTotal - capUsed; var width = (new[] { drills.Count, pistons.Count, ejectors.Count, refineries.Count, containers.Count, }).Max().ToString().Length; Log.Info("Found:\n" + $" {drills.Count.ToString().PadLeft(width)} {(drills.Count == 1 ? "drill" : "drills")}\n" + $" {pistons.Count.ToString().PadLeft(width)} {(pistons.Count == 1 ? "piston" : "pistons")}\n" + $" {"1".PadLeft(width)} rotor\n" + $" {ejectors.Count.ToString().PadLeft(width)} {(ejectors.Count == 1 ? "ejector" : "ejectors")}\n" + $" {refineries.Count.ToString().PadLeft(width)} {(refineries.Count == 1 ? "refinery" : "refineries")}\n" + $" {containers.Count.ToString().PadLeft(width)} {(containers.Count == 1 ? "container" : "containers")} " + $"({capAvail * 100f / capTotal:N2}% of {capTotal:N2}L available)\n" + "Initialization complete"); return(true); }