Saving much better!

This commit is contained in:
Bryce Covert
2015-11-04 17:07:26 -08:00
parent 3326629189
commit 6586faf583
12 changed files with 78 additions and 71 deletions

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)))))))) (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

@@ -10,5 +10,12 @@
:after-jail "Prisoner On The Loose" :after-jail "Prisoner On The Loose"
:in-jail "In The Slammer"}) :in-jail "In The Slammer"})
(def chapters
{:chapter-1 nil
:chapter-2 nil
:chapter-3 nil
:chapter-4 nil
:chapter-5 nil})
(def name->save (def name->save
(into {} (map vector (vals saves) (keys saves)))) (into {} (map vector (vals saves) (keys saves))))

View File

@@ -342,8 +342,7 @@
:ego "What's this?") :ego "What's this?")
(actions/give entities :kiss) (actions/give entities :kiss)
(actions/do-dialogue entities :ego "A kiss for an inventory item?" (actions/do-dialogue entities :ego "A kiss for an inventory item?"
:ego "Sounds like the game designer was running out of good ideas.") :ego "Sounds like the game designer was running out of good ideas."))
(utils/snapshot-state @entities :after-cat))
(actions/talk entities :ego "I guess I'm too far away."))) (actions/talk entities :ego "I guess I'm too far away.")))
:default (actions/get-script entities (actions/talk entities :ego "Kitty seems disinterested in it."))}) :default (actions/get-script entities (actions/talk entities :ego "Kitty seems disinterested in it."))})
cat-stand) cat-stand)

View File

@@ -243,7 +243,7 @@
:fairy-godfather "Choose the broom or shovel, and cast it into the pit of fate." :fairy-godfather "Choose the broom or shovel, and cast it into the pit of fate."
:ego "But..." :ego "But..."
:fairy-godfather "No buts.") :fairy-godfather "No buts.")
(utils/snapshot-state @entities :beginning) (utils/save-chapter @entities :chapter-1)
(actions/update-state entities #(assoc % :seen-intro? true :time :day))) (actions/update-state entities #(assoc % :seen-intro? true :time :day)))
(defn swing [entities] (defn swing [entities]
@@ -422,7 +422,7 @@
:ego "If I only really could be a knight." :ego "If I only really could be a knight."
:ego "Then I'd be able to win Georgia McGorgeous' heart.") :ego "Then I'd be able to win Georgia McGorgeous' heart.")
(actions/in-love entities) (actions/in-love entities)
(utils/snapshot-state @entities :after-dream)) (utils/save-chapter @entities :chapter-2))
(do (actions/walk-to entities :ego [148 76] :face :right) (do (actions/walk-to entities :ego [148 76] :face :right)
(actions/do-dialogue entities (actions/do-dialogue entities
:fairy-godfather "What are you doing?" :ego "Erm... Nothing.")))) :fairy-godfather "What are you doing?" :ego "Erm... Nothing."))))

View File

@@ -80,8 +80,7 @@
:warriors "Congratulations, young master. Thou art worthy in might." :warriors "Congratulations, young master. Thou art worthy in might."
:warriors "Take thy servant's medal of strength.") :warriors "Take thy servant's medal of strength.")
(actions/give entities :medal) (actions/give entities :medal)
(actions/glad entities) (actions/glad entities))
(utils/snapshot-state @entities :after-strength))
(do (do
(play-battle entities :lose) (play-battle entities :lose)
(actions/do-dialogue entities (actions/do-dialogue entities

View File

@@ -585,7 +585,7 @@
(actions/remove-entity entities :trophy) (actions/remove-entity entities :trophy)
(actions/glad entities) (actions/glad entities)
(actions/talk entities :ego "Thanks!") (actions/talk entities :ego "Thanks!")
(utils/snapshot-state @entities :after-wisdom)) )
(actions/do-dialogue entities :ego "What about this?" :game-player "No, that's not the solution. Keep looking.")) (actions/do-dialogue entities :ego "What about this?" :game-player "No, that's not the solution. Keep looking."))
(brian-get-to-work entities)) (brian-get-to-work entities))
:trophy (actions/get-script entities :trophy (actions/get-script entities

View File

@@ -198,7 +198,7 @@
:ego "But what now?" :ego "But what now?"
:ego "I have till sunrise before Bloodclot comes and destroys the town." :ego "I have till sunrise before Bloodclot comes and destroys the town."
:ego "Maybe Gandarf can help me!") :ego "Maybe Gandarf can help me!")
(utils/snapshot-state @entities :after-jail)) (utils/save-chapter @entities :chapter-4))
(do (do
(actions/do-dialogue entities :ego "Yes! I made it!" (actions/do-dialogue entities :ego "Yes! I made it!"
:guard "Hmm?" :guard "Hmm?"

View File

@@ -210,7 +210,7 @@
:wizard "If this is truely your quest, then I will help you. " :wizard "If this is truely 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))}]}) (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?])
@@ -623,7 +623,7 @@
(if (get-in @entities [:state :convinced-wizard?]) (if (get-in @entities [:state :convinced-wizard?])
(do (actions/talk entities :wizard (str "Oh, hello there boy.")) (do (actions/talk entities :wizard (str "Oh, hello there boy."))
(utils/save @entities)) (utils/save @entities :autosave "Autosave"))
(wizard-dialogue entities))))) (wizard-dialogue entities)))))
:cursor :right} :cursor :right}

View File

@@ -279,7 +279,7 @@
(bloodclot-disappear entities) (bloodclot-disappear entities)
(common/go-to-jail entities 5.0) (common/go-to-jail entities 5.0)
(actions/do-dialogue entities :ego "Hey!" :ego "What's going on? I was just about to teach Bloodclot a lesson!") (actions/do-dialogue entities :ego "Hey!" :ego "What's going on? I was just about to teach Bloodclot a lesson!")
(utils/snapshot-state @entities :in-jail)))) (utils/save-chapter @entities :chapter-3))))
:magic-slingshot (actions/get-script entities :magic-slingshot (actions/get-script entities
(actions/do-dialogue entities (actions/do-dialogue entities
:ego "Hey Bloodclot!" :ego "Hey Bloodclot!"

View File

@@ -819,7 +819,7 @@ void main ()
(defn get-state [selected-save] (defn get-state [selected-save]
(if selected-save (if selected-save
(utils/load-snapshot selected-save) (assoc (:state selected-save) :active? true)
{:object nil {:object nil
:active? true :active? true
:last-room :dream :last-room :dream
@@ -1245,6 +1245,10 @@ void main ()
:on-show-inventory (fn [screen [entities]] :on-show-inventory (fn [screen [entities]]
(click-inventory screen entities)) (click-inventory screen entities))
:on-save (fn [screen [entities]]
(when-not (get-in entities [:actions :script-running?])
(utils/save entities (str (java.util.UUID/randomUUID)) (str "Save " (rand-int 20)))))
:on-menu (fn [{:keys [viewport] :as screen} [entities]] :on-menu (fn [{:keys [viewport] :as screen} [entities]]
(when-not (or (get-in entities [:tweens :fade-out]) (when-not (or (get-in entities [:tweens :fade-out])
(get-in entities [:tweens :fade-in])) (get-in entities [:tweens :fade-in]))
@@ -1373,5 +1377,8 @@ void main ()
(utils/intersects? (:close entities) [x y]) (utils/intersects? (:close entities) [x y])
(screen! scene :on-menu) (screen! scene :on-menu)
(utils/intersects? (:save entities) [x y])
(screen! scene :on-save)
:else :else
nil))))) nil)))))

View File

@@ -101,7 +101,7 @@
flipped)) flipped))
(defn quest-label [] (defn quest-label []
(if (:seen-intro? (utils/load-snapshot :autosave)) (if (seq (utils/snapshot-list))
"Continue quest" "Continue quest"
"Begin quest")) "Begin quest"))
@@ -210,19 +210,20 @@
(.setUncheckLast true)) (.setUncheckLast true))
[cell-w cell-h] [218 161] [cell-w cell-h] [218 161]
make-cell (fn [image] [image :width cell-w :pad 4 4 4 4 :height cell-h]) make-cell (fn [image] [image :width cell-w :pad 4 4 4 4 :height cell-h])
make-save-screenshot (fn [[save-name save-screenshot]] make-save-screenshot (fn [{:keys [screenshot name id state] :as save}]
(let [btn (doto (assoc (image-button (skin "ui/ui.json")) (let [btn (doto (assoc (image-button (skin "ui/ui.json"))
:save save-name) :save save
(image-button! :set-size cell-w cell-h) :name name)
(image-button! :add (doto (Group. ) (image-button! :set-size cell-w cell-h)
(.setSize (- cell-w 16) (- cell-h 16) ) (image-button! :add (doto (Group. )
(.setOrigin (/ (- cell-w 16) 2) (/ (- cell-h 16) 2)) (.setSize (- cell-w 16) (- cell-h 16) )
(.addActor (:object (doto (image (texture save-screenshot)) (.setOrigin (/ (- cell-w 16) 2) (/ (- cell-h 16) 2))
(image! :set-size (- cell-w 16) (- cell-h 16))))) (.addActor (:object (doto (image (texture screenshot))
(.addActor (:object (make-label (str " " (subs save-name 0 (min (.length save-name) 10)))))) (image! :set-size (- cell-w 16) (- cell-h 16)))))
)) (.addActor (:object (make-label (str " " (subs name 0 (min (.length name) 10))))))
))
save-object)]
save-object)]
(.add group (:object btn)) (.add group (:object btn))
(ActorEntity. (:object btn)))) (ActorEntity. (:object btn))))
save-screenshots (map make-save-screenshot (:saves-list entities)) save-screenshots (map make-save-screenshot (:saves-list entities))
@@ -381,14 +382,14 @@
(= :continue-or-start actor-key) (= :continue-or-start actor-key)
(start-playing screen entities (if (= "Begin quest" (quest-label)) (start-playing screen entities (if (= "Begin quest" (quest-label))
nil nil
:autosave)) (first (utils/snapshot-list))))
(= :continue actor-key) (= :continue actor-key)
(start-playing screen entities (saves/name->save (:selected-save entities))) (start-playing screen entities (:selected-save entities))
(:save e) (:save e)
(do (do
(label! (-> entities :save-menu :save-label) :set-text (:save e)) (label! (-> entities :save-menu :save-label) :set-text (:name (:save e)))
(text-button! (-> entities :save-menu :continue-button) :set-disabled false) (text-button! (-> entities :save-menu :continue-button) :set-disabled false)
(assoc entities :selected-save (:save e))) (assoc entities :selected-save (:save e)))

View File

@@ -67,54 +67,48 @@
(defn snapshot-list [] (defn snapshot-list []
(let [prefs (.getPreferences (Gdx/app) "ticks-tales-saves")] (let [prefs (.getPreferences (Gdx/app) "ticks-tales-saves")]
(if (.contains prefs "snapshot-list") (if (.contains prefs "saves")
(edn/read-string (.getString prefs "snapshot-list")) (edn/read-string (.getString prefs "saves"))
[]))) [])))
(defn snapshot-screenshots [] (defn snapshot-screenshots []
(for [snapshot (snapshot-list)] (for [snapshot (snapshot-list)]
[snapshot (try (Pixmap. (FileHandle. (save-screenshot-file-name (saves/name->save snapshot))) ) (update-in snapshot [:screenshot]
(catch Exception e #(try (Pixmap. (FileHandle. %) )
(Pixmap. 160 120 Pixmap$Format/RGB888)))])) (catch Exception e
(Pixmap. 160 120 Pixmap$Format/RGB888))))))
(defn snapshot-state [entities name] (defn save-chapter [entities chapter]
(doto (.getPreferences (Gdx/app) "ticks-tales-saves") (let [prefs (.getPreferences (Gdx/app) "ticks-tales-saves")
(.putString (saves/saves name) (pr-str (entities :state))) chapters (if (.contains prefs "chapters")
(.putString "snapshot-list" (pr-str (cons (saves/saves name) (edn/read-string (.getString prefs "chapters"))
(filter (complement #{(saves/saves name)}) saves/chapters)
(snapshot-list))))) chapters (assoc chapters chapter (entities :state))]
.flush) (.putString prefs "chapters" (pr-str chapters))
(on-gl (let [f (FileHandle. (save-screenshot-file-name name)) (.flush prefs)))
_ (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)]
pm (ScreenUtils/getFrameBufferPixmap x y w h)
resized (Pixmap. 160 120 Pixmap$Format/RGB888)
_ (.drawPixmap resized pm 0 0 w h 0 0 160 120)
png (PixmapIO$PNG. (* w h 1.5))]
(.write png f resized)
(.dispose png)
)))
(defn save [entities] (defn save [entities id name]
(snapshot-state entities :autosave)) (let [prefs (.getPreferences (Gdx/app) "ticks-tales-saves")
saves (if (.contains prefs "saves")
(defn has-save? (edn/read-string (.getString prefs "saves"))
([] (has-save? :autosave)) [])
([key] saves (cons {:name name
(let [name (saves/saves key)] :id id
(-> (.getPreferences (Gdx/app) "ticks-tales-saves") :screenshot (save-screenshot-file-name id)
(.contains name))))) :state (entities :state)}
(filter (comp (complement #{id}) :id) saves))]
(defn load-snapshot [key] (.putString prefs "saves" (pr-str saves))
(let [name (saves/saves key)] (.flush prefs)
(-> (.getPreferences (Gdx/app) "ticks-tales-saves") (on-gl (let [f (FileHandle. (save-screenshot-file-name id))
(.getString name) _ (Pixmap/setFilter Pixmap$Filter/BiLinear)
edn/read-string viewport (-> @ (resolve 'advent.screens.scene/scene) :screen deref :viewport)
(assoc :active? true)))) [x y w h g-l g-r] [(.getScreenX viewport) (.getScreenY viewport) (.getScreenWidth viewport) (.getScreenHeight viewport)]
pm (ScreenUtils/getFrameBufferPixmap x y w h)
(defn load [] resized (Pixmap. 160 120 Pixmap$Format/RGB888)
(load-snapshot :autosave)) _ (.drawPixmap resized pm 0 0 w h 0 0 160 120)
png (PixmapIO$PNG. (* w h 1.5))]
(.write png f resized)
(.dispose png)))))
(defn save-settings! [] (defn save-settings! []
(doto (.getPreferences (Gdx/app) "ticks-tales-saves") (doto (.getPreferences (Gdx/app) "ticks-tales-saves")