From 629ee125a5f8c72d2c19d7703694139cfef1d0df Mon Sep 17 00:00:00 2001 From: dexy Date: Fri, 8 Nov 2019 18:58:56 +1100 Subject: [PATCH] Reset ped model to T pose when no animatino selected --- CodeWalker.Core/GameFiles/Resources/Drawable.cs | 11 ++++++++--- Rendering/Renderable.cs | 14 +++++++++++--- Rendering/Renderer.cs | 7 +++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index ad44539..c779499 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -937,9 +937,14 @@ namespace CodeWalker.GameFiles //SkinTransform = Matrix.Identity;//(for testing) } - - - + public void ResetAnimTransform() + { + AnimRotation = Rotation; + AnimTranslation = Translation; + AnimScale = Scale; + UpdateAnimTransform(); + UpdateSkinTransform(); + } public static uint ElfHash_Uppercased(string str) { diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index 9761d48..e76d679 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -358,7 +358,15 @@ namespace CodeWalker.Rendering } - + public void ResetBoneTransforms() + { + if (Bones == null) return; + foreach (var bone in Bones) + { + bone.ResetAnimTransform(); + } + UpdateBoneTransforms(); + } private void UpdateBoneTransforms() { if (Bones == null) return; @@ -390,6 +398,8 @@ namespace CodeWalker.Rendering UpdateAnim(ClipMapEntry); //animate skeleton/models } + UpdateBoneTransforms(); + foreach (var model in HDModels) { if (model == null) continue; @@ -534,8 +544,6 @@ namespace CodeWalker.Rendering } - UpdateBoneTransforms(); - } private void UpdateAnimUV(ClipMapEntry cme, RenderableGeometry rgeom = null) { diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 34d84c7..b604a11 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -2512,6 +2512,13 @@ namespace CodeWalker.Rendering rndbl.ClipDict = animClip.Clip?.Ycd; rndbl.HasAnims = true; } + else if ((arche == null) && (rndbl.ClipMapEntry != null)) + { + rndbl.ClipMapEntry = null; + rndbl.ClipDict = null; + rndbl.HasAnims = false; + rndbl.ResetBoneTransforms(); + } return RenderRenderable(rndbl, arche, entity); }