diff --git a/jme3-core/src/main/java/com/jme3/anim/Joint.java b/jme3-core/src/main/java/com/jme3/anim/Joint.java index f534797d29..eefa4797f3 100644 --- a/jme3-core/src/main/java/com/jme3/anim/Joint.java +++ b/jme3-core/src/main/java/com/jme3/anim/Joint.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2020 jMonkeyEngine + * Copyright (c) 2009-2021 jMonkeyEngine * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -342,6 +342,7 @@ public void cloneFields(Cloner cloner, Object original) { this.attachedNode = cloner.clone(attachedNode); this.targetGeometry = cloner.clone(targetGeometry); this.localTransform = cloner.clone(localTransform); + this.initialTransform = cloner.clone(initialTransform); this.inverseModelBindMatrix = cloner.clone(inverseModelBindMatrix); } diff --git a/jme3-core/src/test/java/com/jme3/anim/JointCloneTest.java b/jme3-core/src/test/java/com/jme3/anim/JointCloneTest.java new file mode 100644 index 0000000000..6ec094d8b6 --- /dev/null +++ b/jme3-core/src/test/java/com/jme3/anim/JointCloneTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package com.jme3.anim; + +import com.jme3.util.clone.Cloner; +import org.junit.Assert; +import org.junit.Test; + +/** + * Test cloning a Joint. + * + * @author Stephen Gold + */ +public class JointCloneTest { + + /** + * Make sure the initial transform gets cloned. This was issue 1469 at + * Github. + */ + @Test + public void testInitialTransform() { + Joint testJoint = new Joint("testJoint"); + Assert.assertTrue(testJoint.getInitialTransform().isIdentity()); + + Joint clone = Cloner.deepClone(testJoint); + clone.getInitialTransform().setScale(2f); + + Assert.assertTrue(testJoint.getInitialTransform().isIdentity()); + } +}