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,15 +386,23 @@ 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
supplied, they will be sorted by :y (latitude).
(render-sorted! screen [\"walls\"] entities)
(render-sorted! screen #(sort-by :x %) [\"walls\"] entities)"
([screen layer-names entities]
(render-sorted! sort-by-y screen layer-names entities))
([{:keys [^BatchTiledMapRenderer renderer
^Camera camera ^Camera camera
update-fn!] update-fn!]
:as screen} :as screen}
layer-names entities] sort-fn layer-names entities]
(doseq [ln layer-names] (doseq [ln layer-names]
(when-not (get-in screen [:layers ln]) (when-not (get-in screen [:layers ln])
(update-fn! assoc-in [[:layers ln] (split-layer screen ln)]))) (update-fn! assoc-in [[:layers ln] (split-layer screen ln)])))
@@ -403,12 +411,12 @@ specify which layers to render with or without.
(.begin batch) (.begin batch)
(doseq [entity (->> (map #(get-in screen [:layers %]) layer-names) (doseq [entity (->> (map #(get-in screen [:layers %]) layer-names)
(apply concat entities) (apply concat entities)
(sort-by :y #(compare %2 %1)))] sort-fn)]
(if-let [layer (:layer entity)] (if-let [layer (:layer entity)]
(.renderTileLayer renderer layer) (.renderTileLayer renderer layer)
(e/draw-entity! entity batch))) (e/draw-entity! entity batch)))
(.end batch)) (.end batch))
entities) entities))
(defmacro render-shapes! (defmacro render-shapes!
"Draws shapes with a `shape` renderer. "Draws shapes with a `shape` renderer.