diff --git a/src/play_clj/physics.clj b/src/play_clj/physics.clj new file mode 100644 index 0000000..1fe2a7b --- /dev/null +++ b/src/play_clj/physics.clj @@ -0,0 +1,21 @@ +(ns play-clj.physics + (:require [play-clj.utils :as u]) + (:import [com.badlogic.gdx.physics.box2d World])) + +(defn world* + ([] + (world* 0 0 true)) + ([gravity-x gravity-y] + (world* gravity-x gravity-y true)) + ([gravity-x gravity-y sleep?] + (World. (u/gdx-vector gravity-x gravity-y) sleep?))) + +(defmacro world + [gravity-x gravity-y & options] + `(let [object# (world* ~gravity-x ~gravity-y)] + (u/calls! ^World object# ~@options) + object#)) + +(defmacro world! + [{:keys [^World world]} k & options] + `(u/call! ^World ~world ~k ~@options)) diff --git a/src/play_clj/utils.clj b/src/play_clj/utils.clj index 05c3f4b..95c6335 100644 --- a/src/play_clj/utils.clj +++ b/src/play_clj/utils.clj @@ -1,6 +1,7 @@ (ns play-clj.utils (:require [clojure.string :as s]) (:import [com.badlogic.gdx.graphics.g2d TextureRegion] + [com.badlogic.gdx.math Vector2 Vector3] [com.badlogic.gdx.scenes.scene2d Actor] [com.badlogic.gdx.utils Array ArrayMap])) @@ -67,6 +68,12 @@ (.put amap k v)) amap)) +(defn gdx-vector + ([x y] + (Vector2. x y)) + ([x y z] + (Vector3. x y z))) + ; java interop (defmacro call!