/// <summary>Gets the entries for the given pawn</summary> /// <param name="pawn">The pawn.</param> /// <param name="source"></param> /// <returns></returns> public override IEnumerable <MutationEntry> GetEntries(Pawn pawn, Hediff source) { var totemAspect = pawn.GetAspectTracker()?.Aspects?.OfType <BondedAspect>()?.FirstOrDefault(); if (totemAspect == null) { return(Enumerable.Empty <MutationEntry>()); } var fRelation = totemAspect.FirstValidRelation; if (fRelation == null) { return(Enumerable.Empty <MutationEntry>()); } var mDef = MorphUtilities.TryGetBestMorphOfAnimal(fRelation.otherPawn.def); if (mDef == null) { return(Enumerable.Empty <MutationEntry>()); } if (!_entriesCache.TryGetValue(mDef, out var lst)) { lst = mDef.AllAssociatedMutations.Select(CreateEntry).ToList(); _entriesCache[mDef] = lst; } return(lst); }
private void TryAddMutationsToPawn([NotNull] Pawn original, [CanBeNull] Hediff requestCause, [NotNull] PawnKindDef requestOutputDef) { MorphDef mDef = null; if (requestCause != null) //first check the cause { foreach (MorphDef morphDef in MorphDef.AllDefs) { if (morphDef.fullTransformation == requestCause.def || morphDef.partialTransformation == requestCause.def) { mDef = morphDef; goto applyMutations; //ugly, but it's the easiest solution } } } mDef = MorphUtilities.TryGetBestMorphOfAnimal(requestOutputDef.race); if (mDef == null) { DebugLogUtils.LogMsg(LogLevel.Messages, $"could not apply mutations to {original} with cause {requestCause?.def?.defName ?? "NULL"} and target {requestOutputDef.defName}"); return; } applyMutations: MutationUtilities.AddAllMorphMutations(original, mDef); }
static void MutagenicNuzzle(Pawn nuzzler, Pawn nuzzlee) { if (nuzzlee == null || nuzzler == null) { return; } var asT = nuzzler.GetAspectTracker(); var mutInfused = asT?.GetAspect(AspectDefOf.MutagenInfused); if (mutInfused?.StageIndex != 0) { return; } HediffDef hediffToAdd = null; if (nuzzler.IsChimera()) { hediffToAdd = MorphTransformationDefOf.FullRandomTF; } var bestMorph = MorphUtilities.TryGetBestMorphOfAnimal(nuzzler.def); if (bestMorph != null) { hediffToAdd = bestMorph.partialTransformation; } if (hediffToAdd != null) { var health = nuzzlee.health; health?.AddHediff(hediffToAdd); } }