Support :angle, :origin-x, and :origin-y in actor and shape entities
This commit is contained in:
@@ -18,8 +18,8 @@
|
|||||||
(draw-entity! [this screen batch]))
|
(draw-entity! [this screen batch]))
|
||||||
|
|
||||||
(defrecord TextureEntity [object] Entity
|
(defrecord TextureEntity [object] Entity
|
||||||
(draw-entity! [{:keys [^TextureRegion object x y width height scale-x scale-y
|
(draw-entity! [{:keys [^TextureRegion object x y width height
|
||||||
angle origin-x origin-y]}
|
scale-x scale-y angle origin-x origin-y]}
|
||||||
_
|
_
|
||||||
batch]
|
batch]
|
||||||
(let [x (float (or x 0))
|
(let [x (float (or x 0))
|
||||||
@@ -54,14 +54,23 @@
|
|||||||
(.draw object ^SpriteBatch batch delta-time))))
|
(.draw object ^SpriteBatch batch delta-time))))
|
||||||
|
|
||||||
(defrecord ActorEntity [object] Entity
|
(defrecord ActorEntity [object] Entity
|
||||||
(draw-entity! [{:keys [^Actor object] :as entity} _ batch]
|
(draw-entity! [{:keys [^Actor object x y width height
|
||||||
(doseq [[k v] entity]
|
scale-x scale-y angle origin-x origin-y]} _ batch]
|
||||||
(case k
|
(some->> x (.setX object))
|
||||||
:x (.setX object v)
|
(some->> y (.setY object))
|
||||||
:y (.setY object v)
|
(some->> width (.setWidth object))
|
||||||
:width (.setWidth object v)
|
(some->> height (.setHeight object))
|
||||||
:height (.setHeight object v)
|
(when (or scale-x scale-y angle)
|
||||||
nil))
|
(let [scale-x (float (or scale-x 1))
|
||||||
|
scale-y (float (or scale-y 1))
|
||||||
|
origin-x (float (or origin-x (/ (.getWidth object) 2)))
|
||||||
|
origin-y (float (or origin-y (/ (.getHeight object) 2)))
|
||||||
|
angle (float (or angle 0))]
|
||||||
|
(.setScaleX object scale-x)
|
||||||
|
(.setScaleY object scale-y)
|
||||||
|
(.setOriginX object origin-x)
|
||||||
|
(.setOriginY object origin-y)
|
||||||
|
(.setRotation object angle)))
|
||||||
(.draw object ^SpriteBatch batch 1)))
|
(.draw object ^SpriteBatch batch 1)))
|
||||||
|
|
||||||
(defrecord ModelEntity [object] Entity
|
(defrecord ModelEntity [object] Entity
|
||||||
@@ -76,20 +85,30 @@
|
|||||||
(.render renderer object attributes)))
|
(.render renderer object attributes)))
|
||||||
|
|
||||||
(defrecord ShapeEntity [object] Entity
|
(defrecord ShapeEntity [object] Entity
|
||||||
(draw-entity! [{:keys [^ShapeRenderer object type draw! x y z]}
|
(draw-entity! [{:keys [^ShapeRenderer object type draw! x y width height
|
||||||
|
angle origin-x origin-y]}
|
||||||
{:keys [^Camera camera]}
|
{:keys [^Camera camera]}
|
||||||
batch]
|
batch]
|
||||||
(let [^Matrix4 m (.getTransformMatrix object)
|
(when (or x y)
|
||||||
x (float (or x 0))
|
(let [^Matrix4 m (.getTransformMatrix object)
|
||||||
y (float (or y 0))
|
x (float (or x 0))
|
||||||
z (float (or z 0))]
|
y (float (or y 0))]
|
||||||
(.setTranslation m x y z)
|
(.setTranslation m x y 0)
|
||||||
(.setTransformMatrix object m))
|
(.setTransformMatrix object m)))
|
||||||
(when batch
|
(when batch
|
||||||
(.end ^SpriteBatch batch))
|
(.end ^SpriteBatch batch))
|
||||||
(when camera
|
(when camera
|
||||||
(.setProjectionMatrix object (. camera combined)))
|
(.setProjectionMatrix object (. camera combined)))
|
||||||
(.begin object type)
|
(.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!)
|
(draw!)
|
||||||
(.end object)
|
(.end object)
|
||||||
(when batch
|
(when batch
|
||||||
|
|||||||
Reference in New Issue
Block a user