Beginning to get IOS, Android, and Desktop all working at once. Re-enabling steam.
This commit is contained in:
@@ -1,59 +1,151 @@
|
||||
(ns advent.steam
|
||||
(:require [play-clj.core :refer :all])
|
||||
(:import [com.badlogic.gdx.graphics Pixmap PixmapIO$PNG]
|
||||
(:import [java.nio ByteBuffer CharBuffer]
|
||||
[java.io ByteArrayOutputStream]
|
||||
[com.badlogic.gdx.graphics Pixmap PixmapIO$PNG]
|
||||
[com.badlogic.gdx.files FileHandle]))
|
||||
|
||||
(def has-steam?
|
||||
false
|
||||
)
|
||||
(if (= "desktop" (System/getProperty "platform"))
|
||||
(try
|
||||
(import '[com.codedisaster.steamworks SteamUserStats SteamUserStatsCallback SteamAPI SteamRemoteStorage])
|
||||
true
|
||||
(catch Exception e
|
||||
false))
|
||||
false))
|
||||
(println "loading steam")
|
||||
|
||||
(def is-app-store? false)
|
||||
(defmacro steamify [steam-version & [regular-version]]
|
||||
(if has-steam?
|
||||
`(if (and has-steam? (not (System/getProperty "no-steam")))
|
||||
~steam-version
|
||||
~regular-version)
|
||||
regular-version))
|
||||
|
||||
(defn init []
|
||||
(steamify
|
||||
(if (SteamAPI/init)
|
||||
(println "Steam initialized")
|
||||
(do
|
||||
(println "Steam not initialized")
|
||||
(def has-steam? false)))))
|
||||
|
||||
(defn update []
|
||||
(steamify
|
||||
(when (SteamAPI/isSteamRunning)
|
||||
(SteamAPI/runCallbacks))))
|
||||
|
||||
(if has-steam?
|
||||
(eval
|
||||
'(do
|
||||
(defn achievement-fn [f achievement]
|
||||
(steamify
|
||||
(let [stats (atom nil)]
|
||||
(println "Getting stats...")
|
||||
(reset! stats (SteamUserStats. (reify SteamUserStatsCallback
|
||||
(onUserStatsReceived [_ _ _ _]
|
||||
(f @stats achievement)
|
||||
)
|
||||
(onUserStatsStored [_ _ _])
|
||||
(onUserAchievementStored [_ _ _ _ _ _]))))
|
||||
(.requestCurrentStats @stats))))
|
||||
|
||||
(def set-achievement (partial achievement-fn
|
||||
(fn [^SteamUserStats stats ^String achievement]
|
||||
(println "Setting achievement" achievement)
|
||||
(.setAchievement stats achievement)
|
||||
(.storeStats stats)
|
||||
(println "Done setting achievement" achievement))))
|
||||
|
||||
(def clear-achievement (partial achievement-fn
|
||||
(fn [^SteamUserStats stats ^String achievement]
|
||||
(println "Clearing achievement" achievement)
|
||||
(.clearAchievement stats achievement)
|
||||
(.storeStats stats)
|
||||
(println "Done clearing achievement" achievement)))))
|
||||
|
||||
)
|
||||
(do
|
||||
(defn set-achievement [achievement])
|
||||
(defn clear-achievement [achievement])))
|
||||
|
||||
|
||||
(def is-app-store? (System/getProperty "app-store"))
|
||||
(def all-achievements ["PARDON" "EX_CON" "PRO_WRESTLER" "SHEEP_HORDER" "SAFE_AND_SOUND" "DESTINY" "WISE_UP" "TONGUESBANE" "KITTY_KISS" "BEHOLDER" "MOUTH_DIVER"])
|
||||
|
||||
(defn clear-achievement [])
|
||||
|
||||
(defn set-achievement [x])
|
||||
|
||||
(defn clear-all-achievements []
|
||||
(doall (map clear-achievement all-achievements)))
|
||||
|
||||
(defn get-bytes [filename]
|
||||
(.readBytes (if is-app-store?
|
||||
(files! :external filename)
|
||||
(files! :local filename))))
|
||||
(steamify
|
||||
(let [rs (SteamRemoteStorage. nil)
|
||||
len (.getFileSize rs filename)
|
||||
bb (ByteBuffer/allocateDirect len)
|
||||
bytes (make-array Byte/TYPE len)]
|
||||
(.fileRead rs filename bb len)
|
||||
(.get bb bytes)
|
||||
bytes)
|
||||
(.readBytes (if is-app-store?
|
||||
(files! :external filename)
|
||||
(files! :local filename)))))
|
||||
|
||||
(defn write-bytes [filename bytes]
|
||||
(let [f (if is-app-store?
|
||||
(files! :external filename)
|
||||
(files! :local filename))]
|
||||
(.writeBytes f bytes false)))
|
||||
(steamify
|
||||
(let [rs (SteamRemoteStorage. nil)
|
||||
bb (ByteBuffer/allocateDirect (* 2 (count bytes)))]
|
||||
(-> bb (.put bytes) )
|
||||
(.fileWrite rs filename bb (* 2 (count bytes))))
|
||||
(let [f (if is-app-store?
|
||||
(files! :external filename)
|
||||
(files! :local filename))]
|
||||
(.writeBytes f bytes false))))
|
||||
|
||||
(defn list-edn-files []
|
||||
(if is-app-store?
|
||||
(for [save-file (.list (files! :external "saves/") ".edn")]
|
||||
(str "saves/" (.name ^FileHandle save-file)))
|
||||
(for [save-file (.list (files! :local "saves/") ".edn")]
|
||||
(str "saves/" (.name ^FileHandle save-file)))))
|
||||
(steamify
|
||||
(let [rs (SteamRemoteStorage. nil)]
|
||||
(for [i (range (.getFileCount rs))
|
||||
:let [n (.getFileNameAndSize rs i (make-array Integer/TYPE 1))]
|
||||
:when (.endsWith n ".edn")]
|
||||
n))
|
||||
(if is-app-store?
|
||||
(for [save-file (.list (files! :external "saves/") ".edn")]
|
||||
(str "saves/" (.name ^FileHandle save-file)))
|
||||
(for [save-file (.list (files! :local "saves/") ".edn")]
|
||||
(str "saves/" (.name ^FileHandle save-file))))))
|
||||
|
||||
(defn save-screenshot [^Pixmap pm ^String filename]
|
||||
(let [f (if is-app-store?
|
||||
(files! :external filename)
|
||||
(files! :local filename))
|
||||
png (PixmapIO$PNG. (* (.getWidth pm) (.getHeight pm) 1.5))]
|
||||
|
||||
(.write png f pm)
|
||||
(.dispose png)))
|
||||
(steamify
|
||||
(let [rs (SteamRemoteStorage. nil)
|
||||
png (PixmapIO$PNG. (* (.getWidth pm) (.getHeight pm) 1.5))
|
||||
baos (ByteArrayOutputStream. (* (.getWidth pm) (.getHeight pm) 1.5))
|
||||
_ (.write png baos pm)
|
||||
bytes (.toByteArray baos)
|
||||
bb (ByteBuffer/allocateDirect (count bytes))]
|
||||
(.put bb bytes)
|
||||
(.fileWrite rs filename bb (count bytes)))
|
||||
(let [f (if is-app-store?
|
||||
(files! :external filename)
|
||||
(files! :local filename))
|
||||
png (PixmapIO$PNG. (* (.getWidth pm) (.getHeight pm) 1.5))]
|
||||
|
||||
(.write png f pm)
|
||||
(.dispose png))))
|
||||
|
||||
(defn delete-file [filename]
|
||||
(let [file (if is-app-store?
|
||||
(files! :external filename)
|
||||
(files! :local filename))]
|
||||
(when (.exists file)
|
||||
(.delete file))))
|
||||
(steamify
|
||||
(.fileDelete (SteamRemoteStorage. nil) filename)
|
||||
(let [file (if is-app-store?
|
||||
(files! :external filename)
|
||||
(files! :local filename))]
|
||||
(when (.exists file)
|
||||
(.delete file)))))
|
||||
|
||||
(defn save-screenshot-file-name [name]
|
||||
(str "saves/screenshot-" (clojure.core/name name) ".png" ))
|
||||
(steamify
|
||||
(str "screenshot-" (clojure.core/name name) ".png" )
|
||||
(str "saves/screenshot-" (clojure.core/name name) ".png" )))
|
||||
|
||||
(defn save-file-name [id]
|
||||
(str "saves/" id ".edn"))
|
||||
(steamify
|
||||
(str id ".edn")
|
||||
(str "saves/" id ".edn")))
|
||||
|
||||
Reference in New Issue
Block a user