X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=DanUtil.pde;h=d41716a6e1d09e19af9716bee503547b4358433e;hb=935819e636e2487e42859b5cbabb9b4ba2a326ea;hp=37dc95602bde719d0feb50af636474b39d38bb36;hpb=e530876366cf4c07a5e77b7e8890dff376cbcd3c;p=SugarCubes.git
diff --git a/DanUtil.pde b/DanUtil.pde
index 37dc956..d41716a 100644
--- a/DanUtil.pde
+++ b/DanUtil.pde
@@ -1,15 +1,14 @@
//----------------------------------------------------------------------------------------------------------------------------------
xyz mMax, mCtr, mHalf;
int NumApcRows = 5, NumApcCols = 8;
-DGlobals DG = new DGlobals();
boolean btwn (int a,int b,int c) { return a >= b && a <= c; }
boolean btwn (double a,double b,double c) { return a >= b && a <= c; }
float interp (float a, float b, float c) { return (1-a)*b + a*c; }
float randctr (float a) { return random(a) - a*.5; }
float min (float a, float b, float c, float d) { return min(min(a,b),min(c,d)); }
-
-float distToSeg (float x, float y, float x1, float y1, float x2, float y2) {
+float pointDist(Point p1, Point p2) { return dist(p1.x,p1.y,p1.z,p2.x,p2.y,p2.z); }
+float distToSeg(float x, float y, float x1, float y1, float x2, float y2) {
float A = x - x1, B = y - y1, C = x2 - x1, D = y2 - y1;
float dot = A * C + B * D, len_sq = C * C + D * D;
float xx, yy,param = dot / len_sq;
@@ -108,99 +107,58 @@ public class xyz { float x,y,z; // extends pVector; eliminate half of the functi
void interpolate(float i, xyz d) { x = interp(i,x,d.x); y = interp(i,y,d.y); z = interp(i,z,d.z); }
}
//----------------------------------------------------------------------------------------------------------------------------------
-public class DGlobals {
- boolean bInit = false;
+public class DPat extends SCPattern
+{
MidiOutput APCOut = null;
- MidiInput APCIn = null, OxygenIn = null;
- DPat CurPat = null;
- int KeyPressed = -1;
- boolean bSustain = false;
-
-
- float Sliders[] = new float [] {1,0,0,0,0,0,0,0};
- String SliderText[] = new String[] {"Level", "??", "Spark", "Xwave", "Ywave", "??", "??", "??", "??"};
-
- void SetNoteOn (int row, int col, int clr){ if (APCOut != null) APCOut.sendNoteOn (col, row, clr); }
- void SetNoteOff (int row, int col, int clr){ if (APCOut != null) APCOut.sendNoteOff (col, row, clr); }
- void SetKnob (int cc , int c , int v ){ if (APCOut != null) APCOut.sendController (cc , c, v); }
-
- DBool GetBool (int i) { return (DBool)CurPat.bools .get(i); }
- Pick GetPick (int i) { return (Pick) CurPat.picks .get(i); }
- DParam GetParam(int i) { return (DParam) CurPat.params.get(i); }
-
- float _Level () { return Sliders[0]; }
- float _Spark () { return Sliders[2]; }
- float _XWave () { return Sliders[3]; }
- float _YWave () { return Sliders[4]; }
- void Init () {
- if (bInit) return; bInit=true;
- for (MidiOutputDevice o: RWMidi.getOutputDevices()) { if (o.toString().contains("APC")) { APCOut = o.createOutput(); break;}}
- for (MidiInputDevice i: RWMidi.getInputDevices ()) { if (i.toString().contains("APC")) { i.createInput (this); break;}}
- }
-
- boolean isFocused () { return CurPat != null && CurPat == midiEngine.getFocusedDeck().getActivePattern(); }
- void Deactivate (DPat p) { if (p != CurPat) return; uiDebugText.setText(""); CurPat = null; }
- void Activate (DPat p) {
- bSustain = false;
- CurPat = p;
- while (lx.tempo.bpm() > 40) lx.tempo.setBpm(lx.tempo.bpm()/2);
- for (int i=0; i
40) lx.tempo.setBpm(lx.tempo.bpm()/2);
+ for (int i=0; i picks = new ArrayList ();
+ ArrayList bools = new ArrayList ();
+ ArrayList params = new ArrayList();
- if (row == 84 && col==0) { Activate(CurPat); CurPat.StartPattern(); return; }
- if (row == 85 && col==0) { bSustain=true; return; }
-
- if (row == 52) { KeyPressed = col; return; }
- println("row: " + row + " col: " + col);
- }
-}
-//----------------------------------------------------------------------------------------------------------------------------------
-public class DPat extends SCPattern
-{
- ArrayList picks = new ArrayList(); // should be ArrayList picks = new ArrayList();
- ArrayList params = new ArrayList();
- ArrayList bools = new ArrayList();
int nMaxRow = 53;
float LastQuant = -1, LastJog = -1;
float[] xWaveNz, yWaveNz;
@@ -209,9 +167,9 @@ public class DPat extends SCPattern
xyz modmin;
float NoiseMove = random(10000);
- DParam pBlank, pBlank2, pRotX, pRotY, pRotZ, pSpin, pTransX, pTransY;
+ DParam pSpark, pWave, pRotX, pRotY, pRotZ, pSpin, pTransX, pTransY;
- DBool pXsym, pYsym, pRsym, pXdup, pXtrip, pJog, pKey;
+ DBool pXsym, pYsym, pRsym, pXdup, pXtrip, pJog, pGrey;
float lxh () { return lx.getBaseHuef(); }
float Dist (xyz a, xyz b) { return dist(a.x,a.y,a.z,b.x,b.y,b.z); }
int c1c (float a) { return round(100*constrain(a,0,1)); }
@@ -223,12 +181,6 @@ public class DPat extends SCPattern
void StartPattern() { }
void StartRun(double deltaMs) { }
color CalcPoint(xyz p) { return lx.hsb(0,0,0); }
- boolean IsActive() { return this == DG.CurPat; }
- boolean IsFocused() { return midiEngine != null && midiEngine.getFocusedDeck() != null &&
- this == midiEngine.getFocusedDeck().getActivePattern(); }
- void onInactive() { UpdateState(); }
- void onActive () { UpdateState(); StartPattern(); }
- void UpdateState() { if (IsFocused() != IsActive()) { if (IsFocused()) DG.Activate(this); else DG.Deactivate(this); } }
color blend3(color c1, color c2, color c3){ return blendColor(c1,blendColor(c2,c3,ADD),ADD); }
DParam addParam(String label, double value) {
@@ -247,8 +199,8 @@ public class DPat extends SCPattern
DPat(GLucose glucose) {
super(glucose);
- pBlank = addParam("", 0);
- pBlank2 = addParam("" , .5);
+ pSpark = addParam("Sprk", 0);
+ pWave = addParam("Wave", 0);
pTransX = addParam("TrnX", .5);
pTransY = addParam("TrnY", .5);
pRotX = addParam("RotX", .5);
@@ -257,12 +209,12 @@ public class DPat extends SCPattern
pSpin = addParam("Spin", .5);
nPoints = model.points.size();
- pXsym = new DBool("X-SYM", false, 49, 0); bools.add(pXsym );
- pYsym = new DBool("Y-SYM", false, 49, 1); bools.add(pYsym );
- pRsym = new DBool("R-SYM", false, 49, 2); bools.add(pRsym );
- pXdup = new DBool("X-DUP", false, 49, 3); bools.add(pXdup );
- pJog = new DBool("JOG" , false, 49, 4); bools.add(pJog );
- pKey = new DBool("KBD" , false, 49, 5); bools.add(pKey );
+ pXsym = new DBool("X-SYM", false, 48, 0); bools.add(pXsym );
+ pYsym = new DBool("Y-SYM", false, 48, 1); bools.add(pYsym );
+ pRsym = new DBool("R-SYM", false, 48, 2); bools.add(pRsym );
+ pXdup = new DBool("X-DUP", false, 48, 3); bools.add(pXdup );
+ pJog = new DBool("JOG" , false, 48, 4); bools.add(pJog );
+ pGrey = new DBool("GREY" , false, 48, 5); bools.add(pGrey );
modmin = new xyz(model.xMin, model.yMin, model.zMin);
mMax = new xyz(model.xMax, model.yMax, model.zMax); mMax.subtract(modmin);
@@ -273,18 +225,18 @@ public class DPat extends SCPattern
//println (model.xMin + " " + model.yMin + " " + model.zMin);
//println (model.xMax + " " + model.yMax + " " + model.zMax);
- DG.Init();
+ for (MidiOutputDevice o: RWMidi.getOutputDevices()) { if (o.toString().contains("APC")) { APCOut = o.createOutput(); break;}}
}
void run(double deltaMs)
{
- UpdateState();
+ if (deltaMs > 100) return;
NoiseMove += deltaMs; NoiseMove = NoiseMove % 1e7;
StartRun (deltaMs);
xyz P = new xyz(), tP = new xyz(), pSave = new xyz();
xyz pTrans = new xyz(pTransX.Val()*200-100, pTransY.Val()*100-50,0);
- DG.SetText();
+ SetText();
nPoint = 0;
if (pJog.b) {
@@ -294,20 +246,22 @@ public class DPat extends SCPattern
}
// precalculate this stuff
- float yWv = DG._YWave(), xWv = DG._XWave(), sprk = DG._Spark();
- if (yWv > 0) for (int i=0; i 0) {
+ for (int i=0; i 0) for (int i=0; i 0) { P.y += sprk*randctr(50); P.x += sprk*randctr(50); P.z += sprk*randctr(50); }
- if (yWv > 0) P.y += interpWv(p.x-modmin.x, yWaveNz);
- if (xWv > 0) P.x += interpWv(p.y-modmin.y, xWaveNz);
+ if (sprk > 0) {P.y += sprk*randctr(50); P.x += sprk*randctr(50); P.z += sprk*randctr(50); }
+ if (wvAmp > 0) P.y += interpWv(p.x-modmin.x, yWaveNz);
+ if (wvAmp > 0) P.x += interpWv(p.y-modmin.y, xWaveNz);
if (pJog.b) P.add(xyzJog);
@@ -317,12 +271,8 @@ public class DPat extends SCPattern
if (pYsym.b) { tP.set(P.x,mMax.y-P.y,P.z); cNew = blendColor(cNew, CalcPoint(tP), ADD); }
if (pRsym.b) { tP.set(mMax.x-P.x,mMax.y-P.y,mMax.z-P.z); cNew = blendColor(cNew, CalcPoint(tP), ADD); }
if (pXdup.b) { tP.set((P.x+mMax.x*.5)%mMax.x,P.y,P.z); cNew = blendColor(cNew, CalcPoint(tP), ADD); }
-
- float s = lx.s(cNew);
- float b = lx.b(cNew)/100.;
- if (DG.bSustain == true) b = max(b, (float) (lx.b(cOld)/100.));
-
- colors[p.index] = lx.hsb(lx.h(cNew), s, 100 * b * DG._Level());
+ if (pGrey.b) { cNew = lx.hsb(0, 0, lx.b(cNew)); }
+ colors[p.index] = cNew;
}
}
}
@@ -355,8 +305,6 @@ class dStrip {
dStrip(Strip _s, int _i, int _row, int _col) { s = _s; row = _row; col = _col; }
}
//----------------------------------------------------------------------------------------------------------------------------------
-float PointDist(Point p1, Point p2) { return dist(p1.x,p1.y,p1.z,p2.x,p2.y,p2.z); }
-
class dPixel { dVertex v; int pos; dPixel(dVertex _v, int _pos) { v=_v; pos=_pos; } }
class dLattice {
private int iTowerStrips=0;
@@ -369,15 +317,15 @@ class dLattice {
//}
void addTurn(dVertex v0, int pos0, dVertex v1, int pos1) { dTurn t = new dTurn(pos0, v1, pos1); if (v0.t0 == null) v0.t0=t; else v0.t1=t; }
- float Dist2 (Strip s1, int pos1, Strip s2, int pos2) { return PointDist(s1.points.get(pos1), s2.points.get(pos2)); }
- float PD2 (Point p1, float x, float y, float z) { return dist(p1.x,p1.y,p1.z,x,y,z); }
- boolean SameSame (Strip s1, Strip s2) { return max(Dist2(s1, 0, s2, 0), Dist2(s1,15, s2,15)) < 5 ; } // same strut, same direction
- boolean SameOpp (Strip s1, Strip s2) { return max(Dist2(s1, 0, s2,15), Dist2(s1,15, s2,0 )) < 5 ; } // same strut, opp direction
- boolean SameBar (Strip s1, Strip s2) { return SameSame(s1,s2) || SameOpp(s1,s2); } // 2 strips on same strut
- void AddJoint (dVertex v1, dVertex v2) {
+ float dist2 (Strip s1, int pos1, Strip s2, int pos2) { return pointDist(s1.points.get(pos1), s2.points.get(pos2)); }
+ float pd2 (Point p1, float x, float y, float z) { return dist(p1.x,p1.y,p1.z,x,y,z); }
+ boolean sameSame (Strip s1, Strip s2) { return max(dist2(s1, 0, s2, 0), dist2(s1,15, s2,15)) < 5 ; } // same strut, same direction
+ boolean sameOpp (Strip s1, Strip s2) { return max(dist2(s1, 0, s2,15), dist2(s1,15, s2,0 )) < 5 ; } // same strut, opp direction
+ boolean sameBar (Strip s1, Strip s2) { return sameSame(s1,s2) || sameOpp(s1,s2); } // 2 strips on same strut
+ void addJoint (dVertex v1, dVertex v2) {
// should probably replace parallel but further with the new one
- if (v1.c0 != null && SameBar(v2.s.s, v1.c0.s.s)) return;
- if (v1.c1 != null && SameBar(v2.s.s, v1.c1.s.s)) return;
+ if (v1.c0 != null && sameBar(v2.s.s, v1.c0.s.s)) return;
+ if (v1.c1 != null && sameBar(v2.s.s, v1.c1.s.s)) return;
if (v1.c0 == null) v1.c0 = v2;
else if (v1.c1 == null) v1.c1 = v2;
}
@@ -387,10 +335,10 @@ class dLattice {
dVertex v = null; int pos=0; float d = 500;
for (int j=0; j 30) continue;
for (int k=0; k<=15; k++) {
- nd = PD2(s.s.points.get(k),p.x,p.y,p.z); if (nd < d) { v = s.v0; d=nd; pos=k; }
+ nd = pd2(s.s.points.get(k),p.x,p.y,p.z); if (nd < d) { v = s.v0; d=nd; pos=k; }
}
}
return random(2) < 1 ? new dPixel(v,pos) : new dPixel(v.opp,15-pos);
@@ -416,14 +364,14 @@ class dLattice {
for (int j=0; j0) continue;
// Are they touching at all?
@@ -431,8 +379,8 @@ class dLattice {
while (pos1 < 15 || pos2 < 15) {
float oldD = d;
- if (pos1<15) { float d2 = Dist2(s1.s, pos1+1, s2.s, pos2+0); if (d2 < d) { d=d2; pos1++; } }
- if (pos2<15) { float d2 = Dist2(s1.s, pos1+0, s2.s, pos2+1); if (d2 < d) { d=d2; pos2++; } }
+ if (pos1<15) { float d2 = dist2(s1.s, pos1+1, s2.s, pos2+0); if (d2 < d) { d=d2; pos1++; } }
+ if (pos2<15) { float d2 = dist2(s1.s, pos1+0, s2.s, pos2+1); if (d2 < d) { d=d2; pos2++; } }
if (d > 50 || oldD == d) break ;
}