// www.coolbubble.com nick@coolbubble.com // nickd 27.12.03 // int numPoints = 200; int changeTimer=0; float globalSpinAngle=0.0f; float globalChangeAngle=0.0f; float multA=6.0f,multB=3.0f; float multATarget=6.0f,multBTarget=3.0f; float blendSpeed=0.03f; int numSparks=200; CSpark [] sparks; class CSpark { void CSpark() { x=0;y=0;xv=0;yv=0;life=0;type=0; } float x,y,xv,yv; int life; int type; } void setup() { size(400,400); sparks = new CSpark[numSparks]; for (int i=0;i7.0f) multBTarget=multATarget/2.0f; else multBTarget=multATarget/2.0f; multBTarget = (float)((int)multBTarget); } void loop() { float x=0,y=0,xo=0,yo=0,angle=0,radius=0,mouseAngle=0,mouseB=0; boolean bleed=false; background(165,160,150); changeTimer++; if (changeTimer>400) { changeTimer=0; randomiseMultipliers(); } //if (mousePressed) randomiseMultipliers(); globalSpinAngle+=0.01f; globalChangeAngle+=0.006f; multA = (multA*(1.0f-blendSpeed))+(multATarget*blendSpeed); multB = (multB*(1.0f-blendSpeed))+(multBTarget*blendSpeed); if (abs(multATarget-multA)>0.03f) { bleed=true; } else { multA = (multA*(1.0f-0.1f))+(multATarget*0.1f); multB = (multB*(1.0f-0.1f))+(multBTarget*0.1f); } mouseAngle = sin(globalSpinAngle)*1.0f;//(mouseX*0.02f); mouseB = 0.5f+sin(globalChangeAngle)*0.5f;//(mouseY/(float)height); processParticles(); noStroke(); fill(0,10); rect(10,10,40,40); fill(255,15); rect(width-50,height-50,40,40); strokeWeight(2); stroke(235,245,255); // draw for (int i=0;i0) { line(x,y,xo,yo); } if (bleed) { if ((i==0 || i==numPoints) && random(1.0f)<0.9f) { addParticle(x,y,0); } } xo=x; yo=y; } } void addParticle(float x, float y, int type) { for (int i=0;i0) // blood { sparks[i].life-=1; sparks[i].yv+=0.5f; sparks[i].x+=sparks[i].xv; sparks[i].y+=sparks[i].yv; rect(sparks[i].x-2,sparks[i].y-2,4,5); } } fill(255,255,255,70); for (int i=0;i0) // blood { rect(sparks[i].x-2,sparks[i].y-2,2,2); } } } int wrap(int index, int range) { if (index<0) return index+range; if (index>range-1) return index-range; return index; }