diff --git a/desktop/gametodos.txt b/desktop/gametodos.txt index 1fe310c3..874a55b9 100644 --- a/desktop/gametodos.txt +++ b/desktop/gametodos.txt @@ -13,3 +13,7 @@ sometimes arrow takes override hard to leave castle gate obvious about calculating path? seems to just pause a long time +Reenable mobile screenshots +Static images for mobile screenshots? + +Seems like you can save even though it's gray diff --git a/desktop/project.clj b/desktop/project.clj index 7cf933f4..68c85857 100644 --- a/desktop/project.clj +++ b/desktop/project.clj @@ -26,17 +26,17 @@ :profiles { :dev { :source-paths ["src" "src-common" "src-dev"] - :jvm-opts ["-Duse-repl=true" "-Dno-steam=true" #_"-Dclojure.compiler.direct-linking=true" "-Dis-desktop=true"] + :jvm-opts ["-Duse-repl=true" "-Dui_scale=1.0" "-Dno-steam=true" "-Dclojure.compiler.direct-linking=true" "-Dis-desktop=true"] :dependencies [[com.badlogicgames.gdx/gdx-tools "1.5.3"] [org.clojure/tools.nrepl "0.2.12"] [play-clj-nrepl "0.1.0" :exclusions [play-clj]] [slamhound "1.5.5"] [org.clojure/data.csv "0.1.3"]] - #_#_:warn-on-reflection true} + :warn-on-reflection true} :mobile-dev { :source-paths ["src" "src-common" "src-dev"] - :jvm-opts ["-Duse-repl=true" "-Dno-steam=true" "-Dui_scale=1.5" #_"-Dclojure.compiler.direct-linking=true" "-Dis-desktop=true"] + :jvm-opts ["-Duse-repl=true" "-Dno-steam=true" "-Dui_scale=1.5" "-Dclojure.compiler.direct-linking=true" "-Dis-desktop=true"] :dependencies [[com.badlogicgames.gdx/gdx-tools "1.5.3"] [org.clojure/tools.nrepl "0.2.12"] [play-clj-nrepl "0.1.0" :exclusions [play-clj]] @@ -46,15 +46,15 @@ #_#_:warn-on-reflection true} :app-store { :source-paths ["src" "src-common" "src-dev"] - :jvm-opts ["-Dapp-store=true" "-Dno-steam=true" "-Dis-desktop=true"] + :jvm-opts ["-Dapp-store=true" "-Dui_scale=1.0" "-Dno-steam=true" "-Dis-desktop=true"] :dependencies [[org.clojure/data.csv "0.1.3"]] :warn-on-reflection true} :steam {:dependencies [[com.code-disaster.steamworks4j/steamworks4j "1.2.2"]] - :jvm-opts ["-Dis-desktop=true"]} + :jvm-opts ["-Dis-desktop=true" "-Dui_scale=1.0" ]} :steam-dev { :source-paths ["src" "src-common" "src-dev"] - :jvm-opts ["-Duse-repl=true" "-Dis-desktop=true"] + :jvm-opts ["-Duse-repl=true" "-Dui_scale=1.0" "-Dis-desktop=true"] :dependencies [[com.badlogicgames.gdx/gdx-tools "1.5.3"] [org.clojure/tools.nrepl "0.2.7"] [play-clj-nrepl "0.1.0" :exclusions [play-clj]] diff --git a/desktop/src-common/advent/actions.clj b/desktop/src-common/advent/actions.clj index afb711ea..e22613d9 100644 --- a/desktop/src-common/advent/actions.clj +++ b/desktop/src-common/advent/actions.clj @@ -102,7 +102,8 @@ (let [~entities (atom starting-entities#)] (thread (binding [*fg-bg-key* :fg-actions] ~@forms - (change-script-state ~entities false)))))))) + (change-script-state ~entities false) + (utils/save @~entities "autosave" "Autosave")))))))) (defn force-end [entities current-action key] (do (when current-action diff --git a/desktop/src-common/advent/core.clj b/desktop/src-common/advent/core.clj index fe7d4941..29a548e1 100644 --- a/desktop/src-common/advent/core.clj +++ b/desktop/src-common/advent/core.clj @@ -31,6 +31,7 @@ (fn [this] (log/log-capture! *ns* :warn :error) (log/info "Starting game on version v" (advent.version/version)) + (utils/listen-for-screenshots) (steam/init) (set-screen! @(resolve 'advent.core/advent) splash/splash-screen))) diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index 4d436368..4a37b5fb 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -1439,10 +1439,10 @@ (when-not (get-in entities [:fg-actions :script-running?]) (let [date (.format (java.text.SimpleDateFormat. "MM/dd/yy") (java.util.Date.)) save-name (str (-> entities :room :name) " - " date)] - (utils/save entities - (str (.getTime (java.util.Date.))) - save-name - date) + (go (utils/save entities + (str (.getTime (java.util.Date.))) + save-name + date)) (screen! toast-screen :on-toast { :message (str "Saved \"" save-name "\"")})))) :on-menu (fn [{:keys [viewport] :as screen} entities options] diff --git a/desktop/src-common/advent/screens/shader.clj b/desktop/src-common/advent/screens/shader.clj index fc2389a8..dec46b4e 100644 --- a/desktop/src-common/advent/screens/shader.clj +++ b/desktop/src-common/advent/screens/shader.clj @@ -112,7 +112,6 @@ void main () c3 *= frac.x * (1.0 - frac.y); c4 *= (1.0 - frac.x) * (1.0 - frac.y); vec4 scaledColor = (c1 + c2 + c3 + c4); - vec4 scaledColor = texture2D(u_texture, v_texCoords); vec4 grayscale = toGrayscale(scaledColor); vec4 colorizedOutput = mix(scaledColor, colorize(grayscale, v_color.rgba), hue_amount); @@ -128,6 +127,4 @@ void main () (defn pix-shader [] (if utils/mobile? mobile-pix-shader - desktop-pix-shader - - )) + desktop-pix-shader)) diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index 18bf3567..1197cc61 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -11,7 +11,8 @@ [clojure.tools.logging :as log] [clojure.string :as str] [advent.saves :as saves] - [advent.steam :as steam]) + [advent.steam :as steam] + [clojure.core.async :refer [put! ! chan go go-loop thread take! alts!! poll! dropping-buffer]]) (:import [com.badlogic.gdx.graphics Pixmap Pixmap$Format Pixmap$Blending Pixmap$Filter Texture Texture$TextureFilter] [com.badlogic.gdx.graphics.g2d TextureRegion Animation] [com.badlogic.gdx.utils.viewport FitViewport] @@ -203,20 +204,40 @@ :fail)))))) (defmacro iosify [mobile-version & [regular-version]] - (if (= true (System/getProperty "is-desktop")) - mobile-version - regular-version)) + (if (System/getProperty "is-desktop") + regular-version + mobile-version)) -(defn get-screenshot-pm [] +(def screenshot-chan (chan)) + +(defn publish-screenshot-fn [] (iosify (do (import '[advent.core Saver]) - (Saver/takeScreenshot)) + (log/info "Taking IOS screenshot...") + (let [screenshot-data (advent.core.Saver/takeScreenshot)] + (fn [] + (let [png-data (.getBytes (.toPNGData screenshot-data)) + _ (.dispose screenshot-data) + big (Pixmap. png-data 0 (alength png-data)) + resized (Pixmap. 160 120 Pixmap$Format/RGB888)] + (.drawPixmap resized big 0 0 (.getWidth big) (.getHeight big) 0 0 160 120) + (.dispose big) + + (let [result (advent.core.Saver/flipPixmap resized)] + (.dispose resized) + result))))) (do + (log/info "Taking Desktop screenshot...") (Pixmap/setFilter Pixmap$Filter/BiLinear) (let [viewport (-> @ (resolve 'advent.screens.scene/scene) :screen deref :viewport) - [x y w h g-l g-r] [(.getScreenX ^FitViewport viewport) (.getScreenY ^FitViewport viewport) (.getScreenWidth ^FitViewport viewport) (.getScreenHeight ^FitViewport viewport)]] - (ScreenUtils/getFrameBufferPixmap x y w h))))) + [x y w h g-l g-r] [(.getScreenX ^FitViewport viewport) (.getScreenY ^FitViewport viewport) (.getScreenWidth ^FitViewport viewport) (.getScreenHeight ^FitViewport viewport)] + pm (ScreenUtils/getFrameBufferPixmap x y w h) + resized (Pixmap. 160 120 Pixmap$Format/RGB888)] + (.drawPixmap resized pm 0 0 (.getWidth pm) (.getHeight pm) 0 0 160 120) + (.dispose pm) + (fn [] resized))))) + (defn save [entities id name & [blurb]] (let [save-fn (fn [] @@ -225,21 +246,26 @@ :id id :screenshot (steam/save-screenshot-file-name id) :state (assoc (entities :state) - :x (get-in entities [:room :entities :ego :x]) - :y (get-in entities [:room :entities :ego :y])) + :x (get-in entities [:room :entities :ego :x]) + :y (get-in entities [:room :entities :ego :y])) :blurb (or blurb name)}] + (log/info "writing save file...") (steam/write-bytes (steam/save-file-name id) (.getBytes (pr-str save) "UTF-8")) - (on-gl (let [gl-func (fn [] - (let [pm (get-screenshot-pm) - resized (Pixmap. 160 120 Pixmap$Format/RGB888) - _ (.drawPixmap resized pm 0 0 1280 960 0 0 160 120)] - (steam/save-screenshot resized (steam/save-screenshot-file-name id)) - (.dispose resized) - (.dispose pm)))] - (try-times gl-func 3)))))] + #_(on-gl (let [gl-func (fn [] + (log/info "Screenshot captured. Publishing for persistence") + (put! screenshot-chan [id (publish-screenshot-fn)]))] + (try-times gl-func 3)) )))] (try-times save-fn 3))) +(defn listen-for-screenshots [] + (go-loop [[id ss-fn] (CFBundleSignature ???? CFBundleVersion - 94 + 100 MinimumOSVersion 8.0 LSRequiresIPhoneOS @@ -36,6 +36,8 @@ UILauunchImages Default-568h + Default-568h@2x + Default-Portrait~ipad UIRequiresFullScreen diff --git a/ios/libs/libgdx-bullet.a b/ios/libs/libgdx-bullet.a deleted file mode 100644 index 9ff9bcdc..00000000 Binary files a/ios/libs/libgdx-bullet.a and /dev/null differ diff --git a/ios/project.clj b/ios/project.clj index d5b6d93e..547ea71b 100644 --- a/ios/project.clj +++ b/ios/project.clj @@ -8,16 +8,13 @@ [log4j/log4j "1.2.16"] [org.clojure/clojure "1.8.0"] [com.mobidevelop.robovm/robovm-cocoatouch "2.3.0"] - [com.mobidevelop.robovm/robovm-objc "2.3.0"] [com.mobidevelop.robovm/robovm-rt "2.3.0"] - [com.mobidevelop.robovm/robovm-compiler "2.3.0"] - [com.mobidevelop.robovm/robovm-dist-compiler "2.3.0"] [play-clj "0.4.6-BRYCE"]] :source-paths ["src/clojure" "../desktop/src-common"] :java-source-paths ["src/java"] :plugins [[lein-fruit "0.2.4-SNAPSHOT"]] :javac-options ["-target" "1.7" "-source" "1.7" "-Xlint:-options"] - :jvm-opts ["-Dis-desktop=false"] + :jvm-opts [] :ios {:robovm-opts ["-config" "robovm.xml"] :robovm-path "/Users/brycecovert/.robovm-sdks/robovm-2.2.1-SNAPSHOT" :version 2.1} diff --git a/ios/robovm.xml b/ios/robovm.xml index be834e78..16ed77f5 100644 --- a/ios/robovm.xml +++ b/ios/robovm.xml @@ -18,6 +18,9 @@ ** + + **/*.ogg + true diff --git a/ios/src/java/advent/core/Saver.java b/ios/src/java/advent/core/Saver.java index 83f36087..c906a28f 100644 --- a/ios/src/java/advent/core/Saver.java +++ b/ios/src/java/advent/core/Saver.java @@ -9,30 +9,31 @@ import com.badlogic.gdx.backends.iosrobovm.*; public class Saver { - public static Pixmap takeScreenshot(){ + public static Pixmap flipPixmap(Pixmap src) { + final int width = src.getWidth(); + final int height = src.getHeight(); + Pixmap flipped = new Pixmap(width, height, src.getFormat()); + + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + flipped.drawPixel(x, y, src.getPixel(x, height - y -1)); + } + } + return flipped; + } + + public static UIImage takeScreenshot(){ UIImage newImage; - UIGraphics.beginImageContext(new CGSize(1280, 960)); - ((IOSApplication) Gdx.app).getUIViewController().getView().drawViewHierarchy( - new CGRect(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()) , true); + //((IOSApplication) Gdx.app).getUIViewController().getView().setTransform(CGAffineTransform.createScale(1, -1)); + UIView view = ((IOSApplication) Gdx.app).getUIViewController().getView(); + UIGraphics.beginImageContext(new CGSize(view.getFrame().getWidth(), view.getFrame().getHeight()), true, 0.0); + view.drawViewHierarchy( + new CGRect(0, 0, view.getFrame().getWidth(), view.getFrame().getHeight()), true); newImage = UIGraphics.getImageFromCurrentImageContext(); UIGraphics.endImageContext(); + //((IOSApplication) Gdx.app).getUIViewController().getView().setTransform(CGAffineTransform.createScale(1, 1)); + return newImage; - NSData data = newImage.toPNGData(); - newImage.dispose(); - - PixmapIO.PNG p = new PixmapIO.PNG(); - Pixmap stepResult = new Pixmap(data.getBytes(), 0, data.getBytes().length); - p.setFlipY(true); - try { - p.write(Gdx.files.local("screenshot.png"), stepResult); - stepResult.dispose(); - p.dispose(); - - return new Pixmap(Gdx.files.local("screenshot.png")); - - } catch (Exception e) { - return new Pixmap(160, 120, Pixmap.Format.RGBA8888); - } } }