- add serialization for KinematicRagdollControl (TODO: presets)

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10372 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 12 years ago
parent 9514355b82
commit f29b7fadab
  1. 75
      engine/src/bullet-common/com/jme3/bullet/control/KinematicRagdollControl.java

@ -51,6 +51,7 @@ import com.jme3.export.InputCapsule;
import com.jme3.export.JmeExporter;
import com.jme3.export.JmeImporter;
import com.jme3.export.OutputCapsule;
import com.jme3.export.Savable;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager;
@ -123,15 +124,18 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
Ragdoll
}
public class PhysicsBoneLink {
public class PhysicsBoneLink implements Savable {
protected Bone bone;
protected PhysicsRigidBody rigidBody;
protected Quaternion initalWorldRotation;
protected Bone bone;
protected SixDofJoint joint;
protected Quaternion initalWorldRotation;
protected Quaternion startBlendingRot = new Quaternion();
protected Vector3f startBlendingPos = new Vector3f();
public PhysicsBoneLink() {
}
public Bone getBone() {
return bone;
}
@ -139,6 +143,26 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
public PhysicsRigidBody getRigidBody() {
return rigidBody;
}
public void write(JmeExporter ex) throws IOException {
OutputCapsule oc = ex.getCapsule(this);
oc.write(rigidBody, "rigidBody", null);
oc.write(bone, "bone", null);
oc.write(joint, "joint", null);
oc.write(initalWorldRotation, "initalWorldRotation", null);
oc.write(startBlendingRot, "startBlendingRot", new Quaternion());
oc.write(startBlendingPos, "startBlendingPos", new Vector3f());
}
public void read(JmeImporter im) throws IOException {
InputCapsule ic = im.getCapsule(this);
rigidBody = (PhysicsRigidBody) ic.readSavable("rigidBody", null);
bone = (Bone) ic.readSavable("bone", null);
joint = (SixDofJoint) ic.readSavable("joint", null);
initalWorldRotation = (Quaternion) ic.readSavable("initalWorldRotation", null);
startBlendingRot = (Quaternion) ic.readSavable("startBlendingRot", null);
startBlendingPos = (Vector3f) ic.readSavable("startBlendingPos", null);
}
}
/**
@ -771,7 +795,12 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
}
public Control cloneForSpatial(Spatial spatial) {
throw new UnsupportedOperationException("Not supported yet.");
KinematicRagdollControl control = new KinematicRagdollControl(preset, weightThreshold);
control.setMode(mode);
control.setRootMass(rootMass);
control.setWeightThreshold(weightThreshold);
control.setApplyPhysicsLocal(applyLocal);
return control;
}
/**
@ -783,6 +812,22 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
public void write(JmeExporter ex) throws IOException {
super.write(ex);
OutputCapsule oc = ex.getCapsule(this);
oc.write(boneList.toArray(new String[boneList.size()]), "boneList", new String[0]);
oc.write(boneLinks.values().toArray(new PhysicsBoneLink[boneLinks.size()]), "boneLinks", new PhysicsBoneLink[0]);
oc.write(modelPosition, "modelPosition", new Vector3f());
oc.write(modelRotation, "modelRotation", new Quaternion());
oc.write(targetModel, "targetModel", null);
oc.write(skeleton, "skeleton", null);
// oc.write(preset, "preset", null);//TODO
oc.write(initScale, "initScale", null);
oc.write(mode, "mode", null);
oc.write(blendedControl, "blendedControl", false);
oc.write(weightThreshold, "weightThreshold", -1.0f);
oc.write(blendStart, "blendStart", 0.0f);
oc.write(blendTime, "blendTime", 1.0f);
oc.write(eventDispatchImpulseThreshold, "eventDispatchImpulseThreshold", 10);
oc.write(rootMass, "rootMass", 15);
oc.write(totalMass, "totalMass", 0);
}
/**
@ -794,5 +839,27 @@ public class KinematicRagdollControl extends AbstractPhysicsControl implements P
public void read(JmeImporter im) throws IOException {
super.read(im);
InputCapsule ic = im.getCapsule(this);
String[] loadedBoneList = ic.readStringArray("boneList", new String[0]);
for (String string : loadedBoneList) {
boneList.add(string);
}
PhysicsBoneLink[] loadedBoneLinks = (PhysicsBoneLink[])ic.readSavableArray("boneList", new PhysicsBoneLink[0]);
for (PhysicsBoneLink physicsBoneLink : loadedBoneLinks) {
boneLinks.put(physicsBoneLink.bone.getName(), physicsBoneLink);
}
modelPosition.set((Vector3f) ic.readSavable("modelPosition", new Vector3f()));
modelRotation.set((Quaternion) ic.readSavable("modelRotation", new Quaternion()));
targetModel = (Spatial) ic.readSavable("targetModel", null);
skeleton = (Skeleton) ic.readSavable("skeleton", null);
// preset //TODO
initScale = (Vector3f) ic.readSavable("initScale", null);
mode = ic.readEnum("mode", Mode.class, Mode.Kinematic);
blendedControl = ic.readBoolean("blendedControl", false);
weightThreshold = ic.readFloat("weightThreshold", -1.0f);
blendStart = ic.readFloat("blendStart", 0.0f);
blendTime = ic.readFloat("blendTime", 1.0f);
eventDispatchImpulseThreshold = ic.readFloat("eventDispatchImpulseThreshold", 10);
rootMass = ic.readFloat("rootMass", 15);
totalMass = ic.readFloat("totalMass", 0);
}
}

Loading…
Cancel
Save