65 lines
1.5 KiB
C#
65 lines
1.5 KiB
C#
using RimWorld;
|
|
using rjw;
|
|
using Verse;
|
|
|
|
namespace RJWSexperience.Virginity
|
|
{
|
|
public static class TraitHandler
|
|
{
|
|
private const float hymenSurgeryChance = 0.05f;
|
|
|
|
public static void GenerateVirginTrait(Pawn pawn)
|
|
{
|
|
if (pawn.story?.traits == null)
|
|
return;
|
|
|
|
if (pawn.gender == Gender.Female && !pawn.IsVirgin())
|
|
{
|
|
if (Rand.Chance(hymenSurgeryChance))
|
|
{
|
|
Trait virgin = new Trait(VariousDefOf.Virgin, TraitDegree.FemaleAfterSurgery, true);
|
|
pawn.story.traits.GainTrait(virgin);
|
|
}
|
|
return;
|
|
}
|
|
|
|
AddVirginTrait(pawn);
|
|
}
|
|
|
|
public static void AddVirginTrait(Pawn pawn)
|
|
{
|
|
if (pawn.story?.traits == null)
|
|
return;
|
|
|
|
if (pawn.IsVirgin())
|
|
{
|
|
int degree = TraitDegree.MaleVirgin;
|
|
if (pawn.gender == Gender.Female)
|
|
degree = TraitDegree.FemaleVirgin;
|
|
Trait virgin = new Trait(VariousDefOf.Virgin, degree, true);
|
|
pawn.story.traits.GainTrait(virgin);
|
|
}
|
|
else if (pawn.gender == Gender.Female)
|
|
{
|
|
Trait virgin = new Trait(VariousDefOf.Virgin, TraitDegree.FemaleAfterSurgery, true);
|
|
pawn.story.traits.GainTrait(virgin);
|
|
}
|
|
}
|
|
|
|
public static int? RemoveVirginTrait(Pawn pawn)
|
|
{
|
|
Trait virgin = pawn.story?.traits?.GetTrait(VariousDefOf.Virgin);
|
|
if (virgin == null)
|
|
return null;
|
|
|
|
int degree = virgin.Degree;
|
|
if (pawn.gender == Gender.Female && degree > 0 && !pawn.Dead)
|
|
{
|
|
FilthMaker.TryMakeFilth(pawn.Position, pawn.Map, ThingDefOf.Filth_Blood, pawn.LabelShort, 1, FilthSourceFlags.Pawn);
|
|
}
|
|
pawn.story.traits.RemoveTrait(virgin);
|
|
return degree;
|
|
}
|
|
}
|
|
}
|