Files
play-clj/src/play_clj/g3d.clj
2014-01-29 22:39:37 -05:00

146 lines
4.3 KiB
Clojure

(ns play-clj.g3d
(:require [play-clj.utils :as u])
(:import [com.badlogic.gdx.graphics.g3d Environment Material Model ModelBatch
ModelInstance]
[com.badlogic.gdx.graphics.g3d.attributes BlendingAttribute
ColorAttribute CubemapAttribute DepthTestAttribute FloatAttribute
IntAttribute TextureAttribute]
[com.badlogic.gdx.graphics.g3d.model.data ModelData]
[com.badlogic.gdx.graphics.g3d.utils ModelBuilder]))
; environment
(defn environment*
"The function version of `environment`"
[]
(Environment.))
(defmacro environment
"Returns an [Environment](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/Environment.html)
(environment)"
[& options]
`(let [^Environment object# (environment*)]
(u/calls! object# ~@options)))
(defmacro environment!
"Calls a single method on an `environment`"
[screen k & options]
`(let [^Environment object# (u/get-obj ~screen :attributes)]
(u/call! object# ~k ~@options)))
; model-batch
(defn model-batch*
"The function version of `model-batch`"
[]
(ModelBatch.))
(defmacro model-batch
"Returns a [ModelBatch](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/ModelBatch.html)
(model-batch)"
[& options]
`(let [^ModelBatch object# (model-batch*)]
(u/calls! object# ~@options)))
(defmacro model-batch!
"Calls a single method on a `model-batch`"
[screen k & options]
`(let [^ModelBatch object# (u/get-obj ~screen :renderer)]
(u/call! object# ~k ~@options)))
; model
(defmacro model
"Returns an entity based on [ModelInstance](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/ModelInstance.html)"
[& args]
`(u/create-entity
(let [arg1# ~(first args)]
(cond
(:object arg1#)
(ModelInstance. ^ModelInstance (:object arg1#))
(isa? arg1# ModelData)
(ModelInstance. ^Model (Model. ~@args))
:else
(ModelInstance. ~@args)))))
(defmacro model!
"Calls a single method on a `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 a `model-builder`"
[object k & options]
`(u/call! ^ModelBuilder ~object ~k ~@options))
; material
(defn material*
"The function version of `material`"
[]
(Material.))
(defmacro material
"Returns a [Material](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/Material.html)
(material)"
[& options]
`(let [^Material object# (material*)]
(u/calls! object# ~@options)))
(defmacro material!
"Calls a single method on a `material`"
[object k & options]
`(u/call! ^Material ~object ~k ~@options))
; attribute
(defn ^:private attribute-init
"Internal use only"
[k]
(u/gdx :graphics :g3d :attributes (str (u/key->pascal k) "Attribute.")))
(defmacro attribute
"Returns a subclass of [Attribute](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/Attribute.html)
(attribute :color (attribute-type :color :diffuse) (color :blue))"
[type & args]
`(~(attribute-init type) ~@args))
(defmacro attribute-type
"Returns a static field in a subclass of [Attribute](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/Attribute.html)
(attribute-type :color :diffuse)"
[type k]
`~(u/gdx-field :graphics :g3d :attributes
(str (u/key->pascal type) "Attribute")
(u/key->pascal k)))
(defmacro attribute!
"Calls a static method in a subclass of [Attribute](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/Attribute.html)
(attribute! :color :create-diffuse (color :blue))"
[type k & options]
`(~(u/gdx-field :graphics :g3d :attributes
(str (u/key->pascal type) "Attribute")
(u/key->camel k))
~@options))