   (update [this] (update-animated-sprite this))
   (update [this scene] (update-animated-sprite this scene)))
 
-(defn ^:export sprite
+(defn animated-sprite
+  ([{:keys [animation] :as data}]
+   (let [{:keys [cell-width cell-height]} (:spritesheet animation)]
+     (merge (AnimatedSprite. animation cell-width cell-height 0 0 0 0)
+            data)))
+  ([{:keys [spritesheet] :as animation} x y]
+   (let [{:keys [cell-width cell-height]} spritesheet]
+     (animated-sprite animation cell-width cell-height x y 0 0)))
+  ([animation width height x y]
+   (animated-sprite animation width height x y 0 0))
+  ([animation width height x y velocity-x velocity-y]
+   (AnimatedSprite. animation width height x y velocity-x velocity-y)))
+
+(defn ^:export new
   "Creates a sprite record based on graphics resource"
   [& args]
   (let [arg-1 (first args)

(defn ^:export move [{:keys [x y velocity-x velocity-y] :as sprite}]
  "Moves a sprite based on its velocity on the x and y-axis"
  (assoc sprite
    :x (if velocity-x (+ x velocity-x) x)
    :y (if velocity-x (+ y velocity-y) y)))

(defn- update-sprite
  [& [sprite scene :as args]]

  (render [this context])
  (update [this] [this scene]))

(defrecord StaticImage [image width height x y]
  TypeInfo
  (get-type [this] :static-image)
  SpriteActions
  (render [this context] (graphic/render-image context (:image image) x y width height))
  (update [this] this)
  (update [this scene] scene))

(defn ^:export static-image
  ([{:keys [width height] :as image} x y]
   (static-image image width height x y))
  ([image width height x y]
   (StaticImage. image width height x y)))

(defrecord ImageSprite [image width height x y velocity-x velocity-y]
  TypeInfo
  (get-type [this] :image-sprite)
  SpriteActions
