JmeCloneable related changes to TerrainQuad and TerrainPatch. Fixed

something I missed in NormalRecalcControl.
cleanup_build_scripts
Paul Speed 9 years ago
parent eda92656dd
commit 7b29c58fe0
  1. 11
      jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/NormalRecalcControl.java
  2. 28
      jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainPatch.java
  3. 19
      jme3-terrain/src/main/java/com/jme3/terrain/geomipmap/TerrainQuad.java

@ -69,6 +69,9 @@ public class NormalRecalcControl extends AbstractControl {
}
/**
* Called internally by com.jme3.util.clone.Cloner. Do not call directly.
*/
@Override
public Object jmeClone() {
NormalRecalcControl control = (NormalRecalcControl)super.jmeClone();
@ -76,6 +79,14 @@ public class NormalRecalcControl extends AbstractControl {
return control;
}
/**
* Called internally by com.jme3.util.clone.Cloner. Do not call directly.
*/
@Override
public void cloneFields( Cloner cloner, Object original ) {
this.terrain = cloner.clone(terrain);
}
@Override
public Control cloneForSpatial(Spatial spatial) {
NormalRecalcControl control = new NormalRecalcControl(terrain);

@ -50,6 +50,7 @@ import com.jme3.scene.mesh.IndexBuffer;
import com.jme3.terrain.geomipmap.TerrainQuad.LocationHeight;
import com.jme3.terrain.geomipmap.lodcalc.util.EntropyComputeUtil;
import com.jme3.util.BufferUtils;
import com.jme3.util.clone.Cloner;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.FloatBuffer;
@ -955,6 +956,33 @@ public class TerrainPatch extends Geometry {
return clone;
}
/**
* Called internally by com.jme3.util.clone.Cloner. Do not call directly.
*/
@Override
public void cloneFields( Cloner cloner, Object original ) {
this.stepScale = cloner.clone(stepScale);
this.offset = cloner.clone(offset);
this.leftNeighbour = null;
this.topNeighbour = null;
this.rightNeighbour = null;
this.bottomNeighbour = null;
// Don't feel like making geomap cloneable tonight
// so I'll copy the old logic.
this.geomap = new LODGeomap(size, geomap.getHeightArray());
Mesh m = geomap.createMesh(stepScale, Vector2f.UNIT_XY, offset, offsetAmount, totalSize, false);
this.setMesh(m);
// In this case, we always clone material even if the cloner is setup
// not to clone it. Terrain uses mutable textures and stuff so it's important
// to clone it. (At least that's my understanding and is evidenced by the old
// clone code specifically cloning material.) -pspeed
this.material = material.clone();
}
protected void ensurePositiveVolumeBBox() {
if (getModelBound() instanceof BoundingBox) {
if (((BoundingBox)getModelBound()).getYExtent() < 0.001f) {

@ -55,6 +55,7 @@ import com.jme3.terrain.geomipmap.picking.BresenhamTerrainPicker;
import com.jme3.terrain.geomipmap.picking.TerrainPickData;
import com.jme3.terrain.geomipmap.picking.TerrainPicker;
import com.jme3.util.TangentBinormalGenerator;
import com.jme3.util.clone.Cloner;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
@ -1807,6 +1808,24 @@ public class TerrainQuad extends Node implements Terrain {
return quadClone;
}
/**
* Called internally by com.jme3.util.clone.Cloner. Do not call directly.
*/
@Override
public void cloneFields( Cloner cloner, Object original ) {
this.stepScale = cloner.clone(stepScale);
this.offset = cloner.clone(offset);
// This was not cloned before... I think that's a mistake.
this.affectedAreaBBox = cloner.clone(affectedAreaBBox);
// picker is not cloneable and not cloned. This also seems like
// a mistake if you ever load the same terrain twice.
// this.picker = cloner.clone(picker);
// neighbourFinder is also not cloned. Maybe that's ok.
}
@Override
protected void setParent(Node parent) {
super.setParent(parent);

Loading…
Cancel
Save