Created
December 4, 2014 11:00
-
-
Save Adrianl3d/f3607571c92642b9ae69 to your computer and use it in GitHub Desktop.
18 Meter high Voxel xmas tree
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// xmasTree.js | |
// Creates a single tree of 1 meter voxels to about 18 meters high with various shades of green leaves and assorted red and yellow baubles | |
// Created by Adrian on 3 December 2014 | |
// Copyright 2014 Adrian McCarlie | |
// Released under Creative Commons By Attribution Share Alike, feel free to modify and share. | |
// | |
// | |
// Change these 3 values to suit the planting site of the tree. | |
// | |
var X_POS = 8060; | |
var Y_POS = 202; | |
var Z_POS = 8170; | |
//Change the height variable here to change the height of the trunk from the ground to the bottom of the leaves. | |
//This does not change the size of the leaves. | |
var height = 4; | |
// | |
// To remove tree scroll to bottom of script and comment out rezTree() and uncomment removeTree() | |
// as required by moving the double slash | |
//Example to build rezTree(); //removeTree(); | |
//Example to remove //rezTree(); removeTree(); | |
///////////////////End of User Variables | |
// | |
var x = X_POS - 5; | |
var y = Y_POS + height; | |
var z = Z_POS; | |
var l = 0; | |
var maxl = 2; | |
var h = 0; | |
var head = 25; | |
var w = 0; | |
var maxw = 12; | |
var leaves = 0; | |
var width = 3; | |
var start = 0; | |
var green = 0; | |
var red = 40; | |
var blue = 40; | |
function rezTree() { | |
var q = -1; | |
width = 1; | |
while (h < head){ | |
while (width < maxw){ | |
while (leaves < width) { | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; | |
green = 255; | |
} | |
else if (green < 140) { | |
red = 255; green = 0; blue = 0; | |
} | |
Voxels.setVoxel(x, y+h, z+start, 1, red, green, blue); //rows getting bigger | |
red = 40; | |
blue = 40; | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; green = 255; | |
} | |
else if (green < 140) { | |
red = 255; green = 0; blue = 0; | |
} | |
Voxels.setVoxel(x, y+h+1, z+start, 1, red, green, blue); //rows getting bigger | |
red = 40; | |
blue = 40; | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; | |
green = 255; | |
} | |
else if (green < 140) { | |
red = 255; | |
green = 0; | |
blue = 0; | |
} | |
Voxels.setVoxel(x, y+h+2, z+start, 1, red, green, blue); | |
z++; | |
leaves++; //rows getting bigger | |
green = 0; red = 40; blue = 40; | |
} | |
x++; | |
leaves = 0; | |
width = width + 2; | |
z = Z_POS; | |
start=start-1; | |
} | |
width = width - 4; | |
start = start + 2; | |
while (width >= 0) | |
{ | |
while (leaves < width) | |
{ | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; | |
green = 255; | |
} | |
else if (green < 140) { | |
red = 255; | |
green = 0; | |
blue = 0; | |
} | |
Voxels.setVoxel(x, y+h, z+start, 1, red, green, blue); //rows getting smaller | |
green = 0; red = 40; blue = 40; | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; | |
green = 255; | |
} | |
else if (green < 140) { | |
red = 255; | |
green = 0; | |
blue = 0; | |
} | |
Voxels.setVoxel(x, y + h + 1, z + start, 1, red, green, blue); //rows getting smaller | |
red = 40; | |
blue = 40; | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; | |
green = 255; | |
} | |
else if (green < 140) { | |
red = 255; | |
green = 0; | |
blue = 0; | |
} | |
Voxels.setVoxel(x, y + h + 2, z + start, 1, red, green, blue); | |
z++; | |
leaves++; //rows getting smaller | |
green = 0; | |
red = 40; | |
blue = 40; | |
} | |
x++; | |
leaves = 0; | |
width = width - 2; | |
z = Z_POS; | |
start=start+1 ; | |
} | |
h = h + 3; | |
maxw = maxw - 2; | |
q++; | |
x = X_POS - 5 + q; | |
} | |
x= X_POS; | |
y = Y_POS; | |
z= Z_POS; | |
while (y < Y_POS + height) { //build a post 2 high | |
Voxels.setVoxel(x, y, z, 1, 100, 80, 10); | |
y++; | |
} | |
Voxels.setVoxel(x - 1, y - 1, z - 1, 1, 100, 80, 10); //4 single brown voxels to branch the trunk nicely into the foliage | |
Voxels.setVoxel(x - 1, y - 1, z + 1, 1, 100, 80, 10); | |
Voxels.setVoxel(x + 1, y - 1, z + 1, 1, 100, 80, 10); | |
Voxels.setVoxel(x + 1, y - 1, z - 1, 1, 100, 80, 10); | |
Script.stop(); | |
} | |
/////////////////////// | |
// The following is the code for removing the tree, | |
function removeTree() { | |
var q = -1; | |
width = 1; | |
while (h < head){ | |
while (width < maxw){ | |
while (leaves < width) { | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; | |
green = 255; | |
} | |
else if (green < 140) { | |
red = 255; green = 0; blue = 0; | |
} | |
Voxels.eraseVoxel(x, y+h, z+start, 1, red, green, blue); //rows getting bigger | |
red = 40; | |
blue = 40; | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; green = 255; | |
} | |
else if (green < 140) { | |
red = 255; green = 0; blue = 0; | |
} | |
Voxels.eraseVoxel(x, y+h+1, z+start, 1, red, green, blue); //rows getting bigger | |
red = 40; | |
blue = 40; | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; | |
green = 255; | |
} | |
else if (green < 140) { | |
red = 255; | |
green = 0; | |
blue = 0; | |
} | |
Voxels.eraseVoxel(x, y+h+2, z+start, 1, red, green, blue); | |
z++; | |
leaves++; //rows getting bigger | |
green = 0; red = 40; blue = 40; | |
} | |
x++; | |
leaves = 0; | |
width = width + 2; | |
z = Z_POS; | |
start=start-1; | |
} | |
width = width - 4; | |
start = start + 2; | |
while (width >= 0) | |
{ | |
while (leaves < width) | |
{ | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; | |
green = 255; | |
} | |
else if (green < 140) { | |
red = 255; | |
green = 0; | |
blue = 0; | |
} | |
Voxels.eraseVoxel(x, y+h, z+start, 1, red, green, blue); //rows getting smaller | |
green = 0; red = 40; blue = 40; | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; | |
green = 255; | |
} | |
else if (green < 140) { | |
red = 255; | |
green = 0; | |
blue = 0; | |
} | |
Voxels.eraseVoxel(x, y + h + 1, z + start, 1, red, green, blue); //rows getting smaller | |
red = 40; | |
blue = 40; | |
green = Math.floor((Math.random() * 130) + 100); | |
if (green < 110) { | |
red = 255; | |
green = 255; | |
} | |
else if (green < 140) { | |
red = 255; | |
green = 0; | |
blue = 0; | |
} | |
Voxels.eraseVoxel(x, y + h + 2, z + start, 1, red, green, blue); | |
z++; | |
leaves++; //rows getting smaller | |
green = 0; | |
red = 40; | |
blue = 40; | |
} | |
x++; | |
leaves = 0; | |
width = width - 2; | |
z = Z_POS; | |
start=start+1 ; | |
} | |
h = h + 3; | |
maxw = maxw - 2; | |
q++; | |
x = X_POS - 5 + q; | |
} | |
x= X_POS; | |
y = Y_POS; | |
z= Z_POS; | |
while (y < Y_POS + height) { //build a post 2 high | |
Voxels.eraseVoxel(x, y, z, 1, 100, 80, 10); | |
y++; | |
} | |
Voxels.eraseVoxel(x - 1, y - 1, z - 1, 1, 100, 80, 10); //4 single brown voxels to branch the trunk nicely into the foliage | |
Voxels.eraseVoxel(x - 1, y - 1, z + 1, 1, 100, 80, 10); | |
Voxels.eraseVoxel(x + 1, y - 1, z + 1, 1, 100, 80, 10); | |
Voxels.eraseVoxel(x + 1, y - 1, z - 1, 1, 100, 80, 10); | |
Script.stop(); | |
} | |
// Uncomment one of the following as required | |
rezTree(); | |
// removeTree(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment