continuing the process of simplification.
This commit is contained in:
@@ -1448,49 +1448,164 @@ void main ()
|
||||
(get-in scene-entities [:state :active?])
|
||||
(= 0.0 (get-in scene-entities [:fade :opacity])))))
|
||||
|
||||
(defmulti transition-hud (fn [screen entities new-state] [(:state entities) new-state]))
|
||||
(defmethod transition-hud :default [screen entities new-state] entities)
|
||||
(defmulti transition-hud (fn [screen entities new-state state-data]
|
||||
|
||||
[(get-in entities [:inv-fsm :state]) new-state]))
|
||||
|
||||
(defmethod transition-hud [:none :opening-inventory]
|
||||
(defmethod transition-hud :default [screen entities new-state state-data] entities)
|
||||
|
||||
(defprotocol ITransition
|
||||
(start-transition [this screen entities])
|
||||
(transition-done? [this screen entities]))
|
||||
|
||||
(defn accept-state [entities state state-data transitions]
|
||||
(-> entities
|
||||
(assoc-in [:inv-fsm :state] state)
|
||||
(assoc-in [:inv-fsm :state-data] state-data)
|
||||
(assoc-in [:inv-fsm :transition-steps] transitions)))
|
||||
|
||||
(defmethod transition-hud [:none :open]
|
||||
[screen entities state state-data]
|
||||
(accept-state entities state state-data
|
||||
[(reify ITransition
|
||||
(start-transition [this screen entities]
|
||||
(update-in entities [:inventory] #(actions/start-animation screen % :open)))
|
||||
(transition-done? [this screen entities]
|
||||
(animation! (get-in entities [:inventory :anim])
|
||||
:is-animation-finished
|
||||
(- (+ (:delta-time screen) (:total-time screen)) (get-in entities [:inventory :anim-start])))))
|
||||
|
||||
(reify ITransition
|
||||
(start-transition [this screen entities]
|
||||
(update-in entities [:inventory] #(actions/start-animation screen % :opened)))
|
||||
(transition-done? [this screen entities]
|
||||
true))
|
||||
|
||||
(reify ITransition
|
||||
(start-transition [this screen entities]
|
||||
(screen! scene :on-click-inventory)
|
||||
entities)
|
||||
(transition-done? [this screen entities]
|
||||
true))]))
|
||||
|
||||
(defmethod transition-hud [:open :none]
|
||||
[screen entities state state-data]
|
||||
(accept-state entities state state-data
|
||||
[(reify ITransition
|
||||
(start-transition [this screen entities]
|
||||
(update-in entities [:inventory] #(actions/start-animation screen % :closing)))
|
||||
(transition-done? [this screen entities]
|
||||
(animation! (get-in entities [:inventory :anim])
|
||||
:is-animation-finished
|
||||
(- (+ (:delta-time screen) (:total-time screen)) (get-in entities [:inventory :anim-start])))))
|
||||
|
||||
(reify ITransition
|
||||
(start-transition [this screen entities]
|
||||
(update-in entities [:inventory] #(actions/start-animation screen % :default)))
|
||||
(transition-done? [this screen entities]
|
||||
true))]))
|
||||
|
||||
(defmethod transition-hud [:open :selected]
|
||||
[screen entities state state-data]
|
||||
|
||||
(accept-state entities state state-data
|
||||
[(reify ITransition
|
||||
(start-transition [this screen entities]
|
||||
(-> entities
|
||||
(assoc :selected-item
|
||||
(assoc (texture (aget (get-in entities [:all-items]) 0 (.indexOf utils/+all-cursors+ (:cursor state-data))))
|
||||
:x 300 :y 40 :baseline 9000 :opacity 0.0
|
||||
:item state-data))
|
||||
(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))))
|
||||
(transition-done? [this screen entities]
|
||||
(not (get-in entities [:tweens :appear-item]))))]))
|
||||
|
||||
(defmethod transition-hud [:selected :none]
|
||||
[screen entities state state-data]
|
||||
(accept-state entities state state-data))
|
||||
|
||||
(defmethod transition-hud [:none :aquiring]
|
||||
[screen entities state state-data]
|
||||
(accept-state entities state state-data))
|
||||
|
||||
(defmethod transition-hud [:aquiring :none]
|
||||
[screen entities state state-data]
|
||||
(accept-state entities state state-data))
|
||||
|
||||
(defmethod transition-hud [:selected :aquiring]
|
||||
[screen entities state state-data]
|
||||
(accept-state entities state state-data))
|
||||
|
||||
(defmethod transition-hud [:aquiring :selected]
|
||||
[screen entities state state-data]
|
||||
(accept-state entities state state-data))
|
||||
|
||||
(defn fsm-busy? [entities]
|
||||
(seq (get-in entities [:inv-fsm :transition-steps])))
|
||||
|
||||
(defn process-fsm [screen { {:keys [transition-steps current-transition] [next-state next-state-data] :pending-states [next-transition & remaining-transitions] :transition-steps} :inv-fsm :as entities}]
|
||||
(cond
|
||||
(and current-transition (transition-done? current-transition screen entities))
|
||||
(-> entities
|
||||
(update-in [:inv-fsm ] dissoc :current-transition))
|
||||
|
||||
current-transition
|
||||
nil ;; waiting
|
||||
|
||||
(fsm-busy? entities)
|
||||
(-> (start-transition next-transition screen entities)
|
||||
(assoc-in [:inv-fsm :current-transition] next-transition)
|
||||
(assoc-in [:inv-fsm :transition-steps] remaining-transitions))
|
||||
|
||||
next-state
|
||||
(transition-hud screen entities next-state next-state-data)
|
||||
|
||||
:else
|
||||
nil))
|
||||
|
||||
#_(defmethod transition-hud [:none :opening-inventory]
|
||||
[screen entities _]
|
||||
(-> entities
|
||||
(update-in [:inventory] #(actions/start-animation screen % :open))
|
||||
(assoc :state :opening-inventory)))
|
||||
|
||||
(defmethod transition-hud [:opening-inventory :opened-inventory]
|
||||
#_(defmethod transition-hud [:opening-inventory :opened-inventory]
|
||||
[screen entities _]
|
||||
(screen! scene :on-click-inventory)
|
||||
(-> entities
|
||||
(update-in [:inventory] #(actions/start-animation screen % :opened))
|
||||
(assoc :state :opened-inventory)))
|
||||
|
||||
(defmethod transition-hud [:opened-inventory :closing-inventory]
|
||||
#_(defmethod transition-hud [:opened-inventory :closing-inventory]
|
||||
[screen entities _]
|
||||
(-> entities
|
||||
(update-in [:inventory] #(actions/start-animation screen % :closing))
|
||||
(assoc :state :closing-inventory)))
|
||||
|
||||
(defmethod transition-hud [:closing-inventory :none]
|
||||
#_(defmethod transition-hud [:closing-inventory :none]
|
||||
[screen entities _]
|
||||
(-> entities
|
||||
(update-in [:inventory] #(actions/start-animation screen % :default))
|
||||
(assoc :state :none)))
|
||||
|
||||
(defmethod transition-hud [:returning-item :none]
|
||||
#_(defmethod transition-hud [:returning-item :none]
|
||||
[screen entities _]
|
||||
(-> entities
|
||||
(update-in [:inventory] #(actions/start-animation screen % :default))
|
||||
(dissoc :selected-item)
|
||||
(assoc :state :none)))
|
||||
|
||||
(defmethod transition-hud [:remove-item :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 _]
|
||||
(-> entities
|
||||
(assoc :selected-item
|
||||
@@ -1503,7 +1618,7 @@ void main ()
|
||||
(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 :choosing-item]
|
||||
#_(defmethod transition-hud [:none :choosing-item]
|
||||
[{:keys [cursor] :as screen} entities _]
|
||||
(-> entities
|
||||
(update-in [:inventory] #(actions/start-animation screen % :open))
|
||||
@@ -1517,7 +1632,7 @@ void main ()
|
||||
(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]
|
||||
#_(defmethod transition-hud [:none :give-item]
|
||||
[{:keys [item] :as screen} entities _]
|
||||
(-> entities
|
||||
(update-in [:inventory] #(actions/start-animation screen % :opened))
|
||||
@@ -1531,7 +1646,7 @@ void main ()
|
||||
(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 _]
|
||||
(screen! scene :on-click-inventory)
|
||||
(-> entities
|
||||
@@ -1542,7 +1657,7 @@ void main ()
|
||||
(update-in [:inventory] (fn [i] (actions/start-animation screen i :closing)))
|
||||
(assoc :state :returning-item)))
|
||||
|
||||
(defmethod transition-hud [:chose-item :remove-item]
|
||||
#_(defmethod transition-hud [:chose-item :remove-item]
|
||||
[{:keys [cursor] :as screen} entities _]
|
||||
(-> entities
|
||||
(assoc-in [:tweens :disappear-item]
|
||||
@@ -1552,24 +1667,24 @@ void main ()
|
||||
(update-in [:inventory] (fn [i] (actions/start-animation screen i :closing)))
|
||||
(assoc :state :remove-item)))
|
||||
|
||||
(defmethod transition-hud [:give-item :chose-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 _]
|
||||
(-> entities
|
||||
(update-in [:inventory] #(actions/start-animation screen % :opened))
|
||||
(assoc :state :chose-item)))
|
||||
|
||||
(defmulti process-state (fn [screen entities]
|
||||
#_(defmulti process-state (fn [screen entities]
|
||||
(:state entities)))
|
||||
|
||||
(defmethod process-state :default [screen entities] entities)
|
||||
#_(defmethod process-state :default [screen entities] entities)
|
||||
|
||||
(defmethod process-state :opening-inventory
|
||||
#_(defmethod process-state :opening-inventory
|
||||
[screen entities]
|
||||
(when
|
||||
(animation! (get-in entities [:inventory :open])
|
||||
@@ -1577,7 +1692,7 @@ void main ()
|
||||
(- (+ (:delta-time screen) (:total-time screen)) (get-in entities [:inventory :anim-start])))
|
||||
(transition-hud screen entities :opened-inventory)))
|
||||
|
||||
(defmethod process-state :closing-inventory
|
||||
#_(defmethod process-state :closing-inventory
|
||||
[screen entities]
|
||||
(when
|
||||
(animation! (get-in entities [:inventory :closing])
|
||||
@@ -1585,12 +1700,12 @@ void main ()
|
||||
(- (+ (:delta-time screen) (:total-time screen)) (get-in entities [:inventory :anim-start])))
|
||||
(transition-hud screen entities :none)))
|
||||
|
||||
(defmethod process-state :choosing-item
|
||||
#_(defmethod process-state :choosing-item
|
||||
[screen entities]
|
||||
(when-not (get-in entities [:tweens :appear-item])
|
||||
(transition-hud screen entities :chose-item)))
|
||||
|
||||
(defmethod process-state :returning-item
|
||||
#_(defmethod process-state :returning-item
|
||||
[screen entities]
|
||||
(when
|
||||
(and (animation! (get-in entities [:inventory :closing])
|
||||
@@ -1599,7 +1714,7 @@ void main ()
|
||||
(not (get-in entities [:tweens :disappear-item])))
|
||||
(transition-hud screen entities :none)))
|
||||
|
||||
(defmethod process-state :remove-item
|
||||
#_(defmethod process-state :remove-item
|
||||
[screen entities]
|
||||
(when
|
||||
(and (animation! (get-in entities [:inventory :closing])
|
||||
@@ -1608,7 +1723,7 @@ void main ()
|
||||
(not (get-in entities [:tweens :disappear-item])))
|
||||
(transition-hud screen entities :none)))
|
||||
|
||||
(defmethod process-state :give-item
|
||||
#_(defmethod process-state :give-item
|
||||
[screen entities]
|
||||
(when-not (get-in entities [:tweens :appear-item])
|
||||
(transition-hud screen entities :chose-item)))
|
||||
@@ -1619,7 +1734,12 @@ void main ()
|
||||
(let [screen (assoc screen :total-time 0)]
|
||||
(utils/setup-viewport screen 320 240)
|
||||
|
||||
{:state :none
|
||||
{:inv-fsm {:state :none
|
||||
:state-data {}
|
||||
:target nil
|
||||
:target-data nil
|
||||
:transition-steps []
|
||||
:pending-states []}
|
||||
:already-saved? false
|
||||
|
||||
:close (assoc (utils/get-texture "close.png")
|
||||
@@ -1671,7 +1791,7 @@ void main ()
|
||||
(update-in entities [:save] assoc :r 0.75 :g 0.75 :b 0.75)
|
||||
(grow-hud screen entities :save false)))
|
||||
|
||||
entities (or (process-state screen entities) entities)]
|
||||
entities (or (process-fsm screen entities) entities)]
|
||||
#_(label! (:fps entities) :set-text (str (game :fps)))
|
||||
|
||||
|
||||
@@ -1692,20 +1812,21 @@ void main ()
|
||||
|
||||
:on-give-item
|
||||
(fn [screen [ entities]]
|
||||
(transition-hud screen entities :give-item))
|
||||
#_(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]))
|
||||
|
||||
#_(when (= (:value item) (get-in entities [:selected-item :value]))
|
||||
(transition-hud screen entities :remove-item)))
|
||||
|
||||
|
||||
:on-return-item
|
||||
(fn [screen [ entities]]
|
||||
(if (hud-interactable?)
|
||||
nil
|
||||
|
||||
(transition-hud screen entities :returning-item)))
|
||||
#_(transition-hud screen entities :returning-item)))
|
||||
|
||||
|
||||
:on-start-script
|
||||
@@ -1718,8 +1839,8 @@ void main ()
|
||||
(let [selected-item? (and (:value cursor)
|
||||
(:cursor cursor))]
|
||||
(if selected-item?
|
||||
(transition-hud screen entities :choosing-item)
|
||||
(transition-hud screen entities :closing-inventory))))
|
||||
(transition-hud screen entities :selected cursor)
|
||||
(transition-hud screen entities :none nil))))
|
||||
|
||||
:on-mouse-moved
|
||||
(fn [screen [entities]]
|
||||
@@ -1765,8 +1886,9 @@ void main ()
|
||||
((:mouse-in? (:inventory entities)) x y)
|
||||
|
||||
(if (:selected-item entities)
|
||||
(transition-hud screen entities :returning-item)
|
||||
(transition-hud screen entities :opening-inventory))
|
||||
entities
|
||||
#_(transition-hud screen entities :returning-item)
|
||||
(doto (transition-hud screen entities :open nil) println))
|
||||
|
||||
(utils/intersects? (:close entities) [x y])
|
||||
(screen! scene :on-menu)
|
||||
|
||||
Reference in New Issue
Block a user