From b4a66dafc044b7a00c57edee1cffe01460dcce75 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Tue, 2 Aug 2016 13:22:14 -0700 Subject: [PATCH] looking better on an inventory front. --- .../src-common/advent/screens/inventory.clj | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) 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 [