diff --git a/desktop/src-common/advent/actions.clj b/desktop/src-common/advent/actions.clj index 80b35bad..ec80ba94 100644 --- a/desktop/src-common/advent/actions.clj +++ b/desktop/src-common/advent/actions.clj @@ -36,7 +36,7 @@ :y y :baseline (- 240 y))] (if (:scaled entity) - (assoc entity :scale-x (scale-fn y) :scale-y (scale-fn y)) + (assoc entity :scale-x (scale-fn [x y]) :scale-y (scale-fn [x y])) entity))) (defn start-animation [screen entity anim] @@ -169,8 +169,9 @@ (begin [this screen entities] (let [_ (swap! initial-time #(or % (:total-time screen))) target-y (get-in entities [:room :entities target-id :y]) + target-x (get-in entities [:room :entities target-id :x]) scale-fn (get-in entities [:room :scale-fn]) - scale (scale-fn target-y) + scale (scale-fn [target-x target-y]) height (* scale 36)] (run! dialogue/talking-screen :on-talk :text text :x (get-in entities [:room :entities target-id :x]) :y (+ (get-in entities [:room :entities target-id :y]) height) diff --git a/desktop/src-common/advent/screens/rooms/outside_castle.clj b/desktop/src-common/advent/screens/rooms/outside_castle.clj index 501fc791..a0e7a79f 100644 --- a/desktop/src-common/advent/screens/rooms/outside_castle.clj +++ b/desktop/src-common/advent/screens/rooms/outside_castle.clj @@ -21,6 +21,11 @@ (actions/walk-to entities :ego [310 80]) (actions/transition-background entities :outside-house [0 80])) :cursor :right} + :door {:box [66 180 85 195] + :script (actions/get-script + entities + (actions/walk-to entities :ego [82 180]) + (actions/transition-background entities :inside-castle [280 145]))} :garden {:box [103 170 178 200] :script (actions/get-script entities diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index 5c9c8a5e..a504b830 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -13,6 +13,7 @@ [advent.screens.rooms :as rooms] [advent.screens.rooms.outside-house :as rooms.outside-house] [advent.screens.rooms.inside-house :as rooms.inside-house] + [advent.screens.rooms.inside-castle :as rooms.inside-castle] [advent.screens.rooms.behind-house :as rooms.behind-house] [advent.screens.rooms.outside-castle :as rooms.outside-castle] [advent.screens.rooms.cat-tree :as rooms.cat-tree] @@ -138,6 +139,7 @@ :outside-house (rooms.outside-house/make screen) :behind-house (rooms.behind-house/make screen) :cat-tree (rooms.cat-tree/make screen) + :inside-castle (rooms.inside-castle/make screen) :outside-castle (rooms.outside-castle/make screen)}] {:rooms rooms :state {:object nil diff --git a/desktop/src-common/advent/utils.clj b/desktop/src-common/advent/utils.clj index f4d5c165..11e8f3e9 100644 --- a/desktop/src-common/advent/utils.clj +++ b/desktop/src-common/advent/utils.clj @@ -38,12 +38,22 @@ (defn scaler-fn-with-baseline [baseline minimum-size & [maximum-size]] (let [maximum-size (or maximum-size 1.0)] - (fn [y] + (fn [[_ y]] (if (< y baseline) maximum-size (let [percent-complete (- 1.0 (/ (- y baseline) (- +screen-height+ baseline))) range (+ (* percent-complete (- maximum-size minimum-size)) minimum-size)] range))))) +(defn scaler-fn-from-image [image minimum-size maximum-size] + (let [image (pixmap image) + maximum-size (or maximum-size 1.0)] + (fn [[x y]] + (let [percent-complete (-> image + (pixmap! :get-pixel x (- 240 y)) + color + (.r))] + (+ (* percent-complete (- maximum-size minimum-size)) minimum-size))))) + (defn dist [x1 y1 x2 y2] (let [dx (- x1 x2) dy (- y1 y2)]