diff --git a/project.clj b/project.clj index 7c34280..ee751c6 100644 --- a/project.clj +++ b/project.clj @@ -1,7 +1,9 @@ -(defproject play-clj "0.2.5-SNAPSHOT" +(defproject play-clj "0.3.0-SNAPSHOT" :description "A LibGDX wrapper for easy cross-platform game development" :url "https://github.com/oakes/play-clj" :license {:name "Public Domain" :url "http://unlicense.org/UNLICENSE"} - :dependencies [[com.badlogicgames.gdx/gdx "0.9.9"] - [org.clojure/clojure "1.5.1"]]) + :dependencies [[com.badlogicgames.gdx/gdx "1.0-SNAPSHOT"] + [org.clojure/clojure "1.5.1"]] + :repositories [["sonatype" + "https://oss.sonatype.org/content/repositories/snapshots/"]]) diff --git a/src/play_clj/core.clj b/src/play_clj/core.clj index a217c1a..ec3caa4 100644 --- a/src/play_clj/core.clj +++ b/src/play_clj/core.clj @@ -106,7 +106,6 @@ [{:keys [on-create]}] (proxy [Game] [] (create [] - (Texture/setEnforcePotImages false) (when on-create (on-create this))))) diff --git a/src/play_clj/core_cameras.clj b/src/play_clj/core_cameras.clj index e86e4ba..4a8128c 100644 --- a/src/play_clj/core_cameras.clj +++ b/src/play_clj/core_cameras.clj @@ -39,13 +39,15 @@ (u/call! object# ~k ~@options))) (defn size! - "Sets the size of the camera in `screen`. + "Sets the size of the camera in `screen` and recenters it. (size! screen 480 360)" [screen width height] (let [^Camera camera (u/get-obj screen :camera)] (set! (. camera viewportWidth) width) (set! (. camera viewportHeight) height) + (set! (. (. camera position) x) (/ width 2)) + (set! (. (. camera position) y) (/ height 2)) (.update camera))) (defn width! diff --git a/src/play_clj/core_graphics.clj b/src/play_clj/core_graphics.clj index 07d88ab..fa2f48c 100644 --- a/src/play_clj/core_graphics.clj +++ b/src/play_clj/core_graphics.clj @@ -354,10 +354,7 @@ specify which layers to render with or without. (defn render-stage! "Calls the stage renderer from `screen`." - [{:keys [^Stage renderer ^Camera camera] :as screen}] - (when camera - (.setCamera renderer camera) - (.setViewport renderer (. camera viewportWidth) (. camera viewportHeight))) + [{:keys [^Stage renderer] :as screen}] (doto renderer .act .draw) nil) diff --git a/src/play_clj/core_listeners.clj b/src/play_clj/core_listeners.clj index 53f37c3..84493c8 100644 --- a/src/play_clj/core_listeners.clj +++ b/src/play_clj/core_listeners.clj @@ -177,37 +177,45 @@ ; update functions (defn ^:private update-stage! - [{:keys [^Stage renderer ui-listeners]} entities] - (doseq [^Actor a (.getActors renderer)] - (.remove a)) - (doseq [{:keys [object]} entities] - (when (isa? (type object) Actor) - (.addActor renderer object) - (doseq [listener ui-listeners] - (.addListener ^Actor object listener)))) - (remove-input! renderer) - (add-input! renderer)) + ([{:keys [^Stage renderer ^Camera camera] :as screen}] + (when camera + (doto (.getViewport renderer) + (.setCamera camera)))) + ([{:keys [^Stage renderer ui-listeners]} entities] + (doseq [^Actor a (.getActors renderer)] + (.remove a)) + (doseq [{:keys [object]} entities] + (when (isa? (type object) Actor) + (.addActor renderer object) + (doseq [listener ui-listeners] + (.addListener ^Actor object listener)))) + (remove-input! renderer) + (add-input! renderer))) (defn ^:private update-box-2d! - [{:keys [^World world]} entities] - (when-not (.isLocked world) - (let [arr (u/gdx-array [])] - ; remove bodies that no longer exist - (.getBodies world arr) - (doseq [body arr] - (when-not (some #(= body (:body %)) entities) - (.destroyBody world body))) - ; remove joints whose bodies no longer exist - (.getJoints world arr) - (doseq [^Joint joint arr] - (when (and (not (some #(= (.getBodyA joint) (:body %)) entities)) - (not (some #(= (.getBodyB joint) (:body %)) entities))) - (.destroyJoint world joint)))))) + ([{:keys [^World world g2dp-listener]}] + (.setContactListener world g2dp-listener)) + ([{:keys [^World world]} entities] + (when-not (.isLocked world) + (let [arr (u/gdx-array [])] + ; remove bodies that no longer exist + (.getBodies world arr) + (doseq [body arr] + (when-not (some #(= body (:body %)) entities) + (.destroyBody world body))) + ; remove joints whose bodies no longer exist + (.getJoints world arr) + (doseq [^Joint joint arr] + (when (and (not (some #(= (.getBodyA joint) (:body %)) entities)) + (not (some #(= (.getBodyB joint) (:body %)) entities))) + (.destroyJoint world joint))))))) (defn ^:private update-screen! - ([{:keys [world g2dp-listener]}] + ([{:keys [renderer world] :as screen}] + (when (isa? (type renderer) Stage) + (update-stage! screen)) (when (isa? (type world) World) - (.setContactListener ^World world g2dp-listener))) + (update-box-2d! screen))) ([{:keys [renderer world] :as screen} entities] (when (isa? (type renderer) Stage) (update-stage! screen entities)) diff --git a/src/play_clj/g2d.clj b/src/play_clj/g2d.clj index f5b498b..8ca7177 100644 --- a/src/play_clj/g2d.clj +++ b/src/play_clj/g2d.clj @@ -148,11 +148,11 @@ ; animation (defmacro play-mode - "Returns a static field from [Animation](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Animation.html). + "Returns a static field from [Animation.PlayMode](http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Animation.PlayMode.html). (play-mode :loop)" [k] - `~(u/gdx-field :graphics :g2d :Animation (u/key->upper k))) + `~(u/gdx-field :graphics :g2d "Animation$PlayMode" (u/key->upper k))) (defn animation* [duration textures]