steam saving is close.
This commit is contained in:
@@ -1 +0,0 @@
|
||||
brycecovert@brometheus.local.6703
|
||||
@@ -84,7 +84,7 @@
|
||||
(thread (do
|
||||
~@forms
|
||||
(change-script-state ~entities false)
|
||||
(utils/save @~entities :autosave "Autosave"))))))))
|
||||
(utils/save @~entities "autosave" "Autosave"))))))))
|
||||
|
||||
(defmacro get-unsaved-script [entities & forms]
|
||||
`(fn [starting-entities#]
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
:wizard "If this is truly your quest, then I will help you. "
|
||||
:ego "So you're my friend now, Gandarf?"
|
||||
:wizard "No.")
|
||||
(utils/save @entities :autosave "Autosave"))}]})
|
||||
(utils/save @entities "autosave" "Autosave"))}]})
|
||||
|
||||
(defn wizard-dialogue [entities]
|
||||
(if (get-in @entities [:state :has-met-gandarf?])
|
||||
@@ -621,7 +621,7 @@
|
||||
|
||||
(if (get-in @entities [:state :convinced-wizard?])
|
||||
(do (actions/talk entities :wizard "Oh, hello there, boy.")
|
||||
(utils/save @entities :autosave "Autosave"))
|
||||
(utils/save @entities "autosave" "Autosave"))
|
||||
(wizard-dialogue entities)))))
|
||||
:cursor :right}
|
||||
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
(ns advent.steam)
|
||||
(ns advent.steam
|
||||
(:require [play-clj.core :refer :all]
|
||||
[clojure.edn :as edn])
|
||||
(:import [java.nio ByteBuffer CharBuffer]))
|
||||
|
||||
(def has-steam?
|
||||
(try
|
||||
(import '[com.codedisaster.steamworks SteamUserStats SteamUserStatsCallback SteamAPI])
|
||||
(import '[com.codedisaster.steamworks SteamUserStats SteamUserStatsCallback SteamAPI SteamRemoteStorage])
|
||||
true
|
||||
(catch Exception e
|
||||
false)))
|
||||
@@ -42,3 +45,51 @@
|
||||
|
||||
(defn clear-all-achievements []
|
||||
(doall (map clear-achievement all-achievements)))
|
||||
|
||||
(defn write-file [filename edn]
|
||||
(let [edn (pr-str edn)]
|
||||
(if has-steam?
|
||||
(eval `(let [rs# (SteamRemoteStorage. nil)
|
||||
v# ~edn
|
||||
bb# (ByteBuffer/allocateDirect (* 2 (count v#)))]
|
||||
(-> bb# .asCharBuffer (.put v#) )
|
||||
|
||||
(.fileWrite rs# ~filename bb# (* 2 (count v#)))))
|
||||
(let [f (files! :local filename)]
|
||||
(.writeString f edn false)))))
|
||||
|
||||
(defn snapshot-list []
|
||||
(if has-steam?
|
||||
(eval `(let [rs# (SteamRemoteStorage. nil)]
|
||||
(for [i# (range (.getFileCount rs#))
|
||||
:let [len# (* 1024 1024)
|
||||
n# (.getFileNameAndSize rs# i# (make-array Integer/TYPE 1))
|
||||
bb# (ByteBuffer/allocateDirect len#)]
|
||||
:when (.endsWith n# ".edn")]
|
||||
(do (println n#)
|
||||
(.fileRead rs# n# bb# len#)
|
||||
(-> bb# .asCharBuffer .toString edn/read-string)))))
|
||||
(for [save-file (.list (files! :local ".") ".edn")]
|
||||
(edn/read-string (.readString save-file)))))
|
||||
|
||||
|
||||
(defn add-screenshot [filename]
|
||||
(when has-steam?
|
||||
(eval `(let [rs# (SteamRemoteStorage. nil)
|
||||
bytes# (.readBytes (files! :local ~filename))
|
||||
bb# (ByteBuffer/allocateDirect (count bytes#))]
|
||||
|
||||
(.put bb# bytes#)
|
||||
(.fileWrite rs# ~filename bb# (count bytes#))))))
|
||||
|
||||
(defn download-screenshot [filename]
|
||||
(when (and has-steam? (not (.exists (files! :local filename))))
|
||||
(eval `(let [rs# (SteamRemoteStorage. nil)
|
||||
len# (.getFileSize rs# ~filename)
|
||||
bb# (ByteBuffer/allocateDirect len#)
|
||||
bytes# (make-array Byte/TYPE len#)]
|
||||
(do (.fileRead rs# ~filename bb# len#)
|
||||
(.get bb# bytes#)
|
||||
(.writeBytes (files! :local ~filename)
|
||||
bytes#
|
||||
false))))))
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
[clojure.java.io :as io]
|
||||
[clojure.edn :as edn]
|
||||
[clojure.string :as str]
|
||||
[advent.saves :as saves])
|
||||
[advent.saves :as saves]
|
||||
[advent.steam :as steam])
|
||||
(: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]
|
||||
@@ -69,15 +70,16 @@
|
||||
(if (= "Autosave" (:name s))
|
||||
(Long/MIN_VALUE)
|
||||
(- (Long/parseLong (:id s)))))
|
||||
(for [save-file (.list (files! :local ".") ".edn")]
|
||||
(edn/read-string (.readString save-file)))))
|
||||
(steam/snapshot-list)))
|
||||
|
||||
(defn snapshot-screenshots []
|
||||
(for [snapshot (snapshot-list)]
|
||||
(update-in snapshot [:screenshot]
|
||||
#(try (Pixmap. (files! :local %) )
|
||||
(catch Exception e
|
||||
(Pixmap. 160 120 Pixmap$Format/RGB888))))))
|
||||
(doall (for [snapshot (snapshot-list)]
|
||||
(do
|
||||
(steam/download-screenshot (:screenshot snapshot))
|
||||
(update-in snapshot [:screenshot]
|
||||
#(try (Pixmap. (files! :local %) )
|
||||
(catch Exception e
|
||||
(Pixmap. 160 120 Pixmap$Format/RGB888))))))))
|
||||
|
||||
(defn save-chapter [entities chapter]
|
||||
(let [prefs (.getPreferences (Gdx/app) "ticks-tales-saves")
|
||||
@@ -97,8 +99,9 @@
|
||||
saves/chapters)))
|
||||
|
||||
(defn write-file [filename edn]
|
||||
(let [f (files! :local filename)]
|
||||
(.writeString f (pr-str edn) false)))
|
||||
(steam/write-file filename edn)
|
||||
#_(let [f (files! :local filename)]
|
||||
(.writeString f (pr-str edn) false)))
|
||||
|
||||
(defn save-file-name [id]
|
||||
(str id ".edn"))
|
||||
@@ -112,7 +115,7 @@
|
||||
:y (get-in entities [:room :entities :ego :y]))
|
||||
:blurb (or blurb name)}]
|
||||
(write-file (save-file-name id) save)
|
||||
(on-gl (let [f (files! :local (save-screenshot-file-name id))
|
||||
(on-gl (let [f (files! :local (save-screenshot-file-name id))
|
||||
_ (Pixmap/setFilter Pixmap$Filter/BiLinear)
|
||||
viewport (-> @ (resolve 'advent.screens.scene/scene) :screen deref :viewport)
|
||||
[x y w h g-l g-r] [(.getScreenX viewport) (.getScreenY viewport) (.getScreenWidth viewport) (.getScreenHeight viewport)]
|
||||
@@ -121,7 +124,8 @@
|
||||
_ (.drawPixmap resized pm 0 0 w h 0 0 160 120)
|
||||
png (PixmapIO$PNG. (* w h 1.5))]
|
||||
(.write png f resized)
|
||||
(.dispose png)))))
|
||||
(.dispose png)
|
||||
(steam/add-screenshot (save-screenshot-file-name id))))))
|
||||
|
||||
(defn remove-save [id]
|
||||
(on-gl (doseq [f [(files! :local (save-screenshot-file-name id))
|
||||
|
||||
Reference in New Issue
Block a user