diff --git a/desktop/src-common/advent/screens/inventory.clj b/desktop/src-common/advent/screens/inventory.clj index 7ff71f3b..f0f7010c 100644 --- a/desktop/src-common/advent/screens/inventory.clj +++ b/desktop/src-common/advent/screens/inventory.clj @@ -28,6 +28,32 @@ (if selected-entity (assoc entities :highlighted-item (:item selected-entity)) (assoc entities :highlighted-item nil)))) +(defn left-click [screen entities] + (let [{:keys [highlighted-item]} entities + room-entities (-> @(resolve 'advent.screens.scene/scene) + :entities + deref + first) + current-cursor (get-in room-entities [:cursor :current])] + (if highlighted-item + (if (= :main current-cursor) + (screen! @(resolve 'advent.screens.scene/scene) :on-chose-item :item highlighted-item) + (when-let [interaction-script ((or (:scripts highlighted-item) (constantly nil)) (:value current-cursor))] + (interaction-script room-entities) + (close screen entities))) + (close screen entities)))) + +(defn right-click [screen entities] + (let [{:keys [highlighted-item]} entities + room-entities (-> @(resolve 'advent.screens.scene/scene) + :entities + deref + first) + current-cursor (get-in room-entities [:cursor :current]) + ego (get-in room-entities [:room :entities :ego])] + (when (and highlighted-item (= :main current-cursor)) + (((:get-script ego) highlighted-item [0 0]) room-entities) + (close screen entities)))) (defscreen inventory-screen :on-show @@ -107,20 +133,10 @@ :on-touch-down mouse-interact :on-touch-up (fn [screen [entities]] - (when (and (:shown? entities) (= (button-code :left) (:button screen)) (= 1.0 (:opacity entities))) - (let [{:keys [highlighted-item]} entities - room-entities (-> @(resolve 'advent.screens.scene/scene) - :entities - deref - first) - current-cursor (get-in room-entities [:cursor :current])] - (if highlighted-item - (if (= :main current-cursor) - (screen! @(resolve 'advent.screens.scene/scene) :on-chose-item :item highlighted-item) - (when-let [interaction-script ((or (:scripts highlighted-item) (constantly nil)) (:value current-cursor))] - (interaction-script room-entities) - (close screen entities))) - (close screen entities))))) + (when (and (:shown? entities) (= 1.0 (:opacity entities))) + (if (= (button-code :left) (:button screen)) + (left-click screen entities) + (right-click screen entities)))) :on-resize (fn [screen entities] (.update (:viewport screen) (:width screen) (:height screen) true)))