let metadata={"Collection":"Merkle Tree's","Version":"420.69","Author":"@DogeOfDogeSt"};
let sizew = window.innerWidth;
let sizeh = window.innerHeight;
let numdays = (Date.now()/1000 - minttime)/550;
var grass = [];
var grassColour;
var grassLength = (numdays/2000 <=15) ? (numdays/2000) :15
if(grassLength < 1){
grassLength=1;
}
let daycount = 0;
let palettes = [
["rgb(139, 191, 0)","rgb(168, 227, 20)","rgb(168, 227, 20)","rgb(51, 66, 12)"],
["rgb(245,185,224)","rgb(226,129,207)","rgb(226,129,207)","rgb(78,17,53)"],
["rgb(161,122,65)","rgb(231,216,211)","rgb(138,91,35)","rgb(68,29,15)"],
["rgb(242,239,222)","rgb(126,137,61)","rgb(56,72,25)","rgb(65,59,47)"],
["rgb(139, 191, 0)","rgb(168, 227, 20)","rgb(168, 227, 20)","rgb(51, 66, 12)"],
["#6FA09B","rgb(29,204,144)","rgb(36,68,49)","rgb(5,40,28)"]]
let trunks = ["rgb(20,20,20)","rgb(40,40,40)","rgb(50,40,40)","rgb(114,114,114)","rgb(37,20,12)"];
let grasses = ["rgb(24,54,23)","rgb(37,90,25)","rgb(93,75,54)","rgb(40,65,4)"];
function setup() {
createCanvas(sizew, sizeh);
randomSeed(mintseed);
angleMode(RADIANS)
grassColour = color(grasses[grassChoice])
for (var i = 0; i <= 20; i+=1) {
grass.push(new Grass(createVector(width/2, height)));
}
}
function draw() {
let angleChoice = angle1;
background(10, 10, 10);
let startPoint = [sizew / 2, sizeh];
let length = randomBetween(70, 120);
let weight = randomBetween(15, 45);
let branchAngle = PI / angleChoice;
let parentCount = 0;
let rootBranch = new Branch(startPoint, weight, length, branchAngle, parentCount);
strokeWeight(weight);
stroke(30);
branch(rootBranch);
noLoop();
stroke(grassColour, random(50, 200))
for (var i = 0; i < grass.length; i++) {
var g = grass[i];
g.draw();
}
}
function branch(currentBranch) {
let { startPoint, weight, length, angle, parentCount } = currentBranch;
let x1 = startPoint[0] + length * cos(angle);
let y1 = startPoint[1] - length * sin(angle);
let endpoint = [x1, y1];
strokeWeight(weight);
if(parentCount > 16) {
stroke(palettes[paletteChoice][0]);
}
else if (parentCount > 13) {
stroke(palettes[paletteChoice][1]);
}
else if (parentCount > 12) {
stroke(palettes[paletteChoice][2]);
}
else if(parentCount > 7){
stroke(palettes[paletteChoice][3]);
}
else{
stroke(trunks[trunkChoice]);
}
line(startPoint[0], startPoint[1], endpoint[0], endpoint[1]);
let angleMax = angle + (PI / 4);
let angleMin = angle - PI / 4;
let angleDiff = randomBetween(0, angleMax - angleMin - (PI / 16));
let angle1 = angleMax - angleDiff / 2;
let angle2 = angleMin + angleDiff / 2;
let newWeight = randomBetween(weight * 0.5, weight * 0.8);
let newLength = randomBetween(length * 0.7, length * .9);
if (newLength < 3) {
return;
}
if (daycount >= numdays) {
return;
}
daycount++;
let branchChoice = randomBetween(1,4);
if(branchChoice > 2){
let angle2Branch = new Branch(endpoint, newWeight, newLength, angle2, parentCount + 1);
let angle1Branch = new Branch(endpoint, newWeight, newLength, angle1, parentCount + 1);
branch(angle1Branch);
branch(angle2Branch);
}else{
let angle2Branch = new Branch(endpoint, newWeight, newLength, angle1, parentCount + 1);
let angle1Branch = new Branch(endpoint, newWeight, newLength, angle2, parentCount + 1);
branch(angle1Branch);
branch(angle2Branch);
}
}
class Branch {
constructor(startPoint, weight, length, angle, parentCount) {
this.startPoint = startPoint;
this.weight = weight;
this.length = length;
this.angle = angle;
this.parentCount = parentCount;
}
}
function randomBetween(low, high) {
return random(high - low) + low;
}
function Grass(loc) {
this. blades = [ ];
this.am =int(random(1, 5));
this.loc = loc;
this.loc.x = this.loc.x + random(-30, 30)
for (var i = 0; i < this.am; i++) {
this.blades.push(new Blade(random(1, grassLength)));
}
Grass.prototype.draw = function() {
for (var i = 0; i < this.blades.length; i++) {
var blade = this.blades[i];
push();
translate(this.loc.x, this.loc.y);
rotate(radians(blade.angle));
blade.branch(blade.segments);
pop();
}
}
}
function Blade(segments) {
var num = 0;
this.segments = segments;
this.angle = random(-10, 10);
this.branch = function(len) {
var len = len *0.79;
strokeWeight(1);
line(0, 0, 0, -len);
push();
translate(0, -len);
if (len > 5) {
rotate(radians(this.angle + sin(len+num) ));
this.branch(len)
}
pop();
}
}