rjw-genes/1.6/Source/Genes/Fluid/FluidUtility.cs
Telanda-DDS dde1c98b18 - Incremented version to 2.5.1
- Removed DDS Files
- Added Initial Support for Rimworld 1.6
- Added Additional mod requirement to PatchBSShared.xml to prevent premature loading.
- Refactored Cumpilation integration to make it optional rather then a Required Mod.
- Disabled succubus tail interactions pending rewrite for RJW's new interactions system.
- Disabled Quirks pending rewrite RJW separating them into their own mod.
2025-07-17 21:07:51 +10:00

81 lines
2.5 KiB
C#

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;
}
}
/// <summary>
/// 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.
/// </summary>
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<MultiplierExtension>();
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;
}
}
}
}
}