progress on new save menu.

This commit is contained in:
Bryce Covert
2015-11-04 07:43:27 -08:00
parent 19ac21fe0a
commit a8976e079d

View File

@@ -18,8 +18,9 @@
(:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter]
[com.badlogic.gdx.graphics.g2d TextureRegion]
[com.badlogic.gdx.utils.viewport FitViewport]
[com.badlogic.gdx.scenes.scene2d.ui Slider$SliderStyle]
[com.badlogic.gdx.scenes.scene2d.utils Align]
[com.badlogic.gdx.scenes.scene2d.ui Slider$SliderStyle Widget]
[play_clj.entities ActorEntity]
[com.badlogic.gdx.scenes.scene2d.utils Align NinePatchDrawable]
[com.badlogic.gdx Application Audio Files Game Gdx Graphics Input
InputMultiplexer InputProcessor Net Preferences Screen]))
@@ -117,6 +118,22 @@
(assoc-in [:tweens :fade-out-music]
(tween/tween :fade-out-music screen [:volume] 1.0 0.0 1.0)))))
(defn button-style []
(let [font (utils/get-font "ego/font.fnt")
style (style :text-button nil nil nil font)]
(set! (.fontColor style) (color 1.0 0.3 0.3 1.0))
(set! (.overFontColor style) (color :yellow))
(set! (.downFontColor style) (color 0.7 0.2 0.2 1.0))
(set! (.disabledFontColor style) (color :gray))
style))
(defn make-button
([msg & rest]
(let [button (merge (text-button msg (button-style))
(apply hash-map rest))]
(doto button
(text-button! :set-user-object button) ))))
(defn make-label
([msg]
(make-label msg nil))
@@ -128,110 +145,80 @@
center
(doto (label! :set-alignment Align/center))))))
(defn make-slider [initial-value]
(let [ui-skin (skin "ui/ui.json")]
(->
(slider {:min 0 :max 100 :step 1} ui-skin :set-value initial-value)
(assoc :width 305
:hover (skin! ui-skin :get "default-horizontal-hover" Slider$SliderStyle)
:default (skin! ui-skin :get "default-horizontal" Slider$SliderStyle)
:z 8))))
(defn make-slider [initial-value & rest]
(let [ui-skin (skin "ui/ui.json")
slider (->
(slider {:min 0 :max 100 :step 1} ui-skin :set-value initial-value)
(assoc :width 305
:hover (skin! ui-skin :get "default-horizontal-hover" Slider$SliderStyle)
:default (skin! ui-skin :get "default-horizontal" Slider$SliderStyle)
:z 8)
(merge (apply hash-map rest)))]
(doto slider
(slider! :set-user-object slider))))
(defn stack-y [label base index]
(assoc label :y (- base (* 32 index))))
(defn make-table [children]
(-> children
(table)
(doto (table! :background (NinePatchDrawable.
(:object (nine-patch {:region (:object (utils/get-texture "talk-bg-2.png")) :left 9 :top 9 :right 9 :bottom 9})))))
(assoc
:y 32 :width 500 :height 335
:x (- (/ 1280 2) (/ 500 2))
:z 8
:opacity 1.0)))
(defn main-menu []
(let [start-playing-label (quest-label)
is-starting? (= "Begin quest" start-playing-label)]
{:start-playing (-> (make-label start-playing-label)
(stack-y 305 0)
(assoc :z 8
:interactable true))
:rewind (-> (make-label "Previous chapter" (when is-starting? (color :gray)))
(stack-y 305 1)
(assoc :z 8
:interactable (not is-starting?)))
:music-label (-> (make-label "Music" (color :white))
(stack-y 305 2)
(assoc :z 8))
:music-volume-slider (-> (make-slider (:music-volume @utils/settings))
center
(stack-y 305 3)
(assoc :z 8))
:sound-label (-> (make-label "FX" (color :white))
(stack-y 305 4)
(assoc :z 8))
:sound-volume-slider (-> (make-slider (:sound-volume @utils/settings))
center
(stack-y 305 5)
(assoc :z 8))
:fullscreen (-> (make-label "Fullscreen")
(stack-y 305 6)
(assoc :z 8 :interactable true))
:quit (-> (make-label "End quest")
(stack-y 305 7)
(assoc :z 8 :interactable true))}))
(make-table [[ (make-button start-playing-label :key :continue-or-start) :height 32]
:row
[ (make-button "Chapters" :key :chapters) :height 32]
:row
[ (make-button "Load") :height 32]
:row
[(make-label "Music" (color :white)) :height 32]
:row
[(make-slider (:music-volume @utils/settings) :key :music-volume-slider) :height 32 :width 305]
:row
[(make-label "FX" (color :white)) :height 32]
:row
[(make-slider (:sound-volume @utils/settings) :key :sound-volume-slider) :height 32 :width 305]
:row
[(make-button "Fullscreen" :key :toggle-fullscreen) :height 32]
:row
[(make-button "End quest" :key :end-quest) :height 32]
])))
(defn get-selected-save [entities [x y]]
(first (filter
(every-pred :save #(utils/intersects? % [x y]))
(vals entities))))
(defn saves-menu [entities [save screenshot]]
(let [last? (= save (-> (:saves-list entities) last first))
first? (= save (-> (:saves-list entities) first first))
window (sliding-window (:save-index entities) 5 (:saves-list entities))]
(into
{:back (-> (make-label "Back")
(stack-y 305 7)
(assoc :z 8 :interactable true))
:title (-> (make-label (str save))
(stack-y 305 0)
(assoc :z 8
:interactable true
:save (saves/name->save save)))
:screenshot-backdrop (-> (utils/get-texture "title/screenshot-backdrop.png")
(assoc :x (/ 1280 2)
:y 214
:scale-x 4
:scale-y 4
:origin-y 19
:origin-x 24
:z 8))
:screenshot (-> (image (texture screenshot))
(assoc :z 9 :x (- (/ 1280 2) 80) :y (- 214 60) :height 120 :width 160
:save (saves/name->save save)))
(defn saves-menu []
(make-table (concat [[(make-label "Save Title") :colspan 3 :height 32]
:row
[(scroll-pane (table [[(image (utils/get-texture "title/screenshot-backdrop.png")) :width 142 :pad 4 4 4 4 :height 104]
[(image (utils/get-texture "title/screenshot-backdrop.png")) :width 142 :pad 4 4 4 4 :height 104]
[(image (utils/get-texture "title/screenshot-backdrop.png")) :width 142 :pad 4 4 4 4 :height 104]
:row
[(image (utils/get-texture "title/screenshot-backdrop.png")) :width 142 :pad 4 4 4 4 :height 104]
[(image (utils/get-texture "title/screenshot-backdrop.png")) :width 142 :pad 4 4 4 4 :height 104]
[(image (utils/get-texture "title/screenshot-backdrop.png")) :width 142 :pad 4 4 4 4 :height 104]
:row
[(image (utils/get-texture "title/screenshot-backdrop.png")) :width 142 :pad 4 4 4 4 :height 104]
[(image (utils/get-texture "title/screenshot-backdrop.png")) :width 142 :pad 4 4 4 4 :height 104]
[(image (utils/get-texture "title/screenshot-backdrop.png")) :width 142 :pad 4 4 4 4 :height 104]])
(style :scroll-pane nil nil nil nil nil))
:colspan 3 :height 224]
:row
[(ActorEntity. (Widget.)) :width 150]
[(make-button "Back" :key :back) :width 150]
[(make-button "Continue" :key :continue) :width 150]])))
:next (-> (make-label "Next >" (when last? (color :gray)))
(assoc :x 780 :y 203
:interactable (not last?)))
:prev (as-> (make-label "< Prev" (when first? (color :gray))) prev
(assoc prev :x (- 500 (.getWidth (:object prev))) :y 203
:interactable (not first?)))}
(for [[[save-l] index] (map vector window (range))
:let [image (if (= save-l save)
(utils/get-texture "title/save-indicator-active.png")
(utils/get-texture "title/save-indicator.png"))]]
[[:save-indicator save-l] (assoc image
:y 116 :x (- (+ 640 (* index 7 4))
(/ (* (dec (count window)) 7 4) 2))
:z 8 :scale-x 4 :scale-y 4)]))))
(defn style-ui [entities]
(doseq [entity (vals entities)
:let [[x y] (:last-pos entities)]
:when (and (:object entity) x y)]
(cond (label? entity)
(style-label entity (get-in entities [:font]) [x y])
(slider? entity)
(style-slider entity [x y])))
entities)
(defscreen title-screen
:on-show
@@ -280,7 +267,7 @@
:particle-clouds (assoc (particle-effect "particles/particle-clouds" :reset :start) :x 640 :y 480 :z 1)
:ego-jet (assoc (particle-effect "particles/jet" :reset :start) :x 450 :y 650 :z 4)
:toolbox (-> (assoc (nine-patch {:region (:object (utils/get-texture "talk-bg-2.png")) :left 9 :top 9 :right 9 :bottom 9})
#_#_:toolbox (-> (assoc (nine-patch {:region (:object (utils/get-texture "talk-bg-2.png")) :left 9 :top 9 :right 9 :bottom 9})
:y 58 :width 500 :height 297
:z 7)
center)
@@ -308,13 +295,13 @@
entities (fly-ego screen entities)
entities (fly-balloon screen entities)
entities (update-in entities [:balloon] merge (animation->texture screen (:anim (:balloon entities))))
entities (update-in entities [:banner-back] merge (animation->texture screen (:anim (:banner-back entities))))
entities (style-ui entities)]
entities (update-in entities [:banner-back] merge (animation->texture screen (:anim (:banner-back entities))))]
(when (:fullscreen entities)
(label! (:fullscreen entities) :set-text (if (.isFullscreen Gdx/graphics)
"Fullscreen"
"Windowed")))
(music! (:music entities) :set-volume (utils/current-music-volume (:volume entities)))
(render! screen (sort-by :z (filter :object (vals entities))) )
@@ -323,13 +310,9 @@
:show-screen (fn [entities]
entities)
:on-mouse-moved (fn [screen [entities]]
(let [[x y] (utils/unproject screen)]
(assoc entities :last-pos [x y])))
:on-touch-dragged (fn [screen [entities]]
(let [[x y] (utils/unproject screen)]
(assoc entities :last-pos [x y])))
:on-key-up
(fn [screen entities]
(when (= (key-code :escape) (:key screen))
@@ -337,54 +320,54 @@
nil)
:on-ui-changed
(fn [screen [entities]]
(swap! utils/settings
assoc
:music-volume (slider! (:music-volume-slider entities) :get-value)
:sound-volume (slider! (:sound-volume-slider entities) :get-value))
(utils/save-settings!)
entities)
(fn [{:keys [actor] :as screen} [entities]]
(let [e (-> actor .getUserObject)
actor-key (:key e)]
(cond
(= :music-volume-slider actor-key)
(do (swap! utils/settings assoc :music-volume (slider! e :get-value))
(utils/save-settings!)
entities)
(= :sound-volume-slider actor-key)
(do (swap! utils/settings assoc :sound-volume (slider! e :get-value))
(utils/save-settings!)
entities)
(#{:back } actor-key)
(-> entities
(dissoc :save-menu)
(assoc :main-menu (main-menu)))
(= :chapters actor-key)
(-> entities
(dissoc :main-menu)
(assoc :save-menu (saves-menu)))
(= :toggle-fullscreen actor-key)
(utils/toggle-fullscreen!)
(= :end-quest actor-key)
(quit screen entities)
(= :continue-or-start actor-key)
(start-playing screen entities (if (= "Begin quest" (quest-label))
nil
:autosave))
:else
entities)))
:on-touch-up (fn [screen [{:keys [prev next saves-list save-index] :as entities}]]
(when-not (get-in entities [:tweens :fade-out])
(let [[x y] (utils/unproject screen)
selected-save (get-selected-save entities [x y])]
(cond
(utils/intersects? (:start-playing entities) [x y])
(start-playing screen entities (if (= "Begin quest" (quest-label))
nil
:autosave))
(and (utils/intersects? (:rewind entities) [x y])
(-> entities :rewind :interactable))
(-> (apply dissoc entities (keys (:main-menu entities)))
(merge (saves-menu entities (nth saves-list save-index))))
(utils/intersects? (:quit entities) [x y])
(quit screen entities)
(utils/intersects? (:fullscreen entities) [x y])
(utils/toggle-fullscreen!)
(and (:back entities) (utils/intersects? (:back entities) [x y]))
(as-> entities entities
(dissoc entities :screenshot :back :title :prev :next :screenshot-backdrop)
(apply dissoc entities (map #(vector :save-indicator (first %))
(:saves-list entities)))
(merge entities(:main-menu entities)))
(and next (:interactable next) (utils/intersects? next [x y]))
(as-> entities entities
(update-in entities [:save-index] inc)
(merge entities (saves-menu entities (nth saves-list (:save-index entities)))))
(and prev (:interactable prev) (utils/intersects? prev [x y]))
(as-> entities entities
(update-in entities [:save-index] dec)
(merge entities (saves-menu entities (nth saves-list (:save-index entities)))))
selected-save
(start-playing screen entities (:save selected-save))