瀏覽代碼

[animgraph] Fix smoothTransitions with animGraph

Clément Espeute 7 月之前
父節點
當前提交
193c6052b1
共有 1 個文件被更改,包括 18 次插入12 次删除
  1. 18 12
      hrt/animgraph/AnimGraphInstance.hx

+ 18 - 12
hrt/animgraph/AnimGraphInstance.hx

@@ -3,10 +3,12 @@ using Lambda;
 using hrt.tools.MapUtils;
 class AnimGraphAnimatedObject extends h3d.anim.Animation.AnimatedObject {
 	public var id : Int;
+	public var matrix : h3d.Matrix;
 
 	public function new (name, id) {
 		super(name);
 		this.id = id;
+		matrix = new h3d.Matrix();
 	}
 }
 
@@ -16,7 +18,6 @@ typedef AnimResolver = (instance: AnimGraphInstance, target: h3d.scene.Object, p
 @:access(hrt.animgraph.Node)
 class AnimGraphInstance extends h3d.anim.Animation {
 	var rootNode : hrt.animgraph.nodes.AnimNode;
-	var workMatrix = new h3d.Matrix();
 
 	var boneMap: Map<String, Int> = [];
 	var parameterMap: Map<String, hrt.animgraph.AnimGraph.Parameter> = [];
@@ -28,6 +29,8 @@ class AnimGraphInstance extends h3d.anim.Animation {
 
 	var resolver : AnimResolver = null;
 
+	var tmpMatrix : h3d.Matrix = new h3d.Matrix();
+
 	#if editor
 	var editorSkipClone : Bool = false;
 	#end
@@ -150,26 +153,29 @@ class AnimGraphInstance extends h3d.anim.Animation {
 			return;
 		for (obj in objects) {
 			var obj : AnimGraphAnimatedObject = cast obj;
+			var workMatrix = obj.matrix;
 			workMatrix.identity();
 			syncCtx.reset(obj);
 
 			rootNode.getBoneTransform(obj.id, workMatrix, syncCtx);
 
+
+
+			if (!decompose) {
+				Tools.recomposeMatrix(workMatrix, tmpMatrix);
+				workMatrix.load(tmpMatrix);
+				// keep in case if we need the def matrix ???
+				// if (obj.targetSkin != null) {
+				// 	var def = obj.targetSkin.getSkinData().allJoints[obj.targetJoint].defMat;
+				// }
+			}
+
 			@:privateAccess
 			var targetMatrix = if (obj.targetSkin != null) {
 				obj.targetSkin.jointsUpdated = true;
-				obj.targetSkin.currentRelPose[obj.targetJoint] ??= new h3d.Matrix();
-			} else {
-				obj.targetObject.defaultTransform ??= new h3d.Matrix();
-			}
-
-			if (!decompose) {
-				Tools.recomposeMatrix(workMatrix, targetMatrix);
-				if (obj.targetSkin != null) {
-					var def = obj.targetSkin.getSkinData().allJoints[obj.targetJoint].defMat;
-				}
+				obj.targetSkin.currentRelPose[obj.targetJoint] = workMatrix;
 			} else {
-				targetMatrix.load(workMatrix);
+				obj.targetObject.defaultTransform = workMatrix;
 			}
 		}
 	}