mirror of
https://github.com/vegapnk/RJW-Genes.git
synced 2024-08-15 00:23:31 +00:00
81 lines
2.9 KiB
C#
81 lines
2.9 KiB
C#
|
using HarmonyLib;
|
|||
|
using RimWorld;
|
|||
|
using rjw;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using Verse;
|
|||
|
using static HarmonyLib.Code;
|
|||
|
|
|||
|
namespace RJW_Genes
|
|||
|
{
|
|||
|
[HarmonyPatch(typeof(SexUtility), "Aftersex")]
|
|||
|
public class Patch_PregnancyOverwrite
|
|||
|
{
|
|||
|
public const int FACTION_GOODWILL_CHANGE = -5;
|
|||
|
|
|||
|
public static void Postfix(SexProps props)
|
|||
|
{
|
|||
|
if (props == null || props.pawn == null || props.partner == null || props.partner.IsAnimal())
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
Pawn pawn = props.pawn;
|
|||
|
Pawn partner = props.partner;
|
|||
|
|
|||
|
if (pawn.genes == null || partner.genes == null) return;
|
|||
|
|
|||
|
// If both have the swap gene, nothing happens
|
|||
|
if (GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_pregnancy_overwrite)
|
|||
|
&& GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_pregnancy_overwrite))
|
|||
|
return;
|
|||
|
|
|||
|
// If both are pregnant, we have some weird interaction. Exit Early
|
|||
|
if (pawn.IsPregnant() && partner.IsPregnant())
|
|||
|
return;
|
|||
|
// If neither are pregnant, nothing can happen.
|
|||
|
if (!pawn.IsPregnant() && !partner.IsPregnant())
|
|||
|
return;
|
|||
|
|
|||
|
ModLog.Debug("Firing Pregnancy Overwrite Patch - Passed Simple NullChecks");
|
|||
|
|
|||
|
if (pawn.IsPregnant()
|
|||
|
&& GeneUtility.HasGeneNullCheck(partner, GeneDefOf.rjw_genes_pregnancy_overwrite))
|
|||
|
TryReplacePregnancy(partner, pawn);
|
|||
|
|
|||
|
if (partner.IsPregnant()
|
|||
|
&& GeneUtility.HasGeneNullCheck(pawn, GeneDefOf.rjw_genes_pregnancy_overwrite))
|
|||
|
TryReplacePregnancy(pawn, partner);
|
|||
|
}
|
|||
|
|
|||
|
public static void TryReplacePregnancy(Pawn replacer, Pawn pregnant)
|
|||
|
{
|
|||
|
// TODO: This mostly works, but needs some more checks.
|
|||
|
// - Check if there is a pregnancy occurring
|
|||
|
// - Check for Disease Immunity
|
|||
|
// - Add Faction Penalties
|
|||
|
|
|||
|
ModLog.Debug($"Firing Pregnancy Overwrite for {replacer} and {pregnant}");
|
|||
|
|
|||
|
// The "CanImpregnate" does not work as I want, as the pawn is already pregnant, so it wont allow to be pregnated.
|
|||
|
//PregnancyHelper.CanImpregnate(pawn, partner, props.sexType)
|
|||
|
|
|||
|
Hediff pregnancyHediff = PregnancyUtility.GetPregnancyHediff(pregnant);
|
|||
|
if (pregnancyHediff == null)
|
|||
|
return;
|
|||
|
|
|||
|
float gestationProgress = pregnancyHediff.Severity;
|
|||
|
|
|||
|
PregnancyUtility.ForceEndPregnancy(pregnant);
|
|||
|
|
|||
|
PregnancyHelper.StartVanillaPregnancy(pregnant, replacer);
|
|||
|
Hediff replacementPregnancyHediff = PregnancyUtility.GetPregnancyHediff(pregnant);
|
|||
|
replacementPregnancyHediff.Severity = gestationProgress;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|