class SpringBoard { private Particle lpt, lpb, rpt, rpb; private float w, vx, vy; SpringBoard(float x, float y, float _w, float angle) { w = _w; float h = 25; float t = atan(h/(w/2)); float d1 = sqrt(w*w/4 + h*h); float d2 = w/2; lpt = nograv.makeParticle(1, x - d1*cos(angle+t), y - d1*sin(angle+t), 0); lpb = nograv.makeParticle(1, x - d2*cos(angle), y - d2*sin(angle), 0); rpt = nograv.makeParticle(1, x + d1*cos(angle-t), y + d1*sin(angle-t), 0); rpb = nograv.makeParticle(1, x + d2*cos(angle), y + d2*sin(angle), 0); lpt.makeFixed(); rpt.makeFixed(); nograv.makeSpring(lpt, lpb, 1, 0.1, h); nograv.makeSpring(rpt, rpb, 1, 0.1, h); nograv.makeSpring(lpt, rpt, 1, 1, w); vx = (lpb.position().x() - lpt.position().x())/dist(lpb.position().x(), lpb.position().y(), lpt.position().x(), lpt.position().y()); vy = (lpb.position().y() - lpt.position().y())/dist(lpb.position().x(), lpb.position().y(), lpt.position().x(), lpt.position().y()); } void move(int d) { float s = 5; switch(d) { case 1: lpt.moveBy(0, -s, 0); lpb.moveBy(0, -s, 0); rpt.moveBy(0, -s, 0); rpb.moveBy(0, -s, 0); break; case 2: lpt.moveBy(s, 0, 0); lpb.moveBy(s, 0, 0); rpt.moveBy(s, 0, 0); rpb.moveBy(s, 0, 0); break; case 3: lpt.moveBy(0, s, 0); lpb.moveBy(0, s, 0); rpt.moveBy(0, s, 0); rpb.moveBy(0, s, 0); break; case 4: lpt.moveBy(-s, 0, 0); lpb.moveBy(-s, 0, 0); rpt.moveBy(-s, 0, 0); rpb.moveBy(-s, 0, 0); break; } } void collide(Pebble peb) { float dLeft = dist(peb.x(), peb.y(), lpb.position().x(), lpb.position().y()); float dRight = dist(peb.x(), peb.y(), rpb.position().x(), rpb.position().y()); if ( dLeft + dRight < w + peb.radius() ) { lpb.setVelocity(3*vx, 3*vy, 0); rpb.setVelocity(3*vx, 3*vy, 0); peb.setVelocity(-vx*20, -vy*20); } } void render() { stroke(0); fill(302, 38, 98, 128); beginShape(); vertex(lpb.position().x(), lpb.position().y()); vertex(rpb.position().x(), rpb.position().y()); vertex(rpb.position().x()+vx*15, rpb.position().y()+vy*15); vertex(lpb.position().x()+vx*15, lpb.position().y()+vy*15); endShape(CLOSE); } }