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. 4
      engine/src/terrain/com/jme3/terrain/geomipmap/TerrainQuad.java

@ -120,6 +120,9 @@ public class TerrainGrid extends TerrainQuad {
} }
public void initialize(Vector3f location) { 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); Vector3f camCell = this.getCell(location);
this.updateChildrens(camCell); this.updateChildrens(camCell);
for (TerrainGridListener l : this.listeners.values()) { for (TerrainGridListener l : this.listeners.values()) {
@ -243,9 +246,13 @@ public class TerrainGrid extends TerrainQuad {
this.currentCell = cam; this.currentCell = cam;
this.setLocalTranslation(cam.mult(this.getLocalScale().mult(this.quadSize))); this.setLocalTranslation(cam.mult(this.getLocalScale().mult(this.quadSize)));
this.updateModelBound();
if (control != null) { if (control != null) {
int currentCollisionGroup = control.getCollideWithGroups();
control = new RigidBodyControl(new HeightfieldCollisionShape(getHeightMap(), getLocalScale()), 0); control = new RigidBodyControl(new HeightfieldCollisionShape(getHeightMap(), getLocalScale()), 0);
control.setCcdMotionThreshold(0.5f);
control.setCollisionGroup(currentCollisionGroup);
this.addControl(control); this.addControl(control);
space.add(this); space.add(this);
} }

@ -920,8 +920,8 @@ public class TerrainQuad extends Node implements Terrain {
public float getHeight(Vector2f xz) { public float getHeight(Vector2f xz) {
// offset // offset
float x = (float)((xz.x / getLocalScale().x) + (float)totalSize / 2f); float x = (float)(((xz.x - getLocalTranslation().x) / getLocalScale().x) + (float)totalSize / 2f);
float z = (float)((xz.y / getLocalScale().z) + (float)totalSize / 2f); float z = (float)(((xz.y - getLocalTranslation().z) / getLocalScale().z) + (float)totalSize / 2f);
return getHeight(x, z, xz); return getHeight(x, z, xz);
} }

Loading…
Cancel
Save