Little refactor in PeriodRandomizer

This commit is contained in:
lutepickle 2024-03-17 08:28:25 -07:00
parent 5fbed7073a
commit 9d66be1e49

View file

@ -1854,18 +1854,20 @@ namespace RJW_Menstruation
protected int PeriodRandomizer(Stage stage) protected int PeriodRandomizer(Stage stage)
{ {
float CycleSkew(float factor) => 1 + (cycleSpeed - 1) * factor;
float variabilityFactor = (EggHealth < 1.0f) ? 6.0f : 1.0f; float variabilityFactor = (EggHealth < 1.0f) ? 6.0f : 1.0f;
// Most cycle lengthening or shortening occurs in the follicular phase, so weight towards that // Most cycle lengthening or shortening occurs in the follicular phase, so weight towards that
switch (stage) switch (stage)
{ {
case Stage.Follicular: case Stage.Follicular:
return (int)(Utility.VariationRange(Props.follicularIntervalDays * GenDate.TicksPerDay, cycleVariability * 1.5f * variabilityFactor) / (1 + (cycleSpeed - 1) * 1.5f)); return (int)(Utility.VariationRange(Props.follicularIntervalDays * GenDate.TicksPerDay, cycleVariability * 1.5f * variabilityFactor) / CycleSkew(1.5f));
case Stage.Ovulatory: case Stage.Ovulatory:
return Props.ovulationIntervalHours * GenDate.TicksPerHour; // No variability for now return Props.ovulationIntervalHours * GenDate.TicksPerHour; // No variability for now
case Stage.Luteal: case Stage.Luteal:
return (int)(Utility.VariationRange(Props.lutealIntervalDays * GenDate.TicksPerDay, cycleVariability * 0.5f * variabilityFactor) / (1 + (cycleSpeed - 1) * 0.5f)); return (int)(Utility.VariationRange(Props.lutealIntervalDays * GenDate.TicksPerDay, cycleVariability * 0.5f * variabilityFactor) / CycleSkew(0.5f));
case Stage.Bleeding: case Stage.Bleeding:
return (int)(Utility.VariationRange(Props.bleedingIntervalDays * GenDate.TicksPerDay, cycleVariability * 0.5f * variabilityFactor) / (1 + (cycleSpeed - 1) * 0.5f)); return (int)(Utility.VariationRange(Props.bleedingIntervalDays * GenDate.TicksPerDay, cycleVariability * 0.5f * variabilityFactor) / CycleSkew(0.5f));
case Stage.Recover: case Stage.Recover:
return (int)Utility.VariationRange(Props.recoveryIntervalDays * GenDate.TicksPerDay, 0.05f); return (int)Utility.VariationRange(Props.recoveryIntervalDays * GenDate.TicksPerDay, 0.05f);
case Stage.Pregnant: case Stage.Pregnant: