Fixed a hack in Bone class for the ragdoll, so Kirill can sleep again.

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7303 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
rem..om 14 years ago
parent 6c2eba12ec
commit 609d975965
  1. 22
      engine/src/core/com/jme3/animation/Bone.java
  2. 11
      engine/src/jbullet/com/jme3/bullet/control/RagdollControl.java

@ -39,6 +39,7 @@ import com.jme3.export.Savable;
import com.jme3.math.Matrix3f;
import com.jme3.math.Matrix4f;
import com.jme3.math.Quaternion;
import com.jme3.math.Transform;
import com.jme3.math.Vector3f;
import com.jme3.scene.Node;
import com.jme3.util.TempVars;
@ -93,6 +94,9 @@ public final class Bone implements Savable {
private Quaternion worldRot = new Quaternion();
private Vector3f worldScale = new Vector3f();
//used for getCombinedTransform
private Transform tmpTransform=new Transform();
/**
* Creates a new bone with the given name.
*
@ -372,15 +376,17 @@ public final class Bone implements Savable {
worldPos.set(translation);
worldRot.set(rotation);
}
protected Vector3f tmpVec = new Vector3f();
protected Quaternion tmpQuat = new Quaternion();
public Quaternion getTmpQuat() {
return tmpQuat;
}
public Vector3f getTmpVec() {
return tmpVec;
/**
* Returns teh local transform of this bone combined with the given position and rotation
* @param position a position
* @param rotation a rotation
* @return
*/
public Transform getCombinedTransform(Vector3f position, Quaternion rotation){
rotation.mult(localPos, tmpTransform.getTranslation()).addLocal(position);
tmpTransform.setRotation(rotation).getRotation().multLocal(localRot);
return tmpTransform;
}
/**

@ -50,6 +50,7 @@ import com.jme3.bullet.objects.PhysicsRigidBody;
import com.jme3.export.JmeExporter;
import com.jme3.export.JmeImporter;
import com.jme3.math.Quaternion;
import com.jme3.math.Transform;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager;
import com.jme3.renderer.ViewPort;
@ -186,12 +187,8 @@ public class RagdollControl implements PhysicsControl, PhysicsCollisionListener
bone.setUserTransformsWorld(pos, rot);
for (Bone childBone : bone.getChildren()) {
if (!boneList.contains(childBone.getName())) {
Vector3f tmpVec = childBone.getTmpVec();
Quaternion tmpQuat = childBone.getTmpQuat();
rot.mult(childBone.getLocalPosition(), tmpVec).addLocal(pos);
tmpQuat.set(rot).multLocal(childBone.getLocalRotation());
setTransform(childBone, tmpVec, tmpQuat);
Transform t = childBone.getCombinedTransform(pos, rot);
setTransform(childBone, t.getTranslation(), t.getRotation());
}
}
}
@ -680,6 +677,4 @@ public class RagdollControl implements PhysicsControl, PhysicsCollisionListener
public void setEventDispatchImpulseThreshold(float eventDispatchImpulseThreshold) {
this.eventDispatchImpulseThreshold = eventDispatchImpulseThreshold;
}
}

Loading…
Cancel
Save