// ooooooo oo oo ooooooo oooooooo ooooooo oo oo oooooooo ooooooo oooooo // oo oo oo oo oo oo oo oo oo oo oo oo oo oo oo // oo oo oo oo oo oo oo oo oo oo oo oo oo oo oo // ooooooo oo oo ooooooo oooooo ooooooo oooooooo oooooo ooooooo oo oo // oo oo oo oo oo oo oo oo oo oo oo oo oo oo // oo oo oo oo oo oo oo oo oo oo oo oo oo oo // oo oo oo oo oo oo oo oo oo oo oo oo oo oo // ooooooo oooooo oo oooooooo oo oo oo oo oooooooo oo oo oooooo // // // mikkel crone koser // www.beyondthree.com // // november 10th 2003 [v. 1.0] // febuary 1st 2004 [v. 1.1] // garment_hanger_project sketch [nov. 2003] // also used for the 1000 tshirts project [dec. 2003] // slightly reCoded for SUPERHERO*PROCE55ING :) [jan 2004] // reCompiled with 0068 (no keyboard focus since it kills applets if only java 1.1) // // appologies for the messy/uncommented code ;) // Content allContent[]; Content activeContent; Point tracker = new Point(0, 0); BImage activeImage; Follower trail; Color bg; boolean showTexture = true; boolean showHelpers = false; boolean sizeActive = false; float WIDTH = 70f; int memLength = 100; float ang; Point R = new Point(0, 0); Point L = new Point(0, 0); Point memL[] = new Point[memLength]; Point memR[] = new Point[memLength]; void setup(){ size(540, 400); background(0); noStroke(); framerate(40); allContent = new Content[5]; allContent[0] = new Content(new Color(255, 255, 255), "cpt_america.jpg", 25, false); allContent[1] = new Content(new Color(255, 255, 255), "batman.jpg", 25, false); allContent[2] = new Content(new Color(255, 255, 255), "wonderwoman.jpg", 25, false); allContent[3] = new Content(new Color(255, 255, 255), "superman.jpg", 25, false); allContent[4] = new Content(new Color(255, 255, 255), "superhero_name.gif", 25, true); activeContent = allContent[Integer.parseInt(getParameter("hero"))]; //activeContent = allContent[0]; updateContent(); trail = new Follower(0, 0, 4); for(int i=0; i0; i--){ memL[i] = memL[i-1]; memR[i] = memR[i-1]; } memL[0] = new Point(L.x, L.y); memR[0] = new Point(R.x, R.y); float d = dist(trail.x, trail.y, tracker.x, tracker.y); if(d > 10){ ang = calcAngle(tracker.x, tracker.y, trail.x, trail.y); if(sizeActive){ R.x = (int)(d * cos(ang+90)) + tracker.x; R.y = (int)(d * sin(ang+90)) + tracker.y; L.x = (int)(d * cos(ang-90)) + tracker.x; L.y = (int)(d * sin(ang-90)) + tracker.y; }else{ R.x = (int)(WIDTH * cos(ang+90)) + tracker.x; R.y = (int)(WIDTH * sin(ang+90)) + tracker.y; L.x = (int)(WIDTH * cos(ang-90)) + tracker.x; L.y = (int)(WIDTH * sin(ang-90)) + tracker.y; } } } float calcAngle(int ax, int ay, int bx, int by){ float a = atan2(ay-by, ax-bx); return a; } class Follower{ int x, y, tx, ty, speed; Follower(int xx, int yy, int sspeed){ x = xx; y = yy; tx = 0; ty = 0; speed = sspeed; } void update(int tx, int ty){ int xDif = tx - x; int yDif = ty - y; x = x + xDif/speed; y = y + yDif/speed; } void draw(){ fill(0); rect(x, y, 10, 10); } } class Content{ Color bg; boolean isSizeActive; int memLength; BImage img; Content(Color bbg, String str_img, int mmemLength, boolean iisSizeActive){ isSizeActive = iisSizeActive; bg = bbg; img = loadImage(str_img); memLength = mmemLength; } }