コード例 #1
0
 public static bool IsValidRitualTarget([NotNull] this Pawn pawn)
 {
     if (pawn == null)
     {
         throw new ArgumentNullException(nameof(pawn));
     }
     return(pawn.IsPrisonerOfColony &&
            pawn.def != PSThingDefOf.Alien_Skaven &&
            MorphUtilities.HybridsAreEnabledFor(pawn.def));
 }
コード例 #2
0
        static void GetRaceMaxInfluence()
        {
            StringBuilder builder = new StringBuilder();

            foreach (ThingDef thingDef in DefDatabase <ThingDef> .AllDefs.Where(t => t.race?.body != null))
            {
                builder.AppendLine($"{thingDef.defName}/{thingDef.label}={MorphUtilities.GetMaxInfluenceOfRace(thingDef)}");
            }

            Log.Message(builder.ToString());
        }
コード例 #3
0
        static void GetMissingSlotsPerMorph()
        {
            var allPossibleSites = DefDatabase <MutationDef>
                                   .AllDefs.SelectMany(m => m.GetAllMutationSites(BodyDefOf.Human))
                                   .Distinct()
                                   .ToList();

            List <MutationSite> scratchList    = new List <MutationSite>();
            List <MutationSite> missingScratch = new List <MutationSite>();
            StringBuilder       builder        = new StringBuilder();

            foreach (MorphDef morphDef in MorphDef.AllDefs)
            {
                var allMorphSites = morphDef.AllAssociatedMutations.SelectMany(m => m.GetAllMutationSites(BodyDefOf.Human))
                                    .Distinct();

                scratchList.Clear();
                scratchList.AddRange(allMorphSites);
                missingScratch.Clear();
                var missing = allPossibleSites.Where(m => !scratchList.Contains(m));
                missingScratch.AddRange(missing);

                if (missingScratch.Count == 0)
                {
                    builder.AppendLine($"{morphDef.defName} has all possible mutations");
                }
                else
                {
                    float maxInfluence = ((float)scratchList.Count) / MorphUtilities.GetMaxInfluenceOfRace(ThingDefOf.Human);
                    builder.AppendLine($"{morphDef.defName}: {nameof(maxInfluence)}={maxInfluence.ToStringByStyle(ToStringStyle.PercentOne)}");
                    var grouping = missingScratch.GroupBy(g => g.Layer, g => g.Record);
                    foreach (var group in grouping)
                    {
                        builder.AppendLine($"-\t{group.Key}: [{group.Select(s => s.def).Distinct().Join(s => s?.defName ?? "NULL")}]");
                    }
                }
            }
            Log.Message(builder.ToString());
        }
コード例 #4
0
 private static void MaximumMutationPointsForHumans()
 {
     Log.Message(MorphUtilities.GetMaxInfluenceOfRace(ThingDefOf.Human).ToString());
 }
コード例 #5
0
        void GetMutationInfo(Pawn pawn)
        {
            var tracker = pawn?.GetMutationTracker();

            if (tracker == null)
            {
                Log.Message($"no tracker on {pawn?.Name?.ToStringFull ?? "NULL"}");
                return;
            }

            StringBuilder builder = new StringBuilder();

            builder.AppendLine($"---{pawn.Name}---");
            builder.AppendLine("---Raw Influence---");
            foreach (KeyValuePair <AnimalClassBase, float> kvp in tracker)
            {
                builder.AppendLine($"{kvp.Key.Label}:{kvp.Value}");
            }

            builder.AppendLine($"---Total={tracker.TotalInfluence} N:{tracker.TotalNormalizedInfluence} NN:{tracker.TotalInfluence/MorphUtilities.GetMaxInfluenceOfRace(pawn.def)}---");


            builder.AppendLine($"---HighestInfluence={tracker.HighestInfluence?.Label ?? "NULL"}---");



            Log.Message(builder.ToString());
        }