private static void GetNearestLifestageSound(Pawn pawn, Func <LifeStageAge, SoundDef> getter, out SoundDef def, out float pitch, out float volume) { int num = pawn.ageTracker.CurLifeStageIndex; while (true) { LifeStageAge lifeStageAge = pawn.RaceProps.lifeStageAges[num]; def = getter(lifeStageAge); if (def != null) { pitch = pawn.ageTracker.CurLifeStage.voxPitch / lifeStageAge.def.voxPitch; volume = pawn.ageTracker.CurLifeStage.voxVolume / lifeStageAge.def.voxVolume; return; } num++; if (num < 0) { break; } if (num >= pawn.RaceProps.lifeStageAges.Count) { break; } } def = null; pitch = (volume = 1f); }
public static void AnimalGrowth() { Func <ThingDef, float> gestDaysEach = GestationDaysEach; Func <ThingDef, float> nutritionToGestate = delegate(ThingDef d) { float num4 = 0f; LifeStageAge lifeStageAge3 = d.race.lifeStageAges[d.race.lifeStageAges.Count - 1]; return(num4 + gestDaysEach(d) * lifeStageAge3.def.hungerRateFactor * d.race.baseHungerRate); }; Func <ThingDef, float> babyMeatNut = delegate(ThingDef d) { LifeStageAge lifeStageAge2 = d.race.lifeStageAges[0]; return(d.GetStatValueAbstract(StatDefOf.MeatAmount) * 0.05f * lifeStageAge2.def.bodySizeFactor); }; Func <ThingDef, float> babyMeatNutPerInput = (ThingDef d) => babyMeatNut(d) / nutritionToGestate(d); Func <ThingDef, float> nutritionToAdulthood = delegate(ThingDef d) { float num = 0f; num += nutritionToGestate(d); for (int i = 1; i < d.race.lifeStageAges.Count; i++) { LifeStageAge lifeStageAge = d.race.lifeStageAges[i]; float num2 = lifeStageAge.minAge - d.race.lifeStageAges[i - 1].minAge; float num3 = num2 * 60f; num += num3 * lifeStageAge.def.hungerRateFactor * d.race.baseHungerRate; } return(num); }; Func <ThingDef, float> adultMeatNutPerInput = (ThingDef d) => d.GetStatValueAbstract(StatDefOf.MeatAmount) * 0.05f / nutritionToAdulthood(d); Func <ThingDef, float> bestMeatPerInput = delegate(ThingDef d) { float a = babyMeatNutPerInput(d); float b = adultMeatNutPerInput(d); return(Mathf.Max(a, b)); }; Func <ThingDef, string> eggNut = delegate(ThingDef d) { CompProperties_EggLayer compProperties = d.GetCompProperties <CompProperties_EggLayer>(); if (compProperties == null) { return(string.Empty); } return(compProperties.eggFertilizedDef.GetStatValueAbstract(StatDefOf.Nutrition).ToString("F2")); }; DebugTables.MakeTablesDialog(from d in DefDatabase <ThingDef> .AllDefs where d.category == ThingCategory.Pawn && d.race.IsFlesh orderby bestMeatPerInput(d) descending select d, new TableDataGetter <ThingDef>(string.Empty, (ThingDef d) => d.defName), new TableDataGetter <ThingDef>("hungerRate", (ThingDef d) => d.race.baseHungerRate.ToString("F2")), new TableDataGetter <ThingDef>("gestDaysEach", (ThingDef d) => gestDaysEach(d).ToString("F2")), new TableDataGetter <ThingDef>("herbiv", (ThingDef d) => ((d.race.foodType & FoodTypeFlags.Plant) == FoodTypeFlags.None) ? string.Empty : "Y"), new TableDataGetter <ThingDef>("|", (ThingDef d) => "|"), new TableDataGetter <ThingDef>("bodySize", (ThingDef d) => d.race.baseBodySize.ToString("F2")), new TableDataGetter <ThingDef>("age Adult", (ThingDef d) => d.race.lifeStageAges[d.race.lifeStageAges.Count - 1].minAge.ToString("F2")), new TableDataGetter <ThingDef>("nutrition to adulthood", (ThingDef d) => nutritionToAdulthood(d).ToString("F2")), new TableDataGetter <ThingDef>("adult meat-nut", (ThingDef d) => (d.GetStatValueAbstract(StatDefOf.MeatAmount) * 0.05f).ToString("F2")), new TableDataGetter <ThingDef>("adult meat-nut / input-nut", (ThingDef d) => adultMeatNutPerInput(d).ToString("F3")), new TableDataGetter <ThingDef>("|", (ThingDef d) => "|"), new TableDataGetter <ThingDef>("baby size", (ThingDef d) => (d.race.lifeStageAges[0].def.bodySizeFactor * d.race.baseBodySize).ToString("F2")), new TableDataGetter <ThingDef>("nutrition to gestate", (ThingDef d) => nutritionToGestate(d).ToString("F2")), new TableDataGetter <ThingDef>("egg nut", (ThingDef d) => eggNut(d)), new TableDataGetter <ThingDef>("baby meat-nut", (ThingDef d) => babyMeatNut(d).ToString("F2")), new TableDataGetter <ThingDef>("baby meat-nut / input-nut", (ThingDef d) => babyMeatNutPerInput(d).ToString("F2")), new TableDataGetter <ThingDef>("baby wins", (ThingDef d) => (!(babyMeatNutPerInput(d) > adultMeatNutPerInput(d))) ? string.Empty : "B")); }
private static SoundDef <PlayWoundedVoiceSound> m__0(LifeStageAge ls) { return(ls.soundWounded); }
private static SoundDef <DoCall> m__1(LifeStageAge ls) { return(ls.soundCall); }
private static SoundDef <DoCall> m__0(LifeStageAge ls) { return(ls.soundAngry); }