Daily Creative Coding

元「30 min. Processing」。毎日、Creative Codingします。

流れるブロック

/**
* block stream
*
* @author aa_debdeb
* @date 2016/05/08
*/

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;
  }
  
}