This commit is contained in:
Jaaldabaoth 2024-06-04 13:08:37 +02:00
parent 951085ec59
commit 25008ce5dc
48 changed files with 2345 additions and 59 deletions

View file

@ -11,5 +11,8 @@ namespace RJW_Genes
public HediffDef_PartBase vagina;
public HediffDef_PartBase anus;
public HediffDef_PartBase breasts;
}
}

View file

@ -17,7 +17,7 @@ namespace RJW_Genes
Apply();
}
protected virtual void Apply()
public virtual void Apply()
{
if (this.Active)
{
@ -27,7 +27,7 @@ namespace RJW_Genes
ModLog.Error($"Gene {def} failed to change genitals - Need a modExtension with Class=\"{typeof(GenitaliaTypeExtension).FullName}\".");
return;
}
GenitaliaChanger.ChangeGenitalia(pawn, genitals.penis, genitals.vagina, genitals.anus);
GenitaliaChanger.ChangeGenitalia(pawn, genitals.penis, genitals.vagina, genitals.anus, genitals.breasts);
}
}
}

View file

@ -2,6 +2,7 @@
using RimWorld;
using Verse;
using System.Collections.Generic;
using rjw.Modules.Interactions.DefModExtensions;
namespace RJW_Genes
{
@ -16,7 +17,7 @@ namespace RJW_Genes
/// <param name="penisReplacement">the new type of penis</param>
/// <param name="vaginaReplacement">the new type of vagina</param>
/// <param name="anusReplacement">the new type of anus</param>
public static void ChangeGenitalia(Pawn pawn, HediffDef penisReplacement = null, HediffDef vaginaReplacement = null, HediffDef anusReplacement = null)
public static void ChangeGenitalia(Pawn pawn, HediffDef penisReplacement = null, HediffDef vaginaReplacement = null, HediffDef anusReplacement = null , HediffDef breastsReplacement = null)
{
var oldParts = Genital_Helper.get_AllPartsHediffList(pawn);
BodyPartRecord correctBPR;
@ -40,6 +41,12 @@ namespace RJW_Genes
if (Genital_Helper.is_vagina(existingGenital) && vaginaReplacement != null && existingGenital.def != vaginaReplacement)
replacementGenital = HediffMaker.MakeHediff(vaginaReplacement, pawn, correctBPR);
if (is_breast(existingGenital) && breastsReplacement != null && existingGenital.def != breastsReplacement)
{
correctBPR = Genital_Helper.get_breastsBPR(pawn);
replacementGenital = HediffMaker.MakeHediff(breastsReplacement, pawn, correctBPR);
}
if (IsAnus(existingGenital) && anusReplacement != null && existingGenital.def != anusReplacement)
{
correctBPR = Genital_Helper.get_anusBPR(pawn);
@ -74,7 +81,18 @@ namespace RJW_Genes
{
return candidate.def.defName.ToLower().Contains("anus"); }
public static bool IsArtificial(Hediff candidate)
public static bool is_breast(Hediff hed)
{
if (!GenitalPartExtension.TryGet(hed, out var ext))
{
return false;
}
return ext.family == rjw.Modules.Interactions.Enums.GenitalFamily.Breasts;
}
public static bool IsArtificial(Hediff candidate)
{
return candidate.def.defName.ToLower().Contains("bionic") || candidate.def.defName.ToLower().Contains("archo");
}
@ -88,5 +106,7 @@ namespace RJW_Genes
}
}
}
}

View file

@ -16,12 +16,11 @@ namespace RJW_Genes
/// <returns>The first GeneDef of the pawn related to GenitaliaTypes</returns>
public static GeneDef GetGenitaliaTypeGeneForPawn(Pawn pawn)
{
foreach (var gene in pawn.genes.GenesListForReading)
{
foreach (var gene in pawn.genes.GenesListForReading)
{
if (gene is Gene_GenitaliaType)
if (!gene.Overridden)
return gene.def;
return gene.def;
}
return null;
}
@ -46,23 +45,7 @@ namespace RJW_Genes
public static HediffDef GetBreastsForGene(GeneDef gene)
{
if (gene == null)
return Genital_Helper.average_breasts;
switch (gene.defName)
{
//TODO: Do I want the default to be generic or average?
case "rjw_genes_equine_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_canine_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_feline_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_demonic_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_dragon_genitalia": return Genital_Helper.average_breasts;
case "rjw_genes_slime_genitalia": return Genital_Helper.slime_breasts;
case "rjw_genes_udder_breasts": return Genital_Helper.udder_breasts;
case "rjw_genes_ovipositor_genitalia": return Genital_Helper.average_breasts;
default: return Genital_Helper.average_breasts;
}
return gene?.GetModExtension<GenitaliaTypeExtension>()?.breasts ?? Genital_Helper.average_breasts;
}
public static bool PawnStillNeedsGenitalia(Pawn pawn)