diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java index 29e8304a3..c2246a141 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java +++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java @@ -1362,8 +1362,12 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab clone.localLights.setOwner(clone); clone.worldLights.setOwner(clone); - clone.worldOverrides = new ArrayList(worldOverrides); - clone.localOverrides = new ArrayList(localOverrides); + clone.worldOverrides = new ArrayList(); + clone.localOverrides = new ArrayList(); + + for (MatParamOverride override : localOverrides) { + clone.localOverrides.add((MatParamOverride) override.clone()); + } // No need to force cloned to update. // This node already has the refresh flags @@ -1386,6 +1390,7 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab clone.setBoundRefresh(); clone.setTransformRefresh(); clone.setLightListRefresh(); + clone.setMatParamOverrideRefresh(); clone.controls = new SafeArrayList(Control.class); for (int i = 0; i < controls.size(); i++) { diff --git a/jme3-core/src/test/java/com/jme3/scene/SceneMatParamOverrideTest.java b/jme3-core/src/test/java/com/jme3/scene/SceneMatParamOverrideTest.java index fdb6a35a4..a615d5c92 100644 --- a/jme3-core/src/test/java/com/jme3/scene/SceneMatParamOverrideTest.java +++ b/jme3-core/src/test/java/com/jme3/scene/SceneMatParamOverrideTest.java @@ -244,7 +244,8 @@ public class SceneMatParamOverrideTest { assertEquals(clonedOverrides, originalOverrides); for (int i = 0; i < clonedOverrides.size(); i++) { - assertSame(clonedOverrides.get(i), originalOverrides.get(i)); + assertNotSame(clonedOverrides.get(i), originalOverrides.get(i)); + assertEquals(clonedOverrides.get(i), originalOverrides.get(i)); } }