dpat fixes
[SugarCubes.git] / DanHorwitz.pde
index 96101809f59680b0bf91b23f0d156db0f04ddc2f..a8c013618783f5cd8f62bb934c9268b51a0b9238 100755 (executable)
@@ -15,7 +15,7 @@ public class Pong extends DPat {
                addModulator(y  = new SinLFO(cRad, mMax.y - cRad, 0)).trigger();        y.modulateDurationBy(dy);\r
                addModulator(z  = new SinLFO(cRad, mMax.z - cRad, 0)).trigger();        z.modulateDurationBy(dz);\r
            pSize       = addParam      ("Size"                 , 0.4   );\r
-           pChoose = addPick   ("Animiation"   , 0     , 3, new String[] {"Pong", "Ball", "Cone"}      );\r
+           pChoose = addPick   ("Animiation"   , 0, 2, new String[] {"Pong", "Ball", "Cone"}   );\r
        }\r
 \r
        void    StartRun(double deltaMs)        { cRad = mMax.x*pSize.Val()/6; }\r
@@ -50,8 +50,7 @@ public class Noise extends DPat
 {\r
        int                     CurAnim, iSymm;\r
        int             XSym=1,YSym=2,RadSym=3;\r
-       float           zTime   = random(10000), zTheta=0, zSin, zCos;\r
-       float           rtime   = 0, ttime      = 0, transAdd=0;\r
+       float           zTime , zTheta=0, zSin, zCos, rtime, ttime, transAdd;\r
        DParam          pSpeed , pDensity, pRotZ;\r
        Pick            pChoose, pSymm;\r
        int                     _ND = 4;\r
@@ -61,11 +60,12 @@ public class Noise extends DPat
                super(glucose);\r
                pRotZ   = addParam("RotZ"        , .5 );        pSpeed          = addParam("Fast", .55);\r
                pDensity= addParam("Dens"        , .5);\r
-               pSymm   = addPick("Symmetry" , 0, 4, new String[] {"None", "X", "Y", "Radial"}  );\r
-               pChoose = addPick("Animation", 1, 6, new String[] {"Drip", "Cloud", "Rain", "Fire", "Machine", "Spark"} );\r
+               pSymm   = addPick("Symmetry" , 0, 3, new String[] {"None", "X", "Y", "Radial"}  );\r
+               pChoose = addPick("Animation", 1, 5, new String[] {"Drip", "Cloud", "Rain", "Fire", "Machine", "Spark"} );\r
                for (int i=0; i<_ND; i++) N[i] = new NDat();\r
        }\r
 \r
+       void StartPattern() { zTime = random(500); zTheta=0; rtime = 0; ttime = 0; transAdd=0; }\r
        void StartRun(double deltaMs) {\r
                zTime   += deltaMs*(pSpeed.Val()-.5)*.002       ;\r
                zTheta  += deltaMs*(pRotZ .Val()-.5)*.01        ;\r
@@ -150,10 +150,10 @@ public class Play extends DPat
                                                                        prvR    = dstR;         dstR    = random(mCtr.y);                                                                       }\r
        }\r
        int             nBeats  =       0;\r
-       DParam  pAmp, pRad;\r
+       DParam  pAmp, pRadius, pBounce;\r
        DParam  pRotX, pRotY, pRotZ;\r
 \r
-       float   t,amp;\r
+       float   t,amp,rad,bnc;\r
        rAngle  a1 = new rAngle(), a2 = new rAngle(),\r
                        a3 = new rAngle(), a4 = new rAngle();\r
        xyz             cPrev   = new xyz(), cRand      = new xyz(),\r
@@ -173,17 +173,25 @@ public class Play extends DPat
                pRotX           = addParam("RotX", .5);\r
                pRotY           = addParam("RotY", .5);\r
                pRotZ           = addParam("RotZ", .5);\r
-           pAmp                = addParam("Amp" , .2);\r
-           pRad                = addParam("Rad"        , .1            );\r
-               pTempoMult      = addPick ("TMult"      , 0 , 6         , new String[] {"1x", "2x", "4x", "8x", "16x", "Rand"   }       );\r
-               pTimePattern= addPick ("TPat"   , 6 , 8         , new String[] {"Bounce", "Sin", "Roll", "Quant", "Accel", "Deccel", "Slide", "Rand"}   );\r             pShape          = addPick ("Shape"      , 8 , 12        , new String[] {"Line", "Tap", "V", "RandV", "Pyramid", "Wings", "W2", "Clock",\r
-                                                                                                                                       "RSphere", "Sphere", "Cone", "Noise" }                                  );\r
-               pForm           = addPick ("Form"       , 0 , 3         , new String[] {"Bar", "Volume", "Fade"}                                                                );\r
+           pRadius             = addParam("Rad"        , .1    );\r
+               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"      , 13, 15        , new String[] {"Line", "Tap", "V", "RandV",\r
+                                                                                                                                       "Pyramid", "Wings", "W2", "Clock",\r
+                                                                                                                                       "Triangle", "Quad", "Sphere", "Cone",\r
+                                                                                                                                       "Noise", "Wave", "?", "?"}                                              );\r
+               pForm           = addPick ("Form"       , 2 , 2         , new String[] {"Bar", "Volume", "Fade"}                                                                                                );\r
        }\r
 \r
+\r
+float zTime = random(1000);\r
        void StartRun(double deltaMs) {\r
+               zTime += deltaMs*.001; zTime = zTime % 1000.;\r
                t       = lx.tempo.rampf();\r
                amp = pAmp.Val();\r
+               rad     = pRadius.getValuef();\r
+               bnc     = pBounce.getValuef();          \r
 \r
                Theta   .set(pRotX.Val()*PI*2, pRotY.Val()*PI*2, pRotZ.Val()*PI*2);\r
                TSin    .set(sin(Theta.x), sin(Theta.y), sin(Theta.z));\r
@@ -220,7 +228,6 @@ public class Play extends DPat
                        case 6:         t = .5*(1-cos(PI*t));                                   break;  // slide\r
                }\r
                \r
-               \r
                cMid.set                (cPrev);        cMid.interpolate        (t,cRand);\r
                cMidNorm.set    (cMid);         cMidNorm.setNorm();\r
 \r
@@ -235,46 +242,60 @@ public class Play extends DPat
                Pn.set(Px); Pn.setNorm();\r
 \r
                float mp        = min(Pn.x, Pn.z);\r
-               float yt        = map(t,0,1,.5-amp/2,.5+amp/2);\r
-               float rad       = pRad.getValuef();\r
+               float yt        = map(t,0,1,.5-bnc/2,.5+bnc/2);\r
+               float r;\r
 \r
                switch (pShape.Cur()) {\r
                case 0:         V.set(Pn.x, yt                                                          , Pn.z);                                                        break;  // bouncing line\r
                case 1:         V.set(Pn.x, map(cos(PI*t * Pn.x),-1,1,0,1)  , Pn.z);                                                    break;  // top tap\r
-               case 2:         V.set(Pn.x, amp*map(Pn.x<.5?Pn.x:1-Pn.x,0,.5 ,0,t-.5)+.5, Pn.z);                                break;  // V shape\r
+               case 2:         V.set(Pn.x, bnc*map(Pn.x<.5?Pn.x:1-Pn.x,0,.5 ,0,t-.5)+.5, Pn.z);                                break;  // V shape\r
                case 3:         V.set(Pn.x, Pn.x < cMidNorm.x ? map(Pn.x,0,cMidNorm.x, .5,yt) :\r
                                                                                                map(Pn.x,cMidNorm.x,1, yt,.5), Pn.z);                           break;  //  Random V shape\r
 \r
                case 4:         V.set(Pn.x,     .5*(Pn.x < cMidNorm.x ?         map(Pn.x,0,cMidNorm.x, .5,yt) :\r
                                                                                                                map(Pn.x,cMidNorm.x,1, yt,.5)) +\r
                                                        .5*(Pn.z < cMidNorm.z ?         map(Pn.z,0,cMidNorm.z, .5,yt) :\r
-                                                                                                               map(Pn.z,cMidNorm.z,1, yt,.5)), Pn.z);  break;  //  Random Pyramid shape\r
+                                                                                                               map(Pn.z,cMidNorm.z,1, yt,.5)), Pn.z);          break;  //  Random Pyramid shape\r
                                                                                                        \r
-               case 5:         V.set(Pn.x, amp*map((Pn.x-.5)*(Pn.x-.5),0,.25,0,t-.5)+.5, Pn.z);                                break;  // wings\r
-               case 6:         V.set(Pn.x, amp*map((mp  -.5)*(mp  -.5),0,.25,0,t-.5)+.5, Pn.z);                                break;  // wings\r
+               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
                                                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
 \r
-//             case 8:         return color(0,0,c1c(.9+2*pRad.getValuef() - Px.distance(a1.x,a1.y)*.03) );             // sphere - radial\r
-\r
-               case 8:         float r = amp*200;\r
-                                       return color(0,0, min(\r
+               case 8:         r = amp*200 * map(bnc,0,1,1,sin(PI*t)); return color(0,0, 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
                                                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))\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
+                                               \r
+               case 10:        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 9:         return color(0,0,c1c(.9+2*pRad.getValuef() - cMid.distance(Px)*.03) );          // sphere - radial\r
-\r
-               case 10:        return color(0,0,c1c(1 - CalcCone(Px,cMid,mCtr) * 0.02 > .5?1:0));                              // cone\r
+               case 11:        return color(0,0,c1c(1 - CalcCone(Px,cMid,mCtr) * 0.02 > .5?1:0));                              // cone\r
 \r
-               case 11:        return color(100 + noise(Pn.x,Pn.y,Pn.z + (NoiseMove+50000)/1000.)*200,\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
 \r
+               case 13:        V.set(Pn.x, map(\r
+                                                                       sin( zTime*3.7  + Pn.x*2.0*PI)\r
+                                                               +       sin( zTime*4.2  + Pn.x*1.7*PI)\r
+                                                               +       sin( -zTime*4.7  + Pn.x*2.1*PI)\r
+                                                               +       sin( -zTime*5.2  + Pn.x*1.5*PI)\r
+                                                               ,-2,2,.2,.8), Pn.z); break;\r
+                                               \r
+                                               \r
                default:        return color(0,0,0);\r
                }\r
 \r