Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
/*
COLOUR HORIZON
 BY ADAM BRAITHWAITE
 SEPTEMBER 16, 2018
 
 PROGRAM CREATES A LANDSCAPE THAT CHANGES DEPENDING ON THE MOUSE POSITION INSIDE THE WINDOW
 OBJECTS CHANGE COLOUR AND SHAPE DEPENDING ON MOUSE X AND Y
 WHEN NIGHT COMES, THE COLOURS COME ALIVE
 */

void setup()
{
  //set window size
  size(400, 400);
  //set framerate
  frameRate(60);
  //no need to draw anything with a stroke
  noStroke();
}

void draw()
{
  //this determines the sky's colour
  background(mouseX*(400/255), 150, 255-mouseX*(400/255));

  //draw sun outer
  fill(200+mouseX*55/400, 255-mouseX*55/400, 50-mouseX*50/400);
  ellipse(mouseX-50, (float)1/600*mouseX*mouseX+60, 40+mouseX/2, 40+mouseX/2);
  
  //draw inner sun
  fill(200+mouseX*55/400+50, 255-mouseX*255/400+50, 50-mouseX*50/400+50);
  ellipse(mouseX-50, (float)1/600*mouseX*mouseX+60, 30+mouseX/2.3, 30+mouseX/2.3);
  
  //draw cloud
  //cloud positioned in relation to mouseY
  fill(240-mouseX*240/400, 240-mouseX*240/400, 240-mouseX*240/400);
  ellipse(280+mouseY*1.5-400, 80, 40+5*cos(frameCount*0.05), 40+5*sin(frameCount*0.05));
  ellipse(330+mouseY*1.5-400, 70, 60+5*cos(frameCount*0.025), 60+5*sin(frameCount*0.05));
  fill(255-mouseX*240/400, 255-mouseX*240/400, 255-mouseX*240/400);
  ellipse(300+mouseY*1.5-400, 80, 40+5*sin(frameCount*0.05), 40+5*sin(frameCount*0.05));
  ellipse(320+mouseY*1.5-400, 100, 40+5*cos(frameCount*0.025), 40+5*sin(frameCount*0.05));
  ellipse(360+mouseY*1.5-400, 60, 40+5*sin(frameCount*0.05), 40+5*sin(frameCount*0.05));

  //draw hills
  fill(20-mouseX*20/400, 115-mouseX*115/400, 0);
  ellipse(-15, 200, 150, 50);
  ellipse(120, 200, 50, 50);
  fill(50+mouseX*205/400, 155+mouseX*100/400, 10+mouseX*245/400);
  ellipse(70, 210, 100, 80);

  //draw horizon
  fill(150-mouseX*100/400, 100-mouseX*50/400, mouseX*80/400);
  rect(0, 200, 400, 200);

  //draw river
  fill(50, 100, 150-(mouseX*105/400));
  quad(300, 200, 360, 200, 320, 400, 120, 400);

  //draw shimmers in river
  stroke(50*sin(frameCount*0.05)+200, 50*sin(frameCount*0.05)+200, 50*sin(frameCount*0.05)+200);
  line(300, 300, 275, 380);
  line(260, 300, 220, 360);
  line(320, 200, 280, 260);
  stroke(50*sin(frameCount*0.05+PI)+200, 50*sin(frameCount*0.05+PI)+200, 50*sin(frameCount*0.05+PI)+200);
  line(270, 250, 230, 300);
  line(330, 280, 320, 310);

  noStroke();

  //BAMBOO GREEN (relative (-30, -50) to original)
  //draw bamboo static shadow
  fill(30, 30+mouseX*100/400, 30, 150);
  ellipse(58-30, 300-50, 30, 10);

  //draw trailing bamboo shadow
  fill(30, 30, 30, 150-mouseX*150/400);
  quad(55-30, 300-50, 61-30, 300-50, 150-mouseX+6-30, 400-50, 150-mouseX-30, 400-50);

  //draw bamboo main shape
  fill(150-mouseX*150/400, 200-mouseX*200/400, 0);
  //main stalk is drawn as a quad so that it may sway
  quad(55+mouseY/100*cos(frameCount*mouseY/4000)-30, 300-mouseY/2-10-50, 55-30, 300-50, 61-30, 300-50, 61+mouseY/100*cos(frameCount*mouseY/4000)-30, 300-mouseY/2-10-50);
  ellipse(58, 300, 6, 4);//ellipse to round base of stalk
  fill(170+mouseX*85/400, 220+mouseX*35/400, mouseX*255/400);
  ellipse(58+mouseY/100*cos(frameCount*mouseY/4000)-30, 300-mouseY/2-10-50, 6, 4);//ellipse to round top of stalk

  //BAMBOO BLUE (relative (30, -20) to original)
  //draw bamboo static shadow
  fill(30, 30, 30+mouseX*100/400, 150);
  ellipse(58+30, 300-20, 30, 10);

  //draw trailing bamboo shadow
  fill(30, 30, 30, 150-mouseX*150/400);
  quad(55+30, 300-20, 61+30, 300-20, 150-mouseX+6+30, 400-20, 150-mouseX+30, 400-20);

  //draw bamboo main shape
  fill(150-mouseX*150/400, 200-mouseX*200/400, 0);
  //main stalk is drawn as a quad so that it may sway
  quad(55+mouseY/100*sin(frameCount*mouseY/4000)+30, 300-mouseY/2-10-20, 55+30, 300-20, 61+30, 300-20, 61+mouseY/100*sin(frameCount*mouseY/4000)+30, 300-mouseY/2-10-20);
  ellipse(58, 300, 6, 4);//ellipse to round base of stalk
  fill(170+mouseX*85/400, 220+mouseX*35/400, mouseX*255/400);
  ellipse(58+mouseY/100*sin(frameCount*mouseY/4000)+30, 300-mouseY/2-10-20, 6, 4);//ellipse to round top of stalk

  //BAMBOO RED

  //draw bamboo static shadow
  fill(30+mouseX*100/400, 30, 30);
  ellipse(58, 300, 30, 10);

  //draw trailing bamboo shadow
  fill(30, 30, 30, 150-mouseX*150/400);
  quad(55, 300, 61, 300, 150-mouseX+6, 400, 150-mouseX, 400);

  //draw bamboo main shape
  fill(150-mouseX*150/400, 200-mouseX*200/400, 0);
  //main stalk is drawn as a quad so that it may sway
  quad(55+mouseY/100*sin(frameCount*mouseY/4000), 300-mouseY/2-10, 55, 300, 61, 300, 61+mouseY/100*sin(frameCount*mouseY/4000), 300-mouseY/2-10);
  ellipse(58, 300, 6, 4);//ellipse to round base of stalk
  fill(170+mouseX*85/400, 220+mouseX*35/400, mouseX*255/400);
  ellipse(58+mouseY/100*sin(frameCount*mouseY/4000), 300-mouseY/2-10, 6, 4);//ellipse to round top of stalk

  //output current mouseX for debug
  //println(mouseX*255/400);
}