ArrayList<Block> blocks;
void setup(){
size(500, 500, P3D);
blocks = new ArrayList<Block>();
float z = 200;
while(z >= -800){
blocks.add(new Block(z));
z -= 20;
}
fill(255, 69, 0);
noStroke();
}
void draw(){
lights();
background(95, 158, 160);
translate(width / 2, height / 2);
rotateX(map(mouseY, 0, height, -PI / 4, -PI / 8));
rotateY(map(mouseX, 0, width, -PI / 8, PI / 8));
rotateZ(map(mouseX, 0, width, -PI / 8, PI / 8));
for(Block block: blocks){
block.display();
}
if(mousePressed){
for(Block block: blocks){
block.update();
}
if(blocks.get(0).pos.z > 200){
blocks.remove(0);
}
if(blocks.get(blocks.size() - 1).pos.z + 800 >= 20){
blocks.add(new Block(blocks.get(blocks.size() - 1).pos.z - 20));
}
}
}
class Block{
PVector pos;
Block(float z){
pos = new PVector(random(-100, 100), 0, z);
}
void display(){
pushMatrix();
translate(pos.x, pos.y, pos.z);
box(30);
popMatrix();
}
void update(){
pos.z += 6;
}
}