package p5;
import anar.*;




import java.util.ArrayList;

import processing.core.PApplet;

/**
 * @author goo
 */
public class Test03aTurtleCurved extends PApplet {

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


  Obj     all = new Obj();
  Sliders mySliders;

  public void setup(){
    size(800,400,OPENGL);
    Anar.init(this);

    // Setup DEFAULT rendering of our scene
    Pts.globalRender = new RenderPtsAll();
    Pt.globalRender = new RenderPtCross(new AColor(255,155,155),1);
    Anar.drawAxis(true);
    RenderSpline.splineRes.set(12);

    initForm();
  }

  void initForm(){

    // //////////////////////////////////////////
    // //////////////////////////////////////////
    // Initial SHAPE
    all = new Obj();

    ArrayList tr = new ArrayList();
    tr.add(new Translate(10,0,0));
    tr.add(new Translate(20,0,0));
    tr.add(new Translate(30,0,0));
    tr.add(new Translate( -10,0,0));
    tr.add(new Translate( -20,0,0));
    tr.add(new Translate( -30,0,0));

    tr.add(new Translate(0,10,0));
    tr.add(new Translate(0,20,0));
    tr.add(new Translate(0,30,0));
    tr.add(new Translate(0, -10,0));
    tr.add(new Translate(0, -20,0));
    tr.add(new Translate(0, -30,0));

    ArrayList tz = new ArrayList();
    // tz.add(new RotateX(.1f));
    // tz.add(new RotateX(.2f));
    // tz.add(new RotateX(.3f));
    tz.add(new RotateY((float)Math.PI/6));
    tz.add(new RotateY((float)Math.PI/3));
    tz.add(new RotateY((float)Math.PI/2));

    tz.add(new RotateZ((float)Math.PI/6));
    tz.add(new RotateZ((float)Math.PI/3));
    tz.add(new RotateZ((float)Math.PI/2));


    Pts line = new Pts();
    Pt ori = Anar.Pt(0,0,0);

    for (int i = 0; i<200; i++){
      PtDER newPt = Anar.Pt(ori);
      newPt.apply((Transform)tr.get(Anar.rndi(tr.size())));
      newPt.apply(new Transform(ori,(Transform)tz.get(Anar.rndi(tz.size()))));
      line.add(newPt);
      ori = newPt;
      // System.out.flush();
      // println(Anar.rndi(tz.size()));
    }

    CSpline nCs = new CSpline(line,.1f);
    all.add(nCs);

    // //////////////////////////////////////////
    // HIRARCHY

    Anar.camTarget(all);

    mySliders = new Sliders();

    for (int i = 0; i<tr.size(); i++)
      mySliders.add((Transform)tr.get(i));

    for (int i = 0; i<tz.size(); i++)
      mySliders.add((Transform)tz.get(i));

  }


  public void draw(){
    background(200);
    all.draw();
    mySliders.draw();
  }

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

}

