private static float GestationDaysEach(ThingDef d) { if (d.HasComp(typeof(CompEggLayer))) { CompProperties_EggLayer compProperties = d.GetCompProperties <CompProperties_EggLayer>(); return(compProperties.eggLayIntervalDays / compProperties.eggCountRange.Average); } return(d.race.gestationPeriodDays / ((d.race.litterSizeCurve == null) ? 1f : Rand.ByCurveAverage(d.race.litterSizeCurve))); }
private void SetCompProps(CompProperties_EggLayer compProps, EggProduction p) { if (compProps != null) { compProps.eggCountRange.min = p.CountMin; compProps.eggCountRange.max = p.CountMax; compProps.eggFertilizationCountMax = p.FertalizedCountMax; compProps.eggLayIntervalDays = p.IntervalDays; } }
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")); }