Skip to content

Commit 65e9869

Browse files
committed
Fixed simulation step variation.
1 parent d89c257 commit 65e9869

2 files changed

Lines changed: 33 additions & 26 deletions

File tree

src/hyperspace/game.clj

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -106,28 +106,34 @@
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)))))

src/hyperspace/ui.clj

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -133,20 +133,21 @@
133133

134134
(defn ui-loop
135135
[initial-world]
136-
(loop [time (get-time)
137-
world initial-world]
136+
(loop [initial-timestamp (get-time)
137+
accumulated-time 0
138+
world initial-world]
138139
(if (or (Display/isCloseRequested)
139140
(:exit world))
140141
(Display/destroy)
141-
(let [new-time (get-time)
142-
delta-time (- new-time time)
143-
new-world (-> world
144-
(update-world delta-time)
145-
process-input
146-
render-world)]
142+
143+
(let [new-timestamp (get-time)
144+
delta-time (+ (- new-timestamp initial-timestamp) accumulated-time)
145+
[new-world remaining-time] (update-world world delta-time)
146+
final-world (-> new-world process-input
147+
render-world)]
147148
(Display/update)
148149
(Display/sync fps)
149-
(recur new-time new-world)))))
150+
(recur new-timestamp remaining-time final-world)))))
150151

151152
(defn start-ui
152153
[world]

0 commit comments

Comments
 (0)