From 456888cdfaefafc612979d04fa9354160e288ab9 Mon Sep 17 00:00:00 2001 From: c0ffee Date: Mon, 24 Jan 2022 18:18:18 -0800 Subject: [PATCH] anim comp and features --- Assemblies/RJW-ToysAndMasturbation.dll | Bin 16384 -> 16384 bytes Defs/ThingDefs/SexToys.xml | 12 ++++-- Patches/HumpshroomPatch.xml | 2 + .../JobGivers/JobGiver_MasturbateWithToy.cs | 37 ++++++++++++++++-- Source/ThingComps/CompProperties_SexToy.cs | 2 + Source/ThingComps/CompSexToy.cs | 3 ++ 6 files changed, 50 insertions(+), 6 deletions(-) diff --git a/Assemblies/RJW-ToysAndMasturbation.dll b/Assemblies/RJW-ToysAndMasturbation.dll index 760c351b5bb77aac77f8fd362a68051d0e8ed6ac..418f1917931cd1d243dd93e10e024478ce944d50 100644 GIT binary patch delta 5324 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 R)X*c%!`>JEpavHN{~tkFrkwx) diff --git a/Defs/ThingDefs/SexToys.xml b/Defs/ThingDefs/SexToys.xml index e161971..ddd09b5 100644 --- a/Defs/ThingDefs/SexToys.xml +++ b/Defs/ThingDefs/SexToys.xml @@ -7,7 +7,6 @@
  • CompQuality
  • -
  • true 0.0 @@ -19,7 +18,7 @@ true 8 Item - Never + Normal
  • Exotic
  • @@ -32,7 +31,14 @@ SexToysDildo A simple dildo for masturbation. - + +
  • + +
  • vagina
  • + + +
  • + Things/SexToys/Dildo CutoutComplex diff --git a/Patches/HumpshroomPatch.xml b/Patches/HumpshroomPatch.xml index f1eabe1..90ba40c 100644 --- a/Patches/HumpshroomPatch.xml +++ b/Patches/HumpshroomPatch.xml @@ -1,5 +1,6 @@  + diff --git a/Source/JobGivers/JobGiver_MasturbateWithToy.cs b/Source/JobGivers/JobGiver_MasturbateWithToy.cs index cf899e1..1afac37 100644 --- a/Source/JobGivers/JobGiver_MasturbateWithToy.cs +++ b/Source/JobGivers/JobGiver_MasturbateWithToy.cs @@ -24,6 +24,9 @@ namespace RJW_ToysAndMasturbation { if(findSexToyOnMap(pawn, out Thing sexToy)) { if ((SexUtility.ReadyForLovin(pawn) && (!xxx.is_whore(pawn) || pawn.IsPrisoner || xxx.is_slave(pawn))) || xxx.is_frustrated(pawn)) { + + IntVec3 fapLocation = FapLocation(pawn); + if (RJWPreferenceSettings.FapInBed && pawn.jobs.curDriver is JobDriver_LayDown) { Building_Bed bed = ((JobDriver_LayDown)pawn.jobs.curDriver).Bed; if (bed != null) { @@ -34,8 +37,9 @@ namespace RJW_ToysAndMasturbation { } } - else if (RJWPreferenceSettings.FapEverywhere && (xxx.is_frustrated(pawn) || xxx.has_quirk(pawn, "Exhibitionist"))) { - Job j = JobMaker.MakeJob(MasturbateToyDefOf.MasturbateWithToy, sexToy, null, FapLocation(pawn)); + else if (RJWPreferenceSettings.FapEverywhere && (xxx.is_frustrated(pawn) || xxx.has_quirk(pawn, "Exhibitionist")) + && ReachabilityUtility.CanReach(pawn, fapLocation, PathEndMode.OnCell, Danger.Some)) { + Job j = JobMaker.MakeJob(MasturbateToyDefOf.MasturbateWithToy, sexToy, null, fapLocation); j.count = 1; return j; } @@ -51,6 +55,8 @@ namespace RJW_ToysAndMasturbation { public static bool findSexToyOnMap(Pawn p, out Thing sexToy) { + sexToy = null; + Predicate validator = delegate (Thing t) { if(t.TryGetComp() == null) { return false; @@ -66,8 +72,33 @@ namespace RJW_ToysAndMasturbation { return false; }; + Predicate validatorForBed = delegate (Thing t) { + if (t.TryGetComp() == null) + { + return false; + } + //homo check + if (t.TryGetComp().Props.primaryGender == p.gender || + (t.TryGetComp().Props.primaryGender == Gender.Male && xxx.can_fuck(p) && (RJWPreferenceSettings.FeMalesex == RJWPreferenceSettings.AllowedSex.All || RJWPreferenceSettings.FeMalesex == RJWPreferenceSettings.AllowedSex.Homo)) || + (t.TryGetComp().Props.primaryGender == Gender.Female && xxx.can_be_fucked(p) && (RJWPreferenceSettings.Malesex == RJWPreferenceSettings.AllowedSex.All || RJWPreferenceSettings.Malesex == RJWPreferenceSettings.AllowedSex.Homo)) + && t.GetRoom(RegionType.Set_All) == p.CurrentBed().GetRoom(RegionType.Set_All)) + { + return true; + } - sexToy = GenClosest.ClosestThingReachable(p.Position, p.Map, ThingRequest.ForGroup(ThingRequestGroup.HaulableAlways), PathEndMode.OnCell, TraverseParms.For(p), validator: validator, maxDistance: 100); + return false; + }; + + if (p.CurrentBed() != null) + { + sexToy = GenClosest.ClosestThingReachable(p.Position, p.Map, ThingRequest.ForGroup(ThingRequestGroup.HaulableAlways), PathEndMode.OnCell, TraverseParms.For(p), validator: validatorForBed, maxDistance: 100); + } + + if(sexToy == null) + { + sexToy = GenClosest.ClosestThingReachable(p.Position, p.Map, ThingRequest.ForGroup(ThingRequestGroup.HaulableAlways), PathEndMode.OnCell, TraverseParms.For(p), validator: validator, maxDistance: 100); + } + if (sexToy != null) return true; diff --git a/Source/ThingComps/CompProperties_SexToy.cs b/Source/ThingComps/CompProperties_SexToy.cs index a6b0ee8..b55028b 100644 --- a/Source/ThingComps/CompProperties_SexToy.cs +++ b/Source/ThingComps/CompProperties_SexToy.cs @@ -5,12 +5,14 @@ using System.Text; using System.Threading.Tasks; using RimWorld; using Verse; +using rjw; namespace RJW_ToysAndMasturbation { public class CompProperties_SexToy : CompProperties { public Gender primaryGender = Gender.Female; public float satisfactionModifier = 1.5f; + public List requiredBodyParts; public CompProperties_SexToy() { compClass = typeof(CompSexToy); } diff --git a/Source/ThingComps/CompSexToy.cs b/Source/ThingComps/CompSexToy.cs index c4df969..745511c 100644 --- a/Source/ThingComps/CompSexToy.cs +++ b/Source/ThingComps/CompSexToy.cs @@ -15,6 +15,7 @@ namespace RJW_ToysAndMasturbation { public CompProperties_SexToy Props => (CompProperties_SexToy)props; + public override IEnumerable CompFloatMenuOptions(Pawn pawn) { if (!pawn.CanReach(parent, PathEndMode.Touch, Danger.Deadly)) { @@ -54,6 +55,8 @@ namespace RJW_ToysAndMasturbation { } + + private string FloatMenuOptionLabel(Pawn pawn) { return "Masturbate with toy"; }