diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index ab92ffb2..89eb7e0c 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -1296,7 +1296,7 @@ void main () (let [date (.format (java.text.SimpleDateFormat. "MM/dd/YY") (java.util.Date.)) save-name (str (-> entities :room :name) " - " date)] (utils/save entities - (str (java.util.UUID/randomUUID)) + (str (.getTime (java.util.Date.))) save-name date) (screen! toast-screen :on-toast :message (str "Saved \"" save-name "\""))))) diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index 80103004..31d68d87 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -14,7 +14,6 @@ [com.badlogic.gdx.graphics.g2d TextureRegion Animation] [com.badlogic.gdx.utils.viewport FitViewport] [com.badlogic.gdx.utils ScreenUtils] - [com.badlogic.gdx.files FileHandle] [com.badlogic.gdx.graphics PixmapIO$PNG] [com.badlogic.gdx.scenes.scene2d Actor Stage] [com.badlogic.gdx.math CatmullRomSpline] @@ -66,15 +65,17 @@ (str "screenshot-" (clojure.core/name name) ".png" )) (defn snapshot-list [] - (let [prefs (.getPreferences (Gdx/app) "ticks-tales-saves")] - (if (.contains prefs "saves") - (edn/read-string (.getString prefs "saves")) - []))) + (sort-by (fn [s] + (if (= "Autosave" (:name s)) + (Long/MIN_VALUE) + (- (Long/parseLong (:id s))))) + (for [save-file (.list (files! :local ".") ".edn")] + (edn/read-string (.readString save-file))))) (defn snapshot-screenshots [] (for [snapshot (snapshot-list)] (update-in snapshot [:screenshot] - #(try (Pixmap. (FileHandle. %) ) + #(try (Pixmap. (files! :local %) ) (catch Exception e (Pixmap. 160 120 Pixmap$Format/RGB888)))))) @@ -95,22 +96,23 @@ (edn/read-string (.getString prefs "chapters")) saves/chapters))) +(defn write-file [filename edn] + (let [f (files! :local filename)] + (.writeString f (pr-str edn) false))) + +(defn save-file-name [id] + (str id ".edn")) + (defn save [entities id name & [blurb]] - (let [prefs (.getPreferences (Gdx/app) "ticks-tales-saves") - saves (if (.contains prefs "saves") - (edn/read-string (.getString prefs "saves")) - []) - saves (cons {:name name - :id id - :screenshot (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])) - :blurb (or blurb name)} - (filter (comp (complement #{id}) :id) saves))] - (.putString prefs "saves" (pr-str saves)) - (.flush prefs) - (on-gl (let [f (FileHandle. (save-screenshot-file-name id)) + (let [save {:name name + :id id + :screenshot (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])) + :blurb (or blurb name)}] + (write-file (save-file-name id) save) + (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)] @@ -122,15 +124,9 @@ (.dispose png))))) (defn remove-save [id] - (let [prefs (.getPreferences (Gdx/app) "ticks-tales-saves") - saves (if (.contains prefs "saves") - (edn/read-string (.getString prefs "saves")) - []) - saves (filter (comp (complement #{id}) :id) saves)] - (.putString prefs "saves" (pr-str saves)) - (.flush prefs) - (on-gl (let [f (FileHandle. (save-screenshot-file-name id))] - (.delete f))))) + (on-gl (doseq [f [(files! :local (save-screenshot-file-name id)) + (files! :local (save-file-name id))]] + (.delete f)))) (defn save-settings! [] (doto (.getPreferences (Gdx/app) "ticks-tales-saves")