فهرست منبع

DynamicBones: add additive mode

lviguier 7 ماه پیش
والد
کامیت
73866b6174
3فایلهای تغییر یافته به همراه13 افزوده شده و 2 حذف شده
  1. 2 1
      h3d/anim/BufferAnimation.hx
  2. 9 0
      h3d/anim/Skin.hx
  3. 2 1
      h3d/prim/ModelDatabase.hx

+ 2 - 1
h3d/anim/BufferAnimation.hx

@@ -164,7 +164,8 @@ class BufferAnimation extends Animation {
 			}
 
 			var m = o.matrix;
-			if( m != null ) {
+			var skinData = o.targetSkin?.skinData;
+			if( m != null && !(skinData != null && !skinData.allJoints[o.targetJoint].shouldReceiveAnimation())) {
 				if( layout.has(Position) ) {
 					m._41 = lerpValue();
 					m._42 = lerpValue();

+ 9 - 0
h3d/anim/Skin.hx

@@ -27,6 +27,10 @@ class Joint {
 		subs = [];
 	}
 
+	public function shouldReceiveAnimation() {
+		return true;
+	}
+
 	#if !macro
 	public function makeRuntimeData() {
 		return new h3d.scene.Skin.JointData();
@@ -41,6 +45,7 @@ class DynamicJoint extends Joint {
 	public var globalForce : Vector = new Vector(0.0, 0.0, 0.0);
 
 	// Parameters
+	public var additive : Bool = false;
 	public var damping : Float = 1;
 	public var stiffness : Float = 1;
 	public var resistance : Float = 1;
@@ -50,6 +55,10 @@ class DynamicJoint extends Joint {
 		super();
 	}
 
+	public override function shouldReceiveAnimation() {
+		return additive;
+	}
+
 	#if !macro
 	public override function makeRuntimeData() {
 		return new h3d.scene.Skin.DynamicJointData();

+ 2 - 1
h3d/prim/ModelDatabase.hx

@@ -158,6 +158,7 @@ class ModelDatabase {
 			newJ.resistance = jConf.resistance;
 			newJ.slackness = jConf.slackness;
 			newJ.stiffness = jConf.stiffness;
+			newJ.additive = jConf.additive;
 			newJ.globalForce = new Vector(jConf.globalForce.x, jConf.globalForce.y, jConf.globalForce.z);
 			skinData.allJoints[j.index] = newJ;
 
@@ -208,7 +209,7 @@ class ModelDatabase {
 			if (dynJ == null)
 				continue;
 
-			dynamicJoints.push({ name: dynJ.name, slackness: dynJ.slackness, stiffness: dynJ.stiffness, resistance: dynJ.resistance, damping: dynJ.damping, globalForce: dynJ.globalForce });
+			dynamicJoints.push({ name: dynJ.name, slackness: dynJ.slackness, stiffness: dynJ.stiffness, resistance: dynJ.resistance, damping: dynJ.damping, additive: dynJ.additive, globalForce: dynJ.globalForce });
 		}
 
 		if (dynamicJoints.length == 0) {