class Shape { Position[] points; color c = shapeColor; int fade = 0, fadeSteps = 50; boolean down = false, kill = false; Shape() {} void set(Position[] p, int index, float ix, float iy) { down = true; points = new Position[p.length - index + 1]; int j = 1; points[0] = new Position(ix, iy); for (int i = index; i < p.length-1; i++) { points[j] = new Position(p[i]); j++; } } void be() { if (points != null && down) { if (!kill) { draw(); } else { fade(); } } } void kill() { kill = true; } void draw() { stroke(255); fill(shapeColor); draw_shape(); } void fade() { float alfa = 255 - ((float)fade/(float)fadeSteps*255); c = color(red(c), green(c), blue(c), alfa); noStroke(); fill(c); draw_shape(); fade++; if (fade > fadeSteps) { fade = 0; c = shapeColor; kill = false; down = false; } } void draw_shape() { beginShape(POLYGON); curveVertex(points[0].x, points[0].y); for (int i = 1; i < points.length-9; i = i + 10) { if (points[i] != null && points[i].on_screen()) { curveVertex(points[i].x, points[i].y); } } curveVertex(points[0].x, points[0].y); endShape(); } }