implementing simple cat puzzle.
This commit is contained in:
@@ -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?
|
||||
|
||||
Reference in New Issue
Block a user