Make reset() a top-level SCPattern function, invoked from APC midi handler, patterns...
[SugarCubes.git] / MarkSlee.pde
index 81b26299a013374b4b8d6a42f22fd119d0bab6d1..fde5fc7eda9a7b828652ba2b25c0335ca20d6a44 100644 (file)
@@ -173,11 +173,13 @@ class Pulley extends SCPattern {
     }
 
     // A little silliness to test the grid API    
-    for (int i = 0; i < 7; ++i) {
-      for (int j = 0; j < 8; ++j) {
-        int gi = (int) constrain(j * NUM_DIVISIONS / 8, 0, NUM_DIVISIONS-1);
-        float b = 1 - 4.*abs((6-i)/7. - gravity[gi].getValuef() / model.yMax);
-        midiEngine.grid.setState(i, j, (b < 0) ? 0 : 1);
+    if (midiEngine != null && midiEngine.getFocusedPattern() == this) {
+           for (int i = 0; i < 5; ++i) {
+        for (int j = 0; j < 8; ++j) {
+          int gi = (int) constrain(j * NUM_DIVISIONS / 8, 0, NUM_DIVISIONS-1);
+          float b = 1 - 4.*abs((6-i)/6. - gravity[gi].getValuef() / model.yMax);
+          midiEngine.grid.setState(i, j, (b < 0) ? 0 : 3);
+        }
       }
     }
     
@@ -1199,6 +1201,7 @@ class ColorFuckerEffect extends SCEffect {
   final BasicParameter desat = new BasicParameter("DSAT", 0);
   final BasicParameter sharp = new BasicParameter("SHARP", 0);
   final BasicParameter soft = new BasicParameter("SOFT", 0);
+  final BasicParameter mono = new BasicParameter("MONO", 0);
   final BasicParameter invert = new BasicParameter("INVERT", 0);
   final BasicParameter hueShift = new BasicParameter("HSHFT", 0);
   
@@ -1210,6 +1213,7 @@ class ColorFuckerEffect extends SCEffect {
     addParameter(desat);
     addParameter(sharp);
     addParameter(soft);
+    addParameter(mono);
     addParameter(invert);
     addParameter(hueShift);
   }
@@ -1223,10 +1227,14 @@ class ColorFuckerEffect extends SCEffect {
     float hMod = hueShift.getValuef();
     float fSharp = 1/(1.0001-sharp.getValuef());
     float fSoft = soft.getValuef();
+    boolean mon = mono.getValuef() > 0.5;
     boolean ivt = invert.getValuef() > 0.5;
-    if (bMod < 1 || sMod < 1 || hMod > 0 || fSharp > 0 || ivt || fSoft > 0) {
+    if (bMod < 1 || sMod < 1 || hMod > 0 || fSharp > 0 || ivt || mon || fSoft > 0) {
       for (int i = 0; i < colors.length; ++i) {
         lx.RGBtoHSB(colors[i], hsb);
+        if (mon) {
+          hsb[0] = lx.getBaseHuef() / 360.;
+        }
         if (ivt) {
           hsb[2] = 1 - hsb[2];
         }