import traer.physics.*;
ParticleSystem physics;
Particle[] particles;
Particle od;
Particle oi;
Particle aod;
Particle aoi;
void setup()
{
size( 400, 400 );
smooth();
fill( 0 );
frameRate( 24 );
//ellipseMode( CENTER );
physics = new ParticleSystem( 5.0, 0.05 );
particles = new Particle[10];
//p = physics.makeParticle( 1.0, width/2, height/2, 0 );
particles[0] = physics.makeParticle( 1.0, width/2, height/2, 0 );
particles[0].makeFixed();
od= physics.makeParticle( 5.0, width/3, height/3, 0 );
oi= physics.makeParticle( 5.0,2* width/3, height/3, 0 );
aod= physics.makeParticle( 5.0, width/3, height/3, 0 );
aoi= physics.makeParticle( 5.0,2* width/3, height/3, 0 );
aod.makeFixed();
aoi.makeFixed();
physics.makeSpring( aod,od, 2.0, 0.1, 0.01 );
physics.makeSpring( aoi,oi, 3.0, 0.1, 0.05 );
for ( int i = 1; i < particles.length; ++i )
{
particles[i] = physics.makeParticle( 1.0, width/2, height/2+i, 0 );
physics.makeSpring( particles[i-1], particles[i], 2.0, 0.1, 0.01 );
}
particles[particles.length-1].setMass( 5.0 );
}
void draw()
{
physics.advanceTime( 1.0 );
if ( mousePressed )
{
particles[particles.length-1].moveTo( mouseX, mouseY, 0 );
particles[particles.length-1].velocity().clear();
oi.moveTo( 50 +mouseX,mouseY-40, 0 );
od.moveTo( mouseX-50, mouseY-40, 0 );
}
background( 255 );
beginShape(POLYGON);
fill(256);
stroke(0);
curveVertex( particles[0].position().x(), particles[0].position().y() );
for ( int i = 0; i < particles.length; ++i )
{
curveVertex( particles[i].position().x(), particles[i].position().y() );
}
curveVertex( particles[particles.length-1].position().x(), particles[particles.length-1].position().y() );
endShape();
fill(0);
triangle( particles[0].position().x(), particles[0].position().y(),particles[0].position().x()+25, particles[0].position().y()+25,
particles[0].position().x()-25, particles[0].position().y()+25);
rect( particles[particles.length-1].position().x(), particles[particles.length-1].position().y(), 60, 20 );
rect( particles[particles.length-1].position().x(), particles[particles.length-1].position().y(), -60, 20 );
ellipse( od.position().x(),od.position().y(),20,50);
ellipse( oi.position().x(),oi.position().y(),50,20);
}
void mouseReleased()
{
particles[particles.length-1].setVelocity( (mouseX - pmouseX), (mouseY - pmouseY), 0 );
}