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> ModifiersForDominant(InteractionContext context) { if (WillingAndAble(context.Internals.Submissive.Pawn, context.Internals.Dominant.Pawn, true)) yield return new Weighted(visible_estrus_multiplier, LewdablePartKind.Vagina); else if (WillingAndAble(context.Internals.Submissive.Pawn, context.Internals.Dominant.Pawn, false)) yield return new Weighted(concealed_estrus_multiplier, LewdablePartKind.Vagina); } public IEnumerable> ModifiersForSubmissive(InteractionContext context) { if (WillingAndAble(context.Internals.Dominant.Pawn, context.Internals.Submissive.Pawn, true)) yield return new Weighted(visible_estrus_multiplier, LewdablePartKind.Vagina); else if (WillingAndAble(context.Internals.Dominant.Pawn, context.Internals.Submissive.Pawn, false)) yield return new Weighted(concealed_estrus_multiplier, LewdablePartKind.Vagina); } } }