/* moon - time to make moon, draw half curve with two circles in it sketch_circle tree ground */ class moon //incomplete { ArrayList vert; float c_wg; //degree of sine-ness to use in drawing int seed = round(random(0,100000)); PVector pos; int frames_taken = 0; moon() { // 0,0 in moon center vert = new ArrayList(); } } class sketch_circle { ArrayList vert; float radius; float step = random(1,1.5); float c_wg; //degree of sine-ness to use in drawing int seed; PVector pos; int frames_taken = 0; sketch_circle(float xpos, float ypos, float i_rad, float i_c) { c_wg = i_c; seed = round(random(0,1000000)); float start_point = random(0,TWO_PI)/step; vert = new ArrayList(floor(TWO_PI/step) - 1); //rough estimate for num of elements radius = i_rad; for (float i = -step+start_point; i < 2*PI + step*2+start_point; i += step) { vert.add(new PVector(radius*cos(i),radius*sin(i))); } pos = new PVector(xpos,ypos); } void render() { ++frames_taken; pushMatrix(); translate(pos.x,pos.y); sketch_line(vert,seed,frames_taken*20,1,c_wg); popMatrix(); } } class tree { ArrayList trunk; ArrayList top; int frames_taken = 0; PVector pos; float tall; float wide = 30; int seed; tree(float xpos, float ypos, float i_tall) { tall = i_tall; seed = round(random(0,10000)); pos = new PVector(xpos,ypos); trunk = new ArrayList(); top = new ArrayList(); //just two circles top.add(new sketch_circle(0,-10,90,3)); top.add(new sketch_circle(0,0,80,4)); top.add(new sketch_circle(0,10,70,6)); ArrayList temp = new ArrayList(); temp.add(new PVector(0,0)); temp.add(new PVector(-wide/5,tall/5)); temp.add(new PVector(-wide/2,tall/2)); temp.add(new PVector(-wide,tall)); temp.add(new PVector(-wide,2*tall)); trunk.add(temp.clone()); temp.clear(); temp.add(new PVector(0,0)); temp.add(new PVector(wide/5,tall/5)); temp.add(new PVector(wide/2,tall/2)); temp.add(new PVector(wide,tall)); temp.add(new PVector(wide,2*tall)); trunk.add(temp.clone()); temp.clear(); //left branches for(int i=0; i < 3; ++i) { temp.add(new PVector(random(-wide/6,0),0)); temp.add(new PVector(random(-wide/4,0),tall/5)); temp.add(new PVector(random(-wide/3,-wide/4),tall/4)); temp.add(new PVector(random(-wide,-wide/3),tall/2)); temp.add(new PVector(random(-wide,-wide/2),tall)); temp.add(new PVector(random(-wide,-wide/2),2*tall)); trunk.add(temp.clone()); temp.clear(); } } void render(float xpos) { //if not on screen if (pos.x < xpos + width/10 || pos.x > xpos + width*1.1) { frames_taken = max(0,frames_taken - 2); } else { frames_taken = min(round(3/SKETCH_STEP/5),frames_taken + 1); } if (frames_taken <= 0) { return; } pushMatrix(); translate(pos.x,pos.y); sketch_circle temp1; for(int i = 0; i < top.size(); ++i) { temp1 = (sketch_circle)top.get(i); temp1.render(); } ArrayList temp2; for(int i = 0; i < trunk.size(); ++i) { temp2 = (ArrayList)trunk.get(i); sketch_line(temp2,seed,frames_taken*5); } popMatrix(); } } class ground { ArrayList vert; int frames_taken = 1; PVector pos; float wide = 300; int seed; ground(float xpos, float ypos) { //center point for ground is at middle of line pos = new PVector(xpos,ypos); seed = round(random(0,10000)); vert = new ArrayList(); vert.add(new PVector(0,0)); vert.add(new PVector(0,0)); vert.add(new PVector(wide/2,0)); vert.add(new PVector(wide,0)); vert.add(new PVector(wide,0)); } void render(float xpos) { //if not on screen if (pos.x < xpos - 100 || pos.x > xpos + width) { frames_taken = max(0,frames_taken - 2); } else { frames_taken = min(round(2/SKETCH_STEP/5),frames_taken + 1); } if (frames_taken <= 0) { return; } pushMatrix(); translate(pos.x,pos.y); sketch_line(vert,seed,frames_taken*4); sketch_line(vert,seed*100,frames_taken*5); popMatrix(); } }