{
int CurAnim, iSymm;
int XSym=1,YSym=2,RadSym=3;
- float zTime , zTheta=0, zSin, zCos, rtime, ttime, transAdd;
+ float zTime , zTheta=0, zSin, zCos, rtime, ttime;
DParam pSpeed , pDensity, pSharp;
Pick pChoose, pSymm;
int _ND = 4;
for (int i=0; i<_ND; i++) N[i] = new NDat();
}
- void StartPattern() { zTime = random(500); zTheta=0; rtime = 0; ttime = 0; transAdd=0; }
+ void onActive() { zTime = random(500); zTheta=0; rtime = 0; ttime = 0; }
+
void StartRun(double deltaMs) {
zTime += deltaMs*(pSpeed.Val()-.5)*.002 ;
zTheta += deltaMs*(pSpin .Val()-.5)*.01 ;
rtime += deltaMs;
iSymm = pSymm.Cur();
- transAdd = 1*(1 - constrain(rtime - ttime,0,1000)/1000);
zSin = sin(zTheta);
zCos = cos(zTheta);
N[2].set(40 ,100,100,2 ,15 ,2 ,180);
N[3].set(60 ,100,100,2 ,15 ,1.5,270); pSharp.set(.5); break; // spark
}
-
- DG.UpdateLights();
}
for (int i=0; i<_ND; i++) if (N[i].Active()) {
color CalcPoint(xyz P) {
color c = 0;
- P.RotateZ(mCtr, zSin, zCos);
+ P.rotateZ(mCtr, zSin, zCos);
if (CurAnim == 6 || CurAnim == 7) {
P.setNorm();
float zx = zTime * n.speed * n.sinAngle,
zy = zTime * n.speed * n.cosAngle;
- float b = (iSymm==RadSym ? noise(zTime*n.speed+n.xoff-Dist(P,mCtr)/n.xz)
+ float b = (iSymm==RadSym ? noise(zTime*n.speed+n.xoff-P.distance(mCtr)/n.xz)
: noise(P.x/n.xz+zx+n.xoff,P.y/n.yz+zy+n.yoff,P.z/n.zz+n.zoff))
*1.8;
b += n.den/100 -.4 + pDensity.Val() -1;
- b += transAdd;
c = blendColor(c,lx.hsb(lxh()+n.hue,100,c1c(b)),ADD);
}
return c;
}
}
- void StartPattern() { zTheta=0; }
+ void onActive() {
+ zTheta=0;
+ while (lx.tempo.bpm() > 40) lx.tempo.setBpm(lx.tempo.bpm()/2);
+ }
+
+ int KeyPressed = -1;
+ boolean noteOn(Note note) {
+ int row = note.getPitch(), col = note.getChannel();
+ if (row == 57) {KeyPressed = col; return true; }
+ return super.noteOn(note);
+ }
+
void StartRun(double deltaMs) {
t = lx.tempo.rampf();
amp = pAmp.Val();
w.move(deltaMs); if (w.bDone) waves.remove(i); else i++;
}
- if ((t<LastBeat && !pKey.b) || DG.KeyPressed>-1) {
+ if ((t<LastBeat && pShape.Cur()!=14) || KeyPressed>-1) {
waves.add(new rWave(
- pKey.b ? map(DG.KeyPressed,0,7,0,1) : random(1), // location
+ KeyPressed>-1 ? map(KeyPressed,0,7,0,1) : random(1), // location
bnc*10, // bounciness
7, // velocity
2*(1-amp))); // dampiness
- DG.KeyPressed=-1;
+ KeyPressed=-1;
if (waves.size() > 5) waves.remove(0);
}
}
color CalcPoint(xyz Px) {
- if (Theta.x != 0) Px.RotateX(mCtr, TSin.x, TCos.x);
- if (Theta.y != 0) Px.RotateY(mCtr, TSin.y, TCos.y);
- if (Theta.z != 0) Px.RotateZ(mCtr, TSin.z, TCos.z);
+ if (Theta.x != 0) Px.rotateX(mCtr, TSin.x, TCos.x);
+ if (Theta.y != 0) Px.rotateY(mCtr, TSin.y, TCos.y);
+ if (Theta.z != 0) Px.rotateZ(mCtr, TSin.z, TCos.z);
Pn.set(Px); Pn.setNorm();
case 12: return lx.hsb(lxh() + noise(Pn.x,Pn.y,Pn.z + (NoiseMove+50000)/1000.)*200,
85,c1c(Pn.y < noise(Pn.x + NoiseMove/2000.,Pn.z)*(1+amp)-amp/2.-.1 ? 1 : 0)); // noise
- case 13: float y=0; for (rWave w : waves) y += .5*w.val(Pn.x);
+ case 13:
+ case 14: float y=0; for (rWave w : waves) y += .5*w.val(Pn.x); // wave
V.set(Pn.x, .7+y, Pn.z);
break;
boolean isDone () { return pos==posStop; }
boolean atDest () { return vCur.s==vDest.s ||
- PointDist(vCur.getPoint(0), vDest.getPoint(0)) < 12 ||
- PointDist(vCur.getPoint(0), vDest.getPoint(15))< 12;}
- void setCur (dVertex _v, int _p) { p2=null; vCur=_v; pos=_p; PickNext(); }
+ pointDist(vCur.getPoint(0), vDest.getPoint(0)) < 12 ||
+ pointDist(vCur.getPoint(0), vDest.getPoint(15))< 12;}
+ void setCur (dVertex _v, int _p) { p2=null; vCur=_v; pos=_p; pickNext(); }
void setCur (dPixel _p) { setCur(_p.v, _p.pos); }
void setNext (dVertex _v, int _p, int _s) { vNext = _v; posNext = _p<<12; posStop = _s<<12; }
void setDest (dVertex _v, float _speed) { vDest = _v; destSpeed = _speed; }
- void onDone () { setCur(vNext, posNext); PickNext(); }
+ void onDone () { setCur(vNext, posNext); pickNext(); }
float minDist;
int nTurns;
boolean bRandEval;
- void Evaluate(dVertex v, int p, int s) {
+ void evaluate(dVertex v, int p, int s) {
if (v == null) return; ++nTurns;
if (bRandEval) {
if (random(nTurns) < 1) setNext(v,p,s); return; }
else {
- float d = PointDist(v.getPoint(15), vDest.getPoint(0));
+ float d = pointDist(v.getPoint(15), vDest.getPoint(0));
if (d < minDist) { minDist=d; setNext(v,p,s); }
if (d == minDist && random(2)<1) { minDist=d; setNext(v,p,s); }
}
}
- void EvalTurn(dTurn t) {
+ void evalTurn(dTurn t) {
if (t == null || t.pos0<<12 <= pos) return;
- Evaluate(t.v , t.pos1, t.pos0);
- Evaluate(t.v.opp, 16-t.pos1, t.pos0);
+ evaluate(t.v , t.pos1, t.pos0);
+ evaluate(t.v.opp, 16-t.pos1, t.pos0);
}
- void PickNext() {
+ void pickNext() {
bRandEval = random(.05+destSpeed) < .05; minDist=500; nTurns=0;
- Evaluate(vCur.c0, 0, 16); Evaluate(vCur.c1, 0, 16);
- EvalTurn(vCur.t0); EvalTurn(vCur.t1);
+ evaluate(vCur.c0, 0, 16); evaluate(vCur.c1, 0, 16);
+ evalTurn(vCur.t0); evalTurn(vCur.t1);
}
Point p1, p2; int i2;
int nTo = min(15,(pos+nMv) >> 12);
dVertex v = vCur;
- if (dDebug) { p1 = v.getPoint(nFrom); float d = (p2 == null ? 0 : PointDist(p1,p2)); if (d>5) { println("too wide! quitting: " + d); exit(); }}
+ if (dDebug) { p1 = v.getPoint(nFrom); float d = (p2 == null ? 0 : pointDist(p1,p2)); if (d>5) { println("too wide! quitting: " + d); exit(); }}
for (int i = nFrom; i <= nTo; i++) { pat.getColors()[v.ci + v.dir*i ] = clr; }
if (v.same != null) for (int i = nFrom; i <= nTo; i++) { pat.getColors()[v.same.ci + v.same.dir*i] = clr; }
if (dDebug) { p2 = v.getPoint(nTo); i2 = nTo; }
pos += nMv; return nAmount - nMv;
- }
+ }
}
//----------------------------------------------------------------------------------------------------------------------------------