From 8fdf35665a8353b0a61fbd3fe28f3226e8c78f82 Mon Sep 17 00:00:00 2001 From: oakes Date: Thu, 3 Apr 2014 23:42:38 -0400 Subject: [PATCH] Add ShapeRenderer --- src/play_clj/core.clj | 1 + src/play_clj/core_graphics.clj | 44 ++++++++++++++++++++++++++++++--- src/play_clj/core_listeners.clj | 4 ++- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/play_clj/core.clj b/src/play_clj/core.clj index b251491..fe0017e 100644 --- a/src/play_clj/core.clj +++ b/src/play_clj/core.clj @@ -10,6 +10,7 @@ PerspectiveCamera Pixmap Texture VertexAttributes$Usage] [com.badlogic.gdx.graphics.g2d SpriteBatch] [com.badlogic.gdx.graphics.g3d ModelBatch] + [com.badlogic.gdx.graphics.glutils ShapeRenderer] [com.badlogic.gdx.input GestureDetector GestureDetector$GestureListener] [com.badlogic.gdx.maps MapLayer MapLayers MapProperties] diff --git a/src/play_clj/core_graphics.clj b/src/play_clj/core_graphics.clj index 3e71c0c..b25d43a 100644 --- a/src/play_clj/core_graphics.clj +++ b/src/play_clj/core_graphics.clj @@ -1,7 +1,5 @@ (in-ns 'play-clj.core) -; pixmaps - (defmacro pixmap "Returns a [Pixmap](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Pixmap.html). @@ -14,9 +12,31 @@ (defmacro pixmap! "Calls a single method on a `pixmap`." [object k & options] - `(let [^Pixmap object# (u/get-obj ~object :renderer)] + `(let [^Pixmap object# (u/get-obj ~object :object)] (u/call! object# ~k ~@options))) +(defn shape + "Returns a [ShapeRenderer](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/glutils/ShapeRenderer.html). + + (shape)" + ([] + (ShapeRenderer.)) + ([max-vertices] + (ShapeRenderer. max-vertices))) + +(defmacro shape! + "Calls a single method on a `shape`." + [screen k & options] + `(let [^ShapeRenderer object# (u/get-obj ~screen :renderer)] + (u/call! object# ~k ~@options))) + +(defmacro shape-type + "Returns a static field from [ShapeRenderer.ShapeType](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/glutils/ShapeRenderer.ShapeType.html). + + (shape-type :filled)" + [k] + `~(u/gdx-field :graphics :glutils "ShapeRenderer$ShapeType" (u/key->pascal k))) + ; tiled maps (defn tiled-map* @@ -389,3 +409,21 @@ specify which layers to render with or without. (e/draw-entity! entity batch))) (.end batch)) entities) + +(defmacro render-shapes! + "Draws shapes with a `shape` renderer. + + (render-shapes! screen :filled + :set-color (color :blue) + :line 0 0 10 10 + :rect 10 10 20 20 + :circle 0 30 5)" + [screen type & options] + (when (seq (clojure.set/intersection #{:begin :end} (set options))) + (-> "No need to call :begin or :end, because it's done for you." + Throwable. + throw)) + `(let [^ShapeRenderer object# (u/get-obj ~screen :renderer)] + (.begin object# (shape-type ~type)) + (u/calls! object# ~@options) + (.end object#))) diff --git a/src/play_clj/core_listeners.clj b/src/play_clj/core_listeners.clj index 53f37c3..5960fd3 100644 --- a/src/play_clj/core_listeners.clj +++ b/src/play_clj/core_listeners.clj @@ -205,7 +205,9 @@ (.destroyJoint world joint)))))) (defn ^:private update-screen! - ([{:keys [world g2dp-listener]}] + ([{:keys [renderer ^Camera camera world g2dp-listener]}] + (when (and camera (isa? (type renderer) ShapeRenderer)) + (.setProjectionMatrix ^ShapeRenderer renderer (. camera combined))) (when (isa? (type world) World) (.setContactListener ^World world g2dp-listener))) ([{:keys [renderer world] :as screen} entities]