// class definition class Firefly { float x, y; float w, h; float speed; float speedY; int life; float blinkRate; float alphaFill; float overlap; int cool; int warm; float speedTemp; float speedYTemp; // class declaration Firefly (float ix, float iy, float ialpha, float iblink) { x = ix; y = iy; w = 5; h = 5; speed = random(-.03, .03); speedY = random(-.03, .03); life = 1; blinkRate = iblink; alphaFill = ialpha; overlap = (width+height)/3; cool = 255; warm = 255; } // main function void update() { //print(" " + overlap); if (life == 1) { checkImpact(); move(); blink(); warm = 255; cool = 255; } if (life == 0) { slow(); warm = 0; } if (life == 2) { fast(); cool = 0; } } void move() { // update position x = x + speed; y = y + speedY; // check boundaries if (x > (width - 3)){ x = (width - 3); //speed = random(-.03, -.001); speed = (speed*-1 + random(-.03, -.001))/2; speedTemp = speed; //println (speed); } if (x < 3){ x = 3; //speed = random(.001, .03); speed = (speed*-1+random(.001, .03))/2; speedTemp = speed; //println (speed); } if (y > (height-3)){ y = (height-3); //speedY = random(-.03, -.001); speedY = (speedY*-1 + random(-.03, -.001))/2; speedYTemp = speedY; //println (speedY); } if (y < 3){ y = 3; //speedY = random(.001, .03); speedY = (speedY*-1+random(.001, .03))/2; speedYTemp = speedY; //println (speedY); } // move around mouse position if ((abs(mouseX - x) < 100) && (abs(mouseY - y) < 100) && (abs(mouseX - x) > 2) && (abs(mouseY - y) > 2)){ //X direction speedTemp = speed; speed = random(0, .03) - 3/(mouseX - x)*(10/abs(mouseY - y)); //if (x < 2) { x = abs(x); } //if (x > width - 2) { x = 2*width - x; } //Y direction speedYTemp = speedY; speedY = random(0, .03) - 3/(mouseY - y)*(10/abs(mouseX - x)); //if (y < 2) { y = abs(y); } //if (y > height - 2) { y = 2*height - y; } }else{ speed = speedTemp; speedY = speedYTemp; } } //* void checkImpact() { // if firefly overlaps with neighbors set to new life stage for (int i=0;i alphaFill) { life = 0; } } //check for mouse presence if ((abs(mouseX - x) < 50) && (abs(mouseY - y) < 50)) { alphaFill = 10; blinkRate = 1.0001; } } } //*/ void blink() { // slowly fade if (alphaFill > 0) { alphaFill = alphaFill / (blinkRate);// + random(-.0001,.0001)); } // blink on if (alphaFill < 1) { alphaFill = 195; } // draw with new alpha fill(cool,255,warm,alphaFill+60); ellipse(x,y,w,h); } void slow() { if (blinkRate > 1.02) { blinkRate = blinkRate - 0.0002; } if (blinkRate <= 1.02) { //blinkRate = blinkRate + 0.00002; } life = 1; //print("slow "); } void fast() { if (blinkRate < 1.06) { blinkRate = blinkRate + 0.0001; } if (blinkRate >= 1.06) { //blinkRate = blinkRate - 0.00001; } life = 1; //print("fast "); } }