class Cube extends Particle { color ccolor; int sizeX = 20; int sizeY = 20; int sizeZ = 20; Cube(float x,float y, float z) { } public Cube(String type) { if ( type == "target") { ccolor = #FFF000; sizeX = 100; sizeY = 100; sizeZ = 100; } else if (type == "mouseCube") { ccolor = #77D8FF; sizeX = 10; sizeY = 10; sizeZ = 200; } else if (type == "mCube") { ccolor = #00FF00; sizeX = 10; sizeY = 10; sizeZ = 75; } else { ccolor = color(random(255),random(255),random(255)); sizeX = 15; sizeY = 15; sizeZ = 15; } } void draw() { push(); translate(pos[0], pos[1], pos[2]); fill(ccolor); box(sizeX, sizeY, sizeZ); pop(); } } //int MAX_PARTS = 8; int nParts = 0; int nPartsb = 0; int CREATE_GAP = 100; PSystem ps; Cube parts[] = new Cube[50]; Cube partsb[] = new Cube[50]; 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("mouseCube"); a.setPos(width/2, height/2 - 50, 0); a.fix(2,0); ps.addParticle(a); r =new Cube("mCube"); r.setPos(400,375,0); ps.addParticle(r); r.fix(); mPart = new Cube("target"); mPart.setPos(0, height/2, 20); ps.addParticle(mPart); ps.addMagnet(mPart, 50000); a.enableCollision(100); mPart.enableCollision(50); for (int i=0;i<20;i++) { f[i]=new Cube(" "); 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(100); } ps.addSpring(r,mPart,.01,.1,10); ps.setGravity(0, .3, 0); ps.drag = .01; } void mouseDragged() { a.setPos(mouseX, mouseY, 0); } void mousePressed() { a.setPos(mouseX, mouseY, 0); } void createPart() { if (nParts < 50) { parts[nParts] = new Cube(" "); parts[nParts] = new Cube(width/2, 0, 0); ps.addParticle(parts[nParts]); parts[nParts].pos[0]=800; parts[nParts].pos[1]=50; parts[nParts].pos[2]=0; parts[nParts].velocity[0]=random(-50); parts[nParts].velocity[1]=random(-40); parts[nParts].enableCollision(20); // parts[nParts].fix(2,0); nParts++; } else { parts[nParts % 50].setPos(width/2, 0, 0); nParts++; } } void createPartb() { if (nPartsb < 50) { parts[nPartsb] = new Cube(" "); parts[nPartsb] = new Cube(width/2, 0, 0); ps.addParticle(parts[nPartsb]); parts[nPartsb].pos[0]=0; parts[nPartsb].pos[1]=100; parts[nPartsb].pos[2]=0; parts[nPartsb].velocity[0]=random(35); parts[nPartsb].velocity[1]=random(-25); parts[nPartsb].enableCollision(20); // parts[nPartsb].fix(2,0); nPartsb++; } else { parts[nPartsb % 50].setPos(width/2, 0, 0); nPartsb++; } } int skipLoops=5; void loop() { if (frame % skipLoops == 0) { createPart(); createPartb(); } background(#0FFFFF); a.setPos(mouseX, mouseY, 0); stroke(0, 0, 0, 0); fill(255, 0, 0); ps.draw(); }