//
//// Dynamic sketch - modularized.
//// Creature follows the mouse, while sun moves across the sky.

float sunX, sunY;        // Position of sun
float x, y;              // Position and speed of creature.
float dx, dy;


//// SETUP:  Define screen size, set modes.
void setup()
{
  size( 600, 400 );
  reset();
}
void reset() {
  sunX=  width/2;         // Start the sun half-way across the screen.
  sunY=  50;
  x=  width/2;            // Start creature in center.
  y=  height/2;
  dx=  random( 2,5 );     // Random speed.
  dy=  random( -2, +2 );
}


//// DRAW:  sky & sun plus creature
void draw()
{
  scene();
  action();
  show();
  messages();            // (Display the messages last.)
}


//// SCENE:  sky, sun, house.
void scene() {
  background( 150, 200, 250 );          // Blue sky
  fill( 255, 255, 0 );
  ellipse( sunX, sunY, 30, 30 );        // Yellow sun
  fill( 255, 0, 0 );
  rect( 100,100, 100,50 );              // Red house
  triangle( 100,100, 200,100, 150,50 );
}

//// MESSAGES.
void messages() {
  fill(0);
  text( "Dynamic sketch -- modularized.", width/3, 10 );
  text( "Creature follows the mouse, while sun moves across the sky.", width/3, 20 );
  text( "Click to reset creature.\n  Press 's' key to lower the sun, 'q' to quit.", 10, height/2 );
  // Also display the author and file name.
  text( "B.A.Martin / modular0.java", 10, height-10 );
}

//// ACTION:  sun moves (then resets to random height)
void action() {
  if (sunX > width) {
    sunX=  0;
    sunY=  random( 20, 120 );
  }
  sunX=  sunX + 1;
  // Move the creature.
  x=  x + dx;
  y=  y + dy;
}

//// SHOW:  creature follows mouse
void show() {
  // Draw creature.
  fill( 0, 0, 200 );
  rect( x,y, 50, 80 );                 // Blue creature
  ellipse( x+25, y-20, 40, 40 );       // Head on top
  // Eyes.
  fill( 255 );
  ellipse( x+15, y-25, 12, 12 );
  ellipse( x+35, y-25, 12, 12 );
  fill( 0, 150, 0 );
  ellipse( x+15, y-25, 4, 4 );
  ellipse( x+35, y-25, 4, 4 );
}


//// EVENT HANDLERS ////
void mousePressed() {
  reset();
  // Set the position (x,y)
  x=  mouseX;
  y=  mouseY;
}
void keyPressed() {
  if (key == 'q') {
    exit();
  }
  if (key == 'r') {
    reset();
  }
  if (key == 's') {
    sunY=  sunY + 50;
  }
}
//
//