class Cube extends Particle { color ccolor; int sizeX = 20; int sizeY = 20; int sizeZ = 20; float diameter; public Cube(String type) { if ( type == "target") { ccolor = color(255,253,208); diameter = 100; minCollisionForce = diameter; maxCollisionForce = diameter; enableCollision(diameter/2 + 2); } else if ( type == "targetb") { ccolor = color(255, 247, 79); diameter = 150; minCollisionForce = diameter; maxCollisionForce = diameter; enableCollision(diameter/2 + 2); } else if ( type == "targetc") { ccolor = color(255, 199, 151); diameter = 200; //minCollisionForce = diameter; //maxCollisionForce = diameter; //enableCollision(diameter/2 + 2); enableCollision(10); } else if ( type == "targetd") { ccolor = color(255, 0, 0); diameter = 50; minCollisionForce = diameter/2; maxCollisionForce = diameter; enableCollision(diameter/2 + 2); } else { ccolor = color(random(255), random(255), random(255)); diameter = 10 + random(35); minCollisionForce = diameter/2; maxCollisionForce = diameter; enableCollision(diameter/2 + 2); } } void draw() { ellipseMode(CENTER_DIAMETER); push(); translate(pos[0], pos[1], pos[2]); noStroke(); fill(ccolor); ellipse(0,0,diameter,diameter); pop(); if (age > 200 && (pos[0] < -diameter || pos[0] > width + diameter || pos[1] > height + diameter) ) die(); } } int CREATE_GAP = 100; PSystem ps; Cube parts; Cube partsb; Cube a; Cube mPart; Cube f[] = new Cube[20]; Cube r; Cube s; Cube t; Cube u; void setup() { size(800,800); ps = (PSystem)loadPlugin("PSystem"); a = new Cube("target"); a.setPos(width/2, height/2 - 50, 0); a.fix(2,0); //a.ccolor = color(0,50,50); ps.addParticle(a); r =new Cube("targetb"); r.setPos(400,375,0); ps.addParticle(r); //r.ccolor = color(0,0,100); r.fix(); mPart = new Cube("targetc"); mPart.setPos(0, height/2, 20); // mPart.ccolor = color(0,100,0); ps.addParticle(mPart); ps.addMagnet(mPart, 100000); a.enableCollision(10); mPart.enableCollision(10); for (int i=0;i<20;i++) { f[i]=new Cube("targetd"); //f[i].ccolor = color(200,0,0); f[i].setPos(mouseX+i*20,mouseY,0); ps.addParticle(f[i]); if (i==0) { ps.addSpring(a,f[i],2,1,.1); } else ps.addSpring(f[i-1],f[i],2,1,.1); f[i].enableCollision(10); } ps.addSpring(r,mPart,.01,.1,1); ps.setGravity(0, .1, 0); ps.drag = .01; } void mouseDragged() { a.setPos(mouseX, mouseY, 0); } void mousePressed() { a.setPos(mouseX, mouseY, 0); } void createPart() { //if (nParts < 50) { parts = new Cube(" "); //parts.ccolor = color(random(255),random(255),random(255)); ps.addParticle(parts); parts.pos[0]=800; parts.pos[1]=50; parts.pos[2]=0; parts.velocity[0]=random(-25); parts.velocity[1]=random(-20); parts.enableCollision(20); parts.fix(2,0); } } void createPartb() { { partsb = new Cube(" "); //partsb.ccolor = color(random(255),random(255),random(255)); ps.addParticle(partsb); partsb.pos[0]=0; partsb.pos[1]=100; partsb.pos[2]=0; partsb.velocity[0]=random(35); partsb.velocity[1]=random(-25); partsb.enableCollision(20); partsb.fix(2,0); } } int skipLoops=5; void loop() { if (frame % skipLoops == 0) { createPart(); createPartb(); } background(#000000); a.setPos(mouseX, mouseY, 0); stroke(0, 100, 00, 1000); fill(255, 0, 0); ps.draw(); }