jungle static method

void jungle(
  1. TreeCanvas c,
  2. int x,
  3. int y,
  4. int z,
  5. int trunk,
  6. int hsh,
  7. TreeBlocks b,
)

The jungle giant: a 2 x 2 trunk, a crown at the top, a second halfway up, and vines falling from both rims.

Implementation

static void jungle(TreeCanvas c, int x, int y, int z, int trunk, int hsh, TreeBlocks b) {
  final top = y + trunk;
  crown(c, x, top, z, 4, b.leaves);
  crown(c, x + 1, top - 6, z + 1, 3, b.leaves);
  for (var i = 0; i < 2; i++) {
    final dir = compass[((hsh >> (5 + i * 4)) + i * 4) % 8];
    final bx = x + (dir.$1 > 0 ? 1 : 0), bz = z + (dir.$2 > 0 ? 1 : 0);
    limb(c, bx, top - 7, bz, dir.$1, dir.$2, 2, b.log, b.leaves);
  }
  vineFall(c, x, top - 2, z, 4, hsh, b.vines);
  vineFall(c, x + 1, top - 7, z + 1, 3, hsh ^ 0x5f5f, b.vines);
  for (var i = 0; i <= trunk; i++) {
    for (var dz = 0; dz <= 1; dz++) {
      for (var dx = 0; dx <= 1; dx++) {
        c.ink(x + dx, y + i, z + dz, b.log);
      }
    }
  }
}