From d00834049b55e5d4fcc18a08dd56542d48002417 Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Wed, 10 May 2023 16:19:45 +0200 Subject: [PATCH] Expose of ResizingGenes, fixing #34 --- .../Gene_GenitaliaResizingGene.cs | 38 +++++++++++++++---- .../Patch_ResizingOnAdulthood.cs | 6 ++- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs b/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs index ee24126..1a9cc73 100644 --- a/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs +++ b/Source/Genes/GenitaliaSize/Gene_GenitaliaResizingGene.cs @@ -1,16 +1,34 @@ -namespace RJW_Genes +using Verse; + +namespace RJW_Genes { /// /// Parent Gene for Genitalia Resizing. All Resizing genes should inherit for this class. + /// There is a companion-patch `Patch_ResizingOnAdulthood`. /// /// This helps with some functions (e.g. "hasGenitaliaResizingGenes(pawn)") but also to fire genitalia resizing later in life for Pawns. /// (No Children with huge ding dongs, and I don't want kids with tight anuses I am not that degenerate) + /// + /// + /// There was an Issue (#34) that re-sized the genitalia over multiple birthdays. + /// Before the addition of `ExposeData`, it lost track whether the resizing was already run, + /// leading to a change with every birthday over multiple game starts. /// public abstract class Gene_GenitaliaResizingGene : RJW_Gene { - public const int RESIZING_AGE = 20; - public bool WasApplied { get; set; } + /// + /// The age (in years) at which the Pawns Genes will take effect, resizing their genitalia. + /// + public const int RESIZING_AGE = 20; + + /// + /// Whether or not the gene was already applied. + /// If not, it is checked on every birthday and will be applied accordingly. + /// + private bool resizingWasApplied = false; + public bool ResizingWasApplied { get => resizingWasApplied; set => resizingWasApplied = value; } + public override void PostMake() { @@ -18,7 +36,7 @@ if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE) { Resize(); - WasApplied = true; + ResizingWasApplied = true; } } @@ -28,19 +46,25 @@ if (pawn.ageTracker.AgeBiologicalYears >= RESIZING_AGE) { Resize(); - WasApplied = true; + ResizingWasApplied = true; } } + public override void ExposeData() + { + base.ExposeData(); + Scribe_Values.Look(ref resizingWasApplied, "wasApplied"); + } + /// /// Used to resize the pawns genitalia. /// All Logic should be put here: /// 1. Filters for Gender - /// 2. Filters for Genitalia Existance + /// 2. Filters for Genitalia Existence /// 3. Selection of right Genitalia /// 4. Adjustment of Size /// - /// I kept it intentionally broad, so that e.g. the Penis Resize can resize multiple penises and also for futas, + /// I kept it intentionally broad, so that e.g. the Penis Resize can resize multiple penises and or futas, /// while the breast-gene is female only. /// public abstract void Resize(); diff --git a/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs b/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs index b8542a0..4fa1904 100644 --- a/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs +++ b/Source/Genes/GenitaliaSize/Patch_ResizingOnAdulthood.cs @@ -7,6 +7,8 @@ namespace RJW_Genes /// This Patch adds behavior to all resizing genes: /// At Age RESIZING_MIN_AGE the Pawns Resizing Genes will trigger again, if not already triggered somewhere else. /// This is meant to allow kids to grow up without resized genitals, and resize later (Fixing #11). + /// + /// See `Gene_GenitaliaResizingGene` for a short summary of Issue #34. /// [HarmonyPatch(typeof(Pawn_AgeTracker), "BirthdayBiological")] public class Patch_ResizingOnAdulthood @@ -18,10 +20,10 @@ namespace RJW_Genes { foreach(Gene_GenitaliaResizingGene gene in GeneUtility.GetGenitaliaResizingGenes(___pawn)) { - if (!gene.WasApplied) + if (!gene.ResizingWasApplied) { gene.Resize(); - gene.WasApplied = true; + gene.ResizingWasApplied = true; } } }