Allow render-sorted! to use a custom sorting function

This commit is contained in:
oakes
2014-04-03 23:59:54 -04:00
parent eb60b9ff3b
commit d34568389b

View File

@@ -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.