From 59d062f4c9de10617d0cd4b4dbf3c9b0a4115d32 Mon Sep 17 00:00:00 2001 From: c0ffee Date: Tue, 2 Aug 2022 15:05:28 -0700 Subject: [PATCH] save shift value and reuse for every anim --- 1.3/Assemblies/Rimworld-Animations.dll | Bin 59392 -> 60928 bytes 1.3/Source/Comps/CompBodyAnimator.cs | 14 ++++++- .../MainTabWindow_OffsetConfigure.cs | 37 +++++++++++++----- ...HarmonyPatch_JobDriver_SexBaseInitiator.cs | 26 +++++++++++- 1.3/Source/Settings/AnimationSettings.cs | 2 + 5 files changed, 68 insertions(+), 11 deletions(-) diff --git a/1.3/Assemblies/Rimworld-Animations.dll b/1.3/Assemblies/Rimworld-Animations.dll index cf307d792bf8d2e69173c4ae49e6fff6cf605339..d7b82d594ebd28c7a4e5413ee698348ff8b671b7 100644 GIT binary patch delta 22555 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 actorsInCurrentAnimation; public bool controlGenitalAngle = false; @@ -111,9 +113,10 @@ namespace Rimworld_Animations { anchor = thing.Position.ToVector3Shifted(); } } - public void StartAnimation(AnimationDef anim, List actors, int actor, bool mirror = false, bool shiver = false, bool fastAnimForQuickie = false) { + public void StartAnimation(AnimationDef anim, List actors, int actor, bool mirror = false, bool shiver = false, bool fastAnimForQuickie = false, xxx.rjwSextype sexType = xxx.rjwSextype.Masturbation) { actorsInCurrentAnimation = actors; + curSexType = sexType; if (anim.actors.Count <= actor) { @@ -497,6 +500,15 @@ namespace Rimworld_Animations { controlGenitalAngle = anim.actors[actor].controlGenitalAngle; tickAnim(); + + //reset the clock time of every pawn in animation + if (pawn.jobs.curDriver is rjw.JobDriver_Sex) + { + (pawn.jobs.curDriver as rjw.JobDriver_Sex).ticks_left = anim.animationTimeTicks; + (pawn.jobs.curDriver as rjw.JobDriver_Sex).ticksLeftThisToil = anim.animationTimeTicks; + (pawn.jobs.curDriver as rjw.JobDriver_Sex).duration = anim.animationTimeTicks; + } + } public bool LoopNeverending() diff --git a/1.3/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs b/1.3/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs index b7fef1d..26df5e1 100644 --- a/1.3/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs +++ b/1.3/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs @@ -51,6 +51,26 @@ namespace Rimworld_Animations { AnimationSettings.rotation.Add(def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex, 0); } + List pawnsToAnimateOrdered = curPawn.TryGetComp().actorsInCurrentAnimation.OrderBy(x => Int32.Parse(x.Name.ToStringSafe())).ToList(); + + string pawnNamesAndSexType = ""; + foreach (Pawn p in pawnsToAnimateOrdered) + { + pawnNamesAndSexType += p.Name.ToStringSafe(); + } + pawnNamesAndSexType += curPawn.TryGetComp().curSexType.ToStringSafe(); + + int shiftCount = 0; + + if (AnimationSettings.shiftCount.TryGetValue(pawnNamesAndSexType, out int value)) + { + shiftCount = value; + } + else + { + AnimationSettings.shiftCount.Add(pawnNamesAndSexType, 0); + } + listingStandard.Label("Name: " + curPawn.Name + " Race: " + curPawn.def.defName + " Actor Index: " + curPawn.TryGetComp().ActorIndex + " Body Type (if any): " + bodyTypeDef + " Animation: " + def.label + (curPawn.TryGetComp().Mirror ? " mirrored" : "")); if(curPawn.def.defName == "Human") { @@ -76,32 +96,31 @@ namespace Rimworld_Animations { listingStandard.GapLine(); - if(listingStandard.ButtonText("Shift Actors")) { + if (listingStandard.ButtonText("Shift Actors")) { if(AnimationSettings.debugMode) { Log.Message("Shifting actors in animation..."); } - for(int i = 0; i < curPawn.TryGetComp().actorsInCurrentAnimation.Count; i++) { + AnimationSettings.shiftCount[pawnNamesAndSexType] = shiftCount + 1 % curPawn.TryGetComp().actorsInCurrentAnimation.Count; + + + for (int i = 0; i < curPawn.TryGetComp().actorsInCurrentAnimation.Count; i++) { Pawn actor = curPawn.TryGetComp().actorsInCurrentAnimation[i]; actor.TryGetComp()?.shiftActorPositionAndRestartAnimation(); - //reset the clock time of every pawn in animation - if(actor.jobs.curDriver is rjw.JobDriver_Sex) { - (actor.jobs.curDriver as rjw.JobDriver_Sex).ticks_left = def.animationTimeTicks; - (actor.jobs.curDriver as rjw.JobDriver_Sex).ticksLeftThisToil = def.animationTimeTicks; - (actor.jobs.curDriver as rjw.JobDriver_Sex).duration = def.animationTimeTicks; - } } } + + + if (offsetX != AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].x || offsetZ != AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex].y) { AnimationSettings.offsets[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex] = new Vector2(offsetX, offsetZ); - } if(rotation != AnimationSettings.rotation[def.defName + curPawn.def.defName + bodyTypeDef + ActorIndex]) { diff --git a/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs b/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs index 260d924..bdb1741 100644 --- a/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs +++ b/1.3/Source/Patches/RJWPatches/JobDrivers/HarmonyPatch_JobDriver_SexBaseInitiator.cs @@ -94,6 +94,30 @@ namespace Rimworld_Animations { pawnsToAnimate[i].TryGetComp().isAnimating = false; } + List pawnsToAnimateOrdered = pawnsToAnimate.OrderBy(x => Int32.Parse(x.Name.ToStringSafe())).ToList(); + + string pawnNamesAndSexType = ""; + foreach (Pawn p in pawnsToAnimateOrdered) + { + pawnNamesAndSexType += p.Name.ToStringSafe(); + } + pawnNamesAndSexType += sexType.ToStringSafe(); + + if (AnimationSettings.shiftCount.TryGetValue(pawnNamesAndSexType, out int value)) + { + + Log.Message("Shifting " + pawnNamesAndSexType + " " + value + "times"); + + for(int i = 0; i < value; i++) + { + for(int j = 0; j < pawnsToAnimate.Count; j++) + { + pawnsToAnimate[j].TryGetComp().shiftActorPositionAndRestartAnimation(); + } + + } + } + for (int i = 0; i < pawnsToAnimate.Count; i++) { if (bed != null) @@ -104,7 +128,7 @@ namespace Rimworld_Animations { } bool shiver = pawnsToAnimate[i].jobs.curDriver is JobDriver_SexBaseRecieverRaped; - pawnsToAnimate[i].TryGetComp().StartAnimation(anim, pawnsToAnimate, i, mirror, shiver, fastAnimForQuickie); + pawnsToAnimate[i].TryGetComp().StartAnimation(anim, pawnsToAnimate, i, mirror, shiver, fastAnimForQuickie, sexType); int animTicks = anim.animationTimeTicks - (fastAnimForQuickie ? anim.animationStages[0].playTimeTicks : 0); (pawnsToAnimate[i].jobs.curDriver as JobDriver_Sex).ticks_left = animTicks; diff --git a/1.3/Source/Settings/AnimationSettings.cs b/1.3/Source/Settings/AnimationSettings.cs index 0a96621..6392468 100644 --- a/1.3/Source/Settings/AnimationSettings.cs +++ b/1.3/Source/Settings/AnimationSettings.cs @@ -18,6 +18,7 @@ namespace Rimworld_Animations { public static Dictionary offsets = new Dictionary(); public static Dictionary rotation = new Dictionary(); + public static Dictionary shiftCount = new Dictionary(); public override void ExposeData() { @@ -38,6 +39,7 @@ namespace Rimworld_Animations { Scribe_Collections.Look(ref offsets, "RJWAnimations-animationOffsets"); Scribe_Collections.Look(ref rotation, "RJWAnimations-rotationOffsets"); + Scribe_Collections.Look(ref shiftCount, "RJWAnimations-shiftCount");