diff --git a/src/play_clj/g3d.clj b/src/play_clj/g3d.clj index d24c815..c2b3a0d 100644 --- a/src/play_clj/g3d.clj +++ b/src/play_clj/g3d.clj @@ -1,6 +1,8 @@ (ns play-clj.g3d (:require [play-clj.utils :as u]) - (:import [com.badlogic.gdx.graphics.g3d Environment ModelBatch])) + (:import [com.badlogic.gdx.graphics.g3d Environment Model ModelBatch + ModelInstance] + [com.badlogic.gdx.graphics.g3d.utils ModelBuilder])) ; environment @@ -31,7 +33,7 @@ (ModelBatch.)) (defmacro model-batch - "Returns an [ModelBatch](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/Environment.html) + "Returns a [ModelBatch](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/ModelBatch.html) (model-batch)" [& options] @@ -41,5 +43,55 @@ (defmacro model-batch! "Calls a single method on an `model-batch`" [screen k & options] - `(let [^ModelBatch object# (u/get-obj ~screen :attributes)] + `(let [^ModelBatch object# (u/get-obj ~screen :renderer)] + (u/call! object# ~k ~@options))) + +; model + +(defn model* + "The function version of `model`" + ([a1] + (u/create-entity (ModelInstance. (if (map? a1) (:object a1) a1)))) + ([a1 a2] + (u/create-entity (ModelInstance. a1 a2))) + ([a1 a2 a3] + (u/create-entity (ModelInstance. a1 a2 a3))) + ([a1 a2 a3 a4] + (u/create-entity (ModelInstance. a1 a2 a3 a4))) + ([a1 a2 a3 a4 a5] + (u/create-entity (ModelInstance. a1 a2 a3 a4 a5))) + ([a1 a2 a3 a4 a5 a6] + (u/create-entity (ModelInstance. a1 a2 a3 a4 a5 a6)))) + +(defmacro model + "Returns an entity based on [ModelInstance](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/ModelInstance.html)" + [& options] + `(let [^ModelInstance object# (model*)] + (u/calls! object# ~@options))) + +(defmacro model! + "Calls a single method on an `model`" + [entity k & options] + `(let [^ModelInstance object# (u/get-obj ~entity :object)] + (u/call! object# ~k ~@options))) + +; model-builder + +(defn model-builder* + "The function version of `model-builder`" + [] + (ModelBuilder.)) + +(defmacro model-builder + "Returns a [ModelBuilder](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/utils/ModelBuilder.html) + + (model-builder)" + [& options] + `(let [^ModelBuilder object# (model-builder*)] + (u/calls! object# ~@options))) + +(defmacro model-builder! + "Calls a single method on an `model-builder`" + [object k & options] + `(let [^ModelBuilder object# object] (u/call! object# ~k ~@options))) diff --git a/src/play_clj/utils.clj b/src/play_clj/utils.clj index 4ad7f25..7e91c50 100644 --- a/src/play_clj/utils.clj +++ b/src/play_clj/utils.clj @@ -2,6 +2,7 @@ (:require [clojure.string :as s]) (:import [com.badlogic.gdx.graphics.g2d NinePatch ParticleEffect TextureRegion] + [com.badlogic.gdx.graphics.g3d ModelInstance] [com.badlogic.gdx.scenes.scene2d Actor] [com.badlogic.gdx.utils Array ArrayMap])) @@ -205,3 +206,7 @@ new object to be created each time a field is set) (defmethod create-entity Actor [obj] {:type :actor :object obj}) + +(defmethod create-entity ModelInstance + [obj] + {:type :model :object obj})