added simple for dildo

This commit is contained in:
c0ffee 2022-01-24 18:17:49 -08:00
parent 52c8afbe1b
commit 015a64928a
22 changed files with 712 additions and 11 deletions

View file

@ -0,0 +1,16 @@
using Rimworld_Animations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Patch_SexToysMasturbation
{
public class SexToyAnimationDef : AnimationDef
{
public String requiredBodyPart = null;
}
}

View file

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
using HarmonyLib;
using System.Reflection;
namespace Patch_SexToysMasturbation
{
[StaticConstructorOnStartup]
public static class Harmony_PatchAll {
static Harmony_PatchAll() {
Harmony val = new Harmony("animtoyspatch");
val.PatchAll(Assembly.GetExecutingAssembly());
}
}
}

View file

@ -0,0 +1,66 @@
using HarmonyLib;
using Rimworld_Animations;
using rjw;
using RJW_ToysAndMasturbation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace Patch_SexToysMasturbation
{
[HarmonyPatch(typeof(JobDriver_SexBaseInitiator), "Start")]
public class HarmonyPatch_JobDriver_SexBaseInitiator
{
public static void Postfix(ref JobDriver_SexBaseInitiator __instance)
{
if(__instance is JobDriver_MasturbateWithToy masturbateJobDriver)
{
Log.Message("Rerolling animations...");
Pawn pawn = masturbateJobDriver.pawn;
Thing sexToy = masturbateJobDriver.dildo;
RerollAnimationsForSexToy(pawn, sexToy);
}
}
public static void RerollAnimationsForSexToy(Pawn pawn, Thing thing)
{
CompSexToy sextoy = thing.TryGetComp<CompSexToy>();
SexToyAnimationDef anim = AnimSexToyUtility.tryFindAnimation(sextoy, pawn);
if (anim != null)
{
Log.Message("Playing anim " + anim.defName);
pawn.TryGetComp<CompBodyAnimator>().setAnchor(pawn.Position);
thing.TryGetComp<CompThingAnimator>().setAnchor(pawn.Position);
pawn.TryGetComp<CompBodyAnimator>().StartAnimation(anim, new List<Pawn> { pawn }, 0);
thing.TryGetComp<CompThingAnimator>().StartAnimation(anim, pawn);
(pawn.jobs.curDriver as JobDriver_Sex).ticks_left = anim.animationTimeTicks;
(pawn.jobs.curDriver as JobDriver_Sex).sex_ticks = anim.animationTimeTicks;
(pawn.jobs.curDriver as JobDriver_Sex).duration = anim.animationTimeTicks;
}
else
{
Log.Message("No animation found");
}
}
}
}

View file

@ -0,0 +1,47 @@
using rjw;
using RJW_ToysAndMasturbation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Verse;
namespace Patch_SexToysMasturbation
{
public class AnimSexToyUtility
{
public static SexToyAnimationDef tryFindAnimation(CompSexToy sexToy, Pawn pawn)
{
IEnumerable<SexToyAnimationDef> options = DefDatabase<SexToyAnimationDef>.AllDefs.Where((SexToyAnimationDef x) =>
{
if(!sexToy.Props.requiredBodyParts.Contains(x.requiredBodyPart))
{
return false;
}
if(x.requiredBodyPart == "vagina" && !Genital_Helper.has_vagina(pawn))
{
return false;
}
return true;
});
if(options != null && options.Any())
{
return options.RandomElement();
}
else
{
return null;
}
}
}
}