From 87c7bad919106c26399be255799ff818ae6b7bad Mon Sep 17 00:00:00 2001 From: Vegapnk Date: Tue, 21 Feb 2023 09:41:26 +0100 Subject: [PATCH] Hardened Extra-Genitalia addition to check for existing items, should fix #19 --- Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs | 25 +++++++++++++++++ .../Genes/ExtraGenitalia/Gene_ExtraBreasts.cs | 26 ++++++++++++++++++ .../Genes/ExtraGenitalia/Gene_ExtraPenis.cs | 27 +++++++++++++++++++ .../Genes/ExtraGenitalia/Gene_ExtraVagina.cs | 25 +++++++++++++++++ 4 files changed, 103 insertions(+) diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs index cea77f2..65121e9 100644 --- a/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs +++ b/Source/Genes/ExtraGenitalia/Gene_ExtraAnus.cs @@ -1,6 +1,7 @@ using Verse; using rjw; using RimWorld; +using System.Linq; namespace RJW_Genes { @@ -13,6 +14,13 @@ namespace RJW_Genes { base.PostMake(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoAnus()) + { + return; + } + if (additional_anus == null) { CreateAndAddAnus(); @@ -23,6 +31,13 @@ namespace RJW_Genes { base.PostAdd(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoAnus()) + { + return; + } + if (additional_anus == null) { CreateAndAddAnus(); @@ -53,5 +68,15 @@ namespace RJW_Genes pawn.health.AddHediff(additional_anus, partBPR); } + internal bool HasAlreadyTwoAnus() + { + if (pawn == null) + return false; + + var possible_breasts = + Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_anus(t)); + + return possible_breasts.Count() >= 2; + } } } diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs index 8829854..84fb107 100644 --- a/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs +++ b/Source/Genes/ExtraGenitalia/Gene_ExtraBreasts.cs @@ -1,6 +1,7 @@ using Verse; using rjw; using RimWorld; +using System.Linq; namespace RJW_Genes { @@ -13,6 +14,13 @@ namespace RJW_Genes { base.PostMake(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoBreasts()) + { + return; + } + // Tits are only added for female pawns! if (GenderUtility.IsFemale(pawn) && additional_breasts == null) { @@ -24,6 +32,13 @@ namespace RJW_Genes { base.PostAdd(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoBreasts()) + { + return; + } + // Tits are only added for female pawns! if (GenderUtility.IsFemale(pawn) && additional_breasts == null) { @@ -55,5 +70,16 @@ namespace RJW_Genes pawn.health.AddHediff(additional_breasts, partBPR); } + internal bool HasAlreadyTwoBreasts() + { + if (pawn == null) + return false; + + var possible_breasts = + Genital_Helper.get_AllPartsHediffList(pawn).Where(t => t.def.defName.Contains("breast")); + + return possible_breasts.Count() >= 2; + } + } } diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs index aee18c7..7b8fcb4 100644 --- a/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs +++ b/Source/Genes/ExtraGenitalia/Gene_ExtraPenis.cs @@ -1,6 +1,7 @@ using Verse; using rjw; using RimWorld; +using System.Linq; namespace RJW_Genes { @@ -13,6 +14,13 @@ namespace RJW_Genes { base.PostMake(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoPenis()) + { + return; + } + // Penis are only added for male pawns! if (GenderUtility.IsMale(pawn) && additional_penis == null) { @@ -24,6 +32,13 @@ namespace RJW_Genes { base.PostAdd(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoPenis()) + { + return; + } + // Penis are only added for male pawns! if (GenderUtility.IsMale(pawn) && additional_penis == null) { @@ -55,5 +70,17 @@ namespace RJW_Genes pawn.health.AddHediff(additional_penis, partBPR); } + + internal bool HasAlreadyTwoPenis() + { + if (pawn == null) + return false; + + var possible_breasts = + Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_penis(t)); + + return possible_breasts.Count() >= 2; + } + } } diff --git a/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs b/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs index 9940de0..fa02b87 100644 --- a/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs +++ b/Source/Genes/ExtraGenitalia/Gene_ExtraVagina.cs @@ -1,6 +1,7 @@ using Verse; using rjw; using RimWorld; +using System.Linq; namespace RJW_Genes { @@ -18,6 +19,13 @@ namespace RJW_Genes { base.PostMake(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoVaginas()) + { + return; + } + // Vaginas are only added for female pawns! if (GenderUtility.IsFemale(pawn) && additional_vagina == null) { @@ -29,6 +37,13 @@ namespace RJW_Genes { base.PostAdd(); + // Some sources add Genes before they fire, e.g. Character Editor + // This should harden the gene, to solve #19 + if (HasAlreadyTwoVaginas()) + { + return; + } + // Vaginas are only added for female pawns! if (GenderUtility.IsFemale(pawn) && additional_vagina == null) { @@ -60,5 +75,15 @@ namespace RJW_Genes pawn.health.AddHediff(additional_vagina, partBPR); } + internal bool HasAlreadyTwoVaginas() + { + if (pawn == null) + return false; + + var possible_breasts = + Genital_Helper.get_AllPartsHediffList(pawn).Where(t => Genital_Helper.is_vagina(t)); + + return possible_breasts.Count() >= 2; + } } }