   (doseq [callback (get (get-scene-hooks scn) hook)]
     (apply callback args)))
 
+;; methods on scenes
+
 (defn start-interaction
   "Starts a given interaction for scene. interaction must be a
   function from a scene to a GInteraction object."

  [#^GScene scn]
  (.zoom scn 1.0))

(defn- get-scene-hooks
  "Returns the hooks with their corresponding callbacks for scene."
  [#^GScene scn]
  (:hooks (.getUserData scn)))

(defn- set-scene-hooks
  "Sets hash-map of hooks to callbacks as scene hooks."
  [#^GScene scn, hooks]
  (.setUserData scn (assoc (.getUserData scn) :hooks hooks)))

(defn add-hook
  "Adds hook for scene."
  [#^GScene scn, hook]
  (when (not (contains? (get-scene-hooks scn) hook))
    (.setUserData scn (assoc-in (.getUserData scn) [:hooks hook] []))))

(defn set-callback-for-hook
  "Sets given functions as callbacks for hook on scene."

  []
  (GWindow. Color/WHITE))

;; setting custom data

(defn- initialize-scene
  "Initializies given scene."
  [#^GScene scn]
  (.setUserData scn (ref {}))
  scn)

(defn add-data-to-scene
  "Adds given data under keyword to scene."
  [#^GScene scn, key, data]
  (dosync
   (alter (.getUserData scn) assoc key data)))

(defn update-data-for-scene
  "Updates data item associated with keys in scene."
  [#^GScene scn, keys, data]
  (dosync
   (alter (.getUserData scn) assoc-in keys data)))

(defn remove-data-from-scene
  "Removes all data associated with key from scene."
  [#^GScene scn, key]
  (dosync
   (alter (.getUserData scn) disj key)))

(defn get-data-from-scene
  "Returns data associated with key from scene."
  [#^GScene scn, key]
  (-> scn .getUserData deref (get key)))

(defn make-scene
  "Makes scene on given window."
