@typeonce/ritmo-browser 0.7.0 → 0.9.0

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.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Migrating from bevy-ts? See the [package migration guide](https://github.com/typeonce-dev/ritmo/blob/main/MIGRATION.md).
4
4
 
5
- Browser integrations for ritmo: a fixed-step game loop (`FixedLoop`), keyboard actions with press/release edges, bound by character or by physical key (`Keyboard`), mouse and pen position and button edges over an element (`Pointer`), on-screen touch controls with a floating stick and drag-to-aim buttons (`Touch`), scripted and recorded keyboard and pointer timelines for tests and replays, and a system that copies input into a resource (`InputCapture`).
5
+ Browser integrations for ritmo: animation frames as a tick source for the core fixed-step loop (`BrowserTickSource`), keyboard actions with press/release edges, bound by character or by physical key (`Keyboard`), mouse and pen position and button edges over an element (`Pointer`), on-screen touch controls with a floating stick and drag-to-aim buttons (`Touch`), scripted and recorded keyboard and pointer timelines for tests and replays, and a system that copies input into a resource (`InputCapture`).
6
6
 
7
7
  ```sh
8
8
  pnpm add @typeonce/ritmo-browser @typeonce/ritmo
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @example
8
8
  * ```ts
9
- * const runtime = Game.Runtime.make({ services, debug: { hostClock: BrowserHostClock.make(window) } })
9
+ * const runtime = Game.Runtime.make({ services, debug: { hostClock: BrowserHostClock.make(window) } }).value
10
10
  * ```
11
11
  *
12
12
  * @module BrowserHostClock
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The browser's animation frames as a core `FixedLoop.TickSource`.
3
+ *
4
+ * Each frame reports the milliseconds since the previous one; the first frame
5
+ * reports zero because it establishes the clock. The window is passed in, so
6
+ * nothing reads a global. To drive the loop from a renderer's own ticker
7
+ * instead (such as Pixi's), wrap it with `FixedLoop.source`.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const loop = FixedLoop.start({ source: BrowserTickSource.make(window), step: Clock.hz(60), ... })
12
+ * ```
13
+ *
14
+ * @module BrowserTickSource
15
+ * @docGroup browser
16
+ */
17
+ import * as FixedLoop from "@typeonce/ritmo/FixedLoop";
18
+ /** What the source needs from the window. */
19
+ export interface Host {
20
+ requestAnimationFrame(callback: (timestamp: number) => void): number;
21
+ cancelAnimationFrame(handle: number): void;
22
+ }
23
+ /** A tick source that schedules one `requestAnimationFrame` per frame until stopped. */
24
+ export declare const make: (host: Host) => FixedLoop.TickSource;
25
+ //# sourceMappingURL=BrowserTickSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserTickSource.d.ts","sourceRoot":"","sources":["../src/BrowserTickSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAA;AAEtD,6CAA6C;AAC7C,MAAM,WAAW,IAAI;IACnB,qBAAqB,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAA;IACpE,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3C;AAED,wFAAwF;AACxF,eAAO,MAAM,IAAI,SAAU,IAAI,KAAG,SAAS,CAAC,UA2B1C,CAAA"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * The browser's animation frames as a core `FixedLoop.TickSource`.
3
+ *
4
+ * Each frame reports the milliseconds since the previous one; the first frame
5
+ * reports zero because it establishes the clock. The window is passed in, so
6
+ * nothing reads a global. To drive the loop from a renderer's own ticker
7
+ * instead (such as Pixi's), wrap it with `FixedLoop.source`.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const loop = FixedLoop.start({ source: BrowserTickSource.make(window), step: Clock.hz(60), ... })
12
+ * ```
13
+ *
14
+ * @module BrowserTickSource
15
+ * @docGroup browser
16
+ */
17
+ import * as FixedLoop from "@typeonce/ritmo/FixedLoop";
18
+ /** A tick source that schedules one `requestAnimationFrame` per frame until stopped. */
19
+ export const make = (host) => FixedLoop.source((onTick) => {
20
+ let stopped = false;
21
+ let handle = 0;
22
+ let previous;
23
+ const frame = (timestamp) => {
24
+ if (stopped) {
25
+ return;
26
+ }
27
+ const deltaMS = previous === undefined ? 0 : timestamp - previous;
28
+ previous = timestamp;
29
+ onTick({ deltaMS });
30
+ if (!stopped) {
31
+ handle = host.requestAnimationFrame(frame);
32
+ }
33
+ };
34
+ handle = host.requestAnimationFrame(frame);
35
+ return {
36
+ stop() {
37
+ if (stopped) {
38
+ return;
39
+ }
40
+ stopped = true;
41
+ host.cancelAnimationFrame(handle);
42
+ }
43
+ };
44
+ });
45
+ //# sourceMappingURL=BrowserTickSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserTickSource.js","sourceRoot":"","sources":["../src/BrowserTickSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,SAAS,MAAM,2BAA2B,CAAA;AAQtD,wFAAwF;AACxF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,IAAU,EAAwB,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;IACpF,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,QAA4B,CAAA;IAEhC,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAQ,EAAE;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAA;QACjE,QAAQ,GAAG,SAAS,CAAA;QACpB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC,CAAA;IAED,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;IAC1C,OAAO;QACL,IAAI;YACF,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAM;YACR,CAAC;YACD,OAAO,GAAG,IAAI,CAAA;YACd,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;KACF,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -28,7 +28,7 @@
28
28
  * const runtime = Game.Runtime.make({
29
29
  * services: Game.Runtime.services(Game.Runtime.service(KeyboardInput, Keyboard.actions(window, bindings))),
30
30
  * resources: { Input: Keyboard.idle(bindings) }
31
- * })
31
+ * }).value
32
32
  * ```
33
33
  */
34
34
  import type { Descriptor } from "@typeonce/ritmo/Descriptor";
@@ -177,7 +177,7 @@ export interface Scripted<B extends Bindings> extends Actions<B> {
177
177
  /**
178
178
  * Plays `timeline`: before the snapshot at index `frame`, every entry for
179
179
  * that frame is applied. Actions stay held from their press until their
180
- * release, like keys.
180
+ * release, like keys; pressing an action already held is not a new press.
181
181
  */
182
182
  export declare const scripted: <const B extends Bindings>(bindings: B, timeline: Timeline<B>) => Scripted<B>;
183
183
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Keyboard.d.ts","sourceRoot":"","sources":["../src/Keyboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Keyboard.d.ts","sourceRoot":"","sources":["../src/Keyboard.ts"],"names":[],"mappings":"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"}
package/dist/Keyboard.js CHANGED
@@ -190,7 +190,7 @@ export const actions = (host, bindings, options = {}) => {
190
190
  /**
191
191
  * Plays `timeline`: before the snapshot at index `frame`, every entry for
192
192
  * that frame is applied. Actions stay held from their press until their
193
- * release, like keys.
193
+ * release, like keys; pressing an action already held is not a new press.
194
194
  */
195
195
  export const scripted = (bindings, timeline) => {
196
196
  const names = Object.keys(bindings);
@@ -210,8 +210,11 @@ export const scripted = (bindings, timeline) => {
210
210
  const released = new Set();
211
211
  for (const entry of byFrame.get(frame) ?? []) {
212
212
  for (const name of entry.press ?? []) {
213
+ // A press of a held action is not a new press, as with a live
214
+ // keyboard's auto-repeat.
215
+ if (!held.has(name))
216
+ pressed.add(name);
213
217
  held.add(name);
214
- pressed.add(name);
215
218
  }
216
219
  for (const name of entry.release ?? []) {
217
220
  if (held.delete(name))
@@ -1 +1 @@
1
- {"version":3,"file":"Keyboard.js","sourceRoot":"","sources":["../src/Keyboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Keyboard.js","sourceRoot":"","sources":["../src/Keyboard.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Touch.d.ts","sourceRoot":"","sources":["../src/Touch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Touch.d.ts","sourceRoot":"","sources":["../src/Touch.ts"],"names":[],"mappings":"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"}
package/dist/Touch.js CHANGED
@@ -9,7 +9,7 @@ export const idle = (buttons) => ({
9
9
  });
10
10
  /** `offset / radius`, clamped to length 1, with the inner `deadZone` fraction mapped to zero. */
11
11
  const tilt = (offset, radius, deadZone) => {
12
- const length = Math.hypot(offset.x, offset.y);
12
+ const length = Math.sqrt(offset.x * offset.x + offset.y * offset.y);
13
13
  if (radius <= 0 || length <= deadZone * radius)
14
14
  return zero;
15
15
  const strength = Math.min(1, (length / radius - deadZone) / (1 - deadZone));
@@ -20,7 +20,7 @@ const aimOf = (zone, at) => {
20
20
  if (zone.aimRadius === undefined)
21
21
  return null;
22
22
  const offset = { x: at.x - zone.center.x, y: at.y - zone.center.y };
23
- const length = Math.hypot(offset.x, offset.y);
23
+ const length = Math.sqrt(offset.x * offset.x + offset.y * offset.y);
24
24
  if (length <= (zone.aimDeadZone ?? 0.2) * zone.aimRadius)
25
25
  return null;
26
26
  const scale = Math.min(1, length / zone.aimRadius) / length;
@@ -86,13 +86,18 @@ export const track = (target, blurHost, layout, options = {}) => {
86
86
  if (!tracked(event))
87
87
  return;
88
88
  event.preventDefault();
89
+ // A pointer id that comes down again without an up in between (the up
90
+ // was lost) releases what it held first, as a cancel.
91
+ end(event, true);
89
92
  touched = true;
90
93
  current = layout(sizeOf());
91
94
  const at = locate(event);
92
95
  for (const name of names) {
93
96
  const zone = current.buttons[name];
94
97
  const button = buttons.get(name);
95
- if (button.held || Math.hypot(at.x - zone.center.x, at.y - zone.center.y) > zone.radius)
98
+ const dx = at.x - zone.center.x;
99
+ const dy = at.y - zone.center.y;
100
+ if (button.held || dx * dx + dy * dy > zone.radius * zone.radius)
96
101
  continue;
97
102
  press(button, aimOf(zone, at));
98
103
  fingers.set(event.pointerId, name);
@@ -190,7 +195,7 @@ export const track = (target, blurHost, layout, options = {}) => {
190
195
  ? null
191
196
  : (() => {
192
197
  const offset = { x: stick.knob.x - stick.origin.x, y: stick.knob.y - stick.origin.y };
193
- const length = Math.hypot(offset.x, offset.y);
198
+ const length = Math.sqrt(offset.x * offset.x + offset.y * offset.y);
194
199
  const scale = length > radius ? radius / length : 1;
195
200
  return { origin: stick.origin, knob: { x: stick.origin.x + offset.x * scale, y: stick.origin.y + offset.y * scale } };
196
201
  })(),
@@ -226,7 +231,7 @@ export const scripted = (buttons, timeline) => {
226
231
  byFrame.set(entry.frame, [entry]);
227
232
  }
228
233
  const clamp = (vector) => {
229
- const length = Math.hypot(vector.x, vector.y);
234
+ const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
230
235
  return length <= 1 ? vector : { x: vector.x / length, y: vector.y / length };
231
236
  };
232
237
  const tracks = makeButtonTracks(buttons);
package/dist/Touch.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Touch.js","sourceRoot":"","sources":["../src/Touch.ts"],"names":[],"mappings":"AAwLA,MAAM,IAAI,GAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AAEnC,MAAM,QAAQ,GAAG,GAAgB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;AAEnH,iGAAiG;AACjG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAyB,OAAyB,EAAe,EAAE,CAAC,CAAC;IACvF,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IACtC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAuC;IAChH,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;IACrC,OAAO,EAAE,KAAK;CACf,CAAC,CAAA;AAEF,iGAAiG;AACjG,MAAM,IAAI,GAAG,CAAC,MAAgB,EAAE,MAAc,EAAE,QAAgB,EAAU,EAAE;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7C,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,QAAQ,GAAG,MAAM;QAAE,OAAO,IAAI,CAAA;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAA;IAC3E,OAAO,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAA;AACjF,CAAC,CAAA;AAED,oFAAoF;AACpF,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAE,EAAY,EAAiB,EAAE;IAC9D,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAC7C,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAA;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAA;IAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAA;AACrD,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,IAAU,EAAE,EAAY,EAAW,EAAE,CACnD,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;AAY3G,MAAM,gBAAgB,GAAG,CAAmB,KAAuB,EAAuB,EAAE,CAC1F,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAErH,MAAM,cAAc,GAAG,CAAC,KAAkB,EAAe,EAAE,CAAC,CAAC;IAC3D,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI;IACvC,GAAG,EAAE,KAAK,CAAC,GAAG;IACd,SAAS,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS;CAC5D,CAAC,CAAA;AAEF,gFAAgF;AAChF,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAQ,EAAE;IAC/C,KAAK,CAAC,OAAO,GAAG,KAAK,CAAA;IACrB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAA;IACtB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAA;IACvB,IAAI,CAAC,KAAK,CAAC,IAAI;QAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAA;AACnC,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,CAAC,KAAkB,EAAE,GAAkB,EAAQ,EAAE;IAC7D,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;IACpB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,CAAC,KAAkB,EAAE,SAAkB,EAAQ,EAAE;IAC5D,IAAI,CAAC,KAAK,CAAC,IAAI;QAAE,OAAM;IACvB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAA;IAClB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;IACrB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAA;AAC7B,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,MAAmB,EACnB,QAAkB,EAClB,MAAiC,EACjC,OAAO,GAAiB,EAAE,EAChB,EAAE;IACZ,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,CAAA;IACtD,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAA;QAC3C,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAA;IACnD,CAAC,CAAA;IACD,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAa,CAAA;IACtD,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACvC,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,KAA4F,CAAA;IAChG,sCAAsC;IACtC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAa,CAAA;IACpC,IAAI,KAAiE,CAAA;IACrE,oFAAoF;IACpF,IAAI,MAAM,GAAW,IAAI,CAAA;IAEzB,MAAM,MAAM,GAAG,CAAC,KAAqB,EAAY,EAAE;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAA;QAC3C,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtE,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,CAAC,KAAqB,EAAW,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IAE5F,MAAM,MAAM,GAAG,CAAC,KAAqB,EAAQ,EAAE;QAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAM;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,OAAO,GAAG,IAAI,CAAA;QACd,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAClC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAA;YACjC,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM;gBAAE,SAAQ;YACjG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAA;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAClC,MAAM,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC3C,OAAM;QACR,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC5D,KAAK,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;YAC5D,MAAM,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;YAC3C,OAAM;QACR,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAC3F,KAAK,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;YAChD,MAAM,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,CAAC,KAAqB,EAAQ,EAAE;QAC7C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAM;QAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACxB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,GAAG,EAAE,CAAA;YACf,OAAM;QACR,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/D,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA;YACjF,KAAK,CAAC,IAAI,GAAG,EAAE,CAAA;YACf,OAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACzC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IACnF,CAAC,CAAA;IAED,MAAM,GAAG,GAAG,CAAC,KAAqB,EAAE,SAAkB,EAAQ,EAAE;QAC9D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAM;QAC3B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/D,KAAK,GAAG,SAAS,CAAA;YACjB,OAAM;QACR,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;YAC/D,KAAK,GAAG,SAAS,CAAA;YACjB,OAAM;QACR,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACzC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAM;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAA;QACjC,IAAI,CAAC,SAAS;YAAE,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACxE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,KAAqB,EAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/D,MAAM,QAAQ,GAAG,CAAC,KAAqB,EAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAClE,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,KAAK,GAAG,SAAS,CAAA;QACjB,KAAK,GAAG,SAAS,CAAA;QACjB,OAAO,CAAC,KAAK,EAAE,CAAA;QACf,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC3D,CAAC,CAAA;IAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,KAAK,EAAE,WAAW,CAAA;IACrD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAA;IACjE,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IAC1C,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IAClD,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEzC,MAAM,UAAU,GAAG,GAAU,EAAE;QAC7B,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;QAC/D,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;QACrF,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAA;IACrG,CAAC,CAAA;IAED,OAAO;QACL,QAAQ;YACN,MAAM,QAAQ,GAAgB;gBAC5B,KAAK,EAAE,UAAU,EAAE;gBACnB,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAuC;gBAClI,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,KAAK,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;gBACrD,OAAO;aACR,CAAA;YACD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;gBAAE,WAAW,CAAC,MAAM,CAAC,CAAA;YAC1D,MAAM,GAAG,IAAI,CAAA;YACb,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,IAAI;YACF,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAA;YACnC,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,KAAK,EAAE,KAAK,KAAK,SAAS;oBACxB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,CAAC,GAAG,EAAE;wBACN,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;wBACrF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;wBAC7C,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;wBACnD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAA;oBACvH,CAAC,CAAC,EAAE;gBACN,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAA;oBACjC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBAC5E,CAAC,CAAC,CAAuB;aAC1B,CAAA;QACH,CAAC;QACD,OAAO;YACL,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YACjD,MAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YACjD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;YAC7C,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;YACrD,QAAQ,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC5C,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,mBAAmB,KAAK,SAAS;gBAAE,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,mBAAmB,CAAA;QACrH,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AA+BD;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAyB,OAAyB,EAAE,QAA8B,EAAe,EAAE;IACzH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAA;IAC1D,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IACxC,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,MAAc,EAAU,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QAC7C,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAA;IAC9E,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,KAAK,GAAkB,IAAI,CAAA;IAC/B,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,MAAM,MAAM,GAAc;QACxB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE;QACtE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAyB;KACpH,CAAA;IACD,OAAO;QACL,QAAQ;YACN,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE;gBAAE,WAAW,CAAC,KAAK,CAAC,CAAA;YACvD,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;YAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC7C,OAAO,GAAG,IAAI,CAAA;gBACd,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC9B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAA;oBACnB,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;oBACxB,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC1B,CAAC;gBACD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;oBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBACvF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE;oBAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,EAAE,IAAI,CAAC,CAAA;gBACpE,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAA0C,EAAE,CAAC;oBACnG,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;oBAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS;wBAAE,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAC5F,CAAC;gBACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,EAAE,KAAK,CAAC,CAAA;gBACtE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE;oBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,EAAE,IAAI,CAAC,CAAA;YACtE,CAAC;YACD,KAAK,IAAI,CAAC,CAAA;YACV,OAAO;gBACL,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,KAAK,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE;gBACxD,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAuC;gBACnI,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE;gBAClE,OAAO;aACR,CAAA;QACH,CAAC;QACD,IAAI;YACF,OAAO;gBACL,MAAM;gBACN,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAA;oBAC/B,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBACzE,CAAC,CAAC,CAAuB;aAC1B,CAAA;QACH,CAAC;QACD,OAAO,KAAI,CAAC;QACZ,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK;KACpB,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"Touch.js","sourceRoot":"","sources":["../src/Touch.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /** Browser host integrations kept outside the renderer-agnostic ECS core. */
2
2
  export * as BrowserHostClock from "./BrowserHostClock.ts";
3
- export * as FixedLoop from "./FixedLoop.ts";
3
+ export * as BrowserTickSource from "./BrowserTickSource.ts";
4
4
  export * as InputCapture from "./InputCapture.ts";
5
5
  export * as Keyboard from "./Keyboard.ts";
6
6
  export * as Pointer from "./Pointer.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,eAAO,MAAM,UAAU,EAAG,SAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,eAAO,MAAM,UAAU,EAAG,SAAkB,CAAA"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /** Browser host integrations kept outside the renderer-agnostic ECS core. */
2
2
  export * as BrowserHostClock from "./BrowserHostClock.js";
3
- export * as FixedLoop from "./FixedLoop.js";
3
+ export * as BrowserTickSource from "./BrowserTickSource.js";
4
4
  export * as InputCapture from "./InputCapture.js";
5
5
  export * as Keyboard from "./Keyboard.js";
6
6
  export * as Pointer from "./Pointer.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,MAAM,CAAC,MAAM,UAAU,GAAG,SAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,KAAK,gBAAgB,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAC3D,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,MAAM,CAAC,MAAM,UAAU,GAAG,SAAkB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeonce/ritmo-browser",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Browser fixed-step loop, keyboard actions, and input capture for Ritmo",
5
5
  "author": "Sandro Maglione",
6
6
  "license": "MIT",
@@ -47,7 +47,7 @@
47
47
  "provenance": true
48
48
  },
49
49
  "dependencies": {
50
- "@typeonce/ritmo": "^0.7.0"
50
+ "@typeonce/ritmo": "^0.9.0"
51
51
  },
52
52
  "engines": {
53
53
  "node": ">=20"
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * @example
8
8
  * ```ts
9
- * const runtime = Game.Runtime.make({ services, debug: { hostClock: BrowserHostClock.make(window) } })
9
+ * const runtime = Game.Runtime.make({ services, debug: { hostClock: BrowserHostClock.make(window) } }).value
10
10
  * ```
11
11
  *
12
12
  * @module BrowserHostClock
@@ -0,0 +1,53 @@
1
+ /**
2
+ * The browser's animation frames as a core `FixedLoop.TickSource`.
3
+ *
4
+ * Each frame reports the milliseconds since the previous one; the first frame
5
+ * reports zero because it establishes the clock. The window is passed in, so
6
+ * nothing reads a global. To drive the loop from a renderer's own ticker
7
+ * instead (such as Pixi's), wrap it with `FixedLoop.source`.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const loop = FixedLoop.start({ source: BrowserTickSource.make(window), step: Clock.hz(60), ... })
12
+ * ```
13
+ *
14
+ * @module BrowserTickSource
15
+ * @docGroup browser
16
+ */
17
+ import * as FixedLoop from "@typeonce/ritmo/FixedLoop"
18
+
19
+ /** What the source needs from the window. */
20
+ export interface Host {
21
+ requestAnimationFrame(callback: (timestamp: number) => void): number
22
+ cancelAnimationFrame(handle: number): void
23
+ }
24
+
25
+ /** A tick source that schedules one `requestAnimationFrame` per frame until stopped. */
26
+ export const make = (host: Host): FixedLoop.TickSource => FixedLoop.source((onTick) => {
27
+ let stopped = false
28
+ let handle = 0
29
+ let previous: number | undefined
30
+
31
+ const frame = (timestamp: number): void => {
32
+ if (stopped) {
33
+ return
34
+ }
35
+ const deltaMS = previous === undefined ? 0 : timestamp - previous
36
+ previous = timestamp
37
+ onTick({ deltaMS })
38
+ if (!stopped) {
39
+ handle = host.requestAnimationFrame(frame)
40
+ }
41
+ }
42
+
43
+ handle = host.requestAnimationFrame(frame)
44
+ return {
45
+ stop() {
46
+ if (stopped) {
47
+ return
48
+ }
49
+ stopped = true
50
+ host.cancelAnimationFrame(handle)
51
+ }
52
+ }
53
+ })
@@ -28,7 +28,7 @@
28
28
  * const runtime = Game.Runtime.make({
29
29
  * services: Game.Runtime.services(Game.Runtime.service(KeyboardInput, Keyboard.actions(window, bindings))),
30
30
  * resources: { Input: Keyboard.idle(bindings) }
31
- * })
31
+ * }).value
32
32
  * ```
33
33
  */
34
34
  import type { Descriptor } from "@typeonce/ritmo/Descriptor"
package/src/Keyboard.ts CHANGED
@@ -304,7 +304,7 @@ export interface Scripted<B extends Bindings> extends Actions<B> {
304
304
  /**
305
305
  * Plays `timeline`: before the snapshot at index `frame`, every entry for
306
306
  * that frame is applied. Actions stay held from their press until their
307
- * release, like keys.
307
+ * release, like keys; pressing an action already held is not a new press.
308
308
  */
309
309
  export const scripted = <const B extends Bindings>(bindings: B, timeline: Timeline<B>): Scripted<B> => {
310
310
  const names = Object.keys(bindings) as Array<keyof B & string>
@@ -322,8 +322,10 @@ export const scripted = <const B extends Bindings>(bindings: B, timeline: Timeli
322
322
  const released = new Set<keyof B>()
323
323
  for (const entry of byFrame.get(frame) ?? []) {
324
324
  for (const name of entry.press ?? []) {
325
+ // A press of a held action is not a new press, as with a live
326
+ // keyboard's auto-repeat.
327
+ if (!held.has(name)) pressed.add(name)
325
328
  held.add(name)
326
- pressed.add(name)
327
329
  }
328
330
  for (const name of entry.release ?? []) {
329
331
  if (held.delete(name)) released.add(name)
package/src/Touch.ts CHANGED
@@ -196,7 +196,7 @@ export const idle = <const B extends string>(buttons: ReadonlyArray<B>): Snapsho
196
196
 
197
197
  /** `offset / radius`, clamped to length 1, with the inner `deadZone` fraction mapped to zero. */
198
198
  const tilt = (offset: Position, radius: number, deadZone: number): Vector => {
199
- const length = Math.hypot(offset.x, offset.y)
199
+ const length = Math.sqrt(offset.x * offset.x + offset.y * offset.y)
200
200
  if (radius <= 0 || length <= deadZone * radius) return zero
201
201
  const strength = Math.min(1, (length / radius - deadZone) / (1 - deadZone))
202
202
  return { x: (offset.x / length) * strength, y: (offset.y / length) * strength }
@@ -206,7 +206,7 @@ const tilt = (offset: Position, radius: number, deadZone: number): Vector => {
206
206
  const aimOf = (zone: ButtonZone, at: Position): Vector | null => {
207
207
  if (zone.aimRadius === undefined) return null
208
208
  const offset = { x: at.x - zone.center.x, y: at.y - zone.center.y }
209
- const length = Math.hypot(offset.x, offset.y)
209
+ const length = Math.sqrt(offset.x * offset.x + offset.y * offset.y)
210
210
  if (length <= (zone.aimDeadZone ?? 0.2) * zone.aimRadius) return null
211
211
  const scale = Math.min(1, length / zone.aimRadius) / length
212
212
  return { x: offset.x * scale, y: offset.y * scale }
@@ -295,13 +295,18 @@ export const track = <const B extends string>(
295
295
  const onDown = (event: TouchEventLike): void => {
296
296
  if (!tracked(event)) return
297
297
  event.preventDefault()
298
+ // A pointer id that comes down again without an up in between (the up
299
+ // was lost) releases what it held first, as a cancel.
300
+ end(event, true)
298
301
  touched = true
299
302
  current = layout(sizeOf())
300
303
  const at = locate(event)
301
304
  for (const name of names) {
302
305
  const zone = current.buttons[name]
303
306
  const button = buttons.get(name)!
304
- if (button.held || Math.hypot(at.x - zone.center.x, at.y - zone.center.y) > zone.radius) continue
307
+ const dx = at.x - zone.center.x
308
+ const dy = at.y - zone.center.y
309
+ if (button.held || dx * dx + dy * dy > zone.radius * zone.radius) continue
305
310
  press(button, aimOf(zone, at))
306
311
  fingers.set(event.pointerId, name)
307
312
  target.setPointerCapture?.(event.pointerId)
@@ -395,7 +400,7 @@ export const track = <const B extends string>(
395
400
  ? null
396
401
  : (() => {
397
402
  const offset = { x: stick.knob.x - stick.origin.x, y: stick.knob.y - stick.origin.y }
398
- const length = Math.hypot(offset.x, offset.y)
403
+ const length = Math.sqrt(offset.x * offset.x + offset.y * offset.y)
399
404
  const scale = length > radius ? radius / length : 1
400
405
  return { origin: stick.origin, knob: { x: stick.origin.x + offset.x * scale, y: stick.origin.y + offset.y * scale } }
401
406
  })(),
@@ -458,7 +463,7 @@ export const scripted = <const B extends string>(buttons: ReadonlyArray<B>, time
458
463
  else byFrame.set(entry.frame, [entry])
459
464
  }
460
465
  const clamp = (vector: Vector): Vector => {
461
- const length = Math.hypot(vector.x, vector.y)
466
+ const length = Math.sqrt(vector.x * vector.x + vector.y * vector.y)
462
467
  return length <= 1 ? vector : { x: vector.x / length, y: vector.y / length }
463
468
  }
464
469
  const tracks = makeButtonTracks(buttons)
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /** Browser host integrations kept outside the renderer-agnostic ECS core. */
2
2
  export * as BrowserHostClock from "./BrowserHostClock.ts"
3
- export * as FixedLoop from "./FixedLoop.ts"
3
+ export * as BrowserTickSource from "./BrowserTickSource.ts"
4
4
  export * as InputCapture from "./InputCapture.ts"
5
5
  export * as Keyboard from "./Keyboard.ts"
6
6
  export * as Pointer from "./Pointer.ts"
@@ -1,95 +0,0 @@
1
- /**
2
- * Deterministic fixed-step timing for browser and renderer hosts.
3
- *
4
- * The loop owns the timing policy that is easy to get subtly wrong in every
5
- * game: frame clamping, catch-up limits, interpolation, cancellation, and
6
- * typed update failures. It does not know about an ECS runtime or renderer.
7
- *
8
- * @module FixedLoop
9
- * @docGroup browser
10
- */
11
- import type * as Clock from "@typeonce/ritmo/Clock";
12
- import * as Result from "@typeonce/ritmo/Result";
13
- /** One renderer or browser tick measured in milliseconds. */
14
- export interface Tick {
15
- readonly deltaMS: number;
16
- }
17
- /** A stoppable host subscription. Calling `stop` more than once is safe. */
18
- export interface Subscription {
19
- stop(): void;
20
- }
21
- /** Minimal adapter implemented by Pixi tickers, RAF, and deterministic tests. */
22
- export interface TickSource<TTick extends Tick = Tick> {
23
- subscribe(onTick: (tick: TTick) => void): Subscription;
24
- }
25
- /** Validated fixed-step timing policy. */
26
- export interface Options {
27
- /**
28
- * The fixed step every update advances (`Clock.hz(60)`): the same value
29
- * the game's clock resource runs at, so the loop and the clock agree.
30
- */
31
- readonly step: Clock.Step;
32
- /** Maximum host-frame duration admitted into the accumulator. */
33
- readonly maxFrameSeconds: number;
34
- /** Maximum number of simulation updates performed for one host frame. */
35
- readonly maxStepsPerFrame: number;
36
- }
37
- /** Configuration error returned before a loop subscribes to its host. */
38
- export interface InvalidOptions {
39
- readonly kind: "InvalidFixedLoopOptions";
40
- readonly field: keyof Options;
41
- readonly reason: "mustBeFiniteAndPositive" | "mustBePositiveInteger";
42
- readonly value: number;
43
- }
44
- /** Data passed to the renderer after all fixed updates for one host frame. */
45
- export interface Frame {
46
- /** Clamped time admitted for this host frame. */
47
- readonly elapsedSeconds: number;
48
- /** Number of fixed updates completed for this host frame. */
49
- readonly fixedSteps: number;
50
- /** Remaining accumulator fraction in the range `[0, 1)`. */
51
- readonly alpha: number;
52
- /** Time discarded by frame clamping or the catch-up limit. */
53
- readonly droppedSeconds: number;
54
- }
55
- /** Failure delivered by an active loop before it stops itself. */
56
- export type Failure<UpdateError> = {
57
- readonly kind: "InvalidTickDelta";
58
- readonly deltaMS: number;
59
- } | {
60
- readonly kind: "UpdateFailure";
61
- readonly error: UpdateError;
62
- };
63
- /** A running fixed-step driver. */
64
- export interface Driver extends Subscription {
65
- /** Clears accumulated partial time without removing the host subscription. */
66
- reset(): void;
67
- }
68
- /** Input for a fixed-step driver. */
69
- export interface StartOptions<TTick extends Tick, UpdateError> extends Options {
70
- readonly source: TickSource<TTick>;
71
- readonly update: (stepSeconds: number) => Result.Result<void, UpdateError>;
72
- readonly render: (frame: Frame) => void;
73
- readonly onFailure: (failure: Failure<UpdateError>) => void;
74
- }
75
- /** Wraps a host-specific subscription function in the canonical source type. */
76
- export declare const source: <TTick extends Tick>(subscribe: TickSource<TTick>["subscribe"]) => TickSource<TTick>;
77
- /**
78
- * Starts a fixed-step loop after validating its timing policy.
79
- *
80
- * Update failures and malformed host ticks are delivered to `onFailure`, then
81
- * the driver stops. Render defects are deliberately not caught: they are
82
- * programmer defects, not expected game outcomes.
83
- */
84
- export declare const start: <TTick extends Tick, UpdateError>(options: StartOptions<TTick, UpdateError>) => Result.Result<Driver, InvalidOptions>;
85
- /** Host surface needed by the built-in requestAnimationFrame adapter. */
86
- export interface AnimationFrameHost {
87
- requestAnimationFrame(callback: (timestamp: number) => void): number;
88
- cancelAnimationFrame(handle: number): void;
89
- }
90
- /**
91
- * Adapts requestAnimationFrame to a `TickSource` without reading global state.
92
- * The first frame reports zero elapsed time because it establishes the clock.
93
- */
94
- export declare const animationFrames: (host: AnimationFrameHost) => TickSource;
95
- //# sourceMappingURL=FixedLoop.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FixedLoop.d.ts","sourceRoot":"","sources":["../src/FixedLoop.ts"],"names":[],"mappings":"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"}
package/dist/FixedLoop.js DELETED
@@ -1,127 +0,0 @@
1
- import * as Result from "@typeonce/ritmo/Result";
2
- /** Wraps a host-specific subscription function in the canonical source type. */
3
- export const source = (subscribe) => ({ subscribe });
4
- const validate = (options) => {
5
- for (const field of ["maxFrameSeconds"]) {
6
- const value = options[field];
7
- if (!Number.isFinite(value) || value <= 0) {
8
- return Result.failure({
9
- kind: "InvalidFixedLoopOptions",
10
- field,
11
- reason: "mustBeFiniteAndPositive",
12
- value
13
- });
14
- }
15
- }
16
- if (!Number.isInteger(options.maxStepsPerFrame) || options.maxStepsPerFrame <= 0) {
17
- return Result.failure({
18
- kind: "InvalidFixedLoopOptions",
19
- field: "maxStepsPerFrame",
20
- reason: "mustBePositiveInteger",
21
- value: options.maxStepsPerFrame
22
- });
23
- }
24
- return Result.success(undefined);
25
- };
26
- /**
27
- * Starts a fixed-step loop after validating its timing policy.
28
- *
29
- * Update failures and malformed host ticks are delivered to `onFailure`, then
30
- * the driver stops. Render defects are deliberately not caught: they are
31
- * programmer defects, not expected game outcomes.
32
- */
33
- export const start = (options) => {
34
- const validity = validate(options);
35
- if (!validity.ok) {
36
- return validity;
37
- }
38
- let accumulator = 0;
39
- let stopped = false;
40
- let hostSubscription;
41
- const stop = () => {
42
- if (stopped) {
43
- return;
44
- }
45
- stopped = true;
46
- hostSubscription?.stop();
47
- };
48
- const fail = (failure) => {
49
- stop();
50
- options.onFailure(failure);
51
- };
52
- const onTick = (tick) => {
53
- if (stopped) {
54
- return;
55
- }
56
- if (!Number.isFinite(tick.deltaMS) || tick.deltaMS < 0) {
57
- fail({ kind: "InvalidTickDelta", deltaMS: tick.deltaMS });
58
- return;
59
- }
60
- const rawSeconds = tick.deltaMS / 1000;
61
- const elapsedSeconds = Math.min(rawSeconds, options.maxFrameSeconds);
62
- let droppedSeconds = rawSeconds - elapsedSeconds;
63
- accumulator += elapsedSeconds;
64
- let fixedSteps = 0;
65
- while (accumulator >= options.step.dt && fixedSteps < options.maxStepsPerFrame) {
66
- const update = options.update(options.step.dt);
67
- if (!update.ok) {
68
- fail({ kind: "UpdateFailure", error: update.error });
69
- return;
70
- }
71
- accumulator -= options.step.dt;
72
- fixedSteps += 1;
73
- }
74
- if (accumulator >= options.step.dt) {
75
- const droppedWholeSteps = Math.floor(accumulator / options.step.dt) * options.step.dt;
76
- accumulator -= droppedWholeSteps;
77
- droppedSeconds += droppedWholeSteps;
78
- }
79
- options.render({
80
- elapsedSeconds,
81
- fixedSteps,
82
- alpha: accumulator / options.step.dt,
83
- droppedSeconds
84
- });
85
- };
86
- hostSubscription = options.source.subscribe(onTick);
87
- if (stopped) {
88
- hostSubscription.stop();
89
- }
90
- return Result.success({
91
- stop,
92
- reset() {
93
- accumulator = 0;
94
- }
95
- });
96
- };
97
- /**
98
- * Adapts requestAnimationFrame to a `TickSource` without reading global state.
99
- * The first frame reports zero elapsed time because it establishes the clock.
100
- */
101
- export const animationFrames = (host) => source((onTick) => {
102
- let stopped = false;
103
- let handle = 0;
104
- let previous;
105
- const frame = (timestamp) => {
106
- if (stopped) {
107
- return;
108
- }
109
- const deltaMS = previous === undefined ? 0 : timestamp - previous;
110
- previous = timestamp;
111
- onTick({ deltaMS });
112
- if (!stopped) {
113
- handle = host.requestAnimationFrame(frame);
114
- }
115
- };
116
- handle = host.requestAnimationFrame(frame);
117
- return {
118
- stop() {
119
- if (stopped) {
120
- return;
121
- }
122
- stopped = true;
123
- host.cancelAnimationFrame(handle);
124
- }
125
- };
126
- });
127
- //# sourceMappingURL=FixedLoop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FixedLoop.js","sourceRoot":"","sources":["../src/FixedLoop.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAA;AA2EhD,gFAAgF;AAChF,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,SAAyC,EACtB,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;AAEvC,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAuC,EAAE;IACzE,KAAK,MAAM,KAAK,IAAI,CAAC,iBAAiB,CAAU,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,MAAM,CAAC,OAAO,CAAC;gBACpB,IAAI,EAAE,yBAAyB;gBAC/B,KAAK;gBACL,MAAM,EAAE,yBAAyB;gBACjC,KAAK;aACN,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,OAAO,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;QACjF,OAAO,MAAM,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,kBAAkB;YACzB,MAAM,EAAE,uBAAuB;YAC/B,KAAK,EAAE,OAAO,CAAC,gBAAgB;SAChC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AAClC,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,OAAyC,EACF,EAAE;IACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,IAAI,WAAW,GAAG,CAAC,CAAA;IACnB,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,gBAA0C,CAAA;IAE9C,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,OAAO,GAAG,IAAI,CAAA;QACd,gBAAgB,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC,CAAA;IAED,MAAM,IAAI,GAAG,CAAC,OAA6B,EAAQ,EAAE;QACnD,IAAI,EAAE,CAAA;QACN,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,CAAC,IAAW,EAAQ,EAAE;QACnC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACtC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;QACpE,IAAI,cAAc,GAAG,UAAU,GAAG,cAAc,CAAA;QAChD,WAAW,IAAI,cAAc,CAAA;QAE7B,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,OAAO,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,UAAU,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;gBACpD,OAAM;YACR,CAAC;YACD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;YAC9B,UAAU,IAAI,CAAC,CAAA;QACjB,CAAC;QAED,IAAI,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;YACrF,WAAW,IAAI,iBAAiB,CAAA;YAChC,cAAc,IAAI,iBAAiB,CAAA;QACrC,CAAC;QAED,OAAO,CAAC,MAAM,CAAC;YACb,cAAc;YACd,UAAU;YACV,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE;YACpC,cAAc;SACf,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACnD,IAAI,OAAO,EAAE,CAAC;QACZ,gBAAgB,CAAC,IAAI,EAAE,CAAA;IACzB,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC;QACpB,IAAI;QACJ,KAAK;YACH,WAAW,GAAG,CAAC,CAAA;QACjB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAQD;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAwB,EAAc,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;IACzF,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,QAA4B,CAAA;IAEhC,MAAM,KAAK,GAAG,CAAC,SAAiB,EAAQ,EAAE;QACxC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAA;QACjE,QAAQ,GAAG,SAAS,CAAA;QACpB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC,CAAA;IAED,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAA;IAC1C,OAAO;QACL,IAAI;YACF,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAM;YACR,CAAC;YACD,OAAO,GAAG,IAAI,CAAA;YACd,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;QACnC,CAAC;KACF,CAAA;AACH,CAAC,CAAC,CAAA"}
package/src/FixedLoop.ts DELETED
@@ -1,236 +0,0 @@
1
- /**
2
- * Deterministic fixed-step timing for browser and renderer hosts.
3
- *
4
- * The loop owns the timing policy that is easy to get subtly wrong in every
5
- * game: frame clamping, catch-up limits, interpolation, cancellation, and
6
- * typed update failures. It does not know about an ECS runtime or renderer.
7
- *
8
- * @module FixedLoop
9
- * @docGroup browser
10
- */
11
- import type * as Clock from "@typeonce/ritmo/Clock"
12
- import * as Result from "@typeonce/ritmo/Result"
13
-
14
- /** One renderer or browser tick measured in milliseconds. */
15
- export interface Tick {
16
- readonly deltaMS: number
17
- }
18
-
19
- /** A stoppable host subscription. Calling `stop` more than once is safe. */
20
- export interface Subscription {
21
- stop(): void
22
- }
23
-
24
- /** Minimal adapter implemented by Pixi tickers, RAF, and deterministic tests. */
25
- export interface TickSource<TTick extends Tick = Tick> {
26
- subscribe(onTick: (tick: TTick) => void): Subscription
27
- }
28
-
29
- /** Validated fixed-step timing policy. */
30
- export interface Options {
31
- /**
32
- * The fixed step every update advances (`Clock.hz(60)`): the same value
33
- * the game's clock resource runs at, so the loop and the clock agree.
34
- */
35
- readonly step: Clock.Step
36
- /** Maximum host-frame duration admitted into the accumulator. */
37
- readonly maxFrameSeconds: number
38
- /** Maximum number of simulation updates performed for one host frame. */
39
- readonly maxStepsPerFrame: number
40
- }
41
-
42
- /** Configuration error returned before a loop subscribes to its host. */
43
- export interface InvalidOptions {
44
- readonly kind: "InvalidFixedLoopOptions"
45
- readonly field: keyof Options
46
- readonly reason: "mustBeFiniteAndPositive" | "mustBePositiveInteger"
47
- readonly value: number
48
- }
49
-
50
- /** Data passed to the renderer after all fixed updates for one host frame. */
51
- export interface Frame {
52
- /** Clamped time admitted for this host frame. */
53
- readonly elapsedSeconds: number
54
- /** Number of fixed updates completed for this host frame. */
55
- readonly fixedSteps: number
56
- /** Remaining accumulator fraction in the range `[0, 1)`. */
57
- readonly alpha: number
58
- /** Time discarded by frame clamping or the catch-up limit. */
59
- readonly droppedSeconds: number
60
- }
61
-
62
- /** Failure delivered by an active loop before it stops itself. */
63
- export type Failure<UpdateError> =
64
- | {
65
- readonly kind: "InvalidTickDelta"
66
- readonly deltaMS: number
67
- }
68
- | {
69
- readonly kind: "UpdateFailure"
70
- readonly error: UpdateError
71
- }
72
-
73
- /** A running fixed-step driver. */
74
- export interface Driver extends Subscription {
75
- /** Clears accumulated partial time without removing the host subscription. */
76
- reset(): void
77
- }
78
-
79
- /** Input for a fixed-step driver. */
80
- export interface StartOptions<TTick extends Tick, UpdateError> extends Options {
81
- readonly source: TickSource<TTick>
82
- readonly update: (stepSeconds: number) => Result.Result<void, UpdateError>
83
- readonly render: (frame: Frame) => void
84
- readonly onFailure: (failure: Failure<UpdateError>) => void
85
- }
86
-
87
- /** Wraps a host-specific subscription function in the canonical source type. */
88
- export const source = <TTick extends Tick>(
89
- subscribe: TickSource<TTick>["subscribe"]
90
- ): TickSource<TTick> => ({ subscribe })
91
-
92
- const validate = (options: Options): Result.Result<void, InvalidOptions> => {
93
- for (const field of ["maxFrameSeconds"] as const) {
94
- const value = options[field]
95
- if (!Number.isFinite(value) || value <= 0) {
96
- return Result.failure({
97
- kind: "InvalidFixedLoopOptions",
98
- field,
99
- reason: "mustBeFiniteAndPositive",
100
- value
101
- })
102
- }
103
- }
104
- if (!Number.isInteger(options.maxStepsPerFrame) || options.maxStepsPerFrame <= 0) {
105
- return Result.failure({
106
- kind: "InvalidFixedLoopOptions",
107
- field: "maxStepsPerFrame",
108
- reason: "mustBePositiveInteger",
109
- value: options.maxStepsPerFrame
110
- })
111
- }
112
- return Result.success(undefined)
113
- }
114
-
115
- /**
116
- * Starts a fixed-step loop after validating its timing policy.
117
- *
118
- * Update failures and malformed host ticks are delivered to `onFailure`, then
119
- * the driver stops. Render defects are deliberately not caught: they are
120
- * programmer defects, not expected game outcomes.
121
- */
122
- export const start = <TTick extends Tick, UpdateError>(
123
- options: StartOptions<TTick, UpdateError>
124
- ): Result.Result<Driver, InvalidOptions> => {
125
- const validity = validate(options)
126
- if (!validity.ok) {
127
- return validity
128
- }
129
-
130
- let accumulator = 0
131
- let stopped = false
132
- let hostSubscription: Subscription | undefined
133
-
134
- const stop = (): void => {
135
- if (stopped) {
136
- return
137
- }
138
- stopped = true
139
- hostSubscription?.stop()
140
- }
141
-
142
- const fail = (failure: Failure<UpdateError>): void => {
143
- stop()
144
- options.onFailure(failure)
145
- }
146
-
147
- const onTick = (tick: TTick): void => {
148
- if (stopped) {
149
- return
150
- }
151
- if (!Number.isFinite(tick.deltaMS) || tick.deltaMS < 0) {
152
- fail({ kind: "InvalidTickDelta", deltaMS: tick.deltaMS })
153
- return
154
- }
155
-
156
- const rawSeconds = tick.deltaMS / 1000
157
- const elapsedSeconds = Math.min(rawSeconds, options.maxFrameSeconds)
158
- let droppedSeconds = rawSeconds - elapsedSeconds
159
- accumulator += elapsedSeconds
160
-
161
- let fixedSteps = 0
162
- while (accumulator >= options.step.dt && fixedSteps < options.maxStepsPerFrame) {
163
- const update = options.update(options.step.dt)
164
- if (!update.ok) {
165
- fail({ kind: "UpdateFailure", error: update.error })
166
- return
167
- }
168
- accumulator -= options.step.dt
169
- fixedSteps += 1
170
- }
171
-
172
- if (accumulator >= options.step.dt) {
173
- const droppedWholeSteps = Math.floor(accumulator / options.step.dt) * options.step.dt
174
- accumulator -= droppedWholeSteps
175
- droppedSeconds += droppedWholeSteps
176
- }
177
-
178
- options.render({
179
- elapsedSeconds,
180
- fixedSteps,
181
- alpha: accumulator / options.step.dt,
182
- droppedSeconds
183
- })
184
- }
185
-
186
- hostSubscription = options.source.subscribe(onTick)
187
- if (stopped) {
188
- hostSubscription.stop()
189
- }
190
-
191
- return Result.success({
192
- stop,
193
- reset() {
194
- accumulator = 0
195
- }
196
- })
197
- }
198
-
199
- /** Host surface needed by the built-in requestAnimationFrame adapter. */
200
- export interface AnimationFrameHost {
201
- requestAnimationFrame(callback: (timestamp: number) => void): number
202
- cancelAnimationFrame(handle: number): void
203
- }
204
-
205
- /**
206
- * Adapts requestAnimationFrame to a `TickSource` without reading global state.
207
- * The first frame reports zero elapsed time because it establishes the clock.
208
- */
209
- export const animationFrames = (host: AnimationFrameHost): TickSource => source((onTick) => {
210
- let stopped = false
211
- let handle = 0
212
- let previous: number | undefined
213
-
214
- const frame = (timestamp: number): void => {
215
- if (stopped) {
216
- return
217
- }
218
- const deltaMS = previous === undefined ? 0 : timestamp - previous
219
- previous = timestamp
220
- onTick({ deltaMS })
221
- if (!stopped) {
222
- handle = host.requestAnimationFrame(frame)
223
- }
224
- }
225
-
226
- handle = host.requestAnimationFrame(frame)
227
- return {
228
- stop() {
229
- if (stopped) {
230
- return
231
- }
232
- stopped = true
233
- host.cancelAnimationFrame(handle)
234
- }
235
- }
236
- })