/** Cube Monster by Eduardo Omine [2008-11-16] http://blog.omine.net/ */ class Cube { int MAX_AGE = 100; float IMAX_AGE = 1.0 / MAX_AGE; Vec3 pos, vel, acc; float r, vr, dim; int age; boolean dead; Cube() { pos = new Vec3(); vel = new Vec3(); acc = new Vec3(); vr = PI * random(-0.1, 0.1); dead = true; } void reset(Vec2 p) { if(dead) { pos.set(p); vel.rand(-2, 2); acc.rand(-0.05, 0.05); r = 0; age = 0; dead = false; } } void reset(Vec2 p, float a) { if(dead) { pos.set(p); vel.set(cos(a), sin(a), 0); acc.set(0, 0, 0); r = 0; age = 0; dead = false; } } void update() { if(!dead) { vel.add(acc); pos.add(vel); r += vr; dim = 10 * (1 - age * IMAX_AGE); age += 1; if(age >= MAX_AGE) dead = true; } } void draw() { if(!dead) drawBox(pos.x, pos.y, pos.z, dim, dim, dim, r); } }