rjw_menstruation/1.4/source/RJW_Menstruation/RJW_Menstruation/EstrusPartKindUsageRule.cs

41 lines
1.8 KiB
C#

using rjw;
using rjw.Modules.Interactions.Contexts;
using rjw.Modules.Interactions.Enums;
using rjw.Modules.Interactions.Rules.PartKindUsageRules;
using rjw.Modules.Shared;
using System.Collections.Generic;
using Verse;
namespace RJW_Menstruation.Interactions
{
public class EstrusPartKindUsageRule : IPartPreferenceRule
{
private const float visible_estrus_multiplier = Multipliers.Doubled;
private const float concealed_estrus_multiplier = 1.1f;
private bool WillingAndAble(Pawn fucker, Pawn fucked, bool visible)
{
return
fucked.IsInEstrus(visible)
&&
PregnancyHelper.CanImpregnate(fucker, fucked);
}
public IEnumerable<Weighted<LewdablePartKind>> ModifiersForDominant(InteractionContext context)
{
if (WillingAndAble(context.Internals.Submissive.Pawn, context.Internals.Dominant.Pawn, true))
yield return new Weighted<LewdablePartKind>(visible_estrus_multiplier, LewdablePartKind.Vagina);
else if (WillingAndAble(context.Internals.Submissive.Pawn, context.Internals.Dominant.Pawn, false))
yield return new Weighted<LewdablePartKind>(concealed_estrus_multiplier, LewdablePartKind.Vagina);
}
public IEnumerable<Weighted<LewdablePartKind>> ModifiersForSubmissive(InteractionContext context)
{
if (WillingAndAble(context.Internals.Dominant.Pawn, context.Internals.Submissive.Pawn, true))
yield return new Weighted<LewdablePartKind>(visible_estrus_multiplier, LewdablePartKind.Vagina);
else if (WillingAndAble(context.Internals.Dominant.Pawn, context.Internals.Submissive.Pawn, false))
yield return new Weighted<LewdablePartKind>(concealed_estrus_multiplier, LewdablePartKind.Vagina);
}
}
}