       :on-render ; the screen must be rendered (many times per second)
       (fn [screen entities]
         (println (:delta-time screen)) ; time (ms) elapsed since last frame
+        (println (:total-time screen)) ; time (ms) elapsed since :on-show
         entities)
       :on-hide ; the screen was replaced
       (fn [screen entities]


(defn ^:private reset-changed!
  [e-atom e-old e-new]
  (when (not= e-old e-new)
    (compare-and-set! e-atom e-old e-new)))

(defn ^:private normalize
  [entities]


    (set-screen! my-game main-screen text-screen)"
  [^Game game-object & screen-objects]
  (let [run-fn! (fn [k & args]
                  (doseq [screen screen-objects]
                    (apply (get screen k) args)))]
    (.setScreen game-object
      (reify Screen
        (show [this]
          (input! :set-input-processor (InputMultiplexer.))
          (run-fn! :show)
          (doseq [{:keys [screen]} screen-objects]
            (doseq [[_ listener] (:input-listeners @screen)]
              (add-input! listener))))
        (render [this d] (run-fn! :render d))
        (hide [this] (run-fn! :hide))
        (pause [this] (run-fn! :pause))
        (resize [this w h] (run-fn! :resize w h))
        (resume [this] (run-fn! :resume))
        (dispose [this])))))

(defn set-screen-wrapper!
  "Sets a function that wraps around all screen functions, allowing you to
