/****************************************************************************
 * Author:	Ezra Velazquez
 * Date:	2/19/11
 * Prof: 	Parker
 * Week:	3
 * Title:	SpeedTouch
 * Notes:	Collision detection provided by Casey Reas
 * 			Open Processing Collision Examples
 * 			(http://www.openprocessing.org/visuals/?visualID=8004)
 * New:		Imported into Eclipse
 */

package speedtouch;

import processing.core.PApplet;


public class SpeedTouch extends PApplet {

	private Rects[] rectangles = new Rects[5];
	private float circleX, circleY;
	private float circleRadius;
	private float time;
	private int counter;
	
	public void setup() {
		size(800,600);
		smooth();
		ellipseMode(RADIUS);
		
		circleRadius = 30;
		time = 0;
		counter = 0;
		
		// Create the rectangles
		for(int x = 0; x < 5; x++) {
			rectangles[x] = new Rects(this, 50, 50, x);
			
		}
		
		
	}

	public void draw() {
		background(255, 137, 57);
		
		// Keep counting until all rectangles have been marked
		if(counter != 5)
		{
			time = millis();
		}
		
		// Display timer
		timer();
		
		//Assign mouse values to the circle
		circleX = mouseY;
		circleY = mouseX;
		
		// Check for proper tagging route
		for(int x = 0; x < 5; x++) {
			// Rectangle hasn't been tagged yet
			if(rectangles[x].getTag() == false && counter == x) {
				// Circle tags rectangle, mark rectangle
			      if (rectCircleIntersect((float)rectangles[x].getX(), (float)rectangles[x].getY(), rectangles[x].getWidth(), rectangles[x].getHeight(), circleX, circleY, circleRadius) == true)
			      {
			    	  rectangles[x].setColor(232, 95, 77);
			    	  counter++;
			    	  rectangles[x].setTag(true);
			      }
			      else {
			    	  rectangles[x].setColor(255, 192, 81);
			      }
			}
			
			rectangles[x].display();
			
			// Display circle
			fill(181, 40, 65);
			ellipse(circleX, circleY, circleRadius, circleRadius);
		}
		
	}
	
	public void timer() {
		fill(89, 0, 81);
		textSize(24);
		textAlign(LEFT);
		text("SpeedTouch", 20, 40);
		textSize(14);
		text("Milliseconds: " + (int) time, 20, 60);
	}
	
	// Checks for collision
	boolean rectCircleIntersect(float rx, float ry, float rw, float rh, float cx, float cy, float cr)
	{
	  float circleDistanceX = abs(cx - rx - rw/2);
	  float circleDistanceY = abs(cy - ry - rh/2);
	  
	  if (circleDistanceX > (rw/2 + cr))
	  {
	    return false;
	  }
	  if (circleDistanceY > (rh/2 + cr))
	  {
	    return false;
	  }
	  if (circleDistanceX <= rw/2)
	  {
	    return true;
	  }
	  if (circleDistanceY <= rh/2)
	  {
	    return true;
	  }
	  
	  float cornerDistance = pow(circleDistanceX - rw/2, 2) + pow(circleDistanceY - rh/2, 2);
	  return cornerDistance <= pow(cr, 2);
	}
	
	public static void main(String _args[]) {
		PApplet.main(new String[] { speedtouch.SpeedTouch.class.getName() });
	}
}
