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
This commit is contained in:
parent
6c2eba12ec
commit
609d975965
@ -39,6 +39,7 @@ import com.jme3.export.Savable;
|
|||||||
import com.jme3.math.Matrix3f;
|
import com.jme3.math.Matrix3f;
|
||||||
import com.jme3.math.Matrix4f;
|
import com.jme3.math.Matrix4f;
|
||||||
import com.jme3.math.Quaternion;
|
import com.jme3.math.Quaternion;
|
||||||
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.Node;
|
import com.jme3.scene.Node;
|
||||||
import com.jme3.util.TempVars;
|
import com.jme3.util.TempVars;
|
||||||
@ -93,6 +94,9 @@ public final class Bone implements Savable {
|
|||||||
private Quaternion worldRot = new Quaternion();
|
private Quaternion worldRot = new Quaternion();
|
||||||
private Vector3f worldScale = new Vector3f();
|
private Vector3f worldScale = new Vector3f();
|
||||||
|
|
||||||
|
//used for getCombinedTransform
|
||||||
|
private Transform tmpTransform=new Transform();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new bone with the given name.
|
* Creates a new bone with the given name.
|
||||||
*
|
*
|
||||||
@ -372,15 +376,17 @@ public final class Bone implements Savable {
|
|||||||
worldPos.set(translation);
|
worldPos.set(translation);
|
||||||
worldRot.set(rotation);
|
worldRot.set(rotation);
|
||||||
}
|
}
|
||||||
protected Vector3f tmpVec = new Vector3f();
|
|
||||||
protected Quaternion tmpQuat = new Quaternion();
|
|
||||||
|
|
||||||
public Quaternion getTmpQuat() {
|
/**
|
||||||
return tmpQuat;
|
* Returns teh local transform of this bone combined with the given position and rotation
|
||||||
}
|
* @param position a position
|
||||||
|
* @param rotation a rotation
|
||||||
public Vector3f getTmpVec() {
|
* @return
|
||||||
return tmpVec;
|
*/
|
||||||
|
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.JmeExporter;
|
||||||
import com.jme3.export.JmeImporter;
|
import com.jme3.export.JmeImporter;
|
||||||
import com.jme3.math.Quaternion;
|
import com.jme3.math.Quaternion;
|
||||||
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.renderer.RenderManager;
|
import com.jme3.renderer.RenderManager;
|
||||||
import com.jme3.renderer.ViewPort;
|
import com.jme3.renderer.ViewPort;
|
||||||
@ -186,12 +187,8 @@ public class RagdollControl implements PhysicsControl, PhysicsCollisionListener
|
|||||||
bone.setUserTransformsWorld(pos, rot);
|
bone.setUserTransformsWorld(pos, rot);
|
||||||
for (Bone childBone : bone.getChildren()) {
|
for (Bone childBone : bone.getChildren()) {
|
||||||
if (!boneList.contains(childBone.getName())) {
|
if (!boneList.contains(childBone.getName())) {
|
||||||
Vector3f tmpVec = childBone.getTmpVec();
|
Transform t = childBone.getCombinedTransform(pos, rot);
|
||||||
Quaternion tmpQuat = childBone.getTmpQuat();
|
setTransform(childBone, t.getTranslation(), t.getRotation());
|
||||||
rot.mult(childBone.getLocalPosition(), tmpVec).addLocal(pos);
|
|
||||||
tmpQuat.set(rot).multLocal(childBone.getLocalRotation());
|
|
||||||
setTransform(childBone, tmpVec, tmpQuat);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -680,6 +677,4 @@ public class RagdollControl implements PhysicsControl, PhysicsCollisionListener
|
|||||||
public void setEventDispatchImpulseThreshold(float eventDispatchImpulseThreshold) {
|
public void setEventDispatchImpulseThreshold(float eventDispatchImpulseThreshold) {
|
||||||
this.eventDispatchImpulseThreshold = eventDispatchImpulseThreshold;
|
this.eventDispatchImpulseThreshold = eventDispatchImpulseThreshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user