jungle static method
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);
}
}
}
}