fixed a bug calculating camera cell
Test is updated to not use LOD and physics for testing purposes git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7488 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
e55e17ba4b
commit
0bfd5aa2a3
@ -86,19 +86,19 @@ public class TerrainGrid extends TerrainQuad {
|
|||||||
// 2: grids are associated with locations, and no incremental update is done, we load new grids for new locations, and unload those that are not needed anymore
|
// 2: grids are associated with locations, and no incremental update is done, we load new grids for new locations, and unload those that are not needed anymore
|
||||||
Vector3f cam = locations.get(0);
|
Vector3f cam = locations.get(0);
|
||||||
Vector3f camCell = this.getCell(cam);
|
Vector3f camCell = this.getCell(cam);
|
||||||
if (!camCell.equals(this.currentCell)) {
|
if (camCell.x != this.currentCell.x || camCell.z != currentCell.z) {
|
||||||
this.updateChildrens(camCell);
|
this.updateChildrens(camCell);
|
||||||
for (TerrainGridListener l : this.listeners.values()) {
|
for (TerrainGridListener l : this.listeners.values()) {
|
||||||
l.gridMoved(camCell);
|
l.gridMoved(camCell);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
super.update(locations);
|
//super.update(locations);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector3f getCell(Vector3f location) {
|
public Vector3f getCell(Vector3f location) {
|
||||||
final Vector3f v = location.clone().divideLocal(this.getLocalScale().mult(this.quadSize)).add(0.5f, 0, 0.5f);
|
final Vector3f v = location.clone().divideLocal(this.getLocalScale().mult(this.quadSize)).add(0.5f, 0, 0.5f);
|
||||||
return new Vector3f(FastMath.floor(v.x), FastMath.floor(v.y), FastMath.floor(v.z));
|
return new Vector3f(FastMath.floor(v.x), 0, FastMath.floor(v.z));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void removeQuad(int idx) {
|
protected void removeQuad(int idx) {
|
||||||
|
@ -31,6 +31,7 @@ public class TerrainGridTest extends SimpleApplication {
|
|||||||
private float grassScale = 64;
|
private float grassScale = 64;
|
||||||
private float dirtScale = 16;
|
private float dirtScale = 16;
|
||||||
private float rockScale = 128;
|
private float rockScale = 128;
|
||||||
|
private boolean usePhysics = false;
|
||||||
|
|
||||||
public static void main(final String[] args) {
|
public static void main(final String[] args) {
|
||||||
TerrainGridTest app = new TerrainGridTest();
|
TerrainGridTest app = new TerrainGridTest();
|
||||||
@ -85,24 +86,25 @@ public class TerrainGridTest extends SimpleApplication {
|
|||||||
BulletAppState bulletAppState = new BulletAppState();
|
BulletAppState bulletAppState = new BulletAppState();
|
||||||
stateManager.attach(bulletAppState);
|
stateManager.attach(bulletAppState);
|
||||||
|
|
||||||
RigidBodyControl body = new RigidBodyControl(new HeightfieldCollisionShape(terrain.getHeightMap(), terrain.getLocalScale()), 0);
|
|
||||||
terrain.addControl(body);
|
|
||||||
bulletAppState.getPhysicsSpace().add(terrain);
|
|
||||||
|
|
||||||
this.getCamera().setLocation(new Vector3f(0, 256, 0));
|
this.getCamera().setLocation(new Vector3f(0, 256, 0));
|
||||||
|
|
||||||
this.viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f));
|
this.viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f));
|
||||||
|
|
||||||
CapsuleCollisionShape capsuleShape = new CapsuleCollisionShape(0.5f, 1.8f, 1);
|
if (usePhysics) {
|
||||||
this.player3 = new CharacterControl(capsuleShape, 0.5f);
|
RigidBodyControl body = new RigidBodyControl(new HeightfieldCollisionShape(terrain.getHeightMap(), terrain.getLocalScale()), 0);
|
||||||
this.player3.setJumpSpeed(20);
|
terrain.addControl(body);
|
||||||
this.player3.setFallSpeed(30);
|
bulletAppState.getPhysicsSpace().add(terrain);
|
||||||
this.player3.setGravity(30);
|
CapsuleCollisionShape capsuleShape = new CapsuleCollisionShape(0.5f, 1.8f, 1);
|
||||||
|
this.player3 = new CharacterControl(capsuleShape, 0.5f);
|
||||||
|
this.player3.setJumpSpeed(20);
|
||||||
|
this.player3.setFallSpeed(30);
|
||||||
|
this.player3.setGravity(30);
|
||||||
|
|
||||||
this.player3.setPhysicsLocation(new Vector3f(0, 256, 0));
|
this.player3.setPhysicsLocation(new Vector3f(0, 256, 0));
|
||||||
|
|
||||||
bulletAppState.getPhysicsSpace().add(this.player3);
|
|
||||||
|
|
||||||
|
bulletAppState.getPhysicsSpace().add(this.player3);
|
||||||
|
}
|
||||||
this.initKeys();
|
this.initKeys();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,7 +180,9 @@ public class TerrainGridTest extends SimpleApplication {
|
|||||||
this.walkDirection.addLocal(camDir.negate());
|
this.walkDirection.addLocal(camDir.negate());
|
||||||
}
|
}
|
||||||
|
|
||||||
this.player3.setWalkDirection(this.walkDirection);
|
if (usePhysics) {
|
||||||
this.cam.setLocation(this.player3.getPhysicsLocation());
|
this.player3.setWalkDirection(this.walkDirection);
|
||||||
|
this.cam.setLocation(this.player3.getPhysicsLocation());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user