Exemplo n.º 1
0
 private void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
 }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }