package p5;
import anar.*;




import processing.core.PApplet;

public class Test03mStarGrid extends PApplet {

  /*
   * Example for Anar library by Guillaume LaBelle + Julien Nembrini
   * http://anar.ch
   */


  Obj myObj = new Obj();


  public void setup(){
    size(800,400,OPENGL);
    frameRate(200);

    // this.hint(ENABLE_OPENGL_2X_SMOOTH);

    Anar.init(this);
    Anar.drawAxis(true);

    initForm();
  }


  void initForm(){

    myObj = new Obj();

    int nGridX = 6;
    int nGridY = 6;

    Param h = new Param(30,0,300);
    Param r = new Param(1, -PI*4,PI*4);
    Param L = new Param(50,0,100);
    Param s = new Param(20,0,100);

    Anar.slidersReset();
    Anar.sliders(h);
    Anar.sliders(r);
    Anar.sliders(L);
    Anar.sliders(s);

    for (int i = 0; i<nGridX; i++)
      for (int j = 0; j<nGridY; j++){
        Param x = s.multiply(nGridX* (i-nGridX/2f));
        Param y = s.multiply(nGridY* (j-nGridY/2f));

        Obj tmpModule = createModule(x,y,h,random(90)+10,L,(int)random(10)+3,r);

        myObj.add(tmpModule);
      }

    myObj.fill(255,100);
  }


  Obj createModule(Param x, Param y, Param h, float lengthA, Param lenghtB, int numOfSides, Param rotation){
    Obj myModule = new Obj();

    Face star = new Star(new Param(lengthA),lenghtB,new Param(numOfSides));
    star.translate(x,y);

    Obj pyr = new Pyramid(star,h);
    myModule.add(pyr);

    Transform allign = new Transform(star.pt((int)random(star.numOfPts())),star.pt((int)random(star.numOfPts())));
    allign.rotateZ(rotation);

    Face starRefelx = new Face(star,allign);

    myModule.add(starRefelx);

    return myModule;
  }


  public void draw(){
    background(155);
    myObj.draw();
  }


  public void keyPressed(){
    initForm();
  }


  public static void main(String[] args){
    PApplet.main(new String[]{Test03mStarGrid.class.getName()});
  }
}

