ugly-game 0.5.21 → 0.5.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,6 +27,7 @@ export function runGameLoop(opts) {
27
27
  const maxCatchUp = sim.maxCatchUpFrames * fixedDt; // seconds
28
28
  let handle = 0;
29
29
  let last = -1; // ms of the previous rAF callback
30
+ let lastRender = -1; // ms of the previous ACTUAL render (not every rAF fires one)
30
31
  let acc = 0; // sim accumulator (seconds)
31
32
  let renderAcc = 0; // render accumulator (seconds)
32
33
  let frame = 0;
@@ -34,6 +35,7 @@ export function runGameLoop(opts) {
34
35
  page.onResumeFromHidden((hiddenMs) => {
35
36
  // Reset frame timing so the first frame after resume carries no dt/step spike.
36
37
  last = -1;
38
+ lastRender = -1;
37
39
  acc = 0;
38
40
  renderAcc = 0;
39
41
  const gapTicks = Math.round(hiddenMs / (1000 * fixedDt));
@@ -76,7 +78,15 @@ export function runGameLoop(opts) {
76
78
  renderAcc -= period;
77
79
  if (renderAcc > period)
78
80
  renderAcc = 0; // shed backlog; never render twice per frame
79
- opts.render({ tier, frame, dt: wallDt, t });
81
+ // dt is time since the previous RENDER, not the previous rAF. On a display faster than the render cap (a
82
+ // 120Hz panel with a 60fps cap) rAF fires more often than we render, so `wallDt` (inter-rAF) is a fraction of
83
+ // the real inter-render time. A game that steps a fixed-step sim inside render off `info.dt` would then gain
84
+ // only that fraction of wall time and run slow (30 UPS on 120Hz). Report the true inter-render delta so the
85
+ // in-render accumulator advances real time. (A worker/`tick`-driven sim is immune either way — this keeps the
86
+ // main-thread render-driven path correct too.)
87
+ const renderDt = lastRender < 0 ? wallDt : (t - lastRender) / 1000;
88
+ lastRender = t;
89
+ opts.render({ tier, frame, dt: renderDt, t });
80
90
  frame++;
81
91
  }
82
92
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-game",
3
- "version": "0.5.21",
3
+ "version": "0.5.22",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {