shitty, but effective way of getting footstep sounds.

This commit is contained in:
2014-12-13 11:39:19 -08:00
parent e3b7be8241
commit b5c6bdcb90

View File

@@ -160,6 +160,7 @@
:origin-x 9
:origin-y 0
:scaled true
:step-sound (sound "ego/step.ogg")
:mouse-in? (fn [entities x y]
(let [{entity-x :x entity-y :y region :object scale :scale-x} (get-in entities [:room :entities :ego])
@@ -215,6 +216,11 @@
(defn get-animation-point [animation total-time]
(loop [time total-time]
(if (> (- time (animation! animation :get-animation-duration)) 0)
(recur (- time (animation! animation :get-animation-duration)))
time)))
(defn animate [entity screen]
(merge entity (animation->texture (update-in screen [:total-time] #(- % (:anim-start entity)))
(:anim entity))))
@@ -284,6 +290,7 @@
(clear!)
(let [entities (update-cursor screen entities)
entities (update-from-script screen entities)
entities (assoc-in entities [:room :entities :ego :last-frame] (get-in entities [:room :entities :ego :object]))
entities (update-in entities [:room :entities] (fn [entities]
(into entities
(for [[id entity] entities]
@@ -296,7 +303,15 @@
(if (:update-fn entity)
[id ((:update-fn entity) screen entities entity)]
[id entity])))))
current-frame (get-in entities [:room :entities :ego :object])
all-entities (concat (vals entities) (get-in entities [:room :layers]) (vals (get-in entities [:room :entities])))]
(when (and (not= current-frame (get-in entities [:room :entities :ego :last-frame]))
(or (= (get-in entities [:room :entities :ego :anim]) (get-in entities [:room :entities :ego :left :walk]))
(= (get-in entities [:room :entities :ego :anim]) (get-in entities [:room :entities :ego :right :walk])))
(#{2 6}
(texture! (get-in entities [:room :entities :ego :anim]) :get-key-frame-index (get-animation-point (get-in entities [:room :entities :ego :anim]) (- (:total-time screen) (get-in entities [:room :entities :ego :anim-start]))))))
(sound! (get-in entities [:room :entities :ego :step-sound]) :play (/ (get-in entities [:room :entities :ego :scale-x]) 1.5)))
(label! (:fps entities) :set-text (str (game :fps)))
(render! screen (sort-by :baseline all-entities))
entities))