   (draw-entity! [this screen batch]))
 
 (defrecord TextureEntity [object] Entity
-  (draw-entity! [{:keys [^TextureRegion object x y width height scale-x scale-y
-                         angle origin-x origin-y]}
+  (draw-entity! [{:keys [^TextureRegion object x y width height
+                         scale-x scale-y angle origin-x origin-y]}
                  _
                  batch]
     (let [x (float (or x 0))

      (.draw object ^SpriteBatch batch delta-time))))

(defrecord ActorEntity [object] Entity
  (draw-entity! [{:keys [^Actor object] :as entity} _ batch]
    (doseq [[k v] entity]
      (case k
        :x (.setX object v)
        :y (.setY object v)
        :width (.setWidth object v)
        :height (.setHeight object v)
        nil))
    (.draw object ^SpriteBatch batch 1)))

(defrecord ModelEntity [object] Entity

    (.render renderer object attributes)))

(defrecord ShapeEntity [object] Entity
  (draw-entity! [{:keys [^ShapeRenderer object type draw! x y width height
                         angle origin-x origin-y]}
                 {:keys [^Camera camera]}
                 batch]
    (when (or x y)
      (let [^Matrix4 m (.getTransformMatrix object)
            x (float (or x 0))
            y (float (or y 0))]
        (.setTranslation m x y 0)
        (.setTransformMatrix object m)))
    (when batch
      (.end ^SpriteBatch batch))
    (when camera
      (.setProjectionMatrix object (. camera combined)))
    (.begin object type)
    (when angle
      (let [x (float (or x 0))
            y (float (or y 0))
            origin-x (float (or origin-x (/ (or width 0) 2)))
            origin-y (float (or origin-y (/ (or height 0) 2)))
            angle (float (or angle 0))]
        (.identity object)
        (.translate object (+ x origin-x) (+ y origin-y) 0)
        (.rotate object 0 0 1 angle)))
    (draw!)
    (.end object)
    (when batch
