ArrayList<Block> blocks;
void setup(){
size(500, 500, P3D);
blocks = new ArrayList<Block>();
rectMode(CENTER);
noStroke();
}
void draw(){
lights();
background(220);
translate(width / 2, 3 * height / 4, -300);
rotateX(PI / 3);
rotateZ(frameCount * 0.003);
fill(199, 159, 185);
noStroke();
rect(0, 0, width, height);
fill(199, 21, 133);
stroke(128);
ArrayList<Block> nextBlocks = new ArrayList<Block>();
for(Block block: blocks){
block.display();
block.update();
if(!block.isDisappeared()){
nextBlocks.add(block);
}
}
blocks = nextBlocks;
if(random(1) < 0.2){
blocks.add(new Block());
}
}
class Block{
float value;
float radian;
Block(){
value = 0.0;
radian = random(TWO_PI);
}
void update(){
value += 0.005;
radian += PI / 32;
}
void display(){
float h = map(value, 0, 1, 0, 450);
float size = map(value, 0, 1, 30, 0);
float radious = map(pow(value, 1.0 / 3), 0, 1, 300, 0);
pushMatrix();
translate(radious * cos(radian), radious * sin(radian), h);
box(size);
popMatrix();
}
boolean isDisappeared(){
return value > 1.0;
}
}