perf improvements

This commit is contained in:
Bryce Covert
2017-05-25 08:06:21 -07:00
parent 645d8d4f2b
commit 731f16f004
4 changed files with 83 additions and 64 deletions

View File

@@ -14,14 +14,14 @@
(let [e (utils/get-entity entities id)]
(if-let [[bx1 by1 bx2 by2] (:box e)]
(zone/within bx1 by1 bx2 by2 x y)
(let [{entity-x :x entity-y :y width :width scale-x :scale-x scale-y :scale-y origin-x :origin-x origin-y :origin-y height :height region :object} (get-in entities [:room :entities id])
(let [{^float entity-x :x ^float entity-y :y width :width scale-x :scale-x scale-y :scale-y origin-x :origin-x origin-y :origin-y height :height region :object} (-> entities :room :entities id)
width (or width (if (instance? TextureRegion region ) (.getRegionWidth ^TextureRegion region) 0))
height (or height (if (instance? TextureRegion region ) (.getRegionHeight ^TextureRegion region) 0))
entity-x (unchecked-add (float entity-x) (unchecked-multiply (float (or origin-x 0))
(float (or scale-x 1))))
entity-y (unchecked-add (float entity-y) (unchecked-multiply (float (or origin-y 0))
(float (or scale-y 1))))]
entity-x (double (unchecked-add (float entity-x) (unchecked-multiply (float (or origin-x 0))
(float (or scale-x 1)))))
entity-y (double (unchecked-add (float entity-y) (unchecked-multiply (float (or origin-y 0))
(float (or scale-y 1)))))]
(zone/within entity-x entity-y
(unchecked-add (float entity-x) (unchecked-multiply (float width) (float (or scale-x 1))))

View File

@@ -937,11 +937,12 @@
(defn play-key-sounds [screen entities]
(if (= (get-in entities [:fade :opacity]) 0.0)
(loop [entities entities
[[target e] & rest] (seq (get-in entities [:room :entities]))]
(if e
(recur (play-sound-if-necessary screen entities target e) rest)
entities))
(reduce-kv (fn [entities target e]
(if e
(play-sound-if-necessary screen entities target e)
entities))
entities
entities)
entities))
(defn update-current-sound-vols! [entities]
@@ -1013,7 +1014,7 @@
(def nighttime-times #{:night :dawn})
(defn get-rendered [entities {:keys [time ^double y ^double offset-y night-profile] :or {night-profile :default} :as e}]
(as-> e e
(if (or (get-in entities [:tweens :dawn-r])
(if (or (-> entities :tweens :dawn-r)
(and (not= time (-> entities :state :time))
(nighttime-times (-> entities :state :time))))
(-> e
@@ -1074,30 +1075,30 @@
#_(steam/update)
(.apply viewport)
(if (get-in entities [:closing? :value])
(if (-> entities :closing? :value)
(let [entities (utils/apply-tweens screen entities tweens)
entities (update-current-sound-vols! entities)
entities (remove-ended-sounds screen entities)
get-rendered (partial get-rendered entities)
entities (loop [entities entities
[[k e] & rest] (seq (get-in entities [:room :entities]))]
[[k e] & rest] (seq (-> entities :room :entities))]
(if k
(recur (update-in entities [:room :entities k] get-rendered) rest)
entities))
entities (grab-layers entities)
layers (get-in entities [:room :current-layers])
all-entities (-> layers (into (vals (get-in entities [:room :entities]))) (conj (:white-fade entities)))]
(screen! fade-screen :update-fade {:opacity (get-in entities [:fade :opacity])})
(doseq [m (vals (get-in entities [:musics]))]
layers (-> entities :room :current-layers)
all-entities (-> layers (into (vals (-> entities :room :entities))) (conj (:white-fade entities)))]
(screen! fade-screen :update-fade {:opacity (-> entities :fade :opacity)})
(utils/eager-loop (-> entities :musics-v :v) m
(when m
(music! m :set-volume (utils/current-music-volume (get-in entities [:volume :value])))))
(music! m :set-volume (utils/current-music-volume (-> entities :volume :value)))))
(clear!)
(doseq [e (sort-by :baseline all-entities)]
(utils/eager-loop (vec (sort-by :baseline all-entities)) e
(if (:parallax e)
(render-parallax screen e)
(render! screen [e])))
(render-one screen e)))
entities)
(let [entities (fade-in-first-time-if-necessary screen entities)
entities (utils/apply-tweens screen entities tweens)
@@ -1112,14 +1113,14 @@
last-pos-x (double last-pos-x)
last-pos-y (double last-pos-y)
entities (if (and (@utils/settings :camera-man? true)
(not (get-in entities [:cam :paused?]))
(nil? (get-in entities [:tweens :cam-x]))
(not (-> entities :cam :paused?))
(nil? (-> entities :tweens :cam-x))
(= 1 (rand-int 20)))
(if (= (rand-int 2) 1)
(actions/pan-to screen entities
(get-in entities [:room :entities :ego :x])
(get-in entities [:room :entities :ego :y])
(constantly (get-in entities [:room :entities :ego :scale-x]))
(-> entities :room :entities :ego :x)
(-> entities :room :entities :ego :y)
(constantly (-> entities :room :entities :ego :scale-x))
tween/ease-in-out-quadratic
5.0)
(actions/pan-to screen entities
@@ -1127,7 +1128,7 @@
(- 10 ^double (rand-int 20)))
(+ ^double (get-in entities [:cam :y] 0)
(- 10 ^double (rand-int 20)))
(constantly (get-in entities [:room :entities :ego :scale-x]))
(constantly (-> entities :room :entities :ego :scale-x))
tween/ease-in-out-quadratic
5.0))
entities)
@@ -1140,20 +1141,20 @@
e)
e (if update-fn
(update-fn screen (get-in entities [:room :entities]) e)
(update-fn screen (-> entities :room :entities) e)
e)
e (get-rendered entities e)]
e))
entities (loop [room (transient (get-in entities [:room :entities]))
[[k e] & rest] (doall (seq (get-in entities [:room :entities])))]
entities (loop [room (transient (-> entities :room :entities))
[[k e] & rest] (doall (seq (-> entities :room :entities)))]
(if k
(recur (assoc! room k (update-room e))
rest)
(assoc-in entities [:room :entities] (persistent! room))))
layers (get-in entities [:room :current-layers])
all-entities (-> layers (into (vals (get-in entities [:room :entities]))) (conj (:white-fade entities)))]
layers (-> entities :room :current-layers)
all-entities (-> layers (into (vals (-> entities :room :entities))) (conj (:white-fade entities)))]
(screen! tooltip-screen :on-hover-start {:hover-text (get-in entities [:label :text])
(screen! tooltip-screen :on-hover-start {:hover-text (-> entities :label :text)
:scene-viewport (:viewport screen)
:cursor (:cursor entities)
:x (unchecked-subtract last-pos-x
@@ -1163,8 +1164,8 @@
(clear!)
(screen! talking-screen :on-update-camera { :scene-viewport (:viewport screen) :scene-camera (:camera screen)})
(screen! fade-screen :update-fade { :opacity (get-in entities [:fade :opacity])})
(when true #_(not (get-in entities [:cam :paused?]))
(screen! fade-screen :update-fade { :opacity (-> entities :fade :opacity)})
(when true #_(not (-> entities :cam :paused?))
(set! (. camera zoom) (:zoom (:cam entities)))
(set! (.. camera position x) (:x (:cam entities) 160.0))
(set! (.. camera position y) (:y (:cam entities) 120.0)))
@@ -1174,13 +1175,13 @@
entities (play-key-sounds screen entities)
entities (update-current-sound-vols! entities)
entities (remove-ended-sounds screen entities)]
(doseq [m (vals (get-in entities [:musics]))]
(utils/eager-loop (-> entities :musics-v :v) m
(when m
(music! m :set-volume (utils/current-music-volume (get-in entities [:volume :value])))))
(doseq [e (doall (sort-by :baseline all-entities))]
(music! m :set-volume (utils/current-music-volume (-> entities :volume :value)))))
(utils/eager-loop (vec (doall (sort-by :baseline all-entities))) e
(if (:parallax e)
(render-parallax screen e)
(render! screen [e])))
(render-one screen e)))
entities))))
@@ -1304,11 +1305,13 @@
((:scale-fn room)
(if has-start-pos?
start-pos
(:start-pos room))))))}]
(:start-pos room))))))}
entities (assoc entities :musics-v {:v (vec (vals (get-in entities [:musics])))
:object nil})]
(log/info "assets so far", (.getDiagnostics *asset-manager*) )
(doseq [[k [start time fn]] (get-in entities [:room :timers])]
(doseq [[k [start time fn]] (-> entities :room :timers)]
(add-timer! screen k start time))
(log/info "[done] Initializing scene.")
@@ -1521,7 +1524,7 @@
:on-render
(fn [{:keys [^FitViewport viewport] :as screen} entities options]
(.apply viewport)
(render! screen [(:label entities)])
(render-one screen (:label entities))
entities)
:on-resize
@@ -1921,15 +1924,14 @@
(render! screen [ (if (and hud-interactable? (not (:already-saved? entities)))
(:save entities)
(assoc (:save entities) :opacity 0.5))
#_(:fps entities)
(if hud-interactable?
(:inventory entities)
(assoc (:inventory entities) :opacity 0.5))
(:selected-item entities)
(:close entities)])
(render-one screen (if (and hud-interactable? (not (:already-saved? entities)))
(:save entities)
(assoc (:save entities) :opacity 0.5)))
(render-one screen (if hud-interactable?
(:inventory entities)
(assoc (:inventory entities) :opacity 0.5)))
(render-one screen (:selected-item entities))
(render-one screen (:close entities))
entities))
:on-resize