From 422c562c3c1568904529afc2f928e0a29ba3c812 Mon Sep 17 00:00:00 2001 From: Platinum Date: Fri, 29 May 2020 14:54:48 -0700 Subject: [PATCH 1/3] uninitialized attributes fix --- Source/Comps/CompBodyAnimator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Comps/CompBodyAnimator.cs b/Source/Comps/CompBodyAnimator.cs index 77195eb..c4053d2 100644 --- a/Source/Comps/CompBodyAnimator.cs +++ b/Source/Comps/CompBodyAnimator.cs @@ -34,7 +34,7 @@ namespace Rimworld_Animations { PortraitsCache.SetDirty(pawn); } } - private bool Animating; + private bool Animating = false; private bool mirror = false, quiver = false, shiver = false; private int actor; From c13b3d793b2f073c88b0f6da2e964268d964d378 Mon Sep 17 00:00:00 2001 From: Platinum Date: Fri, 29 May 2020 14:55:09 -0700 Subject: [PATCH 2/3] build --- 1.1/Assemblies/Rimworld-Animations.dll | Bin 50176 -> 50176 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/1.1/Assemblies/Rimworld-Animations.dll b/1.1/Assemblies/Rimworld-Animations.dll index 3a0ccba0eb8e4cb1ec2540a20ffa1fd9550ca885..f91d11e3dc172a25ec815db1ff695ce3aa06a0db 100644 GIT binary patch delta 1775 zcmY+_ZD?Cn7zgnG%}e9%(b|gLvNdheY_c8nP zLoGJ8s;s2&8a0s$xZqVQPp`>7BVEBt^*3fM=GJ6Clg6+Mb#mW|qj{U?-Oj@_xKy}B z>xxTNB(=KTR7fh|_5Wkan>>zIIeWS7=hz)JraG#+RX>*vZvLc9S9bT99 zK`d$w%fcW$J9y=%qz|-~N$0exJZj}4sZ{?fY0__Q{K*U=6j7%fM=)HJ>W;u6ZVKEm zLwIhd3VCBaMo7G|9!GYm>^R25f1CC2sP`+?>@mfI*r&DAbHCV%DXsBvKs z7!gn4?x$JVa8h(&sf#rpJ}f$MM13nAs?Uf$NJdNH`{EhQkP7%vUTG9|x61ftqIikK z!$dK4CmZxdah_B_vE~(DH!k+5eFYesCwx7aBk?Ic_?G0PQQ|2TAIcQsb>+; z`cA4BS*?Gi_Q5rvR&sqG%1L}^A2yKEFp={1p-F2&YCj&)DtD#4{b=QVj{K<^7(g$v zXzUPWh+#l$p{`D~cNML1+JO|a8d`bcpBv~l? z5{THPK4(@Wu$RbJGlUmO{3=7ojlS#&cNMs=oc#=;?;J>|bH zS6u=gkG2$#l+C yR(;X6GPRsQ zW_)j5jFY17I9nV2K*7=kF}k9EVvDjvFosk%P5N>F8ALNs5}DHT`8>}l6O_H~{d}JH zhv$%`v(9wZnajEsHZOjXe=A`4@}KTDz9|?+ll#Q4K%fwDG#3VpCc|HtFznhJ@-zC= zCI33$#=&B(<4}F|4*n1*yw`BF*c^OiqkXlNKAONJ&U+hhi#6$A^j9GWUmIl=)i2Xp zRtaa^baHxGc9wMxx9aD;LCh`7eql{uJ0f!Kx~+MKc}J_sL1AE{TJ4;JDn_*WoLtB% z;dJ1#te9u1!VrFEskKA6spk&Jh7eY@t2=!LsioakY?Bos9M|C$Ss%i@)|e~|VM*&t z*3>37_ZRD!)@m1>oM%<)FSGJ~?*qSiL-2Rd+!R95vQ%#eZ03W3Yu+%1w^67DV@R>o zU<`-1Q#OSo(f_Bo7Nok5NBq>w)k($NfNq@G2c){j!Vk=42@^&D=q zRQ&*|_R^fXbO5VZ8F-O)4`8j`REy9e>4nzQA9H3NIGlUX)4i7E`CPwP@7 zA{8E{it>uV@EI|Lhn0-CgLLw7o&6nNFV&(mkH08Sj%$73@0MAHMT;6zAL-1d!UT?K zQegtY(ffr7#FV%&fk$;lg$cCij0zJN*P_A%GA#8@3B1En@07qaD}zQGR6k-;VFv$T zR$lWGOC24?xXwPt_hK0DY8^0s5F_}Er7DuRzD!FjbxRV}`&2`t>`S7>s`S~jB8eWR zdYVyKEcI2GNNLf_nAnq|!Sad^!#@cVqe}cTCdPC|FJt1M&UW~($dg}b(aV^aWAWOy z*Te;;+SJ6)EcrBYQxpATl}%^mH7~H#qWkbVOD$^Q4J}&KLh8l)i(1&P#EV)uq%&Hy z+d^80w5f&fv}jWc7g*|nEiACqq89#SsYNX$i+?0Lx7Mt$zIl4a_te(UC$}s_V`r`6 vx|7qZeb@AFBihMvRsIvsN7fiOivNDyVC2_T7gx^Sb~@@>i?!b_N_+kX=%aCF From c915b10e547c4e320fd1a6f035dd0de9b3730bb4 Mon Sep 17 00:00:00 2001 From: Platinum Date: Fri, 29 May 2020 23:10:31 -0700 Subject: [PATCH 3/3] offset changer + fix for pawns off map --- 1.1/Assemblies/Rimworld-Animations.dll | Bin 50176 -> 52736 bytes Defs/MainTabDefs/MainButtonDef.xml | 13 ++++ Rimworld-Animations.csproj | 14 +++- Source/Actors/Actor.cs | 9 ++- Source/AnimationUtility.cs | 2 +- Source/Comps/CompBodyAnimator.cs | 22 +++++- .../MainTabWindow_OffsetConfigure.cs | 71 ++++++++++++++++++ .../MainTabWindow_SexAnimator.cs | 14 ---- .../MainTabWindows/OffsetMainButtonDefOf.cs | 23 ++++++ Source/Patches/HarmonyPatch_PawnRenderer.cs | 9 ++- Source/Settings/AnimationSettings.cs | 7 ++ 11 files changed, 163 insertions(+), 21 deletions(-) create mode 100644 Defs/MainTabDefs/MainButtonDef.xml create mode 100644 Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs delete mode 100644 Source/MainTabWindows/MainTabWindow_SexAnimator.cs create mode 100644 Source/MainTabWindows/OffsetMainButtonDefOf.cs diff --git a/1.1/Assemblies/Rimworld-Animations.dll b/1.1/Assemblies/Rimworld-Animations.dll index f91d11e3dc172a25ec815db1ff695ce3aa06a0db..a907d238e94b480f942c4573a146cd6629d89ae2 100644 GIT binary patch literal 52736 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 diff --git a/Defs/MainTabDefs/MainButtonDef.xml b/Defs/MainTabDefs/MainButtonDef.xml new file mode 100644 index 0000000..1d3ac05 --- /dev/null +++ b/Defs/MainTabDefs/MainButtonDef.xml @@ -0,0 +1,13 @@ + + + + + OffsetManager + + Control pawn offsets + Rimworld_Animations.MainTabWindow_OffsetConfigure + 54 + false + + + \ No newline at end of file diff --git a/Rimworld-Animations.csproj b/Rimworld-Animations.csproj index 15997b0..ff5dab4 100644 --- a/Rimworld-Animations.csproj +++ b/Rimworld-Animations.csproj @@ -88,7 +88,8 @@ - + + @@ -106,6 +107,15 @@ - + + + + + + + + + + \ No newline at end of file diff --git a/Source/Actors/Actor.cs b/Source/Actors/Actor.cs index b3ff494..d836d24 100644 --- a/Source/Actors/Actor.cs +++ b/Source/Actors/Actor.cs @@ -4,9 +4,10 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; +using Verse; namespace Rimworld_Animations { - public class Actor { + public class Actor : IExposable { public List defNames; public List requiredGenitals; public List raceOffsets; @@ -18,5 +19,11 @@ namespace Rimworld_Animations { public bool controlGenitalAngle = false; public BodyTypeOffset bodyTypeOffset = new BodyTypeOffset(); public Vector3 offset = new Vector2(0, 0); + + public Dictionary offsetsByDefName = new Dictionary(); + + public void ExposeData() { + Scribe_Collections.Look(ref offsetsByDefName, "OffsetsSetInOptions", LookMode.Value, LookMode.Value); + } } } diff --git a/Source/AnimationUtility.cs b/Source/AnimationUtility.cs index 6f40e3b..e822d37 100644 --- a/Source/AnimationUtility.cs +++ b/Source/AnimationUtility.cs @@ -146,7 +146,7 @@ namespace Rimworld_Animations { public static void RenderPawnHeadMeshInAnimation(Mesh mesh, Vector3 loc, Quaternion quaternion, Material material, bool portrait, Pawn pawn) { - if(pawn == null) { + if(pawn == null || pawn.Map != Find.CurrentMap) { GenDraw.DrawMeshNowOrLater(mesh, loc, quaternion, material, portrait); return; } diff --git a/Source/Comps/CompBodyAnimator.cs b/Source/Comps/CompBodyAnimator.cs index c4053d2..aff1dbe 100644 --- a/Source/Comps/CompBodyAnimator.cs +++ b/Source/Comps/CompBodyAnimator.cs @@ -284,8 +284,28 @@ namespace Rimworld_Animations { public Vector3 getPawnHeadPosition() { - return anchor + deltaPos + Quaternion.AngleAxis(bodyAngle, Vector3.up) * (pawn.Drawer.renderer.BaseHeadOffsetAt(headFacing) + headBob); + Vector3 headPos = anchor + deltaPos + Quaternion.AngleAxis(bodyAngle, Vector3.up) * (pawn.Drawer.renderer.BaseHeadOffsetAt(headFacing) + headBob); + if (CurrentAnimation?.actors[ActorIndex]?.offsetsByDefName != null && CurrentAnimation.actors[ActorIndex].offsetsByDefName.ContainsKey(pawn.def.defName)) { + headPos.x += CurrentAnimation.actors[ActorIndex].offsetsByDefName[pawn.def.defName].x; + headPos.z += CurrentAnimation.actors[ActorIndex].offsetsByDefName[pawn.def.defName].y; + } + + return headPos; + + } + + + public AnimationDef CurrentAnimation { + get { + return anim; + } + } + + public int ActorIndex { + get { + return actor; + } } public override void PostExposeData() { diff --git a/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs b/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs new file mode 100644 index 0000000..f90e66e --- /dev/null +++ b/Source/MainTabWindows/MainTabWindow_OffsetConfigure.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Verse; +using RimWorld; +using UnityEngine; + +namespace Rimworld_Animations { + class MainTabWindow_OffsetConfigure : MainTabWindow + { + + public override Vector2 RequestedTabSize => new Vector2(505, 300); + public override void DoWindowContents(Rect inRect) { + + Rect position = new Rect(inRect.x, inRect.y, inRect.width, inRect.height); + + + Listing_Standard listingStandard = new Listing_Standard(); + listingStandard.Begin(position); + + listingStandard.Label("Offset Controller"); + + if (Find.Selector.SingleSelectedThing is Pawn) { + + Pawn curPawn = Find.Selector.SingleSelectedThing as Pawn; + + if (curPawn.TryGetComp().isAnimating) { + + Actor curActor = curPawn.TryGetComp().CurrentAnimation.actors[curPawn.TryGetComp().ActorIndex]; + + float offsetX = 0, offsetZ = 0; + + if (curActor.offsetsByDefName.ContainsKey(curPawn.def.defName)) { + offsetX = curActor.offsetsByDefName[curPawn.def.defName].x; + offsetZ = curActor.offsetsByDefName[curPawn.def.defName].y; + } else { + curActor.offsetsByDefName.Add(curPawn.def.defName, new Vector2(0, 0)); + } + + listingStandard.GapLine(); + + listingStandard.Label("Offset for race " + curPawn.def.defName + " in actor position " + curPawn.TryGetComp().ActorIndex); + + if(curPawn.def.defName == "Human") { + listingStandard.Label("Warning--You generally don't want to change human offsets, only alien offsets"); + } + + + listingStandard.Label("X Offset: " + offsetX); + offsetX = listingStandard.Slider(offsetX, -10, 10); + + listingStandard.Label("Z Offset: " + offsetZ); + offsetZ = listingStandard.Slider(offsetZ, -10, 10); + + if (offsetX != curActor.offsetsByDefName[curPawn.def.defName].x || offsetZ != curActor.offsetsByDefName[curPawn.def.defName].y) { + curActor.offsetsByDefName[curPawn.def.defName] = new Vector2(offsetX, offsetZ); + } + } + + + } + + listingStandard.End(); + + base.DoWindowContents(inRect); + + } + } +} diff --git a/Source/MainTabWindows/MainTabWindow_SexAnimator.cs b/Source/MainTabWindows/MainTabWindow_SexAnimator.cs deleted file mode 100644 index 5889510..0000000 --- a/Source/MainTabWindows/MainTabWindow_SexAnimator.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Verse; -using RimWorld; - -namespace Rimworld_Animations { - class MainTabWindow_SexAnimator : MainTabWindow - { - //todo: add animation maker window - } -} diff --git a/Source/MainTabWindows/OffsetMainButtonDefOf.cs b/Source/MainTabWindows/OffsetMainButtonDefOf.cs new file mode 100644 index 0000000..657a4c5 --- /dev/null +++ b/Source/MainTabWindows/OffsetMainButtonDefOf.cs @@ -0,0 +1,23 @@ +using RimWorld; +using Verse; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Rimworld_Animations { + + [DefOf] + public static class OffsetMainButtonDefOf { + + public static MainButtonDef OffsetManager; + + + static OffsetMainButtonDefOf() { + DefOfHelper.EnsureInitializedInCtor(typeof(OffsetMainButtonDefOf)); + //OffsetManager.buttonVisible = false; + } + + } +} diff --git a/Source/Patches/HarmonyPatch_PawnRenderer.cs b/Source/Patches/HarmonyPatch_PawnRenderer.cs index a58b1e9..a6865bc 100644 --- a/Source/Patches/HarmonyPatch_PawnRenderer.cs +++ b/Source/Patches/HarmonyPatch_PawnRenderer.cs @@ -40,9 +40,14 @@ namespace Rimworld_Animations { } - if (bodyAnim != null && bodyAnim.isAnimating && !portrait) { + if (bodyAnim != null && bodyAnim.isAnimating && !portrait && pawn.Map == Find.CurrentMap) { bodyAnim.tickGraphics(graphics); - pawn.TryGetComp().animatePawn(ref rootLoc, ref angle, ref bodyFacing, ref headFacing); + bodyAnim.animatePawn(ref rootLoc, ref angle, ref bodyFacing, ref headFacing); + + if(bodyAnim.CurrentAnimation?.actors[bodyAnim.ActorIndex]?.offsetsByDefName != null && bodyAnim.CurrentAnimation.actors[bodyAnim.ActorIndex].offsetsByDefName.ContainsKey(pawn.def.defName)) { + rootLoc.x += bodyAnim.CurrentAnimation.actors[bodyAnim.ActorIndex].offsetsByDefName[pawn.def.defName].x; + rootLoc.z += bodyAnim.CurrentAnimation.actors[bodyAnim.ActorIndex].offsetsByDefName[pawn.def.defName].y; + } } } diff --git a/Source/Settings/AnimationSettings.cs b/Source/Settings/AnimationSettings.cs index f385c10..ff6cd6e 100644 --- a/Source/Settings/AnimationSettings.cs +++ b/Source/Settings/AnimationSettings.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using Verse; using UnityEngine; +using RimWorld; namespace Rimworld_Animations { public class AnimationSettings : ModSettings { @@ -12,6 +13,8 @@ namespace Rimworld_Animations { public static bool orgasmQuiver, rapeShiver, soundOverride = true, hearts = true, controlGenitalRotation = false, applySemenOnAnimationOrgasm = false, fastAnimForQuickie = false; public static float shiverIntensity = 2f; + public static Dictionary offsetsByDefName; + public override void ExposeData() { base.ExposeData(); @@ -25,6 +28,7 @@ namespace Rimworld_Animations { Scribe_Values.Look(ref soundOverride, "rjwAnimSoundOverride", true); Scribe_Values.Look(ref shiverIntensity, "shiverIntensity", 2f); + //todo: save offsetsByDefName } @@ -54,9 +58,12 @@ namespace Rimworld_Animations { listingStandard.CheckboxLabeled("Enable Rape Shiver", ref AnimationSettings.rapeShiver); listingStandard.CheckboxLabeled("Enable hearts during lovin'", ref AnimationSettings.hearts); + listingStandard.CheckboxLabeled("Enable Offset Tab", ref OffsetMainButtonDefOf.OffsetManager.buttonVisible); + listingStandard.Label("Shiver/Quiver Intensity (default 2): " + AnimationSettings.shiverIntensity); AnimationSettings.shiverIntensity = listingStandard.Slider(AnimationSettings.shiverIntensity, 0.0f, 12f); + listingStandard.End(); base.DoSettingsWindowContents(inRect); }