made inventory ux much better by fading in.
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
[clojure.pprint]
|
[clojure.pprint]
|
||||||
[advent.pathfind]
|
[advent.pathfind]
|
||||||
[advent.zone :as zone]
|
[advent.zone :as zone]
|
||||||
|
[advent.tween :as tween]
|
||||||
[advent.utils :as utils])
|
[advent.utils :as utils])
|
||||||
(:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter]
|
(:import [com.badlogic.gdx.graphics Pixmap Pixmap$Filter Texture Texture$TextureFilter]
|
||||||
[com.badlogic.gdx.graphics.g2d TextureRegion]
|
[com.badlogic.gdx.graphics.g2d TextureRegion]
|
||||||
@@ -14,11 +15,12 @@
|
|||||||
InputMultiplexer InputProcessor Net Preferences Screen]))
|
InputMultiplexer InputProcessor Net Preferences Screen]))
|
||||||
|
|
||||||
|
|
||||||
(defn close [entities]
|
(defn close [screen entities]
|
||||||
(screen! @(resolve 'advent.screens.scene/scene) :on-reactivate)
|
(screen! @(resolve 'advent.screens.scene/scene) :on-reactivate)
|
||||||
(-> entities
|
(-> entities
|
||||||
(assoc :shown? false)
|
(assoc :start-showing? false)
|
||||||
(assoc :start-showing? false)))
|
(assoc-in [:tweens :fade-out] (tween/tween :fade-out screen [:opacity] 1.0 0.0 0.2 :ease tween/ease-out-cubic
|
||||||
|
:finish #(assoc % :shown? false)))))
|
||||||
|
|
||||||
|
|
||||||
(defscreen inventory-screen
|
(defscreen inventory-screen
|
||||||
@@ -26,9 +28,9 @@
|
|||||||
(fn [screen entities]
|
(fn [screen entities]
|
||||||
(utils/setup-viewport screen 1280 960)
|
(utils/setup-viewport screen 1280 960)
|
||||||
|
|
||||||
(let [highlighted-text (assoc (label "Hello" (style :label (utils/get-font "ego/font.fnt") (color :white))) :x 0 :y 850 :width 1280)]
|
(let [highlighted-text (assoc (label "Hello" (style :label (utils/get-font "ego/font.fnt") (color :white))) :x 0 :y 850 :width 1280 )]
|
||||||
(label! highlighted-text :set-alignment Align/center)
|
(label! highlighted-text :set-alignment Align/center)
|
||||||
{:overlay (assoc (texture "inventory-overlay.png" ) :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0)
|
{:overlay (assoc (texture "inventory-overlay.png" ) :x 0 :y 0 :scale-x 4 :scale-y 4 :origin-x 0 :origin-y 0 :opacity 0.0)
|
||||||
:fade (assoc (texture "black.png")
|
:fade (assoc (texture "black.png")
|
||||||
:scale-x 80
|
:scale-x 80
|
||||||
:scale-y 80
|
:scale-y 80
|
||||||
@@ -40,6 +42,8 @@
|
|||||||
:shown? false
|
:shown? false
|
||||||
:start-showing? false
|
:start-showing? false
|
||||||
:highlighted-item nil
|
:highlighted-item nil
|
||||||
|
:opacity 0.0
|
||||||
|
:tweens {}
|
||||||
:highlighted-text highlighted-text}))
|
:highlighted-text highlighted-text}))
|
||||||
|
|
||||||
:on-render
|
:on-render
|
||||||
@@ -48,9 +52,18 @@
|
|||||||
(-> entities
|
(-> entities
|
||||||
(assoc :start-showing? false)
|
(assoc :start-showing? false)
|
||||||
(assoc :shown? true))
|
(assoc :shown? true))
|
||||||
entities)]
|
entities)
|
||||||
|
entities (utils/apply-tweens screen entities (:tweens entities))
|
||||||
|
opacity (get-in entities [:opacity])
|
||||||
|
entities (-> entities
|
||||||
|
(assoc-in [:overlay :opacity] opacity)
|
||||||
|
(assoc-in [:fade :opacity] (* 0.3 opacity))
|
||||||
|
(assoc-in [:highlighted-text :opacity] opacity)
|
||||||
|
(update-in [:items] (fn [i]
|
||||||
|
(map #(assoc % :opacity opacity) i))))]
|
||||||
|
|
||||||
(when (:shown? entities)
|
(when (:shown? entities)
|
||||||
|
(doto (:highlighted-text entities) (label! :set-color (color 1 1 1 opacity)))
|
||||||
(render! screen [(:fade entities) (:overlay entities)])
|
(render! screen [(:fade entities) (:overlay entities)])
|
||||||
(render! screen (:items entities))
|
(render! screen (:items entities))
|
||||||
(if-let [item (:highlighted-item entities)]
|
(if-let [item (:highlighted-item entities)]
|
||||||
@@ -59,28 +72,34 @@
|
|||||||
(render! screen [(:highlighted-text entities)]))
|
(render! screen [(:highlighted-text entities)]))
|
||||||
entities))
|
entities))
|
||||||
|
|
||||||
:show-screen (fn [{items :items} [entities]]
|
:show-screen (fn [{items :items :as screen} [entities]]
|
||||||
(assoc entities :start-showing? true
|
(if (:shown? entities)
|
||||||
:items (for [[item index] (map vector items (range))
|
entities
|
||||||
:let [row (int (/ index 8))
|
|
||||||
column (mod index 8)
|
(-> entities
|
||||||
base-x (* 79 4)
|
(assoc :start-showing? true
|
||||||
base-y (* 180 4)
|
:opacity 0.0
|
||||||
x (+ base-x (* column (* 24 4)))
|
:items (for [[item index] (map vector items (range))
|
||||||
y (- base-y (* row (* 24 4)))
|
:let [row (int (/ index 8))
|
||||||
item-width 16
|
column (mod index 8)
|
||||||
offset-x (+ x (/ item-width 2))
|
base-x (* 79 4)
|
||||||
offset-y (+ y (/ item-width 2))
|
base-y (* 180 4)
|
||||||
padding (/ item-width 2)
|
x (+ base-x (* column (* 24 4)))
|
||||||
padding (* 4 padding)]]
|
y (- base-y (* row (* 24 4)))
|
||||||
(assoc (texture (aget (:all-items entities) 0 (.indexOf utils/+all-cursors+ (:cursor item))))
|
item-width 16
|
||||||
:x x :y y
|
offset-x (+ x (/ item-width 2))
|
||||||
:scale-x 4
|
offset-y (+ y (/ item-width 2))
|
||||||
:scale-y 4
|
padding (/ item-width 2)
|
||||||
:origin-x 0
|
padding (* 4 padding)]]
|
||||||
:origin-y 0
|
(assoc (texture (aget (:all-items entities) 0 (.indexOf utils/+all-cursors+ (:cursor item))))
|
||||||
:item item
|
:x x :y y
|
||||||
:box (zone/box (- offset-x padding) (- offset-y padding) (+ offset-x item-width padding) (+ offset-y item-width padding))))))
|
:scale-x 4
|
||||||
|
:scale-y 4
|
||||||
|
:origin-x 0
|
||||||
|
:origin-y 0
|
||||||
|
:item item
|
||||||
|
:box (zone/box (- offset-x padding) (- offset-y padding) (+ offset-x item-width padding padding) (+ offset-y item-width padding padding)))))
|
||||||
|
(assoc-in [:tweens :fade-in] (tween/tween :fade-in screen [:opacity] 0.0 1.0 0.2 :ease tween/ease-out-cubic)))))
|
||||||
|
|
||||||
:on-mouse-moved (fn [screen [entities]]
|
:on-mouse-moved (fn [screen [entities]]
|
||||||
(let [[x y] (utils/unproject screen)
|
(let [[x y] (utils/unproject screen)
|
||||||
@@ -90,7 +109,7 @@
|
|||||||
(assoc entities :highlighted-item nil))))
|
(assoc entities :highlighted-item nil))))
|
||||||
|
|
||||||
:on-touch-up (fn [screen [entities]]
|
:on-touch-up (fn [screen [entities]]
|
||||||
(when (and (:shown? entities) (= (button-code :left) (:button screen)))
|
(when (and (:shown? entities) (= (button-code :left) (:button screen)) (= 1.0 (:opacity entities)))
|
||||||
(let [{:keys [highlighted-item]} entities
|
(let [{:keys [highlighted-item]} entities
|
||||||
room-entities (-> @(resolve 'advent.screens.scene/scene)
|
room-entities (-> @(resolve 'advent.screens.scene/scene)
|
||||||
:entities
|
:entities
|
||||||
@@ -102,8 +121,8 @@
|
|||||||
(screen! @(resolve 'advent.screens.scene/scene) :on-chose-item :item highlighted-item)
|
(screen! @(resolve 'advent.screens.scene/scene) :on-chose-item :item highlighted-item)
|
||||||
(when-let [interaction-script ((or (:scripts highlighted-item) (constantly nil)) (:value current-cursor))]
|
(when-let [interaction-script ((or (:scripts highlighted-item) (constantly nil)) (:value current-cursor))]
|
||||||
(interaction-script room-entities)
|
(interaction-script room-entities)
|
||||||
(close entities)))
|
(close screen entities)))
|
||||||
(close entities)))))
|
(close screen entities)))))
|
||||||
|
|
||||||
:on-resize (fn [screen entities]
|
:on-resize (fn [screen entities]
|
||||||
(.update (:viewport screen) (:width screen) (:height screen) true)))
|
(.update (:viewport screen) (:width screen) (:height screen) true)))
|
||||||
|
|||||||
Reference in New Issue
Block a user