zooming
This commit is contained in:
@@ -613,22 +613,47 @@
|
||||
:hud-active? (fn [{:keys [hud-active?]} [entities]]
|
||||
(assoc-in entities [:state :hud-active?] hud-active?)))
|
||||
|
||||
|
||||
(defn grow-hud [screen entities target up?]
|
||||
|
||||
(let [grow-or-shrink (if up? :grow :shrink)
|
||||
scale-from (if up? 1.0 1.1)
|
||||
scale-to (if up? 1.1 1.0)
|
||||
opacity-from (if up? 0.8 1.0)
|
||||
opacity-to (if up? 1.0 0.8)]
|
||||
(if (and (not (get-in entities [:tweens [target grow-or-shrink :x]]))
|
||||
(not= scale-to (get-in entities [target :scale-y] 1.0)))
|
||||
(-> entities
|
||||
(assoc-in [:tweens [target grow-or-shrink :y]]
|
||||
(tween/tween [target grow-or-shrink :y] screen [target :scale-y] scale-from scale-to 0.15 :ease tween/ease-in-out-quadratic))
|
||||
(assoc-in [:tweens [target grow-or-shrink :x]]
|
||||
(tween/tween [target grow-or-shrink :x] screen [target :scale-x] scale-from scale-to 0.15 :ease tween/ease-in-out-quadratic))
|
||||
(assoc-in [:tweens [target grow-or-shrink :opacity]]
|
||||
(tween/tween [target grow-or-shrink :opacity] screen [target :opacity] opacity-from opacity-to 0.15 :ease tween/ease-in-out-quadratic)))
|
||||
entities)))
|
||||
|
||||
(defscreen hud
|
||||
:on-show
|
||||
(fn [screen entities]
|
||||
(let [screen (assoc screen :total-time 0)]
|
||||
(utils/setup-viewport screen 320 240)
|
||||
|
||||
{:close (assoc (texture "close.png") :x 304 :y 224 :width 16 :height 16 :baseline 9000)
|
||||
{:close (assoc (texture "close.png")
|
||||
:x 304 :y 224
|
||||
:width 16 :height 16
|
||||
:baseline 9000
|
||||
:opacity 0.8)
|
||||
:inventory (assoc (texture "inventory.png") :x 278 :y 0 :baseline 9000
|
||||
:mouse-in? (zone/box 278 0 320 42))
|
||||
:fps (assoc (label "0" (color :white) ) :x 5 :baseline 0)}))
|
||||
:mouse-in? (zone/box 278 0 320 42)
|
||||
:opacity 0.8)
|
||||
:fps (assoc (label "0" (color :white) ) :x 5 :baseline 0 :opacity 0.3)}))
|
||||
|
||||
:on-render
|
||||
(fn [screen [entities]]
|
||||
(label! (:fps entities) :set-text (str (game :fps)))
|
||||
(render! screen [(:fps entities) (:inventory entities) (:close entities)])
|
||||
entities)
|
||||
(let [entities (utils/apply-tweens screen entities (:tweens entities))]
|
||||
(label! (:fps entities) :set-text (str (game :fps)))
|
||||
(render! screen [(:fps entities) (:inventory entities) (:close entities)])
|
||||
entities))
|
||||
|
||||
:on-resize
|
||||
(fn [screen entities]
|
||||
@@ -636,9 +661,22 @@
|
||||
|
||||
:on-mouse-moved
|
||||
(fn [screen [entities]]
|
||||
(let [[x y] (utils/unproject screen)]
|
||||
(screen! scene :hud-active? :hud-active? (or ((:mouse-in? (:inventory entities)) x y)
|
||||
(utils/intersects? (:close entities) [x y])))))
|
||||
(let [[x y] (utils/unproject screen)
|
||||
hovered-inventory? ((:mouse-in? (:inventory entities)) x y)
|
||||
hovered-close? (utils/intersects? (:close entities) [x y])]
|
||||
(screen! scene :hud-active? :hud-active? (or hovered-close? hovered-inventory?))
|
||||
(cond hovered-inventory?
|
||||
(grow-hud screen entities :inventory true)
|
||||
|
||||
hovered-close?
|
||||
(grow-hud screen entities :close true)
|
||||
|
||||
:else
|
||||
(let [entities (update-in entities [:tweens] dissoc :inventory-grow-x :inventory-grow-y)
|
||||
entities (grow-hud screen entities :inventory false)
|
||||
entities (grow-hud screen entities :close false)]
|
||||
entities
|
||||
))))
|
||||
|
||||
|
||||
:on-touch-up
|
||||
|
||||
Reference in New Issue
Block a user