2024-04-15 17:33:06 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using HarmonyLib;
|
|
|
|
|
using RimWorld;
|
|
|
|
|
using Verse;
|
|
|
|
|
using rjw;
|
|
|
|
|
|
|
|
|
|
namespace Rimworld_Animations {
|
|
|
|
|
|
|
|
|
|
[HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "Start")]
|
|
|
|
|
static class HarmonyPatch_JobDriver_SexBaseInitiator_Start {
|
|
|
|
|
public static void Postfix(ref JobDriver_SexBaseInitiator __instance) {
|
|
|
|
|
/*
|
|
|
|
|
These particular jobs need special code
|
|
|
|
|
don't play anim for now
|
|
|
|
|
*/
|
|
|
|
|
if(__instance is JobDriver_Masturbate || __instance is JobDriver_ViolateCorpse) {
|
2024-04-16 22:10:46 +00:00
|
|
|
|
|
2024-04-15 17:33:06 +00:00
|
|
|
|
return;
|
2024-04-16 22:10:46 +00:00
|
|
|
|
|
2024-04-15 17:33:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!AnimationSettings.PlayAnimForNonsexualActs && NonSexualAct(__instance))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Pawn pawn = __instance.pawn;
|
2024-04-16 22:10:46 +00:00
|
|
|
|
Pawn partner = __instance.Target as Pawn;
|
2024-04-15 17:33:06 +00:00
|
|
|
|
Building_Bed bed = __instance.Bed;
|
|
|
|
|
|
2024-04-16 22:10:46 +00:00
|
|
|
|
if (partner?.jobs?.curDriver is JobDriver_SexBaseReciever partnerSexBaseReceiver) {
|
2024-04-15 17:33:06 +00:00
|
|
|
|
|
|
|
|
|
Pawn Target = __instance.Target as Pawn;
|
|
|
|
|
|
|
|
|
|
bool quickie = (__instance is JobDriver_SexQuick) && AnimationSettings.fastAnimForQuickie;
|
|
|
|
|
|
|
|
|
|
int preAnimDuration = __instance.duration;
|
|
|
|
|
int AnimationTimeTicks = 0;
|
|
|
|
|
|
2024-04-16 22:10:46 +00:00
|
|
|
|
List<Pawn> participants = partnerSexBaseReceiver.parteners.Append(partner).ToList();
|
|
|
|
|
RerollAnimations(participants);
|
2024-04-15 17:33:06 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Modify Orgasm ticks to only orgasm as many times as RJW stock orgasm allows
|
2024-04-16 22:10:46 +00:00
|
|
|
|
if (AnimationTimeTicks != 0)
|
2024-04-15 17:33:06 +00:00
|
|
|
|
{
|
|
|
|
|
__instance.orgasmstick = preAnimDuration * __instance.orgasmstick / AnimationTimeTicks;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-04-16 22:10:46 +00:00
|
|
|
|
public static void RerollAnimations(List<Pawn> participants) {
|
|
|
|
|
|
|
|
|
|
participants[0].Drawer.renderer.SetAnimation(AnimationDefOf.TestAnimation1);
|
|
|
|
|
participants[1].Drawer.renderer.SetAnimation(AnimationDefOf.TestAnimation2);
|
2024-04-15 17:33:06 +00:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static IEnumerable<String> NonSexActRulePackDefNames = new String[]
|
|
|
|
|
{
|
|
|
|
|
"MutualHandholdingRP",
|
|
|
|
|
"MutualMakeoutRP",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
public static bool NonSexualAct(JobDriver_SexBaseInitiator sexBaseInitiator)
|
|
|
|
|
{
|
|
|
|
|
if(NonSexActRulePackDefNames.Contains(sexBaseInitiator.Sexprops.rulePack))
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "End")]
|
|
|
|
|
static class HarmonyPatch_JobDriver_SexBaseInitiator_End {
|
|
|
|
|
|
|
|
|
|
public static void Postfix(ref JobDriver_SexBaseInitiator __instance)
|
|
|
|
|
{
|
|
|
|
|
//stop animation
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|