Skip to content

Commit

Permalink
[Preg][KK/S] Simplify some week progress logic; Minor speedup
Browse files Browse the repository at this point in the history
  • Loading branch information
ManlyMarco committed Sep 20, 2022
1 parent 40128f3 commit ff49170
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 16 deletions.
8 changes: 4 additions & 4 deletions src/Core_Pregnancy_KK/Data/PregnancyDataUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,11 @@ internal static IEnumerable<ChaFileControl> GetRelatedChaFiles(this SaveData.Cha

/// <summary>
/// Get character's current fertility. Can be affected by plugin config and other plugins.
/// 0-1 range
/// </summary>
public static float GetFertility(SaveData.CharaData character)
{
var pd = character?.GetPregnancyData();
return Mathf.Max(PregnancyPlugin.FertilityOverride.Value, pd?.Fertility ?? 1);
return Mathf.Max(PregnancyPlugin.FertilityOverride.Value, character != null ? character.GetPregnancyData().Fertility : 0.3f);
}

/// <summary>
Expand All @@ -133,13 +133,13 @@ public static MenstruationSchedule GetMenstruation(SaveData.CharaData character)
// .Select(c => PregnancyData.Load(ExtendedSave.GetExtendedDataById(c, GUID))?.MenstruationSchedule ?? MenstruationSchedule.Default)
// .FirstOrDefault(x => x != MenstruationSchedule.Default);
}

/// <summary>
/// Get speed modifier of character's pergenency. Can be affected by plugin config and other plugins.
/// </summary>
public static int GetPregnancyProgressionSpeed(SaveData.CharaData character)
{
// todo add setting for individual chara speed (multiplier? slow normal fast for 1.5, 1, 0.5)
// todo add setting for individual chara speed (multiplier? slow normal fast for 1.5, 1, 0.5? only toggle for faster? slower won't work if config is set to 1)
return PregnancyPlugin.PregnancyProgressionSpeed.Value;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/Core_Pregnancy_KK/LactationController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ private static float GetMilkAmount(PregnancyCharaController controller)
// Gradually increase
if (data.IsPregnant) return Mathf.Clamp01(data.Week / 40f);
// Gradually decrease after pregnancy finishes
if (data.PregnancyCount > 0) return 1 - Mathf.Clamp01(data.WeeksSinceLastPregnancy / (40f / PregnancyDataUtils.GetPregnancyProgressionSpeed(controller.ChaControl.GetHeroine())));
if (data.PregnancyCount > 0) return 1 - Mathf.Clamp01(data.WeeksSinceLastPregnancy / 3f);
return 0;
}

Expand Down
18 changes: 10 additions & 8 deletions src/Core_Pregnancy_KK/PregnancyBoneEffect.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using KKABMX.Core;
using KKAPI.MainGame;
using KKAPI.Maker;
using KKAPI.Studio;
using UnityEngine;
Expand All @@ -10,8 +9,6 @@ namespace KK_Pregnancy
{
public class PregnancyBoneEffect : BoneEffect
{
private readonly PregnancyCharaController _controller;

private static readonly Dictionary<string, BoneModifierData> _bellyFullValues = new Dictionary<string, BoneModifierData>
{
// Belly :scale :position :rotation
Expand Down Expand Up @@ -53,6 +50,10 @@ public class PregnancyBoneEffect : BoneEffect
};

private static readonly IEnumerable<string> _affectedBoneNames = _bellyFullValues.Keys.Concat(_pregnancyFullValues.Keys).ToArray();

private readonly PregnancyCharaController _controller;

private float _pregnancyEffectPercent;

public PregnancyBoneEffect(PregnancyCharaController controller)
{
Expand All @@ -62,7 +63,10 @@ public PregnancyBoneEffect(PregnancyCharaController controller)
public override IEnumerable<string> GetAffectedBones(BoneController origin)
{
if (_controller.Data.IsPregnant || MakerAPI.InsideMaker || StudioAPI.InsideStudio || PregnancyGameController.InsideHScene)
{
_pregnancyEffectPercent = GetPregnancyEffectPercent();
return _affectedBoneNames;
}

return Enumerable.Empty<string>();
}
Expand All @@ -74,7 +78,7 @@ public override BoneModifierData GetEffect(string bone, BoneController origin, C
{
if (_pregnancyFullValues.TryGetValue(bone, out var mod))
{
var prEffect = GetPregnancyEffectPercent();
var prEffect = _pregnancyEffectPercent;
return LerpModifier(mod, prEffect);
}
}
Expand All @@ -83,7 +87,7 @@ public override BoneModifierData GetEffect(string bone, BoneController origin, C
{
if (_bellyFullValues.TryGetValue(bone, out var mod))
{
var prEffect = GetPregnancyEffectPercent();
var prEffect = _pregnancyEffectPercent;
var infEffect = _controller.GetInflationEffectPercent() + prEffect / 2;

var bellySize = Mathf.Max(prEffect, infEffect);
Expand Down Expand Up @@ -120,9 +124,7 @@ public float GetPregnancyEffectPercent()
{
if (_controller.Data.Week > PregnancyData.LeaveSchoolWeek) return 0;
// Don't show any effect at week 1 since it begins right after winning a child lottery
// also reduce belly size in the 2nd week based on the time step to avoid huge bellies causing a large belly to appear out of nowhere very early
var progressionSpeed = Mathf.Ceil(PregnancyDataUtils.GetPregnancyProgressionSpeed(_controller.ChaControl.GetHeroine()) / 2f);
return Mathf.Clamp01((_controller.Data.Week - progressionSpeed) / (PregnancyData.LeaveSchoolWeek - progressionSpeed));
return Mathf.Clamp01((_controller.Data.Week - 1f) / (PregnancyData.LeaveSchoolWeek - 1f));
}
}
}
2 changes: 1 addition & 1 deletion src/KKS_Pregnancy/GUI/PregnancyGui.StatusIcons.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ private static void OnGUI()

GUILayout.Label("Forecast for this week:");

switch (pregData.MenstruationSchedule)
switch (PregnancyDataUtils.GetMenstruation(heroine))
{
case MenstruationSchedule.AlwaysSafe:
GUILayout.Label("It's always safe!");
Expand Down
2 changes: 1 addition & 1 deletion src/KK_Pregnancy/GUI/PregnancyGui.StatusIcons.cs
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ private void OnGUI()

GUILayout.Label("Forecast for this week:");

switch (pregData.MenstruationSchedule)
switch (PregnancyDataUtils.GetMenstruation(heroine))
{
case MenstruationSchedule.AlwaysSafe:
GUILayout.Label("It's always safe!");
Expand Down
1 change: 0 additions & 1 deletion src/KK_Pregnancy/PregnancyGameController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
using UnityEngine;
using Random = UnityEngine.Random;
using ActionGame;
using static SaveData;

namespace KK_Pregnancy
{
Expand Down

0 comments on commit ff49170

Please sign in to comment.