Fix major bug: TerrainGrid.getHeight returned always 0 after first grid change happened

minor bug: updateModelBound missed from TerrainGrid update call, added collisionGroup check to physics, and failing with exception if material is not set before initialize() call

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7691 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
ant..om 14 years ago
parent c30288febf
commit dfeff3c6af
  1. 7
      engine/src/terrain/com/jme3/terrain/geomipmap/TerrainGrid.java
  2. 12
      engine/src/terrain/com/jme3/terrain/geomipmap/TerrainQuad.java

@ -120,6 +120,9 @@ public class TerrainGrid extends TerrainQuad {
}
public void initialize(Vector3f location) {
if(this.material == null){
throw new RuntimeException("Material must be set prior to call of initialize");
}
Vector3f camCell = this.getCell(location);
this.updateChildrens(camCell);
for (TerrainGridListener l : this.listeners.values()) {
@ -243,9 +246,13 @@ public class TerrainGrid extends TerrainQuad {
this.currentCell = cam;
this.setLocalTranslation(cam.mult(this.getLocalScale().mult(this.quadSize)));
this.updateModelBound();
if (control != null) {
int currentCollisionGroup = control.getCollideWithGroups();
control = new RigidBodyControl(new HeightfieldCollisionShape(getHeightMap(), getLocalScale()), 0);
control.setCcdMotionThreshold(0.5f);
control.setCollisionGroup(currentCollisionGroup);
this.addControl(control);
space.add(this);
}

@ -920,8 +920,8 @@ public class TerrainQuad extends Node implements Terrain {
public float getHeight(Vector2f xz) {
// offset
float x = (float)((xz.x / getLocalScale().x) + (float)totalSize / 2f);
float z = (float)((xz.y / getLocalScale().z) + (float)totalSize / 2f);
float x = (float)(((xz.x - getLocalTranslation().x) / getLocalScale().x) + (float)totalSize / 2f);
float z = (float)(((xz.y - getLocalTranslation().z) / getLocalScale().z) + (float)totalSize / 2f);
return getHeight(x, z, xz);
}
@ -953,7 +953,7 @@ public class TerrainQuad extends Node implements Terrain {
coord.add(xz);
List<Float> h = new ArrayList<Float>();
h.add(height);
setHeight(coord, h);
}
@ -1002,7 +1002,7 @@ public class TerrainQuad extends Node implements Terrain {
float h;
LocationHeight(){}
LocationHeight(int x, int z, float h){
this.x = x;
this.z = z;
@ -1077,7 +1077,7 @@ public class TerrainQuad extends Node implements Terrain {
else if(quad1 instanceof TerrainPatch)
((TerrainPatch)quad1).setHeight(quadLH1, overrideHeight);
}
if (!quadLH2.isEmpty()) {
if (quad2 instanceof TerrainQuad)
((TerrainQuad)quad2).setHeight(quadLH2, overrideHeight);
@ -1091,7 +1091,7 @@ public class TerrainQuad extends Node implements Terrain {
else if(quad3 instanceof TerrainPatch)
((TerrainPatch)quad3).setHeight(quadLH3, overrideHeight);
}
if (!quadLH4.isEmpty()) {
if (quad4 instanceof TerrainQuad)
((TerrainQuad)quad4).setHeight(quadLH4, overrideHeight);

Loading…
Cancel
Save