Convert Skeleton and Bone over to use the JME cloner system for cloning...

this should do automatic fix-up and hopefully make bones attachments work 
properly again in clones.
revert-573-cleanup_build_scripts
Paul Speed 8 years ago
parent 975954fb17
commit 63e8c9c485
  1. 43
      jme3-core/src/main/java/com/jme3/animation/Bone.java
  2. 10
      jme3-core/src/main/java/com/jme3/animation/Skeleton.java

@ -35,6 +35,8 @@ import com.jme3.export.*;
import com.jme3.math.*;
import com.jme3.scene.Node;
import com.jme3.util.TempVars;
import com.jme3.util.clone.JmeCloneable;
import com.jme3.util.clone.Cloner;
import java.io.IOException;
import java.util.ArrayList;
@ -62,13 +64,13 @@ import java.util.ArrayList;
* @author Kirill Vainer
* @author Rémy Bouquet
*/
public final class Bone implements Savable {
public final class Bone implements Savable, JmeCloneable {
// Version #2: Changed naming of transforms as they were misleading
public static final int SAVABLE_VERSION = 2;
private String name;
private Bone parent;
private final ArrayList<Bone> children = new ArrayList<Bone>();
private ArrayList<Bone> children = new ArrayList<Bone>();
/**
* If enabled, user can control bone transform with setUserTransforms.
* Animation transforms are not applied to this bone when enabled.
@ -167,6 +169,43 @@ public final class Bone implements Savable {
*/
public Bone() {
}
@Override
public Object jmeClone() {
try {
Bone clone = (Bone)super.clone();
return clone;
} catch (CloneNotSupportedException ex) {
throw new AssertionError();
}
}
@Override
public void cloneFields( Cloner cloner, Object original ) {
this.parent = cloner.clone(parent);
this.children = cloner.clone(children);
this.attachNode = cloner.clone(attachNode);
this.bindPos = cloner.clone(bindPos);
this.bindRot = cloner.clone(bindRot);
this.bindScale = cloner.clone(bindScale);
this.modelBindInversePos = cloner.clone(modelBindInversePos);
this.modelBindInverseRot = cloner.clone(modelBindInverseRot);
this.modelBindInverseScale = cloner.clone(modelBindInverseScale);
this.localPos = cloner.clone(localPos);
this.localRot = cloner.clone(localRot);
this.localScale = cloner.clone(localScale);
this.modelPos = cloner.clone(modelPos);
this.modelRot = cloner.clone(modelRot);
this.modelScale = cloner.clone(modelScale);
this.tmpTransform = cloner.clone(tmpTransform);
}
/**
* Returns the name of the bone, set in the constructor.

@ -122,11 +122,19 @@ public final class Skeleton implements Savable, JmeCloneable {
@Override
public Object jmeClone() {
return new Skeleton(this);
try {
Skeleton clone = (Skeleton)super.clone();
return clone;
} catch (CloneNotSupportedException ex) {
throw new AssertionError();
}
}
@Override
public void cloneFields( Cloner cloner, Object original ) {
this.rootBones = cloner.clone(rootBones);
this.boneList = cloner.clone(boneList);
this.skinningMatrixes = cloner.clone(skinningMatrixes);
}
private void createSkinningMatrices() {

Loading…
Cancel
Save