From 55554df7e2ca5a08ff30d04d368ee4cd4a4d0b13 Mon Sep 17 00:00:00 2001
From: callavico <131923070+callavico@users.noreply.github.com>
Date: Wed, 26 Apr 2023 20:56:55 -0400
Subject: [PATCH] Remove hediffs during Pawn Generation Calls
RemoveAllSexChangeThoughts via a notify method that we call after
PawnGenerator creates genes
---
Source/Genes/Gender/Gene_FemaleOnly.cs | 10 ++++++++-
Source/Genes/Gender/Gene_MaleOnly.cs | 8 ++++++-
Source/Genes/Patch_AddNotifyOnGeneration.cs | 23 +++++++++++++++++++++
Source/Genes/RJW_Gene.cs | 8 +++++++
Source/Rjw-Genes.csproj | 1 +
5 files changed, 48 insertions(+), 2 deletions(-)
create mode 100644 Source/Genes/Patch_AddNotifyOnGeneration.cs
diff --git a/Source/Genes/Gender/Gene_FemaleOnly.cs b/Source/Genes/Gender/Gene_FemaleOnly.cs
index 0cfbe0d..110370f 100644
--- a/Source/Genes/Gender/Gene_FemaleOnly.cs
+++ b/Source/Genes/Gender/Gene_FemaleOnly.cs
@@ -4,7 +4,7 @@ using rjw;
namespace RJW_Genes
{
- public class Gene_FemaleOnly : Gene
+ public class Gene_FemaleOnly : RJW_Gene
{
public override void PostMake()
{
@@ -24,6 +24,8 @@ namespace RJW_Genes
private void AdjustPawnToFemale()
{
+ Log.Message($"Gene_FemaleOnly AdjustPawnToFemale | {pawn} | {pawn.gender}");
+
// Here we really use the Gender.Female and not our helper IsFemale(pawn)
if (pawn.gender == Gender.Female)
return;
@@ -38,5 +40,11 @@ namespace RJW_Genes
}
}
+ public override void Notify_OnPawnGeneration()
+ {
+ base.Notify_OnPawnGeneration();
+ // If this is Pawn generation, then we can assume that the pawn was never any gender other than female, so they shouldn't have sex change thoughts.
+ GenderUtility.RemoveAllSexChangeThoughts(pawn);
+ }
}
}
diff --git a/Source/Genes/Gender/Gene_MaleOnly.cs b/Source/Genes/Gender/Gene_MaleOnly.cs
index 51806cf..eba7ce5 100644
--- a/Source/Genes/Gender/Gene_MaleOnly.cs
+++ b/Source/Genes/Gender/Gene_MaleOnly.cs
@@ -4,7 +4,7 @@ using rjw;
namespace RJW_Genes
{
- public class Gene_MaleOnly : Gene
+ public class Gene_MaleOnly : RJW_Gene
{
public override void PostMake()
{
@@ -38,5 +38,11 @@ namespace RJW_Genes
}
}
+ public override void Notify_OnPawnGeneration()
+ {
+ base.Notify_OnPawnGeneration();
+ // If this is Pawn generation, then we can assume that the pawn was never any gender other than male, so they shouldn't have sex change thoughts.
+ GenderUtility.RemoveAllSexChangeThoughts(pawn);
+ }
}
}
diff --git a/Source/Genes/Patch_AddNotifyOnGeneration.cs b/Source/Genes/Patch_AddNotifyOnGeneration.cs
new file mode 100644
index 0000000..3395a81
--- /dev/null
+++ b/Source/Genes/Patch_AddNotifyOnGeneration.cs
@@ -0,0 +1,23 @@
+using HarmonyLib;
+using System.Linq;
+using Verse;
+
+namespace RJW_Genes.Genes
+{
+ [HarmonyPatch]
+ public static class Patch_AddNotifyOnGeneration
+ {
+ [HarmonyPatch(typeof(PawnGenerator), "GenerateGenes")]
+ [HarmonyPostfix]
+ public static void PawnGenerator_GenerateGenes_Postfix(Pawn pawn)
+ {
+ if (pawn.genes == null) return;
+
+ foreach(var gene in pawn.genes.GenesListForReading)
+ {
+ if (gene is RJW_Gene rjwGene)
+ rjwGene.Notify_OnPawnGeneration();
+ }
+ }
+ }
+}
diff --git a/Source/Genes/RJW_Gene.cs b/Source/Genes/RJW_Gene.cs
index d03440c..dfa05bf 100644
--- a/Source/Genes/RJW_Gene.cs
+++ b/Source/Genes/RJW_Gene.cs
@@ -12,5 +12,13 @@ namespace RJW_Genes
if (GenitaliaUtility.PawnStillNeedsGenitalia(pawn))
Sexualizer.sexualize_pawn(pawn);
}
+
+ ///
+ /// Executed via PawnGenerator.GenerateGenes at Pawn generation
+ /// Allows for execution of code that should only happen during PawnGeneration
+ ///
+ public virtual void Notify_OnPawnGeneration()
+ {
+ }
}
}
diff --git a/Source/Rjw-Genes.csproj b/Source/Rjw-Genes.csproj
index 68a3e34..d85935b 100644
--- a/Source/Rjw-Genes.csproj
+++ b/Source/Rjw-Genes.csproj
@@ -131,6 +131,7 @@
+