> show canvas only <


/* built with Studio Sketchpad: 
 *   http://sketchpad.cc
 * 
 * observe the evolution of this sketch: 
 *   http://studio.sketchpad.cc/sp/pad/view/ro.T7mYPSj8CGx/rev.6
 * 
 * authors: 
 *   GoToLoop

 * license (unless otherwise specified): 
 *   creative commons attribution-share alike 3.0 license.
 *   http://creativecommons.org/licenses/by-sa/3.0/ 
 */ 



/**
 * Talking Faces (v2.0)
 * by  Casselli
 * mod GoToLoop (2015/Feb/07)
 *
 * forum.processing.org/two/discussion/9323/
 * creating-a-extra-function-in-order-to-create-
 * multiple-instances-of-the-same-group-of-primitives
 *
 * studio.processingtogether.com/sp/pad/export/ro.9G5yFfYFFDXi1/latest
 */

static final color BG = #403090;
static final short FACES = 4, SMOOTH = 4, FPS = 12;
final Face[] faces = new Face[FACES];

void setup() {
  size(600, 600, JAVA2D);
  smooth(SMOOTH);
  frameRate(FPS);

  ellipseMode(Face.MODE);
  rectMode(Face.MODE);

  stroke(Face.STROKE);
  strokeWeight(Face.WEIGHT);

  faces[0] = new Face(width>>2, height>>2, width/3, height/2.5);
  faces[1] = new Face(3*width>>2, height>>2, width/3/1.2, height/2.5/1.2);
  faces[2] = new Face(width>>2, 3*height>>2, width/3/2, height/2.5/2);
  faces[3] = new Face(3*width>>2, 3*height>>2, width/3*1.2, height/2.5*1.2);
}

void draw() {
  background(BG);
  for (Face f : faces)  f.display();
}

final class Face {
  static final short MODE = CENTER;
  static final float WEIGHT = 1.5;
  static final color STROKE = 0;

  static final color FACE = #FFFF00, NOSE = #FF0000;
  static final color EYES = 0, MOUTH = #FF00FF;

  final short x, y, w, h;
  final float m;

  Face(float xx, float yy, float ww, float hh) {
    x = (short) xx;
    y = (short) yy;
    w = (short) ww;
    h = (short) hh;
    m = (ww+hh)/2.0;
  }

  void display() {
    fill(FACE);
    ellipse(x, y, w, h);

    fill(NOSE);
    ellipse(x, y, w/6, h>>2);

    fill(EYES);
    ellipse(x - w/6.5, y - (h>>3), m/9.65, m/9.65);
    ellipse(x + w/6.5, y - (h>>3), m/9.65, m/9.65);

    fill(MOUTH);
    rect(x, y + h/3.2, w/2.6, random(h>>4));
  }
}