   }
 }
 
-#define TTIME 20000
+
 
 void loop() {
   unsigned long now = millis();
   unsigned long next = now + (1000 / FRAMES_PER_SECOND);
+
+  Button.CheckBP();
+  if (now >= nextAnimationTime) {
+    NextAnimation(0);
+    nextAnimationTime = now + TIME_CYCLE;
+  }
 
   // Cycle current and previous animations
   // Continue fading between current animations
   if (anim)
     anim->loop(now);
-  if (lastAnim)
+  if (lastAnim) {
     lastAnim->loop(now);
-  if (animTransition) {
     animTransition = qsub8(animTransition, 3);
     if (!animTransition) {
       delete lastAnim;
       lastAnim = (Animation *)0;
     }
   }
-
-  // Transition if necessary 
-  // TODO: this bad code is here as placeholder until I can write something that's button reactive
-  static unsigned long xx = 0;
-  if (xx < 1 && millis() > 0) {
-    xx = 1;
-    beginAnimation(new Stripes());
-  } else if (xx < 2 && millis() > TTIME) {
-    xx = 2;
-    beginAnimation(new Plasma());
-  } else if (xx < 3 && millis() > TTIME*2) {
-    xx = 3;
-    beginAnimation(new Noise());
-  } else if (xx < 4 && millis() > TTIME*3) {
-    xx = 4;
-    beginAnimation(new Descent( true ));
-  } else if (xx < 5 && millis() > TTIME*4) {
-    xx = 5;
-    beginAnimation(new Fire());
-  } else if (xx < 6 && millis() > TTIME*5) {
-    xx = 6;
-    beginAnimation(new Plasma());
-  }
-
+  
   // Map from the virtual matrix to the actual LEDs, blending previous
   for(int i = 0; i < NUM_LEDS; i++) {
    if (anim)

Animation *lastAnim;
fract8 animTransition;


void setup() { 
  // sanity check delay - allows reprogramming if accidently blowing power w/leds

  anim = newAnim;
  newAnim->start();
}


