package p5;
import anar.*;



import processing.core.PApplet;
import rad.*;

/**
 * 
 * @author lluj!
 *
 */
public class Ex00square extends PApplet implements RadObserver {
	

	RadEngine engine;
	
	Obj obj;

	
    //#  red  green  blue  specularity  roughness  #
	final double[] matParam = {  0.3f,  0.3f,  0.5f,  0.01f,  0.01f };
	  	
	final float subdivMax = 1000f;
	
	public void setup() {		
		//size(screen.width,screen.height, P3D);
		size(1000,500, OPENGL);
				
		Anar.chitecture(this);
		Anar.drawAxis();
				
		obj = new Obj();
		
		// first square

		Face square1 = new Face();
		
		Param cote = new Param(100,1,200);
		Anar.sliders.add(cote);
		
		Param mCote = new ParamMul(cote,-1);
		
		TranslateX coteX = new TranslateX(cote); 
		TranslateY coteY = new TranslateY(cote); 
		TranslateX mCoteX = new TranslateX(mCote); 
		TranslateY mCoteY = new TranslateY(mCote); 
		Pt origin = Anar.Pt(0,0);
		square1.add(Anar.Pt(origin,coteX));
		square1.add(Anar.Pt(origin,coteY));
		square1.add(Anar.Pt(origin,mCoteX));
		square1.add(Anar.Pt(origin,mCoteY));
		
		obj.add(square1);
		
		// second square
		
		Param angle = new Param(PI/2,0,PI);
		Anar.sliders.add(angle);

		Face square2 = new Face(square1);
		square2.rotateX(angle);

		obj.add(square2);
		
		Param rotation = new Param(0,0,2*PI);
		Anar.sliders.add(rotation);
		
		RotateZ t = new RotateZ(rotation);
		obj.apply(t);
		
		Anar.add(obj);
		
		
		// initialise the simulation thread
		engine = new RadEngine(this, subdivMax);
		RadEngine.debug = true;

		engine.objToMeasure.add(obj);
		engine.scene.add(obj);
//		RadEngine.measureBack = true;
		
		// start the simulation 
		// this only launches the thread, 
		// simulation steps will be actually done using runNow() method
		engine.start();		

		
	}
	
	@Override
	public synchronized void radSimDone() {
		println("back in applet");
		
	}  

	public void keyPressed() {
    	if (key == 'q') engine.runNow();
    	if (key == ' ') saveFrame("screen.jpg");
    }
	
	
	public synchronized void draw() {
		
		background(255);
		Anar.draw();
					  					
	}

	
}

