@typeonce/ritmo-browser 0.8.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 +1 -1
- package/dist/BrowserHostClock.d.ts +1 -1
- package/dist/BrowserTickSource.d.ts +25 -0
- package/dist/BrowserTickSource.d.ts.map +1 -0
- package/dist/BrowserTickSource.js +45 -0
- package/dist/BrowserTickSource.js.map +1 -0
- package/dist/InputCapture.d.ts +1 -1
- package/dist/Keyboard.d.ts +1 -1
- package/dist/Keyboard.d.ts.map +1 -1
- package/dist/Keyboard.js +5 -2
- package/dist/Keyboard.js.map +1 -1
- package/dist/Touch.d.ts.map +1 -1
- package/dist/Touch.js +10 -5
- package/dist/Touch.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/BrowserHostClock.ts +1 -1
- package/src/BrowserTickSource.ts +53 -0
- package/src/InputCapture.ts +1 -1
- package/src/Keyboard.ts +4 -2
- package/src/Touch.ts +10 -5
- package/src/index.ts +1 -1
- package/dist/FixedLoop.d.ts +0 -95
- package/dist/FixedLoop.d.ts.map +0 -1
- package/dist/FixedLoop.js +0 -127
- package/dist/FixedLoop.js.map +0 -1
- package/src/FixedLoop.ts +0 -236
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
|
|
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"}
|
package/dist/InputCapture.d.ts
CHANGED
|
@@ -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/dist/Keyboard.d.ts
CHANGED
|
@@ -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
|
/**
|
package/dist/Keyboard.d.ts.map
CHANGED
|
@@ -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))
|
package/dist/Keyboard.js.map
CHANGED
|
@@ -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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"}
|
package/dist/Touch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Touch.d.ts","sourceRoot":"","sources":["../src/Touch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,0EAA0E;AAC1E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,kFAAkF;AAClF,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,mFAAmF;IACnF,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;IACrB,iDAAiD;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAA;IACzB,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,6FAA6F;IAC7F,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;CACtB;AAED,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,UAAU;KAAE,CAAA;IACnD,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAC3B;AAED,uEAAuE;AACvE,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,KAAK;IACpB,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;CAC5B;AAED,MAAM,WAAW,KAAK;IACpB,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM;IACxC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,WAAW;KAAE,CAAA;IACpD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,sFAAsF;AACtF,MAAM,WAAW,IAAI,CAAC,CAAC,SAAS,MAAM;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,GAAG,IAAI,CAAA;IAC7E,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG;YAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE;KAAE,CAAA;CACjG;AAED,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,MAAM;IACrC,yEAAyE;IACzE,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAA;IACvB,kCAAkC;IAClC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;IACf,6EAA6E;IAC7E,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,cAAc,IAAI,IAAI,CAAA;CACvB;AAED,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,GAAG,eAAe,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAAA;IACtI,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,GAAG,eAAe,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,IAAI,CAAA;IACzI,qBAAqB,IAAI;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IACzH,iBAAiB,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAA;CACzC;AAED,4FAA4F;AAC5F,MAAM,WAAW,QAAQ;IACvB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAA;IAC1D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAA;CAC9D;AAED,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CAC9C;AAMD,iGAAiG;AACjG,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,CAAC,SAAS,MAAM,WAAW,aAAa,CAAC,CAAC,CAAC,KAAG,QAAQ,CAAC,CAAC,CAKjF,CAAA;AAiEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,CAAC,CAAC,SAAS,MAAM,UAClC,WAAW,YACT,QAAQ,UACV,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,YACxB,YAAY,KACpB,KAAK,CAAC,CAAC,
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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":"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"}
|
|
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
|
|
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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
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,
|
|
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.
|
|
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.
|
|
50
|
+
"@typeonce/ritmo": "^0.9.0"
|
|
51
51
|
},
|
|
52
52
|
"engines": {
|
|
53
53
|
"node": ">=20"
|
package/src/BrowserHostClock.ts
CHANGED
|
@@ -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
|
+
})
|
package/src/InputCapture.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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"
|
package/dist/FixedLoop.d.ts
DELETED
|
@@ -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
|
package/dist/FixedLoop.d.ts.map
DELETED
|
@@ -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
|
package/dist/FixedLoop.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FixedLoop.js","sourceRoot":"","sources":["../src/FixedLoop.ts"],"names":[],"mappings":"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"}
|
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
|
-
})
|