88 lines
3.1 KiB
C#
88 lines
3.1 KiB
C#
using HarmonyLib;
|
|
using System.Linq;
|
|
using RimWorld;
|
|
using Verse;
|
|
using System.Collections.Generic;
|
|
|
|
namespace RJW_Menstruation
|
|
{
|
|
[HarmonyPatch(typeof(Hediff_Pregnant), "Miscarry")]
|
|
public class Miscarry_Patch
|
|
{
|
|
public static void Postfix(Hediff_Pregnant __instance)
|
|
{
|
|
HediffComp_Menstruation comp = __instance.GetMenstruationCompFromPregnancy();
|
|
if (comp == null) return;
|
|
comp.Pregnancy = null;
|
|
}
|
|
}
|
|
|
|
[HarmonyPatch(typeof(Hediff_Pregnant), nameof(Hediff_Pregnant.StartLabor))]
|
|
public class StartLabor_Patch
|
|
{
|
|
public static void Postfix(Hediff_Pregnant __instance)
|
|
{
|
|
HediffComp_Menstruation comp = __instance.GetMenstruationCompFromPregnancy();
|
|
if (comp == null) return;
|
|
comp.Pregnancy = __instance.pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.PregnancyLabor);
|
|
}
|
|
}
|
|
|
|
[HarmonyPatch(typeof(Hediff_Labor), nameof(Hediff_Labor.PreRemoved))]
|
|
public class Labor_PreRemoved_Patch
|
|
{
|
|
public static void PostFix(Hediff_Labor __instance)
|
|
{
|
|
HediffComp_Menstruation comp = __instance.GetMenstruationCompFromPregnancy();
|
|
if (comp == null) return;
|
|
comp.Pregnancy = __instance.pawn.health.hediffSet.GetFirstHediffOfDef(HediffDefOf.PregnancyLaborPushing);
|
|
}
|
|
}
|
|
|
|
[HarmonyPatch(typeof(Hediff_LaborPushing), nameof(Hediff_LaborPushing.PreRemoved))]
|
|
public class LaborPushing_PreRemoved_Patch
|
|
{
|
|
public static void PostFix(Hediff_LaborPushing __instance)
|
|
{
|
|
HediffComp_Menstruation comp = __instance.GetMenstruationCompFromPregnancy();
|
|
if (comp == null) return;
|
|
comp.Pregnancy = null;
|
|
}
|
|
}
|
|
|
|
// Prevents a pregnancy from going into labor if another pregnancy already is
|
|
[HarmonyPatch(typeof(Hediff_Pregnant), nameof(Hediff_Pregnant.GestationProgress), MethodType.Getter)]
|
|
public class Hediff_Pregnant_GestationProgess_Patch
|
|
{
|
|
public static void PostFix(Hediff_Pregnant __instance, ref float __result)
|
|
{
|
|
if (__result < 1f) return;
|
|
Pawn pawn = __instance.pawn;
|
|
if (pawn.health.hediffSet.hediffs.Any(hediff => hediff.def == HediffDefOf.PregnancyLabor || hediff.def == HediffDefOf.PregnancyLaborPushing))
|
|
__result = 0.999f;
|
|
}
|
|
}
|
|
|
|
[HarmonyPatch(typeof(Recipe_ExtractOvum), nameof(Recipe_ExtractOvum.AvailableReport))]
|
|
public class ExtractOvum_AvailableReport_Patch
|
|
{
|
|
public static void PostFix(Thing thing, ref AcceptanceReport __result)
|
|
{
|
|
if (!__result.Accepted) return;
|
|
Pawn pawn = (Pawn)thing;
|
|
if (pawn.IsRJWPregnant())
|
|
{
|
|
__result = "CannotPregnant".Translate();
|
|
return;
|
|
}
|
|
List<HediffComp_Menstruation> comps = pawn.GetMenstruationComps().ToList();
|
|
if (!comps.Any()) return;
|
|
if (comps.All(comp => comp.ovarypower <= 0))
|
|
{
|
|
__result = Translations.CannotNoEggs;
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
} |