From fbf8b3444dfe571a0c1b9cf999c8952cff292fa8 Mon Sep 17 00:00:00 2001 From: c0ffee Date: Thu, 18 Apr 2024 17:40:06 -0700 Subject: [PATCH] texture recaching issue fix --- 1.5/Assemblies/Rimworld-Animations.dll | Bin 25600 -> 26112 bytes .../TestGroupAnimation1.xml | 35 ++++++++++-------- .../OffsetDef_GroinToAppropriateHeight.xml | 1 + .../AnimationWorker_KeyframesExtended.cs | 13 ++++++- 1.5/Source/Comps/CompExtendedAnimator.cs | 16 +++++--- .../HarmonyPatch_PawnRenderNode.cs | 14 +------ .../HarmonyPatch_PawnRenderTree.cs | 35 ++++++++++++++++++ 7 files changed, 79 insertions(+), 35 deletions(-) diff --git a/1.5/Assemblies/Rimworld-Animations.dll b/1.5/Assemblies/Rimworld-Animations.dll index 1297fac7a1e4784dbbb58e71c4650baa78b45bea..6aa83a8e949976609bc21edf47374e200f5e1c0b 100644 GIT binary patch delta 10744 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 diff --git a/1.5/Defs/GroupAnimationDefs/TestGroupAnimation1.xml b/1.5/Defs/GroupAnimationDefs/TestGroupAnimation1.xml index 58c6dd2..7fb19e6 100644 --- a/1.5/Defs/GroupAnimationDefs/TestGroupAnimation1.xml +++ b/1.5/Defs/GroupAnimationDefs/TestGroupAnimation1.xml @@ -24,46 +24,51 @@ - diff --git a/1.5/Defs/OffsetDefs/OffsetDef_GroinToAppropriateHeight.xml b/1.5/Defs/OffsetDefs/OffsetDef_GroinToAppropriateHeight.xml index 3fe9c46..4503f96 100644 --- a/1.5/Defs/OffsetDefs/OffsetDef_GroinToAppropriateHeight.xml +++ b/1.5/Defs/OffsetDefs/OffsetDef_GroinToAppropriateHeight.xml @@ -35,3 +35,4 @@ + \ No newline at end of file diff --git a/1.5/Source/AnimationWorkers/AnimationWorker_KeyframesExtended.cs b/1.5/Source/AnimationWorkers/AnimationWorker_KeyframesExtended.cs index 7546b67..acc531f 100644 --- a/1.5/Source/AnimationWorkers/AnimationWorker_KeyframesExtended.cs +++ b/1.5/Source/AnimationWorkers/AnimationWorker_KeyframesExtended.cs @@ -26,6 +26,7 @@ namespace Rimworld_Animations //use extendedkeyframes to determine addon facing public Rot4 facingAtTick(int tick) { + //if ticks are < first keyframe tick, just be stuck to first keyframe rot if (tick <= this.part.keyframes[0].tick) { @@ -64,8 +65,6 @@ namespace Rimworld_Animations return (keyframe as ExtendedKeyframe).rotation; } - - public bool visibleAtTick(int tick) { //if ticks are < first keyframe tick, just be stuck to first keyframe rot @@ -110,5 +109,15 @@ namespace Rimworld_Animations } + + public bool shouldRecache(int tick) + { + if (facingAtTick(tick) != facingAtTick(tick - 1) || visibleAtTick(tick) != visibleAtTick(tick - 1)) + { + return true; + } + + return true; + } } } diff --git a/1.5/Source/Comps/CompExtendedAnimator.cs b/1.5/Source/Comps/CompExtendedAnimator.cs index e1cb8cf..bd15457 100644 --- a/1.5/Source/Comps/CompExtendedAnimator.cs +++ b/1.5/Source/Comps/CompExtendedAnimator.cs @@ -14,7 +14,9 @@ namespace Rimworld_Animations { // CompExtendedAnimator // Helps manage AnimationQueue, AbsolutePosition - + //ticks of current animation + private int animationTicks; + private List animationQueue; private BaseExtendedAnimatorAnchor anchor; private bool isAnimating = false; @@ -41,8 +43,6 @@ namespace Rimworld_Animations { return anchor.getDrawPos(); } - //ticks of current animation - private int animationTicks; public override void CompTick() { @@ -111,20 +111,24 @@ namespace Rimworld_Animations { public void PlayGroupAnimation(List groupAnimation, BaseExtendedAnimatorAnchor anchor) { this.anchor = anchor; - animationQueue = groupAnimation; - PlayNextAnimation(); + PlayGroupAnimation(groupAnimation); } public override void PostExposeData() { base.PostExposeData(); Scribe_Values.Look(ref this.isAnimating, "animations_isAnimating", false); - + Scribe_Values.Look(ref this.animationTicks, "animations_ticks", 0); Scribe_Collections.Look(ref animationQueue, "animations_queue"); Scribe_Deep.Look(ref this.anchor, "animations_anchor"); } + public static void CheckRecacheNecessary(int anim) + { + + } + private Pawn pawn => base.parent as Pawn; } diff --git a/1.5/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderNode.cs b/1.5/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderNode.cs index d482853..cf45a65 100644 --- a/1.5/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderNode.cs +++ b/1.5/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderNode.cs @@ -21,24 +21,14 @@ namespace Rimworld_Animations // ADJUST FACING get rotated textures // compare the previous tick to the current tick; if the current tick rotation is different, recache + parms.facing = extendedAnimWorker.facingAtTick(__instance.tree.AnimationTick); - Rot4 animFacing = extendedAnimWorker.facingAtTick(__instance.tree.AnimationTick); - - if (extendedAnimWorker.facingAtTick(__instance.tree.AnimationTick - 1) != extendedAnimWorker.facingAtTick(__instance.tree.AnimationTick)) - { - __instance.requestRecache = true; - parms.facing = animFacing; - } //INVIS IF ANIM CALLS FOR IT //replace maybe? //cheaper call now comparing prev tick to cur tick - if (extendedAnimWorker.visibleAtTick(__instance.tree.AnimationTick - 1) != extendedAnimWorker.visibleAtTick(__instance.tree.AnimationTick)) - { - __instance.requestRecache = true; - return extendedAnimWorker.visibleAtTick(__instance.tree.AnimationTick); - } + return extendedAnimWorker.visibleAtTick(__instance.tree.AnimationTick); } diff --git a/1.5/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs b/1.5/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs index 6acbe35..5410d6a 100644 --- a/1.5/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs +++ b/1.5/Source/Patches/RimworldPatches/HarmonyPatch_PawnRenderTree.cs @@ -33,4 +33,39 @@ namespace Rimworld_Animations } } } + + + [HarmonyPatch(typeof(PawnRenderTree), "AdjustParms")] + public class HarmonyPatch_PawnRenderTree2 + { + public static void Prefix(PawnRenderTree __instance, ref PawnDrawParms parms) + { + + int animationTick = __instance.AnimationTick; + + if (__instance.rootNode.AnimationWorker is AnimationWorker_KeyframesExtended rootAnimWorkerExtended) + { + //recache during facing turn + if (rootAnimWorkerExtended.shouldRecache(animationTick)) + { + __instance.rootNode.requestRecache = true; + + } + } + + foreach (PawnRenderNode node in __instance.rootNode.children) + { + if (node.AnimationWorker is AnimationWorker_KeyframesExtended animWorkerExtended) + { + //recache during facing turn + if (animWorkerExtended.shouldRecache(animationTick)) + { + + node.requestRecache = true; + + } + } + } + } + } }