steam saving is close.

This commit is contained in:
Bryce Covert
2015-11-21 12:48:42 -08:00
parent 143bd0f192
commit 7d47414fa9
5 changed files with 72 additions and 18 deletions

View File

@@ -1 +0,0 @@
brycecovert@brometheus.local.6703

View File

@@ -84,7 +84,7 @@
(thread (do (thread (do
~@forms ~@forms
(change-script-state ~entities false) (change-script-state ~entities false)
(utils/save @~entities :autosave "Autosave")))))))) (utils/save @~entities "autosave" "Autosave"))))))))
(defmacro get-unsaved-script [entities & forms] (defmacro get-unsaved-script [entities & forms]
`(fn [starting-entities#] `(fn [starting-entities#]

View File

@@ -208,7 +208,7 @@
:wizard "If this is truly your quest, then I will help you. " :wizard "If this is truly your quest, then I will help you. "
:ego "So you're my friend now, Gandarf?" :ego "So you're my friend now, Gandarf?"
:wizard "No.") :wizard "No.")
(utils/save @entities :autosave "Autosave"))}]}) (utils/save @entities "autosave" "Autosave"))}]})
(defn wizard-dialogue [entities] (defn wizard-dialogue [entities]
(if (get-in @entities [:state :has-met-gandarf?]) (if (get-in @entities [:state :has-met-gandarf?])
@@ -621,7 +621,7 @@
(if (get-in @entities [:state :convinced-wizard?]) (if (get-in @entities [:state :convinced-wizard?])
(do (actions/talk entities :wizard "Oh, hello there, boy.") (do (actions/talk entities :wizard "Oh, hello there, boy.")
(utils/save @entities :autosave "Autosave")) (utils/save @entities "autosave" "Autosave"))
(wizard-dialogue entities))))) (wizard-dialogue entities)))))
:cursor :right} :cursor :right}

View File

@@ -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? (def has-steam?
(try (try
(import '[com.codedisaster.steamworks SteamUserStats SteamUserStatsCallback SteamAPI]) (import '[com.codedisaster.steamworks SteamUserStats SteamUserStatsCallback SteamAPI SteamRemoteStorage])
true true
(catch Exception e (catch Exception e
false))) false)))
@@ -42,3 +45,51 @@
(defn clear-all-achievements [] (defn clear-all-achievements []
(doall (map clear-achievement 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))))))

View File

@@ -9,7 +9,8 @@
[clojure.java.io :as io] [clojure.java.io :as io]
[clojure.edn :as edn] [clojure.edn :as edn]
[clojure.string :as str] [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] (: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.graphics.g2d TextureRegion Animation]
[com.badlogic.gdx.utils.viewport FitViewport] [com.badlogic.gdx.utils.viewport FitViewport]
@@ -69,15 +70,16 @@
(if (= "Autosave" (:name s)) (if (= "Autosave" (:name s))
(Long/MIN_VALUE) (Long/MIN_VALUE)
(- (Long/parseLong (:id s))))) (- (Long/parseLong (:id s)))))
(for [save-file (.list (files! :local ".") ".edn")] (steam/snapshot-list)))
(edn/read-string (.readString save-file)))))
(defn snapshot-screenshots [] (defn snapshot-screenshots []
(for [snapshot (snapshot-list)] (doall (for [snapshot (snapshot-list)]
(update-in snapshot [:screenshot] (do
#(try (Pixmap. (files! :local %) ) (steam/download-screenshot (:screenshot snapshot))
(catch Exception e (update-in snapshot [:screenshot]
(Pixmap. 160 120 Pixmap$Format/RGB888)))))) #(try (Pixmap. (files! :local %) )
(catch Exception e
(Pixmap. 160 120 Pixmap$Format/RGB888))))))))
(defn save-chapter [entities chapter] (defn save-chapter [entities chapter]
(let [prefs (.getPreferences (Gdx/app) "ticks-tales-saves") (let [prefs (.getPreferences (Gdx/app) "ticks-tales-saves")
@@ -97,8 +99,9 @@
saves/chapters))) saves/chapters)))
(defn write-file [filename edn] (defn write-file [filename edn]
(let [f (files! :local filename)] (steam/write-file filename edn)
(.writeString f (pr-str edn) false))) #_(let [f (files! :local filename)]
(.writeString f (pr-str edn) false)))
(defn save-file-name [id] (defn save-file-name [id]
(str id ".edn")) (str id ".edn"))
@@ -112,7 +115,7 @@
:y (get-in entities [:room :entities :ego :y])) :y (get-in entities [:room :entities :ego :y]))
:blurb (or blurb name)}] :blurb (or blurb name)}]
(write-file (save-file-name id) save) (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) _ (Pixmap/setFilter Pixmap$Filter/BiLinear)
viewport (-> @ (resolve 'advent.screens.scene/scene) :screen deref :viewport) 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)] [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) _ (.drawPixmap resized pm 0 0 w h 0 0 160 120)
png (PixmapIO$PNG. (* w h 1.5))] png (PixmapIO$PNG. (* w h 1.5))]
(.write png f resized) (.write png f resized)
(.dispose png))))) (.dispose png)
(steam/add-screenshot (save-screenshot-file-name id))))))
(defn remove-save [id] (defn remove-save [id]
(on-gl (doseq [f [(files! :local (save-screenshot-file-name id)) (on-gl (doseq [f [(files! :local (save-screenshot-file-name id))