Переглянути джерело

Fixes the bug of shallow copies when cloning lights (See http://hub.jmonkeyengine.org/t/what-is-the-expected-meaning-of-light-clone/35100 )

MeFisto94 9 роки тому
батько
коміт
6c4e8010f2

+ 6 - 0
jme3-core/src/main/java/com/jme3/light/DirectionalLight.java

@@ -146,4 +146,10 @@ public class DirectionalLight extends Light {
         direction = (Vector3f) ic.readSavable("direction", null);
     }
 
+    @Override
+    public DirectionalLight clone() {
+        DirectionalLight l = (DirectionalLight)super.clone();
+        l.direction = direction.clone();
+        return l;
+    }
 }

+ 3 - 1
jme3-core/src/main/java/com/jme3/light/Light.java

@@ -228,7 +228,9 @@ public abstract class Light implements Savable, Cloneable {
     @Override
     public Light clone(){
         try {
-            return (Light) super.clone();
+            Light l = (Light) super.clone();
+            l.color = color.clone();
+            return l;
         } catch (CloneNotSupportedException ex) {
             throw new AssertionError();
         }

+ 7 - 0
jme3-core/src/main/java/com/jme3/light/PointLight.java

@@ -241,4 +241,11 @@ public class PointLight extends Light {
             this.invRadius = 0;
         }
     }
+
+    @Override
+    public PointLight clone() {
+        PointLight p = (PointLight)super.clone();
+        p.position = position.clone();
+        return p;
+    }
 }

+ 8 - 0
jme3-core/src/main/java/com/jme3/light/SpotLight.java

@@ -448,5 +448,13 @@ public class SpotLight extends Light {
             this.invSpotRange = 0;
         }
     }
+
+    @Override
+    public SpotLight clone() {
+        SpotLight s = (SpotLight)super.clone();
+        s.direction = direction.clone();
+        s.position = position.clone();
+        return s;
+    }
 }