diff --git a/desktop/src-common/advent/actions.clj b/desktop/src-common/advent/actions.clj index d7ee5715..02d42a72 100644 --- a/desktop/src-common/advent/actions.clj +++ b/desktop/src-common/advent/actions.clj @@ -301,7 +301,7 @@ (begin [this screen entities] (screen! dialogue/choice-screen :on-present-choices :choices dialogue-choices :callback #(reset! selected-index %)) (screen! @(resolve 'advent.screens.scene/scene) :on-deactivate) - entities) + (assoc-in entities [:cursor :override] nil)) (continue [this screen entities] entities) @@ -446,7 +446,6 @@ music-changed? (not= old-music new-music)] (run-action entities (begin [this screen entities] - (-> entities (assoc-in [:transition] (assoc (texture "black.png") @@ -479,7 +478,8 @@ apply-state (get-in entities [:room :apply-state]) entities (if apply-state (apply-state entities) - entities)] + entities) + entities (utils/update-override entities)] (when (not= new-music old-music) (doseq [[k v] (:musics entities) :when (and v (not= new-music k))] diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index d8aa6f14..028535dd 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -38,17 +38,16 @@ (actions/talk entities :ego "I don't know what to do with that."))))}) -(defn find-override [screen entities [x y]] - (first (filter #(and ((:mouse-in? %) entities x y) - (:cursor %)) - (get-in entities [:room :interactions])))) + (defn click-inventory [screen entities] (when (not (get-in entities [:actions :script-running?])) (if (= (get-in entities [:cursor :current] ) :main) (do (screen! inventory-screen :show-screen :items (map (entities :all-items) (get-in entities [:state :inventory]))) - (assoc-in entities [:state :active?] false)) + (-> entities + (assoc-in [:state :active?] false) + (assoc-in [:cursor :override] nil))) (assoc-in entities [:cursor :current] :main)))) @@ -278,7 +277,8 @@ :cursor {:id "cursor" :current :main :last :main - :override nil} + :override nil + :last-pos [0 0]} :all-items (assoc items/items :object nil) :room (as-> (get rooms (:last-room (get-state))) room (assoc-in room [:entities :ego] (get-ego screen (:start-pos room) ((:scale-fn room) (:start-pos room))))) @@ -334,11 +334,8 @@ :on-mouse-moved (fn [screen [entities]] - (when (get-in entities [:state :active?]) - (let [{:keys [x y]} (input->screen screen {:x (:input-x screen) :y (:input-y screen)})] - (if-let [mouse-override (find-override screen entities [x y])] - (assoc-in entities [:cursor :override] (:cursor mouse-override)) - (assoc-in entities [:cursor :override] nil))))) + (let [pos (input->screen screen {:x (:input-x screen) :y (:input-y screen)})] + (utils/update-override (assoc-in entities [:cursor :last-pos] [(:x pos) (:y pos)])))) :on-touch-up (fn [screen [entities]] (if (= (button-code :right) @@ -351,7 +348,9 @@ (assoc-in entities [:state :active?] false)) :on-reactivate (fn [screen [entities]] - (assoc-in entities [:state :active?] true)) + (-> entities + (assoc-in [:state :active?] true) + (assoc-in [:cursor :override] nil))) :on-chose-item (fn [{:keys [item]} [entities]] (assoc-in entities [:cursor :current] item)) diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index 270236c3..b38c6ff4 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -98,3 +98,16 @@ v (vector-2 0 0) a (catmull-rom-spline! (:path entity) :value-at v pos-f)] (assoc entity :x (vector-2! v :x) :y (vector-2! v :y))))))) + +(defn find-override [entities [x y]] + (first (filter #(and ((:mouse-in? %) entities x y) + (:cursor %)) + (get-in entities [:room :interactions])))) + +(defn update-override [entities] + (if (get-in entities [:state :active?]) + (let [last-pos (get-in entities [:cursor :last-pos])] + (if-let [mouse-override (find-override entities last-pos)] + (assoc-in entities [:cursor :override] (:cursor mouse-override)) + (assoc-in entities [:cursor :override] nil))) + entities))