Add size parameter to pulley
[SugarCubes.git] / MarkSlee.pde
index c6d9eae7f0706d3ade4e12baf332258111097d14..71e8660fe2e3a99d41868a667c41a08436750ea9 100644 (file)
@@ -7,6 +7,9 @@ class Pulley extends SCPattern {
   private final Click reset = new Click(9000);
   private boolean isRising = false;
   
+  private BasicParameter sz = new BasicParameter("SIZE", 0.5);
+  private BasicParameter beatAmount = new BasicParameter("BEAT", 0.1);
+  
   Pulley(GLucose glucose) {
     super(glucose);
     for (int i = 0; i < NUM_DIVISIONS; ++i) {
@@ -14,6 +17,8 @@ class Pulley extends SCPattern {
       addModulator(delays[i] = new Click(0));
     }
     addModulator(reset).start();
+    addParameter(sz);
+    addParameter(beatAmount);
     trigger();
   }
   
@@ -63,12 +68,17 @@ class Pulley extends SCPattern {
       }
     }
     
+    float fPos = 1 - lx.tempo.rampf();
+    if (fPos < .2) {
+      fPos = .2 + 4 * (.2 - fPos);
+    }
+    float falloff = 100. / (3 + sz.getValuef() * 36 + fPos * beatAmount.getValuef()*48);
     for (Point p : model.points) {
       int i = (int) constrain((p.x - model.xMin) * NUM_DIVISIONS / (model.xMax - model.xMin), 0, NUM_DIVISIONS-1);
       colors[p.index] = color(
         (lx.getBaseHuef() + abs(p.x - model.cx)*.8 + p.y*.4) % 360,
         constrain(130 - p.y*.8, 0, 100),
-        max(0, 100 - abs(p.y - gravity[i].getValuef())*4.)
+        max(0, 100 - abs(p.y - gravity[i].getValuef())*falloff)
       );
     }
   }