163 lines
4.9 KiB
Clojure
163 lines
4.9 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 AnimationController
|
|
ModelBuilder]
|
|
[play_clj.entities ModelEntity]))
|
|
|
|
; animation-controller
|
|
|
|
(defn animation-controller*
|
|
[entity]
|
|
(AnimationController. (u/get-obj entity :object)))
|
|
|
|
(defmacro animation-controller
|
|
"Returns an [AnimationController](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/utils/AnimationController.html).
|
|
|
|
(animation-controller model-entity)"
|
|
[entity & options]
|
|
`(let [^AnimationController object# (animation-controller* ~entity)]
|
|
(u/calls! object# ~@options)))
|
|
|
|
(defmacro animation-controller!
|
|
"Calls a single method on an `animation-controller`."
|
|
[object k & options]
|
|
`(let [^AnimationController object# ~object]
|
|
(u/call! object# ~k ~@options)))
|
|
|
|
; environment
|
|
|
|
(defn 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*
|
|
[]
|
|
(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]
|
|
`(ModelEntity.
|
|
(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*
|
|
[]
|
|
(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*
|
|
[]
|
|
(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
|
|
[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))
|