                  )))))
 ;; }}}
 
-; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; {{{ Timer / Animation Stuff
+
+;; }}}
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; {{{ Timer
 (defprotocol ITimer
   (tick! [_]))
 

  ;     (let [img (<! img-chan)]
  ;       (log-js (rman/height img))
  ;       (log-js (rman/width img)))))
  ) 

;; }}}


(defn html-timer []
  (let [c (atom {:previous nil
                 :now nil}) ]
    (reify ITimer
      (tick! [_]
        (let [perf-now    (.now (aget js/window "performance"))
              new-c (assoc @c
                           :previous (:now @c)
                           :now perf-now)  ] 
          (do
            (reset! c new-c)
            (time-passed new-c)))))))

;; }}}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; {{{ Animator with Timer

(defprotocol IEveryFrame
  (get-fps [_])
  (get-ms-per-frame [_])
  (every [_ f]))

(def my-timer (html-timer))

(defn animate [callback-fn]
  (do
    (.requestAnimationFrame js/window #(animate callback-fn))
    (let [dt (tick! my-timer)]
      (when (not= dt 0)
        (callback-fn dt)))))

;;; }}}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; {{{ Main

(defonce first-time? (atom true))

(defn do-update [ dt ]
 (put! time-chan dt) )

(when @first-time?
  (do
    (swap! first-time? not)
    (animate do-update)))

(defn main []
  (do
