/* * * Gumball * ----------------- * particle art * * * Erin K - November 18th 2008 * RobotGrrl.com * * */ import traer.physics.*; Particle mouse, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q; Particle top, right, bottom, left; ParticleSystem physics; PImage smile; void setup() { size(800, 600); frameRate(24); smooth(); ellipseMode( CENTER ); noStroke(); noCursor(); smile = loadImage("smile.png"); physics = new ParticleSystem(0.1, 0.1); mouse = physics.makeParticle(); mouse.makeFixed(); b = physics.makeParticle(1.0, random(0, width), random(0, height), 0); c = physics.makeParticle(1.0, random(0, width), random(0, height), 0); d = physics.makeParticle(1.0, random(0, width), random(0, height), 0); e = physics.makeParticle(1.0, random(0, width), random(0, height), 0); f = physics.makeParticle(1.0, random(0, width), random(0, height), 0); g = physics.makeParticle(1.0, random(0, width), random(0, height), 0); h = physics.makeParticle(1.0, random(0, width), random(0, height), 0); i = physics.makeParticle(1.0, random(0, width), random(0, height), 0); j = physics.makeParticle(1.0, random(0, width), random(0, height), 0); k = physics.makeParticle(1.0, random(0, width), random(0, height), 0); l = physics.makeParticle(1.0, random(0, width), random(0, height), 0); m = physics.makeParticle(1.0, random(0, width), random(0, height), 0); n = physics.makeParticle(1.0, random(0, width), random(0, height), 0); o = physics.makeParticle(1.0, random(0, width), random(0, height), 0); p = physics.makeParticle(1.0, random(0, width), random(0, height), 0); q = physics.makeParticle(1.0, random(0, width), random(0, height), 0); top = physics.makeParticle(); top.makeFixed(); right = physics.makeParticle(); right.makeFixed(); bottom = physics.makeParticle(); bottom.makeFixed(); left = physics.makeParticle(); left.makeFixed(); physics.makeAttraction(top, b, 50000, 15); physics.makeAttraction(top, c, -50000, 15); physics.makeAttraction(top, d, 50000, 15); physics.makeAttraction(top, e, -50000, 15); physics.makeAttraction(top, f, 50000, 15); physics.makeAttraction(top, g, -50000, 15); physics.makeAttraction(top, h, 50000, 15); physics.makeAttraction(top, i, -50000, 15); physics.makeAttraction(top, j, 50000, 15); physics.makeAttraction(top, k, -50000, 15); physics.makeAttraction(top, l, 50000, 15); physics.makeAttraction(top, m, -50000, 15); physics.makeAttraction(top, n, 50000, 15); physics.makeAttraction(top, o, -50000, 15); physics.makeAttraction(top, p, 50000, 15); physics.makeAttraction(top, q, -50000, 15); physics.makeAttraction(right, b, -50000, 15); physics.makeAttraction(right, c, 50000, 15); physics.makeAttraction(right, d, -50000, 15); physics.makeAttraction(right, e, 50000, 15); physics.makeAttraction(right, f, -50000, 15); physics.makeAttraction(right, g, 50000, 15); physics.makeAttraction(right, h, -50000, 15); physics.makeAttraction(right, i, 50000, 15); physics.makeAttraction(right, j, -50000, 15); physics.makeAttraction(right, k, 50000, 15); physics.makeAttraction(right, l, -50000, 15); physics.makeAttraction(right, m, 50000, 15); physics.makeAttraction(right, n, -50000, 15); physics.makeAttraction(right, o, 50000, 15); physics.makeAttraction(right, p, -50000, 15); physics.makeAttraction(right, q, 50000, 15); physics.makeAttraction(bottom, b, 50000, 15); physics.makeAttraction(bottom, c, -50000, 15); physics.makeAttraction(bottom, d, 50000, 15); physics.makeAttraction(bottom, e, -50000, 15); physics.makeAttraction(bottom, f, 50000, 15); physics.makeAttraction(bottom, g, -50000, 15); physics.makeAttraction(bottom, h, 50000, 15); physics.makeAttraction(bottom, i, -50000, 15); physics.makeAttraction(bottom, j, 50000, 15); physics.makeAttraction(bottom, k, -50000, 15); physics.makeAttraction(bottom, l, 50000, 15); physics.makeAttraction(bottom, m, -50000, 15); physics.makeAttraction(bottom, n, 50000, 15); physics.makeAttraction(bottom, o, -50000, 15); physics.makeAttraction(bottom, p, 50000, 15); physics.makeAttraction(bottom, q, -50000, 15); physics.makeAttraction(left, b, -50000, 15); physics.makeAttraction(left, c, 50000, 15); physics.makeAttraction(left, d, -50000, 15); physics.makeAttraction(left, e, 50000, 15); physics.makeAttraction(left, f, -50000, 15); physics.makeAttraction(left, g, 50000, 15); physics.makeAttraction(left, h, -50000, 15); physics.makeAttraction(left, i, 50000, 15); physics.makeAttraction(left, j, -50000, 15); physics.makeAttraction(left, k, 50000, 15); physics.makeAttraction(left, l, -50000, 15); physics.makeAttraction(left, m, 50000, 15); physics.makeAttraction(left, n, -50000, 15); physics.makeAttraction(left, o, 50000, 15); physics.makeAttraction(left, p, -50000, 15); physics.makeAttraction(left, q, 50000, 15); physics.makeAttraction(b, c, 10000, 10); physics.makeAttraction(b, d, -10000, 10); physics.makeAttraction(b, e, 10000, 10); physics.makeAttraction(b, f, -10000, 10); physics.makeAttraction(b, g, 10000, 10); physics.makeAttraction(b, h, -10000, 10); physics.makeAttraction(b, i, 10000, 10); physics.makeAttraction(b, j, -10000, 10); physics.makeAttraction(b, k, 10000, 10); physics.makeAttraction(b, l, -10000, 10); physics.makeAttraction(b, m, 10000, 10); physics.makeAttraction(b, n, -10000, 10); physics.makeAttraction(b, o, 10000, 10); physics.makeAttraction(b, p, -10000, 10); physics.makeAttraction(b, q, 10000, 10); physics.makeAttraction(c, d, 1000, 15); physics.makeAttraction(c, e, -1000, 15); physics.makeAttraction(c, f, 1000, 15); physics.makeAttraction(c, g, -1000, 15); physics.makeAttraction(c, h, 1000, 15); physics.makeAttraction(c, i, -1000, 15); physics.makeAttraction(c, j, 1000, 15); physics.makeAttraction(c, k, -1000, 15); physics.makeAttraction(c, l, 1000, 15); physics.makeAttraction(c, m, -1000, 15); physics.makeAttraction(c, n, 1000, 15); physics.makeAttraction(c, o, -1000, 15); physics.makeAttraction(c, p, 1000, 15); physics.makeAttraction(c, q, -1000, 15); physics.makeAttraction(d, e, -5000, 5); physics.makeAttraction(d, f, 5000, 5); physics.makeAttraction(d, g, -5000, 5); physics.makeAttraction(d, h, 5000, 5); physics.makeAttraction(d, i, -5000, 5); physics.makeAttraction(d, j, 5000, 5); physics.makeAttraction(d, k, -5000, 5); physics.makeAttraction(d, l, 5000, 5); physics.makeAttraction(d, m, -5000, 5); physics.makeAttraction(d, n, 5000, 5); physics.makeAttraction(d, o, -5000, 5); physics.makeAttraction(d, p, 5000, 5); physics.makeAttraction(d, q, -5000, 5); physics.makeAttraction(e, f, -10000, 10); physics.makeAttraction(e, g, -10000, 10); physics.makeAttraction(e, h, -10000, 10); physics.makeAttraction(e, i, -10000, 10); physics.makeAttraction(e, j, -10000, 10); physics.makeAttraction(e, k, -10000, 10); physics.makeAttraction(e, l, -10000, 10); physics.makeAttraction(e, m, -10000, 10); physics.makeAttraction(e, n, -10000, 10); physics.makeAttraction(e, o, -10000, 10); physics.makeAttraction(e, p, -10000, 10); physics.makeAttraction(e, q, -10000, 10); physics.makeAttraction(f, g, 10000, 20); physics.makeAttraction(f, h, 10000, 20); physics.makeAttraction(f, i, 10000, 20); physics.makeAttraction(f, j, 10000, 20); physics.makeAttraction(f, k, 10000, 20); physics.makeAttraction(f, l, 10000, 20); physics.makeAttraction(f, m, 10000, 20); physics.makeAttraction(f, n, 10000, 20); physics.makeAttraction(f, o, 10000, 20); physics.makeAttraction(f, p, 10000, 20); physics.makeAttraction(f, q, 10000, 20); physics.makeAttraction(g, h, -10000, 10); physics.makeAttraction(g, i, -10000, 10); physics.makeAttraction(g, j, -10000, 10); physics.makeAttraction(g, k, -10000, 10); physics.makeAttraction(g, l, -10000, 10); physics.makeAttraction(g, m, -10000, 10); physics.makeAttraction(g, n, -10000, 10); physics.makeAttraction(g, o, -10000, 10); physics.makeAttraction(g, p, -10000, 10); physics.makeAttraction(g, q, -10000, 10); physics.makeAttraction(h, i, 10000, 10); physics.makeAttraction(h, j, 10000, 10); physics.makeAttraction(h, k, 10000, 10); physics.makeAttraction(h, l, 10000, 10); physics.makeAttraction(h, m, 10000, 10); physics.makeAttraction(h, n, 10000, 10); physics.makeAttraction(h, o, 10000, 10); physics.makeAttraction(h, p, 10000, 10); physics.makeAttraction(h, q, 10000, 10); physics.makeAttraction(i, j, -5000, 5); physics.makeAttraction(i, k, 5000, 5); physics.makeAttraction(i, l, -5000, 5); physics.makeAttraction(i, m, 5000, 5); physics.makeAttraction(i, n, -5000, 5); physics.makeAttraction(i, o, 5000, 5); physics.makeAttraction(i, p, -5000, 5); physics.makeAttraction(i, q, 5000, 5); physics.makeAttraction(j, k, 5000, 5); physics.makeAttraction(j, l, -5000, 5); physics.makeAttraction(j, m, 5000, 5); physics.makeAttraction(j, n, -5000, 5); physics.makeAttraction(j, o, 5000, 5); physics.makeAttraction(j, p, -5000, 5); physics.makeAttraction(j, q, 5000, 5); physics.makeAttraction(k, l, -5000, 5); physics.makeAttraction(k, m, 5000, 5); physics.makeAttraction(k, n, -5000, 5); physics.makeAttraction(k, o, 5000, 5); physics.makeAttraction(k, p, -5000, 5); physics.makeAttraction(k, q, 5000, 5); physics.makeAttraction(l, m, 5000, 5); physics.makeAttraction(l, n, -5000, 5); physics.makeAttraction(l, o, 5000, 5); physics.makeAttraction(l, p, -5000, 5); physics.makeAttraction(l, q, 5000, 5); physics.makeAttraction(m, n, -5000, 5); physics.makeAttraction(m, o, 5000, 5); physics.makeAttraction(m, p, -5000, 5); physics.makeAttraction(m, q, 5000, 5); physics.makeAttraction(n, o, 5000, 5); physics.makeAttraction(n, p, -5000, 5); physics.makeAttraction(n, q, 5000, 5); physics.makeAttraction(o, p, -5000, 5); physics.makeAttraction(o, q, 5000, 5); physics.makeAttraction(p, q, 5000, 5); colorMode(HSB, 100); } void draw() { mouse.moveTo(mouseX, mouseY, 0); top.moveTo(mouse.position().x(), mouse.position().y() - 125, 0); right.moveTo(mouse.position().x() + 125, mouse.position().y(), 0); bottom.moveTo(mouse.position().x(), mouse.position().y() + 125, 0); left.moveTo(mouse.position().x() - 125, mouse.position().y(), 0); handleBoundaryCollisions(b); handleBoundaryCollisions(c); handleBoundaryCollisions(d); handleBoundaryCollisions(e); handleBoundaryCollisions(f); handleBoundaryCollisions(g); handleBoundaryCollisions(h); handleBoundaryCollisions(i); handleBoundaryCollisions(j); handleBoundaryCollisions(k); handleBoundaryCollisions(l); handleBoundaryCollisions(m); handleBoundaryCollisions(n); handleBoundaryCollisions(o); handleBoundaryCollisions(p); handleBoundaryCollisions(q); physics.tick(); fill(color(0, 100, 100, 100)); ellipse(top.position().x(), top.position().y(), 50, 50); fill(color(0, 100, 100, 100)); ellipse(right.position().x(), right.position().y(), 50, 50); fill(color(0, 100, 100, 100)); ellipse(bottom.position().x(), bottom.position().y(), 50, 50); fill(color(0, 100, 100, 100)); ellipse(left.position().x(), left.position().y(), 50, 50); fill(color(90, 100, 100, 100)); ellipse(mouse.position().x(), mouse.position().y(), 300, 300); image(smile, mouseX - 150, mouseY - 130); fill(color(80, 100, 100, 100)); ellipse(b.position().x(), b.position().y(), 100, 100); fill(color(70, 100, 100, 100)); ellipse(c.position().x(), c.position().y(), 100, 100); fill(color(60, 100, 100, 100)); ellipse(d.position().x(), d.position().y(), 100, 100); fill(color(40, 99, 99, 100)); ellipse(e.position().x(), e.position().y(), 100, 100); fill(color(30, 99, 99, 100)); ellipse(f.position().x(), f.position().y(), 100, 100); fill(color(20, 99, 99, 100)); ellipse(g.position().x(), g.position().y(), 100, 100); fill(color(10, 99, 99, 100)); ellipse(h.position().x(), h.position().y(), 100, 100); fill(color(5, 99, 99, 100)); ellipse(i.position().x(), i.position().y(), 100, 100); fill(color(80, 100, 100, 100)); ellipse(j.position().x(), j.position().y(), 100, 100); fill(color(70, 100, 100, 100)); ellipse(k.position().x(), k.position().y(), 100, 100); fill(color(60, 100, 100, 100)); ellipse(l.position().x(), l.position().y(), 100, 100); fill(color(40, 99, 99, 100)); ellipse(m.position().x(), m.position().y(), 100, 100); fill(color(30, 99, 99, 100)); ellipse(n.position().x(), n.position().y(), 100, 100); fill(color(20, 99, 99, 100)); ellipse(o.position().x(), o.position().y(), 100, 100); fill(color(10, 99, 99, 100)); ellipse(p.position().x(), p.position().y(), 100, 100); fill(color(5, 99, 99, 100)); ellipse(q.position().x(), q.position().y(), 100, 100); fill(color(0,0,0,25)); rect(0, 0, width, height); } void handleBoundaryCollisions( Particle p ) { if ( p.position().x() < 0 || p.position().x() > width ) { p.setVelocity( -0.9*p.velocity().x(), p.velocity().y(), 0 ); } if ( p.position().y() < 0 || p.position().y() > height ) { p.setVelocity( p.velocity().x(), -0.9*p.velocity().y(), 0 ); } p.moveTo( constrain( p.position().x(), 0, width ), constrain( p.position().y(), 0, height ), 0 ); }