// Particles.pde (part of Cubicles) // Dave Bollinger, Sep 2006 // http://www.davebollinger.com // for Processing 0115 Beta interface Mover { boolean move(); } class Walker implements Mover{ float x, y, dx, dy, ox, oy; int dir; color c; Walker(float _x, float _y, int _d) { ox = oy = -99999f; x = _x; y = _y; grid.occupy(x,y); dir = _d; dx = dxs[dir]; dy = dys[dir]; c = color(16,8,4); } boolean move() { if (random(1f) < branchLikelihood) { movers.add(new Walker(x, y, int(random(6)))); } if ((dir!=1) && (dir!=4) && (random(1f) < paintLikelihood)) { if ((dir==0) || (dir==3)) movers.add(new LightPainter(x,y,0,1)); else movers.add(new DarkPainter(x,y,0,1)); movers.add(new WhitePainter(x,y,0,-1)); } x += dx; y += dy; if ((xmaxx) || (y>maxy)) return false; if (((int)ox!=(int)x) || ((int)oy!=(int)y)) { if (grid.occupied(x,y)) return false; grid.occupy(x,y); ox = x; oy = y; } plot(x, y, c); return true; } } class Painter implements Mover { float x, y, dx, dy, ox, oy, a, da, alfa; color c; Painter(float _x, float _y, float _dx, float _dy) { ox = oy = -99999f; x = _x + _dx; y = _y + _dy; dx = _dx; dy = _dy; a = random(0.7f,1.0f); da = random(0.01f,0.03f); } boolean move() { x += dx; y += dy; a -= da; if ((xmaxx) || (y>maxy) || (a <= 0f)) return false; if (((int)ox==(int)x) && ((int)oy==(int)y)) return true; if (grid.occupied(x,y)) return false; ox = x; oy = y; plot(x, y, color(red(c),green(c),blue(c),a*a*alfa)); return true; } } class WhitePainter extends Painter { WhitePainter(float _x, float _y, float _dx, float _dy) { super(_x,_y,_dx,_dy); c = color(255,255,255); alfa = 255f; } } class LightPainter extends Painter { LightPainter(float _x, float _y, float _dx, float _dy) { super(_x,_y,_dx,_dy); c = pal.get(); alfa = 60f; } } class DarkPainter extends Painter { DarkPainter(float _x, float _y, float _dx, float _dy) { super(_x,_y,_dx,_dy); c = pal.get(); alfa = 240f; } }