implementing simple cat puzzle.

This commit is contained in:
2014-11-20 13:08:13 -08:00
parent db97c2d76f
commit 8691be9ec6
4 changed files with 66 additions and 32 deletions

View File

@@ -32,11 +32,12 @@
(thread ~@forms))))
(defn jump-to [screen entities entity [x y]]
(defn jump-to [screen entities entity [x y] update-baseline?]
(let [scale-fn (-> entities :room :scale-fn)
entity (assoc entity :x x
:y y
:baseline (- 240 y))]
entity (assoc entity :x x :y y)
entity (if update-baseline?
(assoc entity :baseline (- 240 y))
entity)]
(if (:scaled entity)
(assoc entity :scale-x (scale-fn [x y]) :scale-y (scale-fn [x y]))
entity)))
@@ -68,10 +69,11 @@
~@forms))
(reset! ~entities (<!! c#)))))
(defn walk-straight-to [entities target-id [final-x final-y]]
(defn walk-straight-to [entities target-id [final-x final-y] & {:keys [update-baseline? face]}]
(let [{start-x :x start-y :y} (get-in @entities [:room :entities target-id])
final-x (int final-x)
final-y (int final-y)]
final-y (int final-y)
update-baseline? (if (nil? update-baseline?) true update-baseline?)]
(run-action entities
(begin [this screen entities]
entities)
@@ -94,7 +96,7 @@
(assoc-in [:room :entities target-id :y] final-y))
(update-in entities [:room :entities target-id]
#(start-animation screen
(assoc (jump-to screen entities % [(+ moved-x from-x) (+ moved-y from-y)])
(assoc (jump-to screen entities % [(+ moved-x from-x) (+ moved-y from-y)] update-baseline?)
:facing (cond (< delta-x 0) :left
(> delta-x 0) :right
:else (:facing %)))
@@ -106,7 +108,7 @@
(< (utils/dist final-x final-y from-x from-y) 1)))
(terminate [this screen entities]
(stop screen entities target-id))
(stop screen entities target-id :face face))
(can-skip? [this screen entities]
false))))
@@ -178,7 +180,7 @@
(assoc-in [:room :entities target-id :y] target-y)))
(update-in entities [:room :entities target-id]
#(start-animation screen
(assoc (jump-to screen entities % [(+ moved-x from-x) (+ moved-y from-y)])
(assoc (jump-to screen entities % [(+ moved-x from-x) (+ moved-y from-y)] true)
:facing (cond (< delta-x 0) :left
(> delta-x 0) :right
:else (:facing %)))
@@ -354,6 +356,20 @@
(terminate [this screen entities] entities)
(can-skip? [this screen entities]
false)))
(defn add-entity [entities id entity]
(run-action entities
(begin [this screen entities]
(update-in entities [:room :entities] #(assoc % id entity)))
(continue [this screen entities] entities)
(done? [this screen entities] true)
(terminate [this screen entities] entities)
(can-skip? [this screen entities]
false)))
@@ -400,7 +416,7 @@
(music! (get-in entities [:musics new-music]) :set-volume 0)
(music! (get-in entities [:musics new-music]) :play)))
(-> entities
(update-in [:room :entities :ego] #(jump-to screen entities % [x y])))))
(update-in [:room :entities :ego] #(jump-to screen entities % [x y] true)))))
(continue [this screen entities]
(when music-changed?