int nr=0; BodyPart root; float rootAngleX=1500; float rootAngleY=0; float px, py; void setup() { size(500, 500); colorMode(RGB, 1); root = new BodyPart(0, 0); } void loop() { // println("frame"); background(.5); if(mousePressed){ rootAngleY -= (mouseX-px); rootAngleX -= (mouseY-py); //println(rootAngleX); } translate(width/2, height, -30); rotateX(rootAngleX/1000); rotateZ(rootAngleY/1000); root.grow(); root._angPosX = 0; // println(root._width); } void mousePressed() { px=mouseX; py=mouseY; } class BodyPart { BodyPart[] children = new BodyPart[3]; private int child_nr=0; private float _width = 0; private float _height = 0; private float _widthspeed; private float _heightspeed; private float _angleX; private float _angleY; public float _angPosX; private float newangle; private float nextchild; public BodyPart(float angleX, float angleY){ _angleX = angleX; _angleY = angleY; _angPosX = 0; _widthspeed=.05; _heightspeed=.3; nextchild = 2; } public void grow(){ if(keyPressed){ _height+=_heightspeed; _width+=_widthspeed; //if(child_nr<3 && random(0,_width*10)/((child_nr+1)*(child_nr+1))>15){ if(_width>nextchild && child_nr<3){ nextchild+=random(1,10)*(child_nr+1); _heightspeed*=.6; newangle = random(.2,1); children[child_nr++] = new BodyPart(random(-newangle,newangle), random(-newangle,newangle)); } } paint(); for(int i = 0;i