Make the breast adjustment go off of the mother's biological age

This commit is contained in:
lutepickle 2022-03-13 08:26:53 -07:00
parent e0b8f30e76
commit 89d6353e16
2 changed files with 60 additions and 54 deletions

Binary file not shown.

View file

@ -52,8 +52,8 @@ namespace RJW_Menstruation
protected float nippleSizePermanent = -1f; protected float nippleSizePermanent = -1f;
protected float nippleSizeCurrent = -1f; protected float nippleSizeCurrent = -1f;
protected float nippleSize = -1f; protected float nippleSize = -1f;
protected long ageOfLastBirth = 0;
protected float breastSizeIncreased = 0f; protected float breastSizeIncreased = 0f;
protected long lastBabyBorn = -1;
protected float originalpha = -1f; protected float originalpha = -1f;
protected float originareola = -1f; protected float originareola = -1f;
protected float originnipple = -1f; protected float originnipple = -1f;
@ -66,7 +66,7 @@ namespace RJW_Menstruation
{ {
get get
{ {
float res = (parent?.pawn?.RaceProps?.lifeStageAges?.ElementAtOrDefault(1).minAge ?? 0.0f) / 2; float res = parent.pawn.RaceProps.lifeStageAges.ElementAtOrDefault(1).minAge / 2;
if (res == 0.0f) if (res == 0.0f)
{ {
if (Configurations.Debug) Log.Warning($"Could not find end age of baby lifestage for {parent.pawn}'s race"); if (Configurations.Debug) Log.Warning($"Could not find end age of baby lifestage for {parent.pawn}'s race");
@ -163,6 +163,7 @@ namespace RJW_Menstruation
Scribe_Values.Look(ref nippleSizePermanent, "nippleSizePermanent", DEFAULTNIPPLE, true); Scribe_Values.Look(ref nippleSizePermanent, "nippleSizePermanent", DEFAULTNIPPLE, true);
Scribe_Values.Look(ref nippleSizeCurrent, "nippleSizeCurrent", DEFAULTNIPPLE, true); Scribe_Values.Look(ref nippleSizeCurrent, "nippleSizeCurrent", DEFAULTNIPPLE, true);
Scribe_Values.Look(ref nippleSize, "nippleSize", DEFAULTNIPPLE, true); Scribe_Values.Look(ref nippleSize, "nippleSize", DEFAULTNIPPLE, true);
Scribe_Values.Look(ref ageOfLastBirth, "ageOfLastBirth", ageOfLastBirth, true);
Scribe_Values.Look(ref breastSizeIncreased, "breastSizeIncreased", breastSizeIncreased, true); Scribe_Values.Look(ref breastSizeIncreased, "breastSizeIncreased", breastSizeIncreased, true);
Scribe_Values.Look(ref originalpha, "originalpha", originalpha, true); Scribe_Values.Look(ref originalpha, "originalpha", originalpha, true);
Scribe_Values.Look(ref originareola, "originareola", originareola, true); Scribe_Values.Look(ref originareola, "originareola", originareola, true);
@ -176,6 +177,7 @@ namespace RJW_Menstruation
public override void CompPostPostAdd(DamageInfo? dinfo) public override void CompPostPostAdd(DamageInfo? dinfo)
{ {
if (!loaded) Initialize(); if (!loaded) Initialize();
if (ageOfLastBirth > parent.pawn.ageTracker.AgeChronologicalTicks) ageOfLastBirth = CalculateLastBirth(); // catch transplant issues
} }
public override void CompPostPostRemoved() public override void CompPostPostRemoved()
@ -193,17 +195,14 @@ namespace RJW_Menstruation
} }
} }
public void Initialize() protected long CalculateLastBirth()
{ {
Props = (CompProperties_Breast)props; long youngestAge = (long)(BabyHalfAge * GenDate.TicksPerYear) * -2; // So a newborn isn't considered a new mother, either
action = Transition; if ((parent.pawn.relations?.ChildrenCount ?? 0) > 0)
if (lastBabyBorn < 0)
{
if ((parent?.pawn?.relations?.ChildrenCount ?? 0) > 0)
{ {
foreach (Pawn child in parent.pawn.relations.Children) foreach (Pawn child in parent.pawn.relations.Children)
{ {
bool isFetus; bool isFetus;
if (PregnancyHelper.GetPregnancy(parent.pawn) is Hediff_BasePregnancy preg) if (PregnancyHelper.GetPregnancy(parent.pawn) is Hediff_BasePregnancy preg)
{ {
@ -211,14 +210,24 @@ namespace RJW_Menstruation
} }
else isFetus = false; else isFetus = false;
if ( if (
child.ageTracker.BirthAbsTicks > lastBabyBorn && parent.pawn.ageTracker.BirthAbsTicks - child.ageTracker.BirthAbsTicks > ageOfLastBirth &&
!isFetus && !isFetus &&
child.GetMother() == parent.pawn // Don't do Dad's boobs child.GetMother() == parent.pawn // Don't do Dad's boobs
) )
lastBabyBorn = child.ageTracker.BirthAbsTicks; youngestAge = parent.pawn.ageTracker.BirthAbsTicks - child.ageTracker.BirthAbsTicks;
} }
} }
else lastBabyBorn = 0; return youngestAge;
}
public void Initialize()
{
Props = (CompProperties_Breast)props;
action = Transition;
if (ageOfLastBirth == 0)
{
ageOfLastBirth = CalculateLastBirth();
} }
if (alphaPermanent < 0f) if (alphaPermanent < 0f)
@ -257,10 +266,8 @@ namespace RJW_Menstruation
UpdateColor(); UpdateColor();
HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(action, TICKINTERVAL, parent.pawn); HugsLibController.Instance.TickDelayScheduler.ScheduleCallback(action, TICKINTERVAL, parent.pawn);
if (!(parent?.pawn?.health?.Dead ?? true))
{
// Scenario A: the youngest child is less than halfway into babyhood: Full size // Scenario A: the youngest child is less than halfway into babyhood: Full size
if (lastBabyBorn + BabyHalfAge * GenDate.TicksPerYear > GenTicks.TicksAbs) if (ageOfLastBirth + BabyHalfAge * GenDate.TicksPerYear > parent.pawn.ageTracker.AgeBiologicalTicks)
{ {
if (Configurations.Debug) Log.Message($"Latest child of {parent.pawn} is young: breasts to full size"); if (Configurations.Debug) Log.Message($"Latest child of {parent.pawn} is young: breasts to full size");
if (breastSizeIncreased < MAX_BREAST_INCREMENT) if (breastSizeIncreased < MAX_BREAST_INCREMENT)
@ -295,7 +302,6 @@ namespace RJW_Menstruation
ShrinkBreasts(); ShrinkBreasts();
} }
} }
}
public void ChangeColorFermanant(float alpha) public void ChangeColorFermanant(float alpha)
{ {
@ -324,7 +330,7 @@ namespace RJW_Menstruation
areolaSize = areolaSizePermanent; areolaSize = areolaSizePermanent;
nippleSize = nippleSizePermanent; nippleSize = nippleSizePermanent;
pregnant = false; pregnant = false;
lastBabyBorn = GenTicks.TicksAbs; ageOfLastBirth = parent.pawn.ageTracker.AgeBiologicalTicks;
} }