mirror of
https://gitgud.io/lutepickle/rjw_menstruation.git
synced 2024-08-14 22:46:52 +00:00
90 lines
No EOL
2.9 KiB
C#
90 lines
No EOL
2.9 KiB
C#
using RimWorld;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Verse;
|
|
|
|
namespace RJW_Menstruation
|
|
{
|
|
public abstract class StatPart_Menstruation_Effects : StatPart
|
|
{
|
|
public override void TransformValue(StatRequest req, ref float val)
|
|
{
|
|
if (req.Thing is Pawn pawn && ApplicableComps(pawn).Any())
|
|
val *= GetFactor(pawn);
|
|
}
|
|
protected abstract IEnumerable<HediffComp_Menstruation> ApplicableComps(Pawn pawn);
|
|
|
|
protected IEnumerable<HediffComp_Menstruation> AllComps(Pawn pawn)
|
|
{
|
|
return pawn.GetMenstruationComps();
|
|
}
|
|
|
|
protected abstract float GetFactor(Pawn pawn);
|
|
}
|
|
|
|
public abstract class StatPart_Climacteric_Effects : StatPart_Menstruation_Effects
|
|
{
|
|
public override string ExplanationPart(StatRequest req)
|
|
{
|
|
if (req.Thing is Pawn pawn && ApplicableComps(pawn).Any())
|
|
{
|
|
return $"{Translations.Stage_Climacteric.CapitalizeFirst()}: x{GetFactor(pawn).ToStringPercent()}";
|
|
}
|
|
else return null;
|
|
}
|
|
|
|
protected override IEnumerable<HediffComp_Menstruation> ApplicableComps(Pawn pawn)
|
|
{
|
|
return pawn.GetMenstruationComps().Where(comp => comp.EggHealth < 1f && comp.EggHealth > 0f);
|
|
}
|
|
}
|
|
|
|
public abstract class StatPart_Menopause_Effects : StatPart_Menstruation_Effects
|
|
{
|
|
public override string ExplanationPart(StatRequest req)
|
|
{
|
|
if (req.Thing is Pawn pawn && ApplicableComps(pawn).Any())
|
|
{
|
|
return $"{Translations.Stage_Menopause.CapitalizeFirst()}: x{GetFactor(pawn).ToStringPercent()}";
|
|
}
|
|
else return null;
|
|
}
|
|
|
|
protected override IEnumerable<HediffComp_Menstruation> ApplicableComps(Pawn pawn)
|
|
{
|
|
return pawn.GetMenstruationComps().Where(comp => comp.EggHealth <= 0f);
|
|
}
|
|
}
|
|
|
|
public class StatPart_Climacteric_SexFrequency : StatPart_Climacteric_Effects
|
|
{
|
|
protected override float GetFactor(Pawn pawn)
|
|
{
|
|
return AllComps(pawn).Average(comp => comp.SexFrequencyModifier);
|
|
}
|
|
}
|
|
|
|
public class StatPart_Climacteric_SexSatisfaction : StatPart_Climacteric_Effects
|
|
{
|
|
protected override float GetFactor(Pawn pawn)
|
|
{
|
|
return AllComps(pawn).Average(comp => comp.SexSatisfactionModifier);
|
|
}
|
|
}
|
|
|
|
public class StatPart_Menopause_SexFrequency : StatPart_Menopause_Effects
|
|
{
|
|
protected override float GetFactor(Pawn pawn)
|
|
{
|
|
return AllComps(pawn).Average(comp => comp.SexFrequencyModifier);
|
|
}
|
|
}
|
|
|
|
public class StatPart_Menopause_SexSatisfaction : StatPart_Menopause_Effects
|
|
{
|
|
protected override float GetFactor(Pawn pawn)
|
|
{
|
|
return AllComps(pawn).Average(comp => comp.SexSatisfactionModifier);
|
|
}
|
|
}
|
|
} |