float x = 100;
float y = 300;
int rgb1 = 102;
int rgb2 = 153;
int rgb3 = 204;
int randomSeedNumber = 10;
boolean night = false;
void setup(){
size(800, 800);
smooth();
}
void draw(){
//Center all ellipses
ellipseMode(CENTER);
//draw, rotate sun and moon
pushMatrix();
translate(400, 550);
rotate(radians(x/1.10));
//sky
noStroke();
fill(rgb1, rgb2, rgb3);
ellipse(0, 0, 2000, 2000);
//sun
fill(255, 215, 0);
ellipse(-470, 100, 100, 100);
//moon
fill(255);
ellipse(470, -100, 100, 100);
popMatrix();
//stars
if (night) {
fill(255);
randomSeed(randomSeedNumber);
for (int i = 0; i < 150; i++){
ellipse(random(0, 800), random(0, 700), 3, 3);
}
}
//ground
fill(105, 139, 34);
noStroke();
ellipse(400, 800, 800, 300);
ellipse(0, 800, 200, 200);
ellipse(800, 800, 200, 200);
drawTree();
drawMainBranch();
drawCenterpiece();
}
/*__________________Drawing______________________*/
//drawTree line 67
//drawHalfTrunk line 83
//drawCenterpiece line 119
//drawMainBranch line 130
//MainBranchCopy line 143
//positionBranches line 153
//drawBranches line 171
//drawSubBranch line 186
void drawTree(){
drawHalfTrunk();
positionBranches();
MainBranchCopy();
//mirror firstHalfOfTree
pushMatrix();
translate(400, 400);
scale(-1, 1);
translate(-400, -400);
drawHalfTrunk();
positionBranches();
MainBranchCopy();
popMatrix();
}
void drawHalfTrunk(){
noStroke();
fill(139, 115, 85);
//trunkPiece a
beginShape();
vertex(300, 700);
bezierVertex(380, 690, 370, 550, 370, 400); //300, 700 - 370, 400
bezierVertex(370, 340, 330, 300, 240, 280); //370, 400 - 300, 350
bezierVertex(360, 300, 400, 350, 400, 400); //300, 350 - 400, 400
bezierVertex(400, 650, 390, 690, 300, 700); //400, 400 - 300, 700
endShape();
//trunkPiece b
pushMatrix();
translate(355, 300);
rotate(radians(-15));
translate(-355, -300);
beginShape();
vertex(360, 335);
bezierVertex(280, 280, 390, 260, 370, 200); //360, 335 - 370, 250
bezierVertex(390, 260, 300, 280, 360, 335); //350, 250 - 360, 355
endShape();
popMatrix();
//trunkPiece c
beginShape();
vertex(400, 720);
bezierVertex(350, 650, 380, 600, 380, 550); //400, 720 - 380, 550
bezierVertex(390, 300, 390, 250, 300, 205); //380, 550 - 280, 220
bezierVertex(320, 210, 380, 250, 390, 300); //280, 220 - 380, 300
bezierVertex(400, 350, 400, 400, 400, 720); //380, 300 - 400, 720
endShape();
}
//draw topmost branch (not to be mirrored)
void drawCenterpiece(){
noStroke();
fill(139, 115, 85);
beginShape();
vertex(380, 400);
bezierVertex(380, 350, 420, 250, 410, 180);
bezierVertex(430, 250, 380, 350, 425, 700);
endShape();
}
void drawMainBranch(){
noFill();
stroke(139, 115, 85);
beginShape();
vertex(410, 180);
bezierVertex(410, 120, 450, 90, 450, 50);
bezierVertex(450, 40, 440, 15, 425, 15);
bezierVertex(400, 15, 395, 40, 395, 50);
bezierVertex(395, 70, 410, 80, 420, 80);
bezierVertex(435, 80, 445, 65, 430, 50);
endShape();
}
void MainBranchCopy(){
pushMatrix();
translate(425, 155);
scale(-1, 1);
rotate(radians(45));
translate(-300, -175); //-increase moves right, -increase moves up
drawMainBranch();
popMatrix();
}
void positionBranches(){
//position branches
pushMatrix();
translate(425, 417);
rotate(radians(-90));
translate(-275, -350);
drawBranches();
popMatrix();
pushMatrix();
translate(425, 417);
rotate(radians(-20));
scale(0.6, 0.97);
translate(-410, -400);
drawBranches();
popMatrix();
}
void drawBranches(){
drawMainBranch();
drawSubBranch();
//mirror subBranch
pushMatrix();
translate(490, 165);
scale(-1, 1);
rotate(radians(-30));
translate(-343, -120);
drawSubBranch();
popMatrix();
}
void drawSubBranch(){
noFill();
stroke(139, 115, 85);
beginShape();
vertex(417, 140);
bezierVertex(425, 120, 440, 110, 460, 110);
bezierVertex(480, 110, 490, 120, 490, 140);
bezierVertex(490, 160, 475, 165, 460, 165);
bezierVertex(440, 160, 450, 140, 460, 140);
endShape();
}
/*__________________Mouse Events______________________*/
void mouseDragged(){
x = mouseX;
y = mouseY;
if ((x > 199 && x < 401) || (x > 599 && x < 801)){
rgb1 = 47;
rgb2 = 48;
rgb3 = 79;
night = true;
} else if ((x > -1 && x < 200) || (x > 400 && x < 600)){
rgb1 = 102;
rgb2 = 153;
rgb3 = 204;
night = false;
}
}