From 68317528a9ad2e233b81998f4ad24de0b62ef978 Mon Sep 17 00:00:00 2001 From: Remington Covert Date: Tue, 16 Sep 2014 16:56:36 -0700 Subject: [PATCH] making it so you can have other entities only on one screen (i.e., sheep) --- desktop/src-common/advent/screens/scene.clj | 138 ++++++++++---------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/desktop/src-common/advent/screens/scene.clj b/desktop/src-common/advent/screens/scene.clj index c164c9f3..4f9b0ef7 100644 --- a/desktop/src-common/advent/screens/scene.clj +++ b/desktop/src-common/advent/screens/scene.clj @@ -114,72 +114,79 @@ (merge params {:collision (advent.pathfind/map-from-resource collision) :interactions interactions-as-list}))) -(defn backgrounds [] - {:outside-house (make-background :interactions - {:door {:box [258 100 281 160] - :script (actions/get-script - entities - (actions/walk-to entities :ego [262 88]) - (actions/talk entities :ego (str "Anyone home?")))} - :sword {:box [274 55 305 88] - :script (actions/get-script - entities - (actions/talk entities :ego (str "It's the coolest sword I've ever seen!")) - (actions/walk-to entities :ego [290 66]) - (actions/talk entities :ego "Maybe I can pull it out."))} - :sheep {:box [38 160 71 181] - :script (actions/get-script - entities - (if ((get-in @entities [:ego :inventory]) :wool) - (actions/talk entities :ego "The sheep has given me enough wool.") - (do (actions/give entities :ego :wool) - (actions/talk entities :ego "I guess his wool is shedding."))))} - :right-dir {:box [300 131 320 224] - :script (actions/get-script - entities - (actions/walk-to entities :ego [319 160])) - :cursor :right} - :up-dir {:box [60 180 224 240] - :script (actions/get-script - entities - (actions/walk-to entities :ego [137 204])) - :cursor :up} - :left-dir {:box [0 40 20 140] - :script (actions/get-script - entities - (actions/walk-to entities :ego [0 80]) - (actions/transition-background entities :behind-house [310 80])) - :cursor :left}} - :layers [(assoc (texture "bg5.png") :x 0 :y 0 :baseline 0) - (assoc (texture "house.png") :x 0 :y 0 :baseline 122) - (assoc (texture "overdirt.png") :x 0 :y 0 :baseline 240) - (assoc (texture "background-trees.png") :x 0 :y 0 :baseline 44)] - :collision "outsidehouse/collision.png" - :scale-fn (scaler-fn-with-baseline 110 0.10 1.00)) +(defn backgrounds [screen] + (let [sheep-sheet (texture! (texture "outsidehouse/sheep-anim.png") :split 33 21) + sheep (animation 0.15 (for [i (flatten [(repeat 10 0) 1 2 3 4 5 6 7 4 5 6 7 8 9 10 (repeat 25 11) (repeat 15 12)])] + (aget sheep-sheet 0 i)))] + {:outside-house + (make-background :interactions + {:door {:box [258 100 281 160] + :script (actions/get-script + entities + (actions/walk-to entities :ego [262 88]) + (actions/talk entities :ego (str "Anyone home?")))} + :sword {:box [274 55 305 88] + :script (actions/get-script + entities + (actions/talk entities :ego (str "It's the coolest sword I've ever seen!")) + (actions/walk-to entities :ego [290 66]) + (actions/talk entities :ego "Maybe I can pull it out."))} + :sheep {:box [38 160 71 181] + :script (actions/get-script + entities + (if ((get-in @entities [:ego :inventory]) :wool) + (actions/talk entities :ego "The sheep has given me enough wool.") + (do (actions/give entities :ego :wool) + (actions/talk entities :ego "I guess his wool is shedding."))))} + :right-dir {:box [300 131 320 224] + :script (actions/get-script + entities + (actions/walk-to entities :ego [319 160])) + :cursor :right} + :up-dir {:box [60 180 224 240] + :script (actions/get-script + entities + (actions/walk-to entities :ego [137 204])) + :cursor :up} + :left-dir {:box [0 40 20 140] + :script (actions/get-script + entities + (actions/walk-to entities :ego [0 80]) + (actions/transition-background entities :behind-house [310 80])) + :cursor :left}} + :layers [(assoc (texture "bg5.png") :x 0 :y 0 :baseline 0) + (assoc (texture "house.png") :x 0 :y 0 :baseline 122) + (assoc (texture "overdirt.png") :x 0 :y 0 :baseline 240) + (assoc (texture "background-trees.png") :x 0 :y 0 :baseline 44)] + :entities [(assoc (animation->texture screen sheep) :x 38 :y 160 :baseline 160 :anim sheep)] + :collision "outsidehouse/collision.png" + :scale-fn (scaler-fn-with-baseline 110 0.10 1.00)) - :behind-house (make-background :interactions - {:right-dir {:box [300 40 320 140] - :script (actions/get-script - entities - (actions/walk-to entities :ego [310 80]) - (actions/transition-background entities :outside-house [0 80])) - :cursor :right}} - :layers [(assoc (texture "behindhouse/background.png") :x 0 :y 0 :baseline 0)] - :collision "behindhouse/collision.png" - :scale-fn (scaler-fn-with-baseline 110 0.10 1.00))}) + :behind-house + (make-background :interactions + {:right-dir {:box [300 40 320 140] + :script (actions/get-script + entities + (actions/walk-to entities :ego [310 80]) + (actions/transition-background entities :outside-house [0 80])) + :cursor :right}} + :layers [(assoc (texture "behindhouse/background.png") :x 0 :y 0 :baseline 0)] + :collision "behindhouse/collision.png" + :scale-fn (scaler-fn-with-baseline 110 0.10 1.00))})) +(defn animate [entity screen] + (if (:anim entity) + (merge entity (animation->texture screen (:anim entity))) + entity) + ) (defscreen scene :on-show (fn [screen entities] (update! screen :renderer (stage) :camera (orthographic)) (let [_ (input! :set-cursor-image (utils/cursor "cursor.png" :main) 0 0) - sheep-sheet (texture! (texture "outsidehouse/sheep-anim.png") :split 33 21) - sheep (animation 0.15 (for [i (flatten [(repeat 10 0) 1 2 3 4 5 6 7 4 5 6 7 8 9 10 (repeat 25 11) (repeat 15 12)])] - (aget sheep-sheet 0 i))) music (sound "town-music.mp3") _ (sound! music :loop) - backgrounds (backgrounds) - ] + backgrounds (backgrounds screen)] {:backgrounds backgrounds :actions {:object nil :channel (chan) @@ -189,8 +196,6 @@ :current :main :last :main :override nil} - - :sheep (assoc (animation->texture screen sheep) :x 38 :y 160 :baseline 160 :anim sheep) :background (:outside-house backgrounds) :ego (get-ego screen) :fps (assoc (label "0" (color :white) ) :x 5 :baseline 9000) @@ -201,16 +206,11 @@ (clear!) (let [entities (update-cursor screen entities) entities (update-from-script screen entities) - - - _ (label! (:fps entities) :set-text (str (game :fps))) - entities (if (get-in entities [:sheep :anim]) - (update-in entities [:sheep] #(merge % (animation->texture screen (:anim %)))) - entities) - entities (if (get-in entities [:ego :anim]) - (update-in entities [:ego] #(merge % (animation->texture screen (:anim %)))) - entities)] - (render! screen (sort-by :baseline (concat (vals entities) (get-in entities [:background :layers])))) + entities (update-in entities [:background :entities] (fn [entities] (map #(animate % screen) entities))) + entities (update-in entities [:ego] #(animate % screen)) + all-entities (concat (vals entities) (get-in entities [:background :layers]) (get-in entities [:background :entities]))] + (label! (:fps entities) :set-text (str (game :fps))) + (render! screen (sort-by :baseline all-entities)) entities)) :on-resize (fn [screen entities]