using Verse; using rjw; using RimWorld; namespace RJW_Genes { public class FluidUtility { public static void MultiplyFluidAmountBy(Pawn pawn, float multiplier) { var partBPR = Genital_Helper.get_genitalsBPR(pawn); var parts = Genital_Helper.get_PartsHediffList(pawn, partBPR); foreach (Hediff part in parts) { // Right now: Ignore Breasts, only do if (part is ISexPartHediff sexPart && (Genital_Helper.is_penis(part) || Genital_Helper.is_vagina(part))) sexPart.GetPartComp().partFluidMultiplier *= multiplier; } } /// /// Looks up the "MultiplierExtensions" Value for a given Gene, with a fall back. /// Returns the fallback if there is no Extension, or if the Multiplier is smaller than 0. /// public static float LookupFluidMultiplier(Gene gene, float FALLBACK = 3.0f) => LookupFluidMultiplier(gene.def, FALLBACK); public static float LookupFluidMultiplier(GeneDef def, float FALLBACK = 3.0f) { MultiplierExtension multiplier = def.GetModExtension(); if (multiplier == null || multiplier.multiplier < 0) return FALLBACK; else return multiplier.multiplier; } //Get total fluidamount a person has. public static float GetTotalFluidAmount(Pawn pawn, float multiplier = 1f) { var partBPR = Genital_Helper.get_genitalsBPR(pawn); var parts = Genital_Helper.get_PartsHediffList(pawn, partBPR); float total_fluid = 0; if (!parts.NullOrEmpty()) { foreach (Hediff part in parts) { if (GenitaliaChanger.IsArtificial(part)) continue; if (part is ISexPartHediff sexPart) { total_fluid += sexPart.GetPartComp().FluidAmount; } } } return total_fluid; } public static void ChangeFluids(Pawn pawn, SexFluidDef penisFluidDefs = null, SexFluidDef vaginaFluidDefs = null, SexFluidDef breastFluidDefs = null, SexFluidDef otherFluidDefs = null) { if (pawn == null) return; var parts = Genital_Helper.get_AllPartsHediffList(pawn); foreach (Hediff part in parts) { if (part is ISexPartHediff sexPart) { var comp = sexPart.GetPartComp(); if (penisFluidDefs != null && Genital_Helper.is_penis(part)) comp.Fluid = penisFluidDefs; else if (vaginaFluidDefs != null && Genital_Helper.is_vagina(part)) comp.Fluid = vaginaFluidDefs; else if (breastFluidDefs != null && GenitaliaUtility.IsBreasts(part)) comp.Fluid = breastFluidDefs; else comp.Fluid = otherFluidDefs; } } } } }