示例#1
0
        private void ResetNanoPrinter()
        {
            // reset storage settings
            settings = new StorageSettings(this);
            if (def.building.defaultStorageSettings != null)
            {
                settings.CopyFrom(def.building.defaultStorageSettings);
            }

            // reset slotGroup
            if (slotGroup != null)
            {
                // Destroy storage zone
                slotGroup.Notify_ParentDestroying();
                slotGroup = null;
            }

            // reset neededMaterial
            scannedBlueprint = null;
            neededMaterial   = new Dictionary <ThingDef, int>();

            productionCountDown = productionCountDownStartValue;

            status = NanoPrinterStatus.Idle;
        }
        // ===================== Status switch =====================
        #region Status Switching

        private void SwitchState()
        {
            switch (status)
            {
            case NanoPrinterStatus.Paused:
                status = NanoPrinterStatus.Paused;
                break;

            case NanoPrinterStatus.Idle:
                status = NanoPrinterStatus.Scanning;
                break;

            case NanoPrinterStatus.Scanning:
                if (StateScanning())
                {
                    status = NanoPrinterStatus.Gathering;
                }
                break;

            case NanoPrinterStatus.Gathering:
                status = NanoPrinterStatus.Printing;
                break;

            case NanoPrinterStatus.Printing:
                ResetNanoPrinter();
                status = NanoPrinterStatus.Idle;
                break;

            default:
                status = NanoPrinterStatus.Error;
                break;
            }
        }
示例#3
0
 private void CreateNewSlotGroup()
 {
     if (slotGroup == null)
     {
         // Create the new collection position (storage zone)
         slotGroup = new SlotGroup(this);
         status    = NanoPrinterStatus.Gathering;
     }
 }
        private void ResetNanoPrinter()
        {
            // reset neededMaterial
            scannedBlueprint = null;
            neededMaterial   = new Dictionary <ThingDef, int>();

            productionCountDown = productionCountDownStartValue;

            status = NanoPrinterStatus.Idle;
        }
        private void ButtonPressed_Stop()
        {
            if (status != NanoPrinterStatus.Paused && status != NanoPrinterStatus.Idle)
            {
                status = NanoPrinterStatus.Paused;
                return;
            }

            ResetNanoPrinter();
        }
        // ===================== Functions =====================
        #region Functions

        private void DoWorkAfterLoading()
        {
            NanoPrinterStatus saveStatus = status;
            int saveProductionCountdown  = productionCountDown;

            ResetNanoPrinter();

            StateScanning(true);

            status = saveStatus;
            productionCountDown = saveProductionCountdown;
        }
        private void ButtonPressed_Start()
        {
            if (status == NanoPrinterStatus.Error)
            {
                return;
            }

            //CheckIfItemIsAtReceivePoint();

            status = NanoPrinterStatus.Scanning;
            SwitchState();
        }
示例#8
0
        // ===================== Functions =====================
        #region Functions

        private void DoWorkAfterLoading()
        {
            NanoPrinterStatus saveStatus = status;
            int saveProductionCountdown  = productionCountDown;

            ResetNanoPrinter();

            StateScanning(true);

            status = saveStatus;
            productionCountDown = saveProductionCountdown;

            if (status == NanoPrinterStatus.Gathering)
            {
                CreateNewSlotGroup();
            }
        }
示例#9
0
        private void ButtonPressed_Stop()
        {
            if (status != NanoPrinterStatus.Paused && status != NanoPrinterStatus.Idle)
            {
                if (slotGroup != null)
                {
                    // Destroy storage zone
                    slotGroup.Notify_ParentDestroying();
                    slotGroup = null;
                }

                status = NanoPrinterStatus.Paused;
                return;
            }

            ResetNanoPrinter();
        }
        private bool StateScanning(bool onlyScanning = false)
        {
            if (neededMaterial != null && neededMaterial.Count() != 0 && scannedBlueprint != null && scannedThingName != "")
            {
                return(true);
            }

            IEnumerable <Building> scanner = AllAdjacentScanner;

            if (scanner == null || scanner.Count() <= 0)
            {
                if (!onlyScanning)
                {
                    Messages.Message(txtScanningNoHoppersFound.Translate(), MessageTypeDefOf.RejectInput);
                    status = NanoPrinterStatus.Idle;
                }
                return(false);
            }


            // Set def of scanned object
            Thing foundThing = AllItemsInScanner;

            if (foundThing == null)
            {
                if (!onlyScanning)
                {
                    Messages.Message(txtScanningNoItemsFound.Translate(), MessageTypeDefOf.RejectInput);
                    status = NanoPrinterStatus.Idle;
                }
                return(false);
            }

            // calc needed material for the found object
            int price = CalcItemPrice(foundThing);

            scannedThingName      = foundThing.Label;
            scannedBlueprint      = foundThing.def;
            scannedBlueprintStuff = foundThing.Stuff;

            neededMaterial.Add(thingDefOfSteel, price);

            return(true);
        }
 private void SetReceivedError()
 {
     status = NanoPrinterStatus.Error;
 }
示例#12
0
 private void SetReceivedError()
 {
     slotGroup.Notify_ParentDestroying();
     slotGroup = null;
     status    = NanoPrinterStatus.Error;
 }