示例#1
0
        /// <summary> Add mutations to the given part. </summary>
        private void AddMutationToPart(BodyPartRecord record, [NotNull] Pawn pawn, AnimalClassBase aClass = null, bool recursive = false, MutagenDef mutagen = null)
        {
            MutationDef mutation;

            if (aClass != null)
            {
                mutation = aClass?.GetAllMorphsInClass()
                           .SelectMany(m => m.GetMutationForPart(record.def))
                           .RandomElementWithFallback();
            }
            else
            {
                mutation = MutationUtilities.GetMutationsByPart(record.def).RandomElementWithFallback();
            }

            if (mutation != null)
            {
                MutationUtilities.AddMutation(pawn, mutation, record);
            }

            mutagen?.TryApplyAspects(pawn);

            if (recursive) // Recursively add mutations to child parts.
            {
                foreach (BodyPartRecord cPart in record.GetDirectChildParts())
                {
                    AddMutationToPart(cPart, pawn, aClass, true, mutagen);
                }
            }
        }
示例#2
0
        private void ApplyMutagenicBuildup(Pawn curOccupant)
        {
            HediffDef hediffDef = MorphTransformationDefOf.MutagenicBuildup;
            var       hediff    = curOccupant.health.hediffSet.GetFirstHediffOfDef(hediffDef);

            if (hediff == null)
            {
                hediff          = HediffMaker.MakeHediff(hediffDef, curOccupant);
                hediff.Severity = _initialSeverity;
                curOccupant.health.AddHediff(hediff);
                return;
            }

            if (hediff.Severity > MAX_SEVERITY)
            {
                return;
            }

            float sevOffset = GetSeverityOffset(curOccupant);

            if (sevOffset < EPSILON)
            {
                return;
            }
            MutationUtilities.AdjustMutagenicBuildup(curOccupant, sevOffset);
        }
        private void DoPawnsMutagenicDamage(Map map)
        {
            List <Pawn> allPawnsSpawned = map.mapPawns.AllPawnsSpawned;
            var         mutagen         = MutagenDefOf.defaultMutagen;

            for (int i = 0; i < allPawnsSpawned.Count; i++)
            {
                Pawn pawn = allPawnsSpawned[i];

                if (!pawn.Position.Roofed(map) && mutagen.CanInfect(pawn))
                {
                    float num = 0.028758334f;
                    num *= pawn.GetMutagenicBuildupMultiplier();
                    if (num != 0f)
                    {
                        float num2 = Mathf.Lerp(0.85f, 1.15f, Rand.ValueSeeded(pawn.thingIDNumber ^ 0x46EDC5D)); //should be ok
                        num *= num2;                                                                             //what's the magic number?
                        MutationUtilities.AdjustMutagenicBuildup(pawn, num);
                    }
                }
            }
        }