mirror of
https://github.com/vegapnk/RJW-Genes.git
synced 2024-08-15 00:23:31 +00:00
Added a ImmunityExtension
This commit is contained in:
parent
9ca57bdfa8
commit
65ff62cbf9
5 changed files with 154 additions and 60 deletions
|
@ -29,7 +29,7 @@ namespace RJW_Genes.Genes.Diseases.Patches
|
|||
if (props.usedCondom) return;
|
||||
|
||||
// Exit early if settings require penetrative sex, but this is not penetrative sex
|
||||
if (!IsPenetrativeSex(props) && RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex) return;
|
||||
if (!DiseaseHelper.IsPenetrativeSex(props) && RJW_Genes_Settings.rjw_genes_genetic_disease_spread_only_on_penetrative_sex) return;
|
||||
|
||||
ModLog.Debug($"Firing Patch_TransferGeneticDiseases for {pawn} and {partner}");
|
||||
TryTransferGeneticDiseases(pawn, partner, props);
|
||||
|
@ -38,74 +38,19 @@ namespace RJW_Genes.Genes.Diseases.Patches
|
|||
|
||||
private static void TryTransferGeneticDiseases(Pawn infector, Pawn infected, SexProps props)
|
||||
{
|
||||
if (infected.genes.HasActiveGene(GeneDefOf.rjw_genes_genetic_disease_immunity))
|
||||
{
|
||||
ModLog.Debug($"{infected} is immune to genetic diseases");
|
||||
return;
|
||||
}
|
||||
if (infected.Dead)
|
||||
{
|
||||
// Dead people can spread, but not receive, diseases.
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (GeneDef disease in GetGeneticDiseaseGenes(infector)) {
|
||||
|
||||
foreach (GeneDef disease in DiseaseHelper.GetGeneticDiseaseGenes(infector)) {
|
||||
ModLog.Debug($"Found genetic disease {disease} in {infector}, trying to infect {infected}");
|
||||
|
||||
if (infected.genes.HasActiveGene(disease))
|
||||
if (DiseaseHelper.IsImmuneAgainstGeneticDisease(infected,disease))
|
||||
continue;
|
||||
|
||||
if ((new Random()).NextDouble() <= LookupDiseaseInfectionChance(disease))
|
||||
if ((new Random()).NextDouble() <= DiseaseHelper.LookupDiseaseInfectionChance(disease))
|
||||
{
|
||||
infected.genes.AddGene(disease, !RJW_Genes_Settings.rjw_genes_genetic_disease_as_endogenes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static List<GeneDef> GetGeneticDiseaseGenes(Pawn pawn)
|
||||
{
|
||||
if (pawn != null && pawn.genes != null)
|
||||
{
|
||||
return pawn.genes
|
||||
.GenesListForReading
|
||||
.ConvertAll(gene => gene.def)
|
||||
.Where(genedef => pawn.genes.HasActiveGene(genedef))
|
||||
.Where(IsGeneticDiseaseGene)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
return new List<GeneDef>() { };
|
||||
}
|
||||
|
||||
private static bool IsPenetrativeSex(SexProps props)
|
||||
{
|
||||
if (props == null) return false;
|
||||
|
||||
return props.sexType ==
|
||||
xxx.rjwSextype.Vaginal
|
||||
|| props.sexType == xxx.rjwSextype.Anal
|
||||
|| props.sexType == xxx.rjwSextype.Oral
|
||||
|| props.sexType == xxx.rjwSextype.DoublePenetration
|
||||
|| props.sexType == xxx.rjwSextype.Fellatio
|
||||
|| props.sexType == xxx.rjwSextype.Sixtynine;
|
||||
}
|
||||
|
||||
private static bool IsGeneticDiseaseGene(GeneDef geneDef)
|
||||
{
|
||||
if (geneDef == null) return false;
|
||||
GeneticDiseaseExtension diseaseExt = geneDef.GetModExtension<GeneticDiseaseExtension>();
|
||||
return diseaseExt != null;
|
||||
}
|
||||
|
||||
private static float LookupDiseaseInfectionChance(GeneDef geneDef)
|
||||
{
|
||||
if (IsGeneticDiseaseGene(geneDef))
|
||||
{
|
||||
GeneticDiseaseExtension diseaseExt = geneDef.GetModExtension<GeneticDiseaseExtension>();
|
||||
return diseaseExt != null ? diseaseExt.infectionChance : 0.0f;
|
||||
}
|
||||
else
|
||||
return 0.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue