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);
        }
Beispiel #2
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"));
        }
Beispiel #3
0
 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);
 }