MPO: clone MPOs instead of sharing references

experimental
Kirill Vainer 9 years ago
parent e691de4459
commit 87af1f30b0
  1. 9
      jme3-core/src/main/java/com/jme3/scene/Spatial.java
  2. 3
      jme3-core/src/test/java/com/jme3/scene/SceneMatParamOverrideTest.java

@ -1362,8 +1362,12 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
clone.localLights.setOwner(clone); clone.localLights.setOwner(clone);
clone.worldLights.setOwner(clone); clone.worldLights.setOwner(clone);
clone.worldOverrides = new ArrayList<MatParamOverride>(worldOverrides); clone.worldOverrides = new ArrayList<MatParamOverride>();
clone.localOverrides = new ArrayList<MatParamOverride>(localOverrides); clone.localOverrides = new ArrayList<MatParamOverride>();
for (MatParamOverride override : localOverrides) {
clone.localOverrides.add((MatParamOverride) override.clone());
}
// No need to force cloned to update. // No need to force cloned to update.
// This node already has the refresh flags // This node already has the refresh flags
@ -1386,6 +1390,7 @@ public abstract class Spatial implements Savable, Cloneable, Collidable, Cloneab
clone.setBoundRefresh(); clone.setBoundRefresh();
clone.setTransformRefresh(); clone.setTransformRefresh();
clone.setLightListRefresh(); clone.setLightListRefresh();
clone.setMatParamOverrideRefresh();
clone.controls = new SafeArrayList<Control>(Control.class); clone.controls = new SafeArrayList<Control>(Control.class);
for (int i = 0; i < controls.size(); i++) { for (int i = 0; i < controls.size(); i++) {

@ -244,7 +244,8 @@ public class SceneMatParamOverrideTest {
assertEquals(clonedOverrides, originalOverrides); assertEquals(clonedOverrides, originalOverrides);
for (int i = 0; i < clonedOverrides.size(); i++) { 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));
} }
} }

Loading…
Cancel
Save