From 6ffe5d2caf12a977ef7281d7f124be804c968522 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Wed, 3 Aug 2016 08:47:15 -0700 Subject: [PATCH] updates on leaving inventory screen. --- .../src-common/advent/screens/inventory.clj | 62 +++++++++++-------- desktop/src-common/advent/utils.clj | 4 +- 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/desktop/src-common/advent/screens/inventory.clj b/desktop/src-common/advent/screens/inventory.clj index 48150b7a..cec613ca 100644 --- a/desktop/src-common/advent/screens/inventory.clj +++ b/desktop/src-common/advent/screens/inventory.clj @@ -17,6 +17,9 @@ [com.badlogic.gdx Application Audio Files Game Gdx Graphics Input InputMultiplexer InputProcessor Net Preferences Screen])) +(defn interactable? [entities] + (and (:shown? entities) (= 1.0 (:opacity entities)))) + (defn close [screen entities script-started?] (log/info "closing inventory") @@ -30,17 +33,29 @@ selected-entity (first (filter #((:box %) x y) (vals (:items entities))))] (assoc entities :selected-item (:item selected-entity)))) +(defn mouse-outside-inventory? [[x y]] + (or (< x 80) + (> x 1200) + (< y 80) + (> y 880))) + (defn mouse-drag [screen [{:keys [selected-item] :as entities}]] - (let [[x y] (utils/unproject screen) - hovered-entity (first (filter #((:box %) x y) (vals (:items entities)))) - ] - (if selected-item - (-> 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) :dragged? true)))) + (when (interactable? entities) + (let [[x y] (utils/unproject screen) + hovered-entity (first (filter #((:box %) x y) (vals (:items entities))))] + (cond + (and selected-item (mouse-outside-inventory? [x y])) + (do (screen! @(resolve 'advent.screens.scene/scene) :on-chose-item :item selected-item) + (close screen entities false)) + + selected-item + (-> 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))) + :else + (assoc entities :hovered-item (:item hovered-entity) :dragged? true))))) (defn mouse-move [screen [entities]] @@ -119,10 +134,9 @@ :hovered-text hovered-text})) :on-render - (fn [{:keys [^FitViewport viewport] :as screen} [entities]] + (fn [{:keys [^FitViewport viewport] :as screen} [{:keys [shown? tweens] :as entities}]] (.apply viewport) - (let [ - entities (utils/apply-tweens screen entities (:tweens entities)) + (let [entities (utils/apply-tweens screen entities tweens) opacity (get-in entities [:opacity]) entities (-> entities (assoc-in [:overlay :opacity] opacity) @@ -134,7 +148,7 @@ items items))))] - (when (:shown? entities) + (when shown? (doto (:hovered-text entities) (label! :set-color (color 1 1 1 opacity))) (render! screen [(:fade entities) (:overlay entities)]) @@ -146,9 +160,7 @@ :show-screen (fn [{items :items :as screen} [entities]] (log/info "showing inventory") - (if (:shown? entities) - entities - + (when-not (:shown? entities) (-> entities (assoc :shown? true :opacity 0.0 @@ -165,13 +177,13 @@ padding (/ item-width 2) padding (* 4 padding)]] [item (assoc (texture (aget (:all-items entities) 0 (.indexOf utils/+all-cursors+ (:cursor item)))) - :x x :y y - :scale-x 4 - :scale-y 4 - :origin-x 0 - :origin-y 0 - :item item - :box (zone/box (- offset-x padding) (- offset-y padding) (+ offset-x item-width padding padding) (+ offset-y item-width padding padding)))]))) + :x x :y y + :scale-x 4 + :scale-y 4 + :origin-x 0 + :origin-y 0 + :item item + :box (zone/box (- offset-x padding) (- offset-y padding) (+ offset-x item-width padding padding) (+ offset-y item-width padding padding)))]))) (assoc-in [:tweens :fade-in] (tween/tween :fade-in screen [:opacity] 0.0 1.0 0.2 :ease tween/ease-out-cubic))))) :on-mouse-moved mouse-move @@ -179,7 +191,7 @@ :on-touch-down mouse-down :on-touch-up (fn [screen [entities]] - (when (and (:shown? entities) (= 1.0 (:opacity entities))) + (when (interactable? entities) (if (= (button-code :left) (:button screen)) (left-click screen entities) (right-click screen entities)))) diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index 12847143..b3d9afc5 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -46,7 +46,7 @@ (or factor 1.0))) (defn cursor [filename which] - (let [scale 2 + (let [scale 4 base-cursor (pixmap filename) target-width (* 16 scale) target-height (* 16 scale) @@ -56,7 +56,7 @@ (pixmap! resized :draw-pixmap base-cursor (* index 18) 0 16 16 0 0 target-width target-height) - (graphics! :new-cursor resized 0 0))) + (graphics! :new-cursor resized 0 0 ))) (defn get-texture [path] (let [atlas-name (str/replace path #".png" "")