Allow render-sorted! to use a custom sorting function
This commit is contained in:
@@ -386,29 +386,37 @@ specify which layers to render with or without.
|
|||||||
y (range (- (.getHeight l) 1) -1 -1)]
|
y (range (- (.getHeight l) 1) -1 -1)]
|
||||||
{:x x :y y}))))
|
{:x x :y y}))))
|
||||||
|
|
||||||
(defn render-sorted!
|
(defn ^:private sort-by-y
|
||||||
"Draws the supplied tiled-map layers and entities, sorted by latitude.
|
[entities]
|
||||||
|
(sort-by :y #(compare %2 %1) entities))
|
||||||
|
|
||||||
(render-sorted! screen [\"walls\"] entities)"
|
(defn render-sorted!
|
||||||
[{:keys [^BatchTiledMapRenderer renderer
|
"Draws the supplied tiled-map layers and entities. If no sort function is
|
||||||
^Camera camera
|
supplied, they will be sorted by :y (latitude).
|
||||||
update-fn!]
|
|
||||||
:as screen}
|
(render-sorted! screen [\"walls\"] entities)
|
||||||
layer-names entities]
|
(render-sorted! screen #(sort-by :x %) [\"walls\"] entities)"
|
||||||
(doseq [ln layer-names]
|
([screen layer-names entities]
|
||||||
(when-not (get-in screen [:layers ln])
|
(render-sorted! sort-by-y screen layer-names entities))
|
||||||
(update-fn! assoc-in [[:layers ln] (split-layer screen ln)])))
|
([{:keys [^BatchTiledMapRenderer renderer
|
||||||
(when camera (.setView renderer camera))
|
^Camera camera
|
||||||
(let [^SpriteBatch batch (.getSpriteBatch renderer)]
|
update-fn!]
|
||||||
(.begin batch)
|
:as screen}
|
||||||
(doseq [entity (->> (map #(get-in screen [:layers %]) layer-names)
|
sort-fn layer-names entities]
|
||||||
(apply concat entities)
|
(doseq [ln layer-names]
|
||||||
(sort-by :y #(compare %2 %1)))]
|
(when-not (get-in screen [:layers ln])
|
||||||
(if-let [layer (:layer entity)]
|
(update-fn! assoc-in [[:layers ln] (split-layer screen ln)])))
|
||||||
(.renderTileLayer renderer layer)
|
(when camera (.setView renderer camera))
|
||||||
(e/draw-entity! entity batch)))
|
(let [^SpriteBatch batch (.getSpriteBatch renderer)]
|
||||||
(.end batch))
|
(.begin batch)
|
||||||
entities)
|
(doseq [entity (->> (map #(get-in screen [:layers %]) layer-names)
|
||||||
|
(apply concat entities)
|
||||||
|
sort-fn)]
|
||||||
|
(if-let [layer (:layer entity)]
|
||||||
|
(.renderTileLayer renderer layer)
|
||||||
|
(e/draw-entity! entity batch)))
|
||||||
|
(.end batch))
|
||||||
|
entities))
|
||||||
|
|
||||||
(defmacro render-shapes!
|
(defmacro render-shapes!
|
||||||
"Draws shapes with a `shape` renderer.
|
"Draws shapes with a `shape` renderer.
|
||||||
|
|||||||
Reference in New Issue
Block a user