diff --git a/desktop/src-common/advent/screens/inventory.clj b/desktop/src-common/advent/screens/inventory.clj index 649cf6cd..48150b7a 100644 --- a/desktop/src-common/advent/screens/inventory.clj +++ b/desktop/src-common/advent/screens/inventory.clj @@ -6,6 +6,7 @@ [clojure.tools.logging :as log] [clojure.pprint] [advent.pathfind] + [advent.actions :as actions] [advent.zone :as zone] [advent.tween :as tween] [advent.utils :as utils]) @@ -37,8 +38,9 @@ (-> entities (assoc-in [:items selected-item :x] (- x 32)) (assoc-in [:items selected-item :y] (- y 32)) + (assoc :dragged? true) (assoc :hovered-item (:item hovered-entity))) - (assoc entities :hovered-item (:item hovered-entity))))) + (assoc entities :hovered-item (:item hovered-entity) :dragged? true)))) (defn mouse-move [screen [entities]] @@ -46,7 +48,7 @@ hovered-entity (first (filter #((:box %) x y) (vals (:items entities))))] (assoc entities :hovered-item (:item hovered-entity)))) -(defn left-click [screen {:keys [selected-item hovered-item] :as entities}] +(defn left-click [screen {:keys [selected-item hovered-item dragged?] :as entities}] (let [room-entities (-> @(resolve 'advent.screens.scene/scene) :entities deref @@ -54,14 +56,22 @@ current-cursor (get-in room-entities [:cursor :current])] (log/info "chose inventory item" selected-item) - (if selected-item - (if (= :main current-cursor) - (do (screen! @(resolve 'advent.screens.scene/scene) :on-chose-item :item selected-item) - (close screen entities false)) - (when-let [interaction-script ((or (:scripts selected-item) (constantly nil)) (:value current-cursor))] - (interaction-script room-entities) - (close screen entities true))) - (close screen entities false)))) + (println selected-item hovered-item dragged?) + (cond (not selected-item) + (close screen entities false) + + (and (= selected-item hovered-item) + dragged?) + (dissoc entities :selected-item :dragged?) + + (or (not hovered-item) (= selected-item hovered-item)) + (do (screen! @(resolve 'advent.screens.scene/scene) :on-chose-item :item selected-item) + (close screen entities false)) + :else + (when-let [interaction-script (or ((or (:scripts selected-item) (constantly nil)) (:value hovered-item)) + (actions/get-script entities (actions/talk entities :ego "I'm not sure how those go together.")))] + (interaction-script room-entities) + (close screen entities true))))) (defn right-click [screen {:keys [selected-item] :as entities} ] (let [