- create HeightFieldCollisionShapes in CollisionShapeFactory CompoundShape generation as well

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8736 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 13 years ago
parent bd613fee2b
commit aa4b8d19e7
  1. 23
      engine/src/bullet/com/jme3/bullet/util/CollisionShapeFactory.java
  2. 28
      engine/src/jbullet/com/jme3/bullet/util/CollisionShapeFactory.java

@ -89,13 +89,24 @@ public class CollisionShapeFactory {
private static CompoundCollisionShape createCompoundShape(Node realRootNode, private static CompoundCollisionShape createCompoundShape(Node realRootNode,
Node rootNode, CompoundCollisionShape shape, boolean meshAccurate, boolean dynamic) { Node rootNode, CompoundCollisionShape shape, boolean meshAccurate, boolean dynamic) {
for (Spatial spatial : rootNode.getChildren()) { for (Spatial spatial : rootNode.getChildren()) {
if (spatial instanceof Node) { if (spatial instanceof TerrainQuad) {
Boolean bool = spatial.getUserData(UserData.JME_PHYSICSIGNORE);
if (bool != null && bool.booleanValue()) {
continue; // go to the next child in the loop
}
TerrainQuad terrain = (TerrainQuad) spatial;
Transform trans = getTransform(spatial, realRootNode);
shape.addChildShape(new HeightfieldCollisionShape(terrain.getHeightMap(), terrain.getLocalScale()),
trans.getTranslation(),
trans.getRotation().toRotationMatrix());
} else if (spatial instanceof Node) {
createCompoundShape(realRootNode, (Node) spatial, shape, meshAccurate, dynamic); createCompoundShape(realRootNode, (Node) spatial, shape, meshAccurate, dynamic);
} else if (spatial instanceof Geometry) { } else if (spatial instanceof Geometry) {
Boolean bool = spatial.getUserData(UserData.JME_PHYSICSIGNORE); Boolean bool = spatial.getUserData(UserData.JME_PHYSICSIGNORE);
if (bool != null && bool.booleanValue()) { if (bool != null && bool.booleanValue()) {
continue; // go to the next child in the loop continue; // go to the next child in the loop
} }
if (meshAccurate) { if (meshAccurate) {
CollisionShape childShape = dynamic CollisionShape childShape = dynamic
? createSingleDynamicMeshShape((Geometry) spatial, realRootNode) ? createSingleDynamicMeshShape((Geometry) spatial, realRootNode)
@ -112,6 +123,16 @@ public class CollisionShapeFactory {
trans.getTranslation(), trans.getTranslation(),
trans.getRotation().toRotationMatrix()); trans.getRotation().toRotationMatrix());
} }
} else if (spatial instanceof TerrainPatch) {
Boolean bool = spatial.getUserData(UserData.JME_PHYSICSIGNORE);
if (bool != null && bool.booleanValue()) {
continue; // go to the next child in the loop
}
TerrainPatch terrain = (TerrainPatch) spatial;
Transform trans = getTransform(spatial, realRootNode);
shape.addChildShape(new HeightfieldCollisionShape(terrain.getHeightmap(), terrain.getLocalScale()),
trans.getTranslation(),
trans.getRotation().toRotationMatrix());
} }
} }
return shape; return shape;

@ -89,14 +89,24 @@ public class CollisionShapeFactory {
private static CompoundCollisionShape createCompoundShape(Node realRootNode, private static CompoundCollisionShape createCompoundShape(Node realRootNode,
Node rootNode, CompoundCollisionShape shape, boolean meshAccurate, boolean dynamic) { Node rootNode, CompoundCollisionShape shape, boolean meshAccurate, boolean dynamic) {
for (Spatial spatial : rootNode.getChildren()) { for (Spatial spatial : rootNode.getChildren()) {
if (spatial instanceof Node) { if (spatial instanceof TerrainQuad) {
Boolean bool = spatial.getUserData(UserData.JME_PHYSICSIGNORE);
if (bool != null && bool.booleanValue()) {
continue; // go to the next child in the loop
}
TerrainQuad terrain = (TerrainQuad) spatial;
Transform trans = getTransform(spatial, realRootNode);
shape.addChildShape(new HeightfieldCollisionShape(terrain.getHeightMap(), terrain.getLocalScale()),
trans.getTranslation(),
trans.getRotation().toRotationMatrix());
} else if (spatial instanceof Node) {
createCompoundShape(realRootNode, (Node) spatial, shape, meshAccurate, dynamic); createCompoundShape(realRootNode, (Node) spatial, shape, meshAccurate, dynamic);
} else if (spatial instanceof Geometry) { } else if (spatial instanceof Geometry) {
Boolean bool = spatial.getUserData(UserData.JME_PHYSICSIGNORE); Boolean bool = spatial.getUserData(UserData.JME_PHYSICSIGNORE);
if (bool != null && bool.booleanValue()){ if (bool != null && bool.booleanValue()) {
continue; // go to the next child in the loop continue; // go to the next child in the loop
} }
if (meshAccurate) { if (meshAccurate) {
CollisionShape childShape = dynamic CollisionShape childShape = dynamic
? createSingleDynamicMeshShape((Geometry) spatial, realRootNode) ? createSingleDynamicMeshShape((Geometry) spatial, realRootNode)
@ -113,6 +123,16 @@ public class CollisionShapeFactory {
trans.getTranslation(), trans.getTranslation(),
trans.getRotation().toRotationMatrix()); trans.getRotation().toRotationMatrix());
} }
} else if (spatial instanceof TerrainPatch) {
Boolean bool = spatial.getUserData(UserData.JME_PHYSICSIGNORE);
if (bool != null && bool.booleanValue()) {
continue; // go to the next child in the loop
}
TerrainPatch terrain = (TerrainPatch) spatial;
Transform trans = getTransform(spatial, realRootNode);
shape.addChildShape(new HeightfieldCollisionShape(terrain.getHeightmap(), terrain.getLocalScale()),
trans.getTranslation(),
trans.getRotation().toRotationMatrix());
} }
} }
return shape; return shape;
@ -235,7 +255,7 @@ public class CollisionShapeFactory {
return null; return null;
} }
} }
/** /**
* This method moves each child shape of a compound shape by the given vector * This method moves each child shape of a compound shape by the given vector
* @param vector * @param vector

Loading…
Cancel
Save