     (when-let [s (get @slide-states (dec (:slide @state)))]
       (reset! state s))))
 
+(defn skip-slide!
+  "Go to next slide skipping transitions if we can."
+  []
+  (when-not @in-transition?
+    (when-let [s (get @slide-states (inc (:slide @state)))]
+      (reset! state s))))
+
 (def key-names
   {37 :left
    38 :up

  (draw-static! (:static @state))

  (draw-js-face! (:js-face @state))
  

  (restore!))

                 {:a :_ :b 1 :duration 1} [:static :soundscript :alpha]
                 {:a :_ :b (* 3 angle) :duration 1} [:static :sphere :angle]
                 )))])

     ;; fade out staticsphere details
     #(go
        (<! (multi-animate!
              {:a :_ :b 0 :duration 1} [:static :typescript :alpha]
              {:a :_ :b 0 :duration 1} [:static :flow :alpha]
              {:a :_ :b 0 :duration 1} [:static :soundscript :alpha]
              {:a :_ :b 0 :duration 1} [:cam :x]
              {:a :_ :b 0 :duration 1} [:static :sphere :angle]
              {:a :_ :b 0 :duration 1} [:static :title :alpha]
              {:a :_ :b 0.2 :duration 2} [:cam :zoom]
              )))

     ;; show coffeescript
     #(go
        (swap! state assoc :enable-orbits true)
        (<! (multi-animate!
              {:a :_ :b 1 :duration 1} [:coffeescript :alpha]
              )))

     ;; show dart
     #(go
        (<! (multi-animate!
              {:a :_ :b 1 :duration 1} [:dart :alpha]
              {:a :_ :b 0.1 :duration 1} [:cam :zoom])))

     ;; show clojurescript
     #(go
        (<! (multi-animate!
              {:a :_ :b 1 :duration 1} [:clojurescript :alpha]
              {:a :_ :b 0.05 :duration 1} [:cam :zoom])))

     ])))

