Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- for (i in 0...particles.length) {
- var p1 = particles[i];
- p1.vx += p1.fx*dt;
- p1.vy += p1.fy*dt;
- p1.x += p1.vx*dt;
- p1.y += p1.vy*dt;
- p1.fx = 0;
- p1.fy = gravity;
- p1.d = p1.dNear = 0;
- p1.vx = fastMax(-velCap, fastMin(p1.vx, velCap));
- p1.vy = fastMax(-velCap, fastMin(p1.vy, velCap));
- if (p1.x < h) {
- p1.vx -= (p1.x-(h-wallSpring*p1.vx))*wallDamp;
- } else if (p1.x > sw-h) {
- p1.vx -= (p1.x-(sw-h-wallSpring*p1.vx))*wallDamp;
- }
- if (p1.y < h) {
- p1.vy -= (p1.y-(h-wallSpring*p1.vy))*wallDamp;
- } else if (p1.y > sh-h) {
- p1.vy -= (p1.y-(sh-h-wallSpring*p1.vy))*wallDamp;
- }
- for (j in i+1...particles.length) {
- var p2 = particles[j];
- var dx = p2.x-p1.x;
- var dy = p2.y-p1.y;
- var d = Math.sqrt(dx*dx+dy*dy);
- if (d < h && d > 0) {
- p1.springs.add(new Spring(particles[j], sCreateLen));
- }
- }
- }
- for (p1 in particles) {
- for (sp in p1.springs) {
- var p2:Particle = sp.p;
- var dx = p2.x-p1.x;
- var dy = p2.y-p1.y;
- var d = fastSqrt(dx*dx+dy*dy);
- var fThreshold = sp.restLength*sBreakYield;
- if (d > sp.restLength+fThreshold) {
- sp.restLength += plasticity*(d-sp.restLength-fThreshold)*dt;
- } else if (d < sp.restLength-fThreshold) {
- sp.restLength -= plasticity*(sp.restLength-fThreshold-d)*dt;
- }
- }
- }
- for (p1 in particles) {
- for (sp in p1.springs) {
- var p2:Particle = sp.p;
- var lij = sp.restLength;
- if (lij > h) {
- p1.springs.remove(sp);
- continue;
- }
- var dx = p2.x-p1.x;
- var dy = p2.y-p1.y;
- var d = fastSqrt(dx*dx+dy*dy);
- var f = kspring*(d-lij)/d;
- var fx = dx*f;
- var fy = dy*f;
- p1.vx += fx;
- p1.vy += fy;
- p2.vx -= fx;
- p2.vy -= fy;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement