515 lines
14 KiB
Clojure
515 lines
14 KiB
Clojure
(ns play-clj.math
|
|
(:require [play-clj.utils :as u])
|
|
(:import [com.badlogic.gdx.math Bezier Bresenham2 BSpline CatmullRomSpline
|
|
Circle ConvexHull DelaunayTriangulator EarClippingTriangulator
|
|
Ellipse FloatCounter Frustum GridPoint2 GridPoint3 Matrix3 Matrix4
|
|
Plane Polygon Polyline Quaternion Rectangle Vector2 Vector3
|
|
WindowedMean]
|
|
[com.badlogic.gdx.math.collision BoundingBox Ray Segment Sphere]))
|
|
|
|
; static methods/fields
|
|
|
|
(defmacro geometry!
|
|
"Calls a single static method on [GeometryUtils](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/GeometryUtils.html)."
|
|
[k & options]
|
|
`(~(u/gdx-field :math :GeometryUtils (u/key->camel k)) ~@options))
|
|
|
|
(defmacro interpolation
|
|
"Returns a static class in [Interpolation](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Interpolation.html).
|
|
|
|
(interpolation :bounce)"
|
|
[k]
|
|
(u/gdx-class :math :Interpolation (u/key->pascal k)))
|
|
|
|
(defmacro intersector!
|
|
"Calls a single static method on [Intersector](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html).
|
|
|
|
(intersector! :is-point-in-triangle 0 1 0 0 1 2 3 0)"
|
|
[k & options]
|
|
`(~(u/gdx-field :math :Intersector (u/key->camel k)) ~@options))
|
|
|
|
(defmacro math!
|
|
"Calls a single static method on [MathUtils](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/MathUtils.html).
|
|
|
|
(math! :ceil 0.1)"
|
|
[k & options]
|
|
`(~(u/gdx-field :math :MathUtils (u/key->camel k)) ~@options))
|
|
|
|
(defmacro plane-side
|
|
"Returns a static field in [Plane.PlaneSide](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Plane.PlaneSide.html).
|
|
|
|
(plane-side :back)"
|
|
[k]
|
|
(u/gdx-field :math "Plane$PlaneSide" (u/key->pascal k)))
|
|
|
|
; bezier
|
|
|
|
(defn bezier*
|
|
([]
|
|
(Bezier.))
|
|
([points]
|
|
(Bezier. (into-array points) 0 (count points))))
|
|
|
|
(defmacro bezier
|
|
"Returns a [Bezier](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Bezier.html)."
|
|
[points & options]
|
|
`(u/calls! ^Bezier (bezier* ~points) ~@options))
|
|
|
|
(defmacro bezier!
|
|
"Calls a single method on a `bezier`."
|
|
[object k & options]
|
|
`(u/call! ^Bezier ~object ~k ~@options))
|
|
|
|
; bresenham2
|
|
|
|
(defn bresenham-2*
|
|
[]
|
|
(Bresenham2.))
|
|
|
|
(defmacro bresenham-2
|
|
"Returns a [Bresenham2](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Bresenham2.html)."
|
|
[& options]
|
|
`(u/calls! ^Bresenham2 (bresenham-2*) ~@options))
|
|
|
|
(defmacro bresenham-2!
|
|
"Calls a single method on a `bresenham-2`."
|
|
[object k & options]
|
|
`(u/call! ^Bresenham2 ~object ~k ~@options))
|
|
|
|
; b-spline
|
|
|
|
(defn b-spline*
|
|
([]
|
|
(BSpline.))
|
|
([points degree cont?]
|
|
(BSpline. (into-array points) degree cont?)))
|
|
|
|
(defmacro b-spline
|
|
"Returns a [BSpline](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/BSpline.html)."
|
|
[points degree cont? & options]
|
|
`(u/calls! ^BSpline (b-spline* ~points ~degree ~cont?) ~@options))
|
|
|
|
(defmacro b-spline!
|
|
"Calls a single method on a `b-spline`."
|
|
[object k & options]
|
|
`(u/call! ^BSpline ~object ~k ~@options))
|
|
|
|
; catmull-rom-spline
|
|
|
|
(defn catmull-rom-spline*
|
|
([]
|
|
(CatmullRomSpline.))
|
|
([points cont?]
|
|
(CatmullRomSpline. (into-array points) cont?)))
|
|
|
|
(defmacro catmull-rom-spline
|
|
"Returns a [CatmullRomSpline](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/CatmullRomSpline.html)."
|
|
[points cont? & options]
|
|
`(u/calls! ^CatmullRomSpline (catmull-rom-spline* ~points ~cont?) ~@options))
|
|
|
|
(defmacro catmull-rom-spline!
|
|
"Calls a single method on a `catmull-rom-spline`."
|
|
[object k & options]
|
|
`(u/call! ^CatmullRomSpline ~object ~k ~@options))
|
|
|
|
; circle
|
|
|
|
(defn circle*
|
|
([]
|
|
(Circle.))
|
|
([x y radius]
|
|
(Circle. x y radius)))
|
|
|
|
(defmacro circle
|
|
"Returns a [Circle](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Circle.html)."
|
|
[x y radius & options]
|
|
`(u/calls! ^Circle (circle* ~x ~y ~radius) ~@options))
|
|
|
|
(defmacro circle!
|
|
"Calls a single method on a `circle`."
|
|
[object k & options]
|
|
`(u/call! ^Circle ~object ~k ~@options))
|
|
|
|
; convex-hull
|
|
|
|
(defn convex-hull*
|
|
[]
|
|
(ConvexHull.))
|
|
|
|
(defmacro convex-hull
|
|
"Returns a [ConvexHull](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/ConvexHull.html)."
|
|
[& options]
|
|
`(u/calls! ^ConvexHull (convex-hull*) ~@options))
|
|
|
|
(defmacro convex-hull!
|
|
"Calls a single method on a `convex-hull`."
|
|
[object k & options]
|
|
`(u/call! ^ConvexHull ~object ~k ~@options))
|
|
|
|
; delaunay-triangulator
|
|
|
|
(defn delaunay-triangulator*
|
|
[]
|
|
(DelaunayTriangulator.))
|
|
|
|
(defmacro delaunay-triangulator
|
|
"Returns a [DelaunayTriangulator](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/DelaunayTriangulator.html)."
|
|
[& options]
|
|
`(u/calls! ^DelaunayTriangulator (delaunay-triangulator*) ~@options))
|
|
|
|
(defmacro delaunay-triangulator!
|
|
"Calls a single method on a `delaunay-triangulator`."
|
|
[object k & options]
|
|
`(u/call! ^DelaunayTriangulator ~object ~k ~@options))
|
|
|
|
; ear-clipping-triangulator
|
|
|
|
(defn ear-clipping-triangulator*
|
|
[]
|
|
(EarClippingTriangulator.))
|
|
|
|
(defmacro ear-clipping-triangulator
|
|
"Returns an [EarClippingTriangulator](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/EarClippingTriangulator.html)."
|
|
[& options]
|
|
`(u/calls! ^EarClippingTriangulator (ear-clipping-triangulator*) ~@options))
|
|
|
|
(defmacro ear-clipping-triangulator!
|
|
"Calls a single method on a `ear-clipping-triangulator`."
|
|
[object k & options]
|
|
`(u/call! ^EarClippingTriangulator ~object ~k ~@options))
|
|
|
|
; ellipse
|
|
|
|
(defn ellipse*
|
|
([]
|
|
(Ellipse.))
|
|
([x y width height]
|
|
(Ellipse. x y width height)))
|
|
|
|
(defmacro ellipse
|
|
"Returns an [Ellipse](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Ellipse.html)."
|
|
[x y width height & options]
|
|
`(u/calls! ^Ellipse (ellipse* ~x ~y ~width ~height) ~@options))
|
|
|
|
(defmacro ellipse!
|
|
"Calls a single method on an `ellipse`."
|
|
[object k & options]
|
|
`(u/call! ^Ellipse ~object ~k ~@options))
|
|
|
|
; float-counter
|
|
|
|
(defn float-counter*
|
|
[window-size]
|
|
(FloatCounter. window-size))
|
|
|
|
(defmacro float-counter
|
|
"Returns a [FloatCounter](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/FloatCounter.html)."
|
|
[window-size & options]
|
|
`(u/calls! ^FloatCounter (float-counter* ~window-size) ~@options))
|
|
|
|
(defmacro float-counter!
|
|
"Calls a single method on a `float-counter`."
|
|
[object k & options]
|
|
`(u/call! ^FloatCounter ~object ~k ~@options))
|
|
|
|
; frustum
|
|
|
|
(defn frustum*
|
|
[]
|
|
(Frustum.))
|
|
|
|
(defmacro frustum
|
|
"Returns a [Frustum](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Frustum.html)."
|
|
[& options]
|
|
`(u/calls! ^Frustum (frustum*) ~@options))
|
|
|
|
(defmacro frustum!
|
|
"Calls a single method on a `frustum`."
|
|
[object k & options]
|
|
`(u/call! ^Frustum ~object ~k ~@options))
|
|
|
|
; grid-point-2
|
|
|
|
(defn grid-point-2*
|
|
[x y]
|
|
(GridPoint2. x y))
|
|
|
|
(defmacro grid-point-2
|
|
"Returns a [GridPoint2](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/GridPoint2.html)."
|
|
[x y & options]
|
|
`(u/calls! ^GridPoint2 (grid-point-2* ~x ~y) ~@options))
|
|
|
|
(defmacro grid-point-2!
|
|
"Calls a single method on a `grid-point-2`."
|
|
[object k & options]
|
|
`(u/call! ^GridPoint2 ~object ~k ~@options))
|
|
|
|
; grid-point-3
|
|
|
|
(defn grid-point-3*
|
|
[x y z]
|
|
(GridPoint3. x y z))
|
|
|
|
(defmacro grid-point-3
|
|
"Returns a [GridPoint3](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/GridPoint3.html)."
|
|
[x y z & options]
|
|
`(u/calls! ^GridPoint3 (grid-point-3* ~x ~y ~z) ~@options))
|
|
|
|
(defmacro grid-point-3!
|
|
"Calls a single method on a `grid-point-3`."
|
|
[object k & options]
|
|
`(u/call! ^GridPoint3 ~object ~k ~@options))
|
|
|
|
; matrix-3
|
|
|
|
(defn matrix-3*
|
|
([]
|
|
(Matrix3.))
|
|
([values]
|
|
(Matrix3. values)))
|
|
|
|
(defmacro matrix-3
|
|
"Returns a [Matrix3](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix3.html)."
|
|
[values & options]
|
|
`(u/calls! ^Matrix3 (matrix-3* ~values) ~@options))
|
|
|
|
(defmacro matrix-3!
|
|
"Calls a single method on a `matrix-3`."
|
|
[object k & options]
|
|
`(u/call! ^Matrix3 ~object ~k ~@options))
|
|
|
|
; matrix-4
|
|
|
|
(defn matrix-4*
|
|
([]
|
|
(Matrix4.))
|
|
([^floats values]
|
|
(Matrix4. values)))
|
|
|
|
(defmacro matrix-4
|
|
"Returns a [Matrix4](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix4.html)."
|
|
[values & options]
|
|
`(u/calls! ^Matrix4 (matrix-4* ~values) ~@options))
|
|
|
|
(defmacro matrix-4!
|
|
"Calls a single method on a `matrix-4`."
|
|
[object k & options]
|
|
`(u/call! ^Matrix4 ~object ~k ~@options))
|
|
|
|
; plane
|
|
|
|
(defn plane*
|
|
([arg1 arg2]
|
|
(Plane. arg1 arg2))
|
|
([^Vector3 p1 ^Vector3 p2 ^Vector3 p3]
|
|
(Plane. p1 p2 p3)))
|
|
|
|
(defmacro plane
|
|
"Returns a [Plane](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Plane.html)."
|
|
[args & options]
|
|
`(u/calls! ^Plane (apply plane* ~args) ~@options))
|
|
|
|
(defmacro plane!
|
|
"Calls a single method on a `plane`."
|
|
[object k & options]
|
|
`(u/call! ^Plane ~object ~k ~@options))
|
|
|
|
; polygon
|
|
|
|
(defn polygon*
|
|
([]
|
|
(Polygon.))
|
|
([vertices]
|
|
(Polygon. vertices)))
|
|
|
|
(defmacro polygon
|
|
"Returns a [Polygon](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Polygon.html)."
|
|
[vertices & options]
|
|
`(u/calls! ^Polygon (polygon* ~vertices) ~@options))
|
|
|
|
(defmacro polygon!
|
|
"Calls a single method on a `polygon`."
|
|
[object k & options]
|
|
`(u/call! ^Polygon ~object ~k ~@options))
|
|
|
|
; polyline
|
|
|
|
(defn polyline*
|
|
([]
|
|
(Polyline.))
|
|
([vertices]
|
|
(Polyline. vertices)))
|
|
|
|
(defmacro polyline
|
|
"Returns a [Polyline](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Polyline.html)."
|
|
[vertices & options]
|
|
`(u/calls! ^Polyline (polyline* ~vertices) ~@options))
|
|
|
|
(defmacro polyline!
|
|
"Calls a single method on a `polyline`."
|
|
[object k & options]
|
|
`(u/call! ^Polyline ~object ~k ~@options))
|
|
|
|
; quaternion
|
|
|
|
(defn quaternion*
|
|
([]
|
|
(Quaternion.))
|
|
([w x y z]
|
|
(Quaternion. w x y z)))
|
|
|
|
(defmacro quaternion
|
|
"Returns a [Quaternion](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Quaternion.html)."
|
|
[w x y z & options]
|
|
`(u/calls! ^Quaternion (quaternion* ~w ~x ~y ~z) ~@options))
|
|
|
|
(defmacro quaternion!
|
|
"Calls a single method on a `quaternion`."
|
|
[object k & options]
|
|
`(u/call! ^Quaternion ~object ~k ~@options))
|
|
|
|
; rectangle
|
|
|
|
(defn rectangle*
|
|
([]
|
|
(Rectangle.))
|
|
([x y width height]
|
|
(Rectangle. x y width height)))
|
|
|
|
(defmacro rectangle
|
|
"Returns a [Rectangle](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Rectangle.html)."
|
|
[x y width height & options]
|
|
`(u/calls! ^Rectangle (rectangle* ~x ~y ~width ~height) ~@options))
|
|
|
|
(defmacro rectangle!
|
|
"Calls a single method on a `rectangle`."
|
|
[object k & options]
|
|
`(u/call! ^Rectangle ~object ~k ~@options))
|
|
|
|
; vector-2
|
|
|
|
(defn vector-2*
|
|
([]
|
|
(Vector2.))
|
|
([x y]
|
|
(Vector2. x y)))
|
|
|
|
(defmacro vector-2
|
|
"Returns a [Vector2](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Vector2.html).
|
|
The values can be retrieved with `x` and `y`, and modified with `x!` and `y!`."
|
|
[x y & options]
|
|
`(u/calls! ^Vector2 (vector-2* ~x ~y) ~@options))
|
|
|
|
(defmacro vector-2!
|
|
"Calls a single method on a `vector-2`. If you're trying to modify the values,
|
|
see `x!` and `y!`."
|
|
[object k & options]
|
|
`(u/call! ^Vector2 ~object ~k ~@options))
|
|
|
|
; vector-3
|
|
|
|
(defn vector-3*
|
|
([]
|
|
(Vector3.))
|
|
([x y z]
|
|
(Vector3. x y z)))
|
|
|
|
(defmacro vector-3
|
|
"Returns a [Vector3](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Vector3.html).
|
|
The values can be retrieved with `x`, `y` and `z`, and modified with `x!`, `y!`,
|
|
and `z!`."
|
|
[x y z & options]
|
|
`(u/calls! ^Vector3 (vector-3* ~x ~y ~z) ~@options))
|
|
|
|
(defmacro vector-3!
|
|
"Calls a single method on a `vector-3`. If you're trying to modify the values,
|
|
see `x!`, `y!`, and `z!`."
|
|
[object k & options]
|
|
`(u/call! ^Vector3 ~object ~k ~@options))
|
|
|
|
; windowed-mean
|
|
|
|
(defn windowed-mean*
|
|
[window-size]
|
|
(WindowedMean. window-size))
|
|
|
|
(defmacro windowed-mean
|
|
"Returns a [WindowedMean](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/WindowedMean.html)."
|
|
[window-size & options]
|
|
`(u/calls! ^WindowedMean (windowed-mean* ~window-size) ~@options))
|
|
|
|
(defmacro windowed-mean!
|
|
"Calls a single method on a `windowed-mean`."
|
|
[object k & options]
|
|
`(u/call! ^WindowedMean ~object ~k ~@options))
|
|
|
|
; bounding-box
|
|
|
|
(defn bounding-box*
|
|
([]
|
|
(BoundingBox.))
|
|
([box]
|
|
(BoundingBox. box))
|
|
([min max]
|
|
(BoundingBox. min max)))
|
|
|
|
(defmacro bounding-box
|
|
"Returns a [BoundingBox](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/BoundingBox.html)."
|
|
[min max & options]
|
|
`(u/calls! ^BoundingBox (bounding-box* ~min ~max) ~@options))
|
|
|
|
(defmacro bounding-box!
|
|
"Calls a single method on a `bounding-box`."
|
|
[object k & options]
|
|
`(u/call! ^BoundingBox ~object ~k ~@options))
|
|
|
|
; ray
|
|
|
|
(defn ray*
|
|
[origin direction]
|
|
(Ray. origin direction))
|
|
|
|
(defmacro ray
|
|
"Returns a [Ray](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/Ray.html)."
|
|
[origin direction & options]
|
|
`(u/calls! ^Ray (ray* ~origin ~direction) ~@options))
|
|
|
|
(defmacro ray!
|
|
"Calls a single method on a `ray`."
|
|
[object k & options]
|
|
`(u/call! ^Ray ~object ~k ~@options))
|
|
|
|
; segment
|
|
|
|
(defn segment*
|
|
([a-x a-y a-z b-x b-y b-z]
|
|
(Segment. a-x a-y a-z b-x b-y b-z))
|
|
([a b]
|
|
(Segment. a b)))
|
|
|
|
(defmacro segment
|
|
"Returns a [Segment](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/Segment.html)."
|
|
[a b & options]
|
|
`(u/calls! ^Segment (segment* ~a ~b) ~@options))
|
|
|
|
(defmacro segment!
|
|
"Calls a single method on a `segment`."
|
|
[object k & options]
|
|
`(u/call! ^Segment ~object ~k ~@options))
|
|
|
|
; sphere
|
|
|
|
(defn sphere*
|
|
[center radius]
|
|
(Sphere. center radius))
|
|
|
|
(defmacro sphere
|
|
"Returns a [Sphere](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/collision/Sphere.html)."
|
|
[center radius & options]
|
|
`(u/calls! ^Sphere (sphere* ~center ~radius) ~@options))
|
|
|
|
(defmacro sphere!
|
|
"Calls a single method on a `sphere`."
|
|
[object k & options]
|
|
`(u/call! ^Sphere ~object ~k ~@options))
|