private IEnumerable <Toil> FeedToils() { yield return(new Toil { initAction = delegate { this.$this.feedNutritionLeft = JobDriver_InteractAnimal.RequiredNutritionPerFeed(this.$this.Animal); }, defaultCompleteMode = ToilCompleteMode.Instant }); Toil gotoAnimal = Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch); yield return(gotoAnimal); yield return(this.StartFeedAnimal(TargetIndex.A)); yield return(Toils_Ingest.FinalizeIngest(this.Animal, TargetIndex.B)); yield return(Toils_General.PutCarriedThingInInventory()); yield return(Toils_General.ClearTarget(TargetIndex.B)); yield return(Toils_Jump.JumpIf(gotoAnimal, () => this.$this.feedNutritionLeft > 0f)); }
protected bool HasFoodToInteractAnimal(Pawn pawn, Pawn tamee) { ThingOwner <Thing> innerContainer = pawn.inventory.innerContainer; int num = 0; float num2 = JobDriver_InteractAnimal.RequiredNutritionPerFeed(tamee); float num3 = 0f; for (int i = 0; i < innerContainer.Count; i++) { Thing thing = innerContainer[i]; if (tamee.RaceProps.CanEverEat(thing) && thing.def.ingestible.preferability <= FoodPreferability.RawTasty && !thing.def.IsDrug) { for (int j = 0; j < thing.stackCount; j++) { num3 += thing.GetStatValue(StatDefOf.Nutrition, true); if (num3 >= num2) { num++; num3 = 0f; } if (num >= 2) { return(true); } } } } return(false); }
protected bool HasFoodToInteractAnimal(Pawn pawn, Pawn tamee) { ThingOwner <Thing> innerContainer = pawn.inventory.innerContainer; int num = 0; float num2 = JobDriver_InteractAnimal.RequiredNutritionPerFeed(tamee); float num3 = 0f; for (int i = 0; i < innerContainer.Count; i++) { Thing thing = innerContainer[i]; if (!tamee.WillEat(thing, pawn) || (int)thing.def.ingestible.preferability > 5 || thing.def.IsDrug) { continue; } for (int j = 0; j < thing.stackCount; j++) { num3 += thing.GetStatValue(StatDefOf.Nutrition); if (num3 >= num2) { num++; num3 = 0f; } if (num >= 2) { return(true); } } } return(false); }
protected Job TakeFoodForAnimalInteractJob(Pawn pawn, Pawn tamee) { float num = JobDriver_InteractAnimal.RequiredNutritionPerFeed(tamee) * 2f * 4f; ThingDef thingDef; Thing thing = FoodUtility.BestFoodSourceOnMap(pawn, tamee, false, out thingDef, FoodPreferability.RawTasty, false, false, false, false, false, false, false, false); if (thing == null) { return(null); } return(new Job(JobDefOf.TakeInventory, thing) { count = Mathf.CeilToInt(num / thingDef.ingestible.nutrition) }); }
protected Job TakeFoodForAnimalInteractJob(Pawn pawn, Pawn tamee) { float num = JobDriver_InteractAnimal.RequiredNutritionPerFeed(tamee) * 2f * 4f; ThingDef foodDef; Thing thing = FoodUtility.BestFoodSourceOnMap(pawn, tamee, desperate: false, out foodDef, FoodPreferability.RawTasty, allowPlant: false, allowDrug: false, allowCorpse: false, allowDispenserFull: false, allowDispenserEmpty: false); if (thing == null) { return(null); } float nutrition = FoodUtility.GetNutrition(thing, foodDef); Job job = new Job(JobDefOf.TakeInventory, thing); job.count = Mathf.CeilToInt(num / nutrition); return(job); }
private Toil StartFeedAnimal(TargetIndex tameeInd) { Toil toil = new Toil(); toil.initAction = delegate { Pawn actor = toil.GetActor(); Pawn pawn = (Pawn)(Thing)actor.CurJob.GetTarget(tameeInd); PawnUtility.ForceWait(pawn, 270, actor, false); Thing thing = FoodUtility.BestFoodInInventory(actor, pawn, FoodPreferability.NeverForNutrition, FoodPreferability.RawTasty, 0f, false); if (thing == null) { actor.jobs.EndCurrentJob(JobCondition.Incompletable, true); } else { actor.mindState.lastInventoryRawFoodUseTick = Find.TickManager.TicksGame; int num = FoodUtility.StackCountForNutrition(thing.def, this.feedNutritionLeft); int stackCount = thing.stackCount; Thing thing2 = actor.inventory.innerContainer.Take(thing, Mathf.Min(num, stackCount)); actor.carryTracker.TryStartCarry(thing2); actor.CurJob.SetTarget(TargetIndex.B, thing2); float num2 = (float)thing2.stackCount * thing2.def.ingestible.nutrition; base.ticksLeftThisToil = Mathf.CeilToInt((float)(270.0 * (num2 / JobDriver_InteractAnimal.RequiredNutritionPerFeed(pawn)))); if (num <= stackCount) { this.feedNutritionLeft = 0f; } else { this.feedNutritionLeft -= num2; if (this.feedNutritionLeft < 0.0010000000474974513) { this.feedNutritionLeft = 0f; } } } }; toil.defaultCompleteMode = ToilCompleteMode.Delay; return(toil); }
protected Job TakeFoodForAnimalInteractJob(Pawn pawn, Pawn tamee) { float num = JobDriver_InteractAnimal.RequiredNutritionPerFeed(tamee) * 2f * 4f; ThingDef foodDef; Thing thing = FoodUtility.BestFoodSourceOnMap(pawn, tamee, false, out foodDef, FoodPreferability.RawTasty, false, false, false, false, false, false, false, false, false); Job result; if (thing == null) { result = null; } else { float nutrition = FoodUtility.GetNutrition(thing, foodDef); result = new Job(JobDefOf.TakeInventory, thing) { count = Mathf.CeilToInt(num / nutrition) }; } return(result); }
private IEnumerable <Toil> FeedToils() { yield return(new Toil { initAction = delegate { ((_003CFeedToils_003Ec__Iterator1) /*Error near IL_004a: stateMachine*/)._0024this.feedNutritionLeft = JobDriver_InteractAnimal.RequiredNutritionPerFeed(((_003CFeedToils_003Ec__Iterator1) /*Error near IL_004a: stateMachine*/)._0024this.Animal); }, defaultCompleteMode = ToilCompleteMode.Instant }); /*Error: Unable to find new state assignment for yield return*/; }