diff --git a/src/play_clj/core_cameras.clj b/src/play_clj/core_cameras.clj index 389a389..efb998c 100644 --- a/src/play_clj/core_cameras.clj +++ b/src/play_clj/core_cameras.clj @@ -162,16 +162,15 @@ of the camera will be set." (. camera position))) (defn position! - "Sets the position of `object`. If `object` is a screen, the position of the -camera will be set." - ([object vec-3] - (position! object (x vec-3) (y vec-3) (z vec-3))) - ([object x-val y-val] - (position! object x-val y-val nil)) - ([object x-val y-val z-val] - (some->> x-val (x! object)) - (some->> y-val (y! object)) - (some->> z-val (z! object)))) + "Sets the position of the camera in `screen`." + ([screen vec-3] + (position! screen (x vec-3) (y vec-3) (z vec-3))) + ([screen x-val y-val] + (position! screen x-val y-val nil)) + ([screen x-val y-val z-val] + (some->> x-val (x! screen)) + (some->> y-val (y! screen)) + (some->> z-val (z! screen)))) (defn direction "Returns the direction of the camera in `screen`." @@ -181,10 +180,17 @@ camera will be set." (defn direction! "Sets the direction of the camera in `screen`." - [screen x-val y-val z-val] - (let [^Camera camera (u/get-obj screen :camera)] - (.lookAt camera x-val y-val z-val) - (.update camera))) + ([screen x-val y-val z-val] + (direction! screen x-val y-val z-val true)) + ([screen x-val y-val z-val look-at?] + (let [^Camera camera (u/get-obj screen :camera)] + (if look-at? + (.lookAt camera x-val y-val z-val) + (let [^Vector3 dir-vec (direction screen)] + (some->> x-val (x! dir-vec)) + (some->> y-val (y! dir-vec)) + (some->> z-val (z! dir-vec)))) + (.update camera)))) (defn up [screen] "Returns the up vector of the camera in `screen`." diff --git a/src/play_clj/core_graphics.clj b/src/play_clj/core_graphics.clj index 1ff0a5b..82f1d3e 100644 --- a/src/play_clj/core_graphics.clj +++ b/src/play_clj/core_graphics.clj @@ -529,6 +529,7 @@ specify which layers to render with or without. (set layer-names)) (u/throw-key-not-found k)) (map #(.indexOf ^java.util.List all-layer-names %)) + (sort) int-array (.render renderer))) (.render renderer)) diff --git a/src/play_clj/entities.clj b/src/play_clj/entities.clj index 8c243c1..3e0e1d4 100644 --- a/src/play_clj/entities.clj +++ b/src/play_clj/entities.clj @@ -58,22 +58,23 @@ (defrecord ActorEntity [object] Entity (draw! [{:keys [^Actor object x y width height scale-x scale-y angle origin-x origin-y]} _ batch] - (some->> x (.setX object)) - (some->> y (.setY object)) - (some->> width (.setWidth object)) - (some->> height (.setHeight object)) - (when (or scale-x scale-y angle) - (let [scale-x (float (or scale-x 1)) - scale-y (float (or scale-y 1)) - origin-x (float (or origin-x (/ (.getWidth object) 2))) - origin-y (float (or origin-y (/ (.getHeight object) 2))) - angle (float (or angle 0))] - (.setScaleX object scale-x) - (.setScaleY object scale-y) - (.setOriginX object origin-x) - (.setOriginY object origin-y) - (.setRotation object angle))) - (.draw object ^Batch batch 1))) + (when (.getStage object) + (some->> x (.setX object)) + (some->> y (.setY object)) + (some->> width (.setWidth object)) + (some->> height (.setHeight object)) + (when (or scale-x scale-y angle) + (let [scale-x (float (or scale-x 1)) + scale-y (float (or scale-y 1)) + origin-x (float (or origin-x (/ (.getWidth object) 2))) + origin-y (float (or origin-y (/ (.getHeight object) 2))) + angle (float (or angle 0))] + (.setScaleX object scale-x) + (.setScaleY object scale-y) + (.setOriginX object origin-x) + (.setOriginY object origin-y) + (.setRotation object angle))) + (.draw object ^Batch batch 1)))) (defrecord ModelEntity [object] Entity (draw! [{:keys [^ModelInstance object x y z]} diff --git a/template/src/leiningen/new/play_clj.clj b/template/src/leiningen/new/play_clj.clj index 952a02a..1fce564 100644 --- a/template/src/leiningen/new/play_clj.clj +++ b/template/src/leiningen/new/play_clj.clj @@ -6,8 +6,6 @@ (defn play-clj [name & [package-name]] - (when (contains? #{"game" "main-screen"} name) - (main/abort "Choose a more creative name than that, silly!")) (let [render (t/renderer "play-clj") lein-droid-render (droid-new/renderer "templates") desktop-class-name "desktop-launcher" @@ -21,6 +19,7 @@ android-ns (str package-name "." android-class-name) ios-ns (str package-name "." ios-class-name) data {:app-name name + :game-name (str name "-game") :name (t/project-name name) :package package-name :package-sanitized package-name diff --git a/template/src/leiningen/new/play_clj/AndroidLauncher.java b/template/src/leiningen/new/play_clj/AndroidLauncher.java index f43bd18..a2abcd8 100644 --- a/template/src/leiningen/new/play_clj/AndroidLauncher.java +++ b/template/src/leiningen/new/play_clj/AndroidLauncher.java @@ -11,7 +11,7 @@ public class {{android-class-name}} extends AndroidApplication { super.onCreate(savedInstanceState); RT.var("clojure.core", "require").invoke(Symbol.intern("{{namespace}}")); try { - Game game = (Game) RT.var("{{namespace}}", "{{app-name}}").deref(); + Game game = (Game) RT.var("{{namespace}}", "{{game-name}}").deref(); initialize(game); } catch (Exception e) { e.printStackTrace(); diff --git a/template/src/leiningen/new/play_clj/IOSLauncher.java b/template/src/leiningen/new/play_clj/IOSLauncher.java index d42cc71..8760093 100644 --- a/template/src/leiningen/new/play_clj/IOSLauncher.java +++ b/template/src/leiningen/new/play_clj/IOSLauncher.java @@ -14,7 +14,7 @@ public class {{ios-class-name}} extends IOSApplication.Delegate { IOSApplicationConfiguration config = new IOSApplicationConfiguration(); RT.var("clojure.core", "require").invoke(Symbol.intern("{{namespace}}")); try { - Game game = (Game) RT.var("{{namespace}}", "{{app-name}}").deref(); + Game game = (Game) RT.var("{{namespace}}", "{{game-name}}").deref(); return new IOSApplication(game, config); } catch (Exception e) { e.printStackTrace(); diff --git a/template/src/leiningen/new/play_clj/core.clj b/template/src/leiningen/new/play_clj/core.clj index 6ce2bf1..3f1bdcc 100644 --- a/template/src/leiningen/new/play_clj/core.clj +++ b/template/src/leiningen/new/play_clj/core.clj @@ -13,7 +13,7 @@ (clear!) (render! screen entities))) -(defgame {{app-name}} +(defgame {{game-name}} :on-create (fn [this] (set-screen! this main-screen))) diff --git a/template/src/leiningen/new/play_clj/desktop-launcher.clj b/template/src/leiningen/new/play_clj/desktop-launcher.clj index dffdaca..7838f35 100644 --- a/template/src/leiningen/new/play_clj/desktop-launcher.clj +++ b/template/src/leiningen/new/play_clj/desktop-launcher.clj @@ -6,5 +6,5 @@ (defn -main [] - (LwjglApplication. {{app-name}} "{{app-name}}" 800 600) + (LwjglApplication. {{game-name}} "{{app-name}}" 800 600) (Keyboard/enableRepeatEvents true))