Beispiel #1
0
  private void initBlockTerrain() {
    CubesTestAssets.registerBlocks();
    CubesTestAssets.initializeEnvironment(this);

    cubesSettings = CubesTestAssets.getSettings(this);
    blockTerrain = new BlockTerrainControl(cubesSettings, new Vector3Int(7, 1, 7));
    blockTerrain.setBlocksFromNoise(
        new Vector3Int(), terrainSize, 0.8f, CubesTestAssets.BLOCK_GRASS);
    blockTerrain.addChunkListener(
        new BlockChunkListener() {

          @Override
          public void onSpatialUpdated(BlockChunkControl blockChunk) {
            Geometry optimizedGeometry = blockChunk.getOptimizedGeometry_Opaque();
            RigidBodyControl rigidBodyControl =
                optimizedGeometry.getControl(RigidBodyControl.class);
            if (rigidBodyControl == null) {
              rigidBodyControl = new RigidBodyControl(0);
              optimizedGeometry.addControl(rigidBodyControl);
              bulletAppState.getPhysicsSpace().add(rigidBodyControl);
            }
            rigidBodyControl.setCollisionShape(new MeshCollisionShape(optimizedGeometry.getMesh()));
          }
        });
    terrainNode.addControl(blockTerrain);
    terrainNode.setShadowMode(RenderQueue.ShadowMode.CastAndReceive);
    rootNode.attachChild(terrainNode);
  }