Example #1
0
 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;
     }
 }
Example #3
0
        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"));
        }