Browse Source

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

ant..om 14 years ago
parent
commit
dfeff3c6af

+ 7 - 0
engine/src/terrain/com/jme3/terrain/geomipmap/TerrainGrid.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);
         }

+ 6 - 6
engine/src/terrain/com/jme3/terrain/geomipmap/TerrainQuad.java

@@ -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);