Your browser does not support the canvas tag.

previous        Show / Hide Source        Download        next
//Firefly Pet by Connor Gilhuly


void setup() {
  size(400, 400);
  //Wait, there's a framerate function? 60FPS PLEASE!
  frameRate(60);
}

void draw() {
  background(0,-mouseY/2+170,-mouseY/2+250);
  
  //Tree
  noStroke();
  fill(-mouseY/2+200, -mouseY/2+100, 0);
  quad(70+(mouseX/20), mouseY/4+150, 90+(mouseX/20), mouseY/4+150, 85+(mouseX/20), mouseY/4+145, 75+(mouseX/20), mouseY/4+145);
  quad(85+(mouseX/20), mouseY/4+145, 75+(mouseX/20), mouseY/4+145, 70+(mouseX/20), mouseY/4+120, 80+(mouseX/20), mouseY/4+120);
  quad(80+(mouseX/20), mouseY/4+140, 95+(mouseX/20), mouseY/4+120, 90+(mouseX/20), mouseY/4+120, 75+(mouseX/20), mouseY/4+140);
  fill(0,-mouseY/2+200,0);
  ellipse(81+(mouseX/20), mouseY/4+113, 42, 25);
  
  //Ground/Horizen
  rect(0, mouseY/4+150, 400, 400);
  
  //Flowers (Because a barren grassy landscape decorated with only a single tree is boring.)
  fill(-mouseY/2+250,-mouseY/2+250,-mouseY/2+250);
  ellipse(58+(mouseX-200)/19, mouseY/4+167, 18, 10);
  ellipse(145+(mouseX-200)/19, mouseY/4+165, 18, 10);
  ellipse(20+(mouseX-200)/18, mouseY/4+175, 18, 10);
  ellipse(205+(mouseX-200)/18, mouseY/4+172, 18, 10);
  ellipse(245+(mouseX-200)/18, mouseY/4+175, 18, 10);
  ellipse(305+(mouseX-200)/18, mouseY/4+170, 18, 10);
  ellipse(375+(mouseX-200)/18, mouseY/4+170, 18, 10);
  ellipse(95+(mouseX-200)/17, mouseY/4+178, 18, 10);
  ellipse(50+(mouseX-200)/16, mouseY/4+195, 18, 10);
  ellipse(125+(mouseX-200)/16, mouseY/4+195, 18, 10);
  ellipse(160+(mouseX-200)/16, mouseY/4+190, 18, 10);
  ellipse(220+(mouseX-200)/16, mouseY/4+190, 18, 10);
  ellipse(270+(mouseX-200)/16, mouseY/4+195, 18, 10);
  ellipse(322+(mouseX-200)/16, mouseY/4+190, 18, 10);
  ellipse(380+(mouseX-200)/15, mouseY/4+200, 18, 10);
  fill(-mouseY/2+250,-mouseY/2+250,0);
  ellipse(58+(mouseX-200)/19, mouseY/4+167, 9, 5);
  ellipse(145+(mouseX-200)/19, mouseY/4+165, 9, 5);
  ellipse(20+(mouseX-200)/18, mouseY/4+175, 9, 5);
  ellipse(205+(mouseX-200)/18, mouseY/4+172, 9, 5);
  ellipse(245+(mouseX-200)/18, mouseY/4+175, 9, 5);
  ellipse(305+(mouseX-200)/18, mouseY/4+170, 9, 5);
  ellipse(375+(mouseX-200)/18, mouseY/4+170, 9, 5);
  ellipse(95+(mouseX-200)/17, mouseY/4+178, 9, 5);
  ellipse(50+(mouseX-200)/16, mouseY/4+195, 9, 5);
  ellipse(125+(mouseX-200)/16, mouseY/4+195, 9, 5);
  ellipse(160+(mouseX-200)/16, mouseY/4+190, 9, 5);
  ellipse(220+(mouseX-200)/16, mouseY/4+190, 9, 5);
  ellipse(270+(mouseX-200)/16, mouseY/4+195, 9, 5);
  ellipse(322+(mouseX-200)/16, mouseY/4+190, 9, 5);
  ellipse(380+(mouseX-200)/15, mouseY/4+200, 9, 5);
  
  //Glow (from Glowy Tail)
  fill(255,255,0, (mouseY/2+10));
  ellipseMode(CENTER);
  ellipse((200-mouseX)*1.1+200, (200-mouseY)*0.9+200, mouseY/2+10, mouseY/2+10);
  
  //Glowy tail
  fill(255,255,0);
  ellipse((200-mouseX)*1.1+200, (200-mouseY)*0.9+200, 40, 40);
  
  //Midsection
  fill(0,255,255);
  ellipse((200-mouseX)*1.05+200, (200-mouseY)*0.95+200, 40, 40);
  
  //Wings (These were REALLY annoying to figure out.)
  ellipseMode(CORNERS);
  fill(255,255,255,200);
  ellipse((200-mouseX)*1.05+200, (200-mouseY)*0.95+190, -(mouseY/8.0)/50.0*100+(200-mouseX)*1.1+190,  -100+(mouseY/8.0)/50.0*100+(200-mouseY)*0.95+180);
  ellipse((200-mouseX)*1.05+200, (200-mouseY)*0.95+190, (mouseY/8.0)/50.0*100+(200-mouseX)*1.1+210,  -100+(mouseY/8.0)/50.0*100+(200-mouseY)*0.95+180);
  
  //Antanae
  stroke(0);
  line(400-mouseX, 400-mouseY, 420-mouseX, 370-mouseY);
  line(420-mouseX, 370-mouseY, 425-mouseX, 380-mouseY);
  line(400-mouseX, 400-mouseY, 380-mouseX, 370-mouseY);
  line(380-mouseX, 370-mouseY, 375-mouseX, 380-mouseY);
  
  //Arms
  noFill();//otherwise, the curve function will act as if it's drawing part of an ellipse
  curve(370-mouseX, 400-mouseY, 415-mouseX, 410-mouseY, 410-mouseX, 440-mouseY, 370-mouseX, 430-mouseY);
  curve(430-mouseX, 400-mouseY, 385-mouseX, 410-mouseY, 390-mouseX, 440-mouseY, 430-mouseX, 430-mouseY);
  fill(0);
  ellipseMode(CENTER);
  ellipse(410-mouseX, 440-mouseY, 10, 10);
  ellipse(390-mouseX, 440-mouseY, 10, 10);
  
  //Head
  noStroke();
  fill(0, 255, 255);
  ellipse(400-mouseX, 400-mouseY, 40, 40);
  
  //Eyes
  fill(255, 255, 0);
  ellipse((mouseX-200)/20 + (407-mouseX), (mouseY-200)/20 + (400-mouseY), 7, 12);
  ellipse((mouseX-200)/20 + (393-mouseX), (mouseY-200)/20 + (400-mouseY), 7, 12);
}