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)); }
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()); }
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()); }
private static void MaximumMutationPointsForHumans() { Log.Message(MorphUtilities.GetMaxInfluenceOfRace(ThingDefOf.Human).ToString()); }
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()); }