106106 (assoc world
107107 :exit true ))
108108
109+ (def simulation-step 10 )
110+
109111(defn update-world
110112 [{missiles :missiles
111113 planets :planets
112114 fragments :fragments
113115 traces :traces
114116 :as world}
115117 delta-time]
116- (let [broken-particles (mapcat #(break-particle % planets)
117- (concat missiles fragments))
118- ; ; FIXME: Duplicate code
119- new-missiles (->> missiles
120- (filter #(circle-X-rectangle? % world))
121- (remove #(circle-X-any-circle? % planets))
122- (map #(update-particle % planets delta-time)))
123- new-fragments (->> fragments
124- (concat broken-particles)
125- (filter #(circle-X-rectangle? % world))
126- (remove #(circle-X-any-circle? % planets))
127- (map #(update-particle % planets delta-time)))
118+ (if (<= delta-time simulation-step)
119+ [world delta-time]
120+ (let [broken-particles (mapcat #(break-particle % planets)
121+ (concat missiles fragments))
122+ ; ; FIXME: Duplicate code
123+ new-missiles (->> missiles
124+ (filter #(circle-X-rectangle? % world))
125+ (remove #(circle-X-any-circle? % planets))
126+ (map #(update-particle % planets simulation-step)))
127+ new-fragments (->> fragments
128+ (concat broken-particles)
129+ (filter #(circle-X-rectangle? % world))
130+ (remove #(circle-X-any-circle? % planets))
131+ (map #(update-particle % planets simulation-step)))
128132
129- new-traces (reduce update-traces traces new-missiles)]
130- (assoc world
131- :missiles new-missiles
132- :fragments new-fragments
133- :traces new-traces)))
133+ new-traces (reduce update-traces traces new-missiles)]
134+ (recur
135+ (assoc world
136+ :missiles new-missiles
137+ :fragments new-fragments
138+ :traces new-traces)
139+ (- delta-time simulation-step)))))
0 commit comments