Move UpdateLust into LustUtility
This commit is contained in:
parent
7f86dcd236
commit
eb3eb92ef5
|
@ -1,6 +1,6 @@
|
||||||
using System;
|
using rjw;
|
||||||
|
using RJWSexperience.Logs;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Verse;
|
using Verse;
|
||||||
|
|
||||||
|
@ -71,5 +71,38 @@ namespace RJWSexperience
|
||||||
};
|
};
|
||||||
SimpleCurveDrawer.DrawCurves(graphRect, curves, curveDrawerStyle);
|
SimpleCurveDrawer.DrawCurves(graphRect, curves, curveDrawerStyle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void UpdateLust(SexProps props, float satisfaction, float baseSatisfaction)
|
||||||
|
{
|
||||||
|
float? lust = props.pawn.records?.GetValue(VariousDefOf.Lust);
|
||||||
|
|
||||||
|
if (lust == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
float lustDelta;
|
||||||
|
|
||||||
|
if (props.sexType != xxx.rjwSextype.Masturbation)
|
||||||
|
{
|
||||||
|
lustDelta = satisfaction - baseSatisfaction;
|
||||||
|
if (Mathf.Sign(lustDelta) == Mathf.Sign((float)lust)) // Only if getting closer to the limit
|
||||||
|
lustDelta *= LustIncrementFactor((float)lust);
|
||||||
|
lustDelta = Mathf.Clamp(lustDelta, -SexperienceMod.Settings.MaxSingleLustChange, SexperienceMod.Settings.MaxSingleLustChange); // If the sex is satisfactory, lust grows up. Declines at the opposite.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lustDelta = Mathf.Clamp(satisfaction * satisfaction * LustIncrementFactor((float)lust), 0, SexperienceMod.Settings.MaxSingleLustChange); // Masturbation always increases lust.
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lustDelta == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
LogManager.GetLogger<DebugLogProvider>("LustUtility").Message($"{props.pawn.NameShortColored}'s lust changed by {lustDelta} (from {lust})");
|
||||||
|
props.pawn.records.AddTo(VariousDefOf.Lust, lustDelta);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static float LustIncrementFactor(float lust)
|
||||||
|
{
|
||||||
|
return Mathf.Exp(-Mathf.Pow(lust / SexperienceMod.Settings.LustLimit, 2));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@ namespace RJWSexperience
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[HarmonyPatch(typeof(SexUtility), "SatisfyPersonal")]
|
[HarmonyPatch(typeof(SexUtility), nameof(SexUtility.SatisfyPersonal))]
|
||||||
public static class RJW_Patch_SatisfyPersonal
|
public static class RJW_Patch_SatisfyPersonal
|
||||||
{
|
{
|
||||||
private const float base_sat_per_fuck = 0.4f;
|
private const float base_sat_per_fuck = 0.4f;
|
||||||
|
@ -61,12 +61,11 @@ namespace RJWSexperience
|
||||||
|
|
||||||
public static void Postfix(SexProps props, ref float satisfaction)
|
public static void Postfix(SexProps props, ref float satisfaction)
|
||||||
{
|
{
|
||||||
Pawn pawn = props.pawn;
|
LustUtility.UpdateLust(props, satisfaction, base_sat_per_fuck);
|
||||||
UpdateLust(props, satisfaction);
|
|
||||||
FillCumBuckets(props);
|
FillCumBuckets(props);
|
||||||
pawn.records?.Increment(VariousDefOf.OrgasmCount);
|
props.pawn.records?.Increment(VariousDefOf.OrgasmCount);
|
||||||
if (props.partner != null)
|
if (props.partner != null)
|
||||||
pawn.TryGetComp<SexHistoryComp>()?.RecordSatisfaction(props.partner, props, satisfaction);
|
props.pawn.TryGetComp<SexHistoryComp>()?.RecordSatisfaction(props.partner, props, satisfaction);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void FillCumBuckets(SexProps props)
|
private static void FillCumBuckets(SexProps props)
|
||||||
|
@ -93,40 +92,6 @@ namespace RJWSexperience
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void UpdateLust(SexProps props, float satisfaction)
|
|
||||||
{
|
|
||||||
float? lust = props.pawn.records?.GetValue(VariousDefOf.Lust);
|
|
||||||
|
|
||||||
if (lust == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
float lustDelta;
|
|
||||||
|
|
||||||
if (props.sexType != xxx.rjwSextype.Masturbation)
|
|
||||||
{
|
|
||||||
lustDelta = satisfaction - base_sat_per_fuck;
|
|
||||||
if (Mathf.Sign(lustDelta) == Mathf.Sign((float)lust)) // Only if getting closer to the limit
|
|
||||||
lustDelta *= LustIncrementFactor((float)lust);
|
|
||||||
lustDelta = Mathf.Clamp(lustDelta, -SexperienceMod.Settings.MaxSingleLustChange, SexperienceMod.Settings.MaxSingleLustChange); // If the sex is satisfactory, lust grows up. Declines at the opposite.
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lustDelta = Mathf.Clamp(satisfaction * satisfaction * LustIncrementFactor((float)lust), 0, SexperienceMod.Settings.MaxSingleLustChange); // Masturbation always increases lust.
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lustDelta == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
LogManager.GetLogger<DebugLogProvider>("RJW_Patch_SatisfyPersonal").Message($"{props.pawn.NameShortColored}'s lust changed by {lustDelta} (from {lust})");
|
|
||||||
props.pawn.records.AddTo(VariousDefOf.Lust, lustDelta);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static float LustIncrementFactor(float lust)
|
|
||||||
{
|
|
||||||
return Mathf.Exp(-Mathf.Pow(lust / SexperienceMod.Settings.LustLimit, 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[HarmonyPatch(typeof(SexUtility), "TransferNutrition")]
|
[HarmonyPatch(typeof(SexUtility), "TransferNutrition")]
|
||||||
|
|
Loading…
Reference in New Issue