more good progress with inventory
This commit is contained in:
@@ -541,6 +541,7 @@
|
|||||||
(defn remove-item [entities item]
|
(defn remove-item [entities item]
|
||||||
(run-action entities
|
(run-action entities
|
||||||
(begin [this screen entities]
|
(begin [this screen entities]
|
||||||
|
(screen! @(resolve 'advent.screens.scene/hud) :on-remove-item :item item)
|
||||||
(-> entities
|
(-> entities
|
||||||
(update-in [:state :inventory] #(remove (partial = item) %))
|
(update-in [:state :inventory] #(remove (partial = item) %))
|
||||||
(assoc-in [:cursor :current] :main)))
|
(assoc-in [:cursor :current] :main)))
|
||||||
@@ -582,6 +583,7 @@
|
|||||||
(run-action entities
|
(run-action entities
|
||||||
(begin [this screen entities]
|
(begin [this screen entities]
|
||||||
(utils/play-sound! screen entities :pickup (constantly 0.3))
|
(utils/play-sound! screen entities :pickup (constantly 0.3))
|
||||||
|
(screen! @(resolve 'advent.screens.scene/hud) :on-give-item :item ((:all-items entities) item))
|
||||||
(-> entities
|
(-> entities
|
||||||
(update-in [:state :inventory] #(conj % item))
|
(update-in [:state :inventory] #(conj % item))
|
||||||
(update-in [:state :obtained-items] #(conj % item))
|
(update-in [:state :obtained-items] #(conj % item))
|
||||||
|
|||||||
@@ -1483,18 +1483,54 @@ void main ()
|
|||||||
(dissoc :selected-item)
|
(dissoc :selected-item)
|
||||||
(assoc :state :none)))
|
(assoc :state :none)))
|
||||||
|
|
||||||
|
(defmethod transition-hud [:remove-item :none]
|
||||||
|
[screen entities _]
|
||||||
|
(-> entities
|
||||||
|
(update-in [:inventory] #(actions/start-animation screen % :default))
|
||||||
|
(dissoc :selected-item)
|
||||||
|
(assoc :state :none)))
|
||||||
|
|
||||||
(defmethod transition-hud [:opened-inventory :choosing-item]
|
(defmethod transition-hud [:opened-inventory :choosing-item]
|
||||||
[{:keys [cursor] :as screen} entities _]
|
[{:keys [cursor] :as screen} entities _]
|
||||||
(-> entities
|
(-> entities
|
||||||
(assoc :selected-item
|
(assoc :selected-item
|
||||||
(assoc (texture (aget (get-in entities [:all-items]) 0 (.indexOf utils/+all-cursors+ (:cursor cursor))))
|
(assoc (texture (aget (get-in entities [:all-items]) 0 (.indexOf utils/+all-cursors+ (:cursor cursor))))
|
||||||
:x 300 :y 40 :baseline 9000 :opacity 0.0))
|
:x 300 :y 40 :baseline 9000 :opacity 0.0
|
||||||
|
:item cursor))
|
||||||
(assoc-in [:tweens :appear-item]
|
(assoc-in [:tweens :appear-item]
|
||||||
(tween/tween :appear-item screen [:selected-item :opacity] 0.0 1.0 0.5 :ease tween/ease-in-out-quadratic))
|
(tween/tween :appear-item screen [:selected-item :opacity] 0.0 1.0 0.5 :ease tween/ease-in-out-quadratic))
|
||||||
(assoc-in [:tweens :appear-item-y]
|
(assoc-in [:tweens :appear-item-y]
|
||||||
(tween/tween :appear-item-y screen [:selected-item :y] 30 35 0.5 :ease tween/ease-in-out-quadratic))
|
(tween/tween :appear-item-y screen [:selected-item :y] 30 35 0.5 :ease tween/ease-in-out-quadratic))
|
||||||
(assoc :state :choosing-item)))
|
(assoc :state :choosing-item)))
|
||||||
|
|
||||||
|
(defmethod transition-hud [:none :choosing-item]
|
||||||
|
[{:keys [cursor] :as screen} entities _]
|
||||||
|
(-> entities
|
||||||
|
(update-in [:inventory] #(actions/start-animation screen % :open))
|
||||||
|
(assoc :selected-item
|
||||||
|
(assoc (texture (aget (get-in entities [:all-items]) 0 (.indexOf utils/+all-cursors+ (:cursor cursor))))
|
||||||
|
:x 300 :y 40 :baseline 9000 :opacity 0.0
|
||||||
|
:item cursor))
|
||||||
|
(assoc-in [:tweens :appear-item]
|
||||||
|
(tween/tween :appear-item screen [:selected-item :opacity] 0.0 1.0 0.5 :ease tween/ease-in-out-quadratic))
|
||||||
|
(assoc-in [:tweens :appear-item-y]
|
||||||
|
(tween/tween :appear-item-y screen [:selected-item :y] 30 35 0.5 :ease tween/ease-in-out-quadratic))
|
||||||
|
(assoc :state :choosing-item)))
|
||||||
|
|
||||||
|
(defmethod transition-hud [:none :give-item]
|
||||||
|
[{:keys [item] :as screen} entities _]
|
||||||
|
(-> entities
|
||||||
|
(update-in [:inventory] #(actions/start-animation screen % :opened))
|
||||||
|
(assoc :selected-item
|
||||||
|
(assoc (texture (aget (get-in entities [:all-items]) 0 (.indexOf utils/+all-cursors+ (:cursor item))))
|
||||||
|
:x 300 :y 40 :baseline 9000 :opacity 0.0
|
||||||
|
:item item))
|
||||||
|
(assoc-in [:tweens :appear-item]
|
||||||
|
(tween/tween :appear-item screen [:selected-item :opacity] 0.0 1.0 0.5 :ease tween/ease-in-out-quadratic))
|
||||||
|
(assoc-in [:tweens :appear-item-y]
|
||||||
|
(tween/tween :appear-item-y screen [:selected-item :y] 40 35 0.5 :ease tween/ease-in-out-quadratic))
|
||||||
|
(assoc :state :give-item)))
|
||||||
|
|
||||||
(defmethod transition-hud [:chose-item :returning-item]
|
(defmethod transition-hud [:chose-item :returning-item]
|
||||||
[{:keys [cursor] :as screen} entities _]
|
[{:keys [cursor] :as screen} entities _]
|
||||||
(screen! scene :on-click-inventory)
|
(screen! scene :on-click-inventory)
|
||||||
@@ -1506,6 +1542,21 @@ void main ()
|
|||||||
(update-in [:inventory] (fn [i] (actions/start-animation screen i :closing)))
|
(update-in [:inventory] (fn [i] (actions/start-animation screen i :closing)))
|
||||||
(assoc :state :returning-item)))
|
(assoc :state :returning-item)))
|
||||||
|
|
||||||
|
(defmethod transition-hud [:chose-item :remove-item]
|
||||||
|
[{:keys [cursor] :as screen} entities _]
|
||||||
|
(-> entities
|
||||||
|
(assoc-in [:tweens :disappear-item]
|
||||||
|
(tween/tween :disappear-item screen [:selected-item :opacity] 1.0 0.0 0.5 :ease tween/ease-in-out-quadratic))
|
||||||
|
(assoc-in [:tweens :disappear-item-y]
|
||||||
|
(tween/tween :disappear-item-y screen [:selected-item :y] 35 40 0.5 :ease tween/ease-in-out-quadratic))
|
||||||
|
(update-in [:inventory] (fn [i] (actions/start-animation screen i :closing)))
|
||||||
|
(assoc :state :remove-item)))
|
||||||
|
|
||||||
|
(defmethod transition-hud [:give-item :chose-item]
|
||||||
|
[screen entities _]
|
||||||
|
(-> entities
|
||||||
|
(update-in [:inventory] #(actions/start-animation screen % :opened))
|
||||||
|
(assoc :state :chose-item)))
|
||||||
|
|
||||||
(defmethod transition-hud [:choosing-item :chose-item]
|
(defmethod transition-hud [:choosing-item :chose-item]
|
||||||
[screen entities _]
|
[screen entities _]
|
||||||
@@ -1548,6 +1599,20 @@ void main ()
|
|||||||
(not (get-in entities [:tweens :disappear-item])))
|
(not (get-in entities [:tweens :disappear-item])))
|
||||||
(transition-hud screen entities :none)))
|
(transition-hud screen entities :none)))
|
||||||
|
|
||||||
|
(defmethod process-state :remove-item
|
||||||
|
[screen entities]
|
||||||
|
(when
|
||||||
|
(and (animation! (get-in entities [:inventory :closing])
|
||||||
|
:is-animation-finished
|
||||||
|
(- (+ (:delta-time screen) (:total-time screen)) (get-in entities [:inventory :anim-start])))
|
||||||
|
(not (get-in entities [:tweens :disappear-item])))
|
||||||
|
(transition-hud screen entities :none)))
|
||||||
|
|
||||||
|
(defmethod process-state :give-item
|
||||||
|
[screen entities]
|
||||||
|
(when-not (get-in entities [:tweens :appear-item])
|
||||||
|
(transition-hud screen entities :chose-item)))
|
||||||
|
|
||||||
(defscreen hud
|
(defscreen hud
|
||||||
:on-show
|
:on-show
|
||||||
(fn [screen entities]
|
(fn [screen entities]
|
||||||
@@ -1625,6 +1690,17 @@ void main ()
|
|||||||
(fn [{:keys [^FitViewport viewport width height]} entities]
|
(fn [{:keys [^FitViewport viewport width height]} entities]
|
||||||
(.update viewport width height true))
|
(.update viewport width height true))
|
||||||
|
|
||||||
|
:on-give-item
|
||||||
|
(fn [screen [ entities]]
|
||||||
|
(transition-hud screen entities :give-item))
|
||||||
|
|
||||||
|
:on-remove-item
|
||||||
|
(fn [{:keys [item] :as screen} [ entities]]
|
||||||
|
(println "removing...")
|
||||||
|
(when (= (:value item) (get-in entities [:selected-item :value]))
|
||||||
|
(transition-hud screen entities :remove-item)))
|
||||||
|
|
||||||
|
|
||||||
:on-return-item
|
:on-return-item
|
||||||
(fn [screen [ entities]]
|
(fn [screen [ entities]]
|
||||||
(if (hud-interactable?)
|
(if (hud-interactable?)
|
||||||
@@ -1640,7 +1716,7 @@ void main ()
|
|||||||
:on-reactivate
|
:on-reactivate
|
||||||
(fn [{:keys [cursor] :as screen} [entities]]
|
(fn [{:keys [cursor] :as screen} [entities]]
|
||||||
(let [selected-item? (and (:value cursor)
|
(let [selected-item? (and (:value cursor)
|
||||||
(:cursor cursor))]
|
(:cursor cursor))]
|
||||||
(if selected-item?
|
(if selected-item?
|
||||||
(transition-hud screen entities :choosing-item)
|
(transition-hud screen entities :choosing-item)
|
||||||
(transition-hud screen entities :closing-inventory))))
|
(transition-hud screen entities :closing-inventory))))
|
||||||
|
|||||||
Reference in New Issue
Block a user