proposed new lattice, plus dpat changes
[SugarCubes.git] / DanHorwitz.pde
index 6c46e69b415213113408ff16a07b740136a0db48..3d72b5fddfd68c49beff96b763fc5a713c708284 100755 (executable)
@@ -21,6 +21,7 @@ public class Pong extends DPat {
        void    StartRun(double deltaMs)        { cRad = mMax.x*pSize.Val()/6; }\r
        color   CalcPoint(xyz p)                {\r
                v.set(x.getValuef(), y.getValuef(), z.getValuef());\r
+               v.z=0;p.z=0;// ignore z dimension\r
                switch(pChoose.Cur()) {\r
                case 0: vMir.set(mMax); vMir.subtract(p);\r
                                return color(0,0,c1c(1 - min(v.distance(p), v.distance(vMir))*.5/cRad));        // balls\r
@@ -162,7 +163,7 @@ public class Play extends DPat
        DParam  pAmp, pRadius, pBounce;\r
 \r
        float   t,amp,rad,bnc;\r
-       \r
+       float   zTheta=0;\r
        ArrayList<rWave> waves = new ArrayList<rWave>(10);\r
        \r
        rAngle  a1 = new rAngle(), a2 = new rAngle(),\r
@@ -184,7 +185,7 @@ public class Play extends DPat
                pBounce         = addParam("Bnc"        , .2    );\r
            pAmp                = addParam("Amp"        , .2    );\r
                pTempoMult      = addPick ("TMult"      , 0 , 5         , new String[] {"1x", "2x", "4x", "8x", "16x", "Rand"   }       );\r
-               pTimePattern= addPick ("TPat"   , 6 , 7         , new String[] {"Bounce", "Sin", "Roll", "Quant", "Accel", "Deccel", "Slide", "Rand"}   );\r             pShape          = addPick ("Shape"      , 2 , 15        , new String[] {"Line", "Tap", "V", "RandV",\r
+               pTimePattern= addPick ("TPat"   , 6 , 7         , new String[] {"Bounce", "Sin", "Roll", "Quant", "Accel", "Deccel", "Slide", "Rand"}   );\r             pShape          = addPick ("Shape"      , 3 , 15        , new String[] {"Line", "Tap", "V", "RandV",\r
                                                                                                                                        "Pyramid", "Wings", "W2", "Clock",\r
                                                                                                                                        "Triangle", "Quad", "Sphere", "Cone",\r
                                                                                                                                        "Noise", "Wave", "?", "?"}                                              );\r
@@ -208,13 +209,15 @@ public class Play extends DPat
                }\r
        }\r
 \r
+       void StartPattern() { zTheta=0; }\r
        void StartRun(double deltaMs) {\r
                t       = lx.tempo.rampf();\r
                amp = pAmp.Val();\r
                rad     = pRadius.getValuef();\r
                bnc     = pBounce.getValuef();          \r
+               zTheta  += deltaMs*(pSpin .Val()-.5)*.01;\r
 \r
-               Theta   .set(pRotX.Val()*PI*2, pRotY.Val()*PI*2, pRotZ.Val()*PI*2);\r
+               Theta   .set(pRotX.Val()*PI*2, pRotY.Val()*PI*2, pRotZ.Val()*PI*2 + zTheta);\r
                TSin    .set(sin(Theta.x), sin(Theta.y), sin(Theta.z));\r
                TCos    .set(cos(Theta.x), cos(Theta.y), cos(Theta.z));\r
 \r
@@ -278,7 +281,7 @@ public class Play extends DPat
 \r
                float mp        = min(Pn.x, Pn.z);\r
                float yt        = map(t,0,1,.5-bnc/2,.5+bnc/2);\r
-               float r;\r
+               float r,d;\r
 \r
                switch (pShape.Cur()) {\r
                case 0:         V.set(Pn.x, yt                                                          , Pn.z);                                                        break;  // bouncing line\r
@@ -295,30 +298,38 @@ public class Play extends DPat
                case 5:         V.set(Pn.x, bnc*map((Pn.x-.5)*(Pn.x-.5),0,.25,0,t-.5)+.5, Pn.z);                                break;  // wings\r
                case 6:         V.set(Pn.x, bnc*map((mp  -.5)*(mp  -.5),0,.25,0,t-.5)+.5, Pn.z);                                break;  // wings\r
 \r
-\r
-\r
-               case 7:         return color(0,0, min(\r
+               case 7:         d = min(\r
                                                distToSeg(Px.x, Px.y, a1.getX(70),a1.getY(70), mCtr.x, mCtr.y),\r
-                                               distToSeg(Px.x, Px.y, a2.getX(40),a2.getY(40), mCtr.x, mCtr.y)) <rad*40?100:0); // clock\r
+                                               distToSeg(Px.x, Px.y, a2.getX(40),a2.getY(40), mCtr.x, mCtr.y));\r
+                                       d = constrain(30*(rad*40-d),0,100);\r
+                                       return color(0,max(0,150-d), d); // clock\r
 \r
-               case 8:         r = amp*200 * map(bnc,0,1,1,sin(PI*t)); return color(0,0, min(\r
+               case 8:         r = amp*200 * map(bnc,0,1,1,sin(PI*t));\r
+                                       d = min(\r
                                                distToSeg(Px.x, Px.y, a1.getX(r),a1.getY(r), a2.getX(r),a2.getY(r)),\r
                                                distToSeg(Px.x, Px.y, a2.getX(r),a2.getY(r), a3.getX(r),a3.getY(r)),\r
                                                distToSeg(Px.x, Px.y, a3.getX(r),a3.getY(r), a1.getX(r),a1.getY(r))                             // triangle\r
-                                               ) <rad*40?100:0);\r
-                                               \r
-               case 9:         r = amp*200 * map(bnc,0,1,1,sin(PI*t)); return color(0,0, min(\r
+                                               );\r
+                                       d = constrain(30*(rad*40-d),0,100);\r
+                                       return color(0,max(0,150-d), d); // clock\r
+\r
+               case 9:         r = amp*200 * map(bnc,0,1,1,sin(PI*t));\r
+                                       d = min(\r
                                                distToSeg(Px.x, Px.y, a1.getX(r),a1.getY(r), a2.getX(r),a2.getY(r)),\r
                                                distToSeg(Px.x, Px.y, a2.getX(r),a2.getY(r), a3.getX(r),a3.getY(r)),\r
                                                distToSeg(Px.x, Px.y, a3.getX(r),a3.getY(r), a4.getX(r),a4.getY(r)),\r
                                                distToSeg(Px.x, Px.y, a4.getX(r),a4.getY(r), a1.getX(r),a1.getY(r))                             // quad\r
-                                               ) <rad*40?100:0); // shape\r
+                                       );\r
+                                       d = constrain(30*(rad*40-d),0,100);\r
+                                       return color(0,max(0,150-d), d); // clock\r
 \r
-                                               \r
-               case 10:        r = map(bnc,0,1,a1.r,amp*200*sin(PI*t)); \r
+               case 10:\r
+                                       r = map(bnc,0,1,a1.r,amp*200*sin(PI*t));\r
                                        return color(0,0,c1c(.9+2*rad - dist(Px.x,Px.y,a1.getX(r),a1.getY(r))*.03) );           // sphere\r
 \r
-               case 11:        return color(0,0,c1c(1 - CalcCone(Px,cMid,mCtr) * 0.02 > .5?1:0));                              // cone\r
+               case 11:\r
+                                       Px.z=mCtr.z; cMid.z=mCtr.z;\r
+                                       return color(0,0,c1c(1 - CalcCone(Px,cMid,mCtr) * 0.02 > .5?1:0));                              // cone\r
 \r
                case 12:        return color(100 + noise(Pn.x,Pn.y,Pn.z + (NoiseMove+50000)/1000.)*200,\r
                                                85,c1c(Pn.y < noise(Pn.x + NoiseMove/2000.,Pn.z)*(1+amp)-amp/2.-.1 ? 1 : 0));   // noise\r
@@ -330,7 +341,9 @@ public class Play extends DPat
                default:        return color(0,0,0);\r
                }\r
 \r
-               return color(0,0,c1c(1 - V.distance(Pn)/rad));\r
+               return color(0,\r
+                               150-c1c(1 - V.distance(Pn)/rad),\r
+                               c1c(1 - V.distance(Pn)/rad));\r
        }\r
 }\r
 //----------------------------------------------------------------------------------------------------------------------------------\r