Skip to content

Commit

Permalink
Convert Skeleton and Bone over to use the JME cloner system for cloni…
Browse files Browse the repository at this point in the history
…ng...

this should do automatic fix-up and hopefully make bones attachments work 
properly again in clones.
  • Loading branch information
pspeed42 committed Dec 13, 2016
1 parent 975954f commit 63e8c9c
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 3 deletions.
43 changes: 41 additions & 2 deletions jme3-core/src/main/java/com/jme3/animation/Bone.java
Expand Up @@ -35,6 +35,8 @@
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;

Expand Down Expand Up @@ -62,13 +64,13 @@
* @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.
Expand Down Expand Up @@ -167,6 +169,43 @@ public Bone(String name) {
*/
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.
Expand Down
10 changes: 9 additions & 1 deletion jme3-core/src/main/java/com/jme3/animation/Skeleton.java
Expand Up @@ -122,11 +122,19 @@ public Skeleton() {

@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() {
Expand Down

0 comments on commit 63e8c9c

Please sign in to comment.