Пример #1
0
        bool ProcessInventory()
        {
            // return false if there is (probably) more work to do
            var processingComplete = true;

            foreach (var item in Drills.GetItems())
            {
                //Log.Info($"{item.item.Type}:{item.item.Amount}");
                if (Trash.Contains(item.item.Type))
                {
                    if (Ejectors.Eject(item))
                    {
                        //Log.Info("Continue: Ejector success");
                        continue;
                    }
                    else
                    {
                        //Log.Info("Continue: Ejector failed");
                    }
                    processingComplete = false;
                }
                else
                {
                    if (Refineries.Refine(item))
                    {
                        //Log.Info("Continue: Refinery success");
                        continue;
                    }
                    else
                    {
                        //Log.Info("Continue: Refinery failed");
                    }
                    processingComplete = false;
                }
                if (!Containers.Store(item))
                {
                    // TODO: Everything's full and drills are backing up! Panic?
                    //Log.Info("End: Storing failed");
                    processingComplete = false;
                    break;
                }
            }

            foreach (var item in Refineries.GetItems())
            {
                if (!Containers.Store(item))
                {
                    // TODO: Can't unload refineries because containers are full. Panic?
                    processingComplete = false;
                    break;
                }
            }

            if (Ejectors.IsFull)
            {
                if (Refineries.IsFull)
                {
                    // TODO: Ejection and refineries are full. Panic?
                    processingComplete = false;
                }
                else
                {
                    foreach (var item in Containers.GetItems())
                    {
                        if (!Trash.Contains(item.item.Type))
                        {
                            if (!Refineries.Refine(item))
                            {
                                processingComplete = false;
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                if (Refineries.IsFull)
                {
                    foreach (var item in Containers.GetItems())
                    {
                        if (Trash.Contains(item.item.Type))
                        {
                            if (!Ejectors.Eject(item))
                            {
                                processingComplete = false;
                                break;
                            }
                        }
                    }
                }
                else
                {
                    foreach (var item in Containers.GetItems())
                    {
                        if (Trash.Contains(item.item.Type))
                        {
                            if (!Ejectors.Eject(item) && Refineries.IsFull)
                            {
                                processingComplete = false;
                                break;
                            }
                        }
                        else
                        {
                            if (!Refineries.Refine(item) && Ejectors.IsFull)
                            {
                                processingComplete = false;
                                break;
                            }
                        }
                    }
                }
            }

            return(processingComplete);
        }