protected override IEnumerable <Toil> MakeNewToils() { //Log.Message("I am inside the job now, with "+pawn.ToString(), false); Building_ItemProcessor building_processor = (Building_ItemProcessor)this.job.GetTarget(TargetIndex.A).Thing; this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOnBurningImmobile(TargetIndex.A); yield return(Toils_General.DoAtomic(delegate { this.job.count = 1; })); yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch)); yield return(Toils_General.Wait(240).FailOnDestroyedNullOrForbidden(TargetIndex.A).FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch).WithProgressBarToilDelay(TargetIndex.A, false, -0.5f)); yield return(new Toil { initAction = delegate { Thing newProduct; if (building_processor.productsToTurnInto != null && building_processor.productsToTurnInto.Count > 0) { newProduct = ThingMaker.MakeThing(ThingDef.Named(building_processor.productsToTurnInto[(int)building_processor.qualityNow])); } else { newProduct = ThingMaker.MakeThing(ThingDef.Named(building_processor.productToTurnInto)); } newProduct.stackCount = building_processor.amount; if ((newProduct.TryGetComp <CompIngredients>() is CompIngredients ingredientComp) && !building_processor.compItemProcessor.Props.ignoresIngredientLists) { ingredientComp.ingredients = building_processor.ingredients; } if (building_processor.usingQualityIncreasing && newProduct.TryGetComp <CompQuality>() is CompQuality qualityComp) { qualityComp.SetQuality(building_processor.qualityNow, ArtGenerationContext.Colony); } GenSpawn.Spawn(newProduct, building_processor.InteractionCell, building_processor.Map); building_processor.processorStage = ProcessorStage.ProductRemoved; building_processor.ResetEverything(); building_processor.DestroyIngredients(); StoragePriority currentPriority = StoreUtility.CurrentStoragePriorityOf(newProduct); IntVec3 c; if (StoreUtility.TryFindBestBetterStoreCellFor(newProduct, this.pawn, this.Map, currentPriority, this.pawn.Faction, out c, true)) { this.job.SetTarget(TargetIndex.C, c); this.job.SetTarget(TargetIndex.B, newProduct); this.job.count = newProduct.stackCount; } else { this.EndJobWith(JobCondition.Incompletable); } },