@oidoid/void 0.1.0-3 → 0.1.0-6
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/dist/meta.json +1 -0
- package/dist/package.json +66 -0
- package/dist/public/favicon/favicon16.png +0 -0
- package/dist/public/favicon/favicon192.png +0 -0
- package/dist/public/favicon/favicon32.png +0 -0
- package/dist/public/favicon/favicon48.png +0 -0
- package/dist/public/favicon/favicon512.png +0 -0
- package/dist/public/favicon/favicon64.png +0 -0
- package/dist/public/index.html +23 -0
- package/dist/public/index.js +3844 -0
- package/dist/public/index.js.map +7 -0
- package/dist/public/manifest.json +1 -0
- package/dist/public/preload-atlas.png +0 -0
- package/dist/public/void-v0.1.0-4.html +111 -0
- package/dist/public/void-v0.1.0-5.html +111 -0
- package/dist/public/void-v0.1.0-6.html +111 -0
- package/dist/schema/config-file.d.ts +32 -0
- package/dist/schema/config-file.js +41 -0
- package/dist/schema/config-file.js.map +1 -0
- package/dist/schema/config-file.v0.json +68 -0
- package/dist/src/audio.d.ts +7 -0
- package/dist/src/audio.js +25 -0
- package/dist/src/audio.js.map +1 -0
- package/dist/src/demo/assets/manifest.json +46 -0
- package/dist/src/demo/assets/preload-atlas.json +193 -0
- package/dist/src/demo/ents/clock-ent.d.ts +10 -0
- package/dist/src/demo/ents/clock-ent.js +26 -0
- package/dist/src/demo/ents/clock-ent.js.map +1 -0
- package/dist/src/demo/ents/render-toggle-ent.d.ts +10 -0
- package/dist/src/demo/ents/render-toggle-ent.js +38 -0
- package/dist/src/demo/ents/render-toggle-ent.js.map +1 -0
- package/dist/src/demo/ents/work-counter-ent.d.ts +10 -0
- package/dist/src/demo/ents/work-counter-ent.js +24 -0
- package/dist/src/demo/ents/work-counter-ent.js.map +1 -0
- package/dist/src/demo/game.d.ts +13 -0
- package/dist/src/demo/game.js +155 -0
- package/dist/src/demo/game.js.map +1 -0
- package/dist/src/demo/index.d.ts +1 -0
- package/dist/src/demo/index.js +8 -0
- package/dist/src/demo/index.js.map +1 -0
- package/dist/src/demo/tsconfig.json +15 -0
- package/dist/src/demo/types/tag.d.ts +2 -0
- package/dist/src/demo/types/tag.js +2 -0
- package/dist/src/demo/types/tag.js.map +1 -0
- package/dist/src/demo/void.json +11 -0
- package/dist/src/ents/button-ent.d.ts +38 -0
- package/dist/src/ents/button-ent.js +124 -0
- package/dist/src/ents/button-ent.js.map +1 -0
- package/dist/src/ents/cursor-ent.d.ts +18 -0
- package/dist/src/ents/cursor-ent.js +58 -0
- package/dist/src/ents/cursor-ent.js.map +1 -0
- package/dist/src/ents/ent.d.ts +7 -0
- package/dist/src/ents/ent.js +2 -0
- package/dist/src/ents/ent.js.map +1 -0
- package/dist/src/ents/follow-cam-ent.d.ts +25 -0
- package/dist/src/ents/follow-cam-ent.js +87 -0
- package/dist/src/ents/follow-cam-ent.js.map +1 -0
- package/dist/src/ents/nine-patch-ent.d.ts +43 -0
- package/dist/src/ents/nine-patch-ent.js +143 -0
- package/dist/src/ents/nine-patch-ent.js.map +1 -0
- package/dist/src/ents/text-ent.d.ts +23 -0
- package/dist/src/ents/text-ent.js +109 -0
- package/dist/src/ents/text-ent.js.map +1 -0
- package/dist/src/ents/zoo.d.ts +16 -0
- package/dist/src/ents/zoo.js +38 -0
- package/dist/src/ents/zoo.js.map +1 -0
- package/dist/src/graphics/atlas-parser.d.ts +4 -0
- package/dist/src/graphics/atlas-parser.js +27 -0
- package/dist/src/graphics/atlas-parser.js.map +1 -0
- package/dist/src/graphics/atlas.d.ts +49 -0
- package/dist/src/graphics/atlas.js +7 -0
- package/dist/src/graphics/atlas.js.map +1 -0
- package/dist/src/graphics/cam.d.ts +89 -0
- package/dist/src/graphics/cam.js +211 -0
- package/dist/src/graphics/cam.js.map +1 -0
- package/dist/src/graphics/gl.d.ts +24 -0
- package/dist/src/graphics/gl.js +70 -0
- package/dist/src/graphics/gl.js.map +1 -0
- package/dist/src/graphics/layer.d.ts +21 -0
- package/dist/src/graphics/layer.js +23 -0
- package/dist/src/graphics/layer.js.map +1 -0
- package/dist/src/graphics/renderer.d.ts +22 -0
- package/dist/src/graphics/renderer.js +168 -0
- package/dist/src/graphics/renderer.js.map +1 -0
- package/dist/src/graphics/sprite-frag.glsl.d.ts +1 -0
- package/dist/src/graphics/sprite-frag.glsl.js +35 -0
- package/dist/src/graphics/sprite-frag.glsl.js.map +1 -0
- package/dist/src/graphics/sprite-vert.glsl.d.ts +1 -0
- package/dist/src/graphics/sprite-vert.glsl.js +68 -0
- package/dist/src/graphics/sprite-vert.glsl.js.map +1 -0
- package/dist/src/graphics/sprite.d.ts +108 -0
- package/dist/src/graphics/sprite.js +301 -0
- package/dist/src/graphics/sprite.js.map +1 -0
- package/dist/src/index.d.ts +30 -0
- package/dist/src/index.js +33 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/input/context-menu.d.ts +8 -0
- package/dist/src/input/context-menu.js +25 -0
- package/dist/src/input/context-menu.js.map +1 -0
- package/dist/src/input/gamepad.d.ts +18 -0
- package/dist/src/input/gamepad.js +49 -0
- package/dist/src/input/gamepad.js.map +1 -0
- package/dist/src/input/input.d.ts +148 -0
- package/dist/src/input/input.js +383 -0
- package/dist/src/input/input.js.map +1 -0
- package/dist/src/input/keyboard.d.ts +17 -0
- package/dist/src/input/keyboard.js +46 -0
- package/dist/src/input/keyboard.js.map +1 -0
- package/dist/src/input/pointer.d.ts +53 -0
- package/dist/src/input/pointer.js +162 -0
- package/dist/src/input/pointer.js.map +1 -0
- package/dist/src/input/wheel.d.ts +12 -0
- package/dist/src/input/wheel.js +30 -0
- package/dist/src/input/wheel.js.map +1 -0
- package/dist/src/looper.d.ts +15 -0
- package/dist/src/looper.js +48 -0
- package/dist/src/looper.js.map +1 -0
- package/dist/src/mem/pool.d.ts +31 -0
- package/dist/src/mem/pool.js +98 -0
- package/dist/src/mem/pool.js.map +1 -0
- package/dist/src/pixel-ratio-observer.d.ts +10 -0
- package/dist/src/pixel-ratio-observer.js +26 -0
- package/dist/src/pixel-ratio-observer.js.map +1 -0
- package/dist/src/random/random.d.ts +8 -0
- package/dist/src/random/random.js +23 -0
- package/dist/src/random/random.js.map +1 -0
- package/dist/src/storage/local-storage.d.ts +3 -0
- package/dist/src/storage/local-storage.js +11 -0
- package/dist/src/storage/local-storage.js.map +1 -0
- package/dist/src/text/font.d.ts +6 -0
- package/dist/src/text/font.js +20 -0
- package/dist/src/text/font.js.map +1 -0
- package/dist/src/text/mem-prop-5x6.json +573 -0
- package/dist/src/text/text-layout.d.ts +19 -0
- package/dist/src/text/text-layout.js +85 -0
- package/dist/src/text/text-layout.js.map +1 -0
- package/dist/src/tsconfig.json +15 -0
- package/dist/src/types/geo.d.ts +38 -0
- package/dist/src/types/geo.js +61 -0
- package/dist/src/types/geo.js.map +1 -0
- package/dist/src/types/json.d.ts +31 -0
- package/dist/src/types/json.js +2 -0
- package/dist/src/types/json.js.map +1 -0
- package/dist/src/types/time.d.ts +19 -0
- package/dist/src/types/time.js +10 -0
- package/dist/src/types/time.js.map +1 -0
- package/dist/src/types/void-version.d.ts +9 -0
- package/dist/src/types/void-version.js +2 -0
- package/dist/src/types/void-version.js.map +1 -0
- package/dist/src/utils/async-util.d.ts +11 -0
- package/dist/src/utils/async-util.js +36 -0
- package/dist/src/utils/async-util.js.map +1 -0
- package/dist/src/utils/canvas-util.d.ts +7 -0
- package/dist/src/utils/canvas-util.js +128 -0
- package/dist/src/utils/canvas-util.js.map +1 -0
- package/dist/src/utils/color-util.d.ts +1 -0
- package/dist/src/utils/color-util.js +4 -0
- package/dist/src/utils/color-util.js.map +1 -0
- package/dist/src/utils/debug.d.ts +17 -0
- package/dist/src/utils/debug.js +34 -0
- package/dist/src/utils/debug.js.map +1 -0
- package/dist/src/utils/dom-util.d.ts +3 -0
- package/dist/src/utils/dom-util.js +29 -0
- package/dist/src/utils/dom-util.js.map +1 -0
- package/dist/src/utils/fetch-util.d.ts +3 -0
- package/dist/src/utils/fetch-util.js +24 -0
- package/dist/src/utils/fetch-util.js.map +1 -0
- package/dist/src/utils/math.d.ts +6 -0
- package/dist/src/utils/math.js +18 -0
- package/dist/src/utils/math.js.map +1 -0
- package/dist/src/utils/vibrate.d.ts +1 -0
- package/dist/src/utils/vibrate.js +4 -0
- package/dist/src/utils/vibrate.js.map +1 -0
- package/dist/src/void.d.ts +43 -0
- package/dist/src/void.js +95 -0
- package/dist/src/void.js.map +1 -0
- package/dist/tools/atlas-pack/aseprite.d.ts +58 -0
- package/dist/tools/atlas-pack/aseprite.js +16 -0
- package/dist/tools/atlas-pack/aseprite.js.map +1 -0
- package/dist/tools/atlas-pack/atlas-json-parser.d.ts +21 -0
- package/dist/tools/atlas-pack/atlas-json-parser.js +116 -0
- package/dist/tools/atlas-pack/atlas-json-parser.js.map +1 -0
- package/dist/tools/atlas-pack/atlas-pack.d.ts +2 -0
- package/dist/tools/atlas-pack/atlas-pack.js +17 -0
- package/dist/tools/atlas-pack/atlas-pack.js.map +1 -0
- package/dist/tools/bundle/bundle.d.ts +3 -0
- package/dist/tools/bundle/bundle.js +48 -0
- package/dist/tools/bundle/bundle.js.map +1 -0
- package/dist/tools/bundle/html-plugin.d.ts +3 -0
- package/dist/tools/bundle/html-plugin.js +88 -0
- package/dist/tools/bundle/html-plugin.js.map +1 -0
- package/dist/tools/tsconfig-base.json +45 -0
- package/dist/tools/tsconfig.json +21 -0
- package/dist/tools/types/config.d.ts +20 -0
- package/dist/tools/types/config.js +22 -0
- package/dist/tools/types/config.js.map +1 -0
- package/dist/tools/utils/argv.d.ts +12 -0
- package/dist/tools/utils/argv.js +19 -0
- package/dist/tools/utils/argv.js.map +1 -0
- package/dist/tools/utils/exec.d.ts +3 -0
- package/dist/tools/utils/exec.js +15 -0
- package/dist/tools/utils/exec.js.map +1 -0
- package/dist/tools/utils/file-util.d.ts +1 -0
- package/dist/tools/utils/file-util.js +13 -0
- package/dist/tools/utils/file-util.js.map +1 -0
- package/dist/tools/utils/html-parser.d.ts +1 -0
- package/dist/tools/utils/html-parser.js +10 -0
- package/dist/tools/utils/html-parser.js.map +1 -0
- package/dist/tools/void.d.ts +17 -0
- package/dist/tools/void.js +30 -0
- package/dist/tools/void.js.map +1 -0
- package/package.json +33 -39
- package/readme.md +1 -1
- package/schema/config-file.test.ts +55 -0
- package/schema/config-file.ts +69 -0
- package/schema/config-file.v0.json +68 -0
- package/tools/atlas-pack/aseprite.ts +60 -0
- package/tools/atlas-pack/atlas-json-parser.test.ts +780 -0
- package/tools/atlas-pack/atlas-json-parser.ts +159 -0
- package/tools/atlas-pack/atlas-pack.ts +38 -0
- package/tools/bundle/bundle.ts +65 -0
- package/tools/bundle/html-plugin.ts +135 -0
- package/tools/types/config.ts +43 -0
- package/tools/utils/argv.test.ts +41 -0
- package/tools/utils/argv.ts +29 -0
- package/tools/utils/exec.ts +22 -0
- package/tools/utils/file-util.ts +11 -0
- package/tools/utils/html-parser.ts +9 -0
- package/tools/void.ts +54 -0
- package/dist/atlas/aseprite.d.ts +0 -37
- package/dist/atlas/aseprite.js +0 -2
- package/dist/atlas/aseprite.js.map +0 -1
- package/dist/atlas/atlas-parser.d.ts +0 -52
- package/dist/atlas/atlas-parser.js +0 -109
- package/dist/atlas/atlas-parser.js.map +0 -1
- package/dist/atlas/atlas.d.ts +0 -12
- package/dist/atlas/atlas.js +0 -2
- package/dist/atlas/atlas.js.map +0 -1
- package/dist/audio/synth.d.ts +0 -4
- package/dist/audio/synth.js +0 -21
- package/dist/audio/synth.js.map +0 -1
- package/dist/graphics/bitmap.d.ts +0 -14
- package/dist/graphics/bitmap.js +0 -14
- package/dist/graphics/bitmap.js.map +0 -1
- package/dist/graphics/cam.d.ts +0 -16
- package/dist/graphics/cam.js +0 -42
- package/dist/graphics/cam.js.map +0 -1
- package/dist/graphics/frag.glsl.d.ts +0 -1
- package/dist/graphics/frag.glsl.js +0 -15
- package/dist/graphics/frag.glsl.js.map +0 -1
- package/dist/graphics/frame-listener.d.ts +0 -16
- package/dist/graphics/frame-listener.js +0 -83
- package/dist/graphics/frame-listener.js.map +0 -1
- package/dist/graphics/renderer.d.ts +0 -12
- package/dist/graphics/renderer.js +0 -185
- package/dist/graphics/renderer.js.map +0 -1
- package/dist/graphics/vert.glsl.d.ts +0 -1
- package/dist/graphics/vert.glsl.js +0 -46
- package/dist/graphics/vert.glsl.js.map +0 -1
- package/dist/index.d.ts +0 -31
- package/dist/index.js +0 -79
- package/dist/index.js.map +0 -1
- package/dist/input/gamepad-poller.d.ts +0 -8
- package/dist/input/gamepad-poller.js +0 -38
- package/dist/input/gamepad-poller.js.map +0 -1
- package/dist/input/input.d.ts +0 -44
- package/dist/input/input.js +0 -175
- package/dist/input/input.js.map +0 -1
- package/dist/input/keyboard-poller.d.ts +0 -7
- package/dist/input/keyboard-poller.js +0 -30
- package/dist/input/keyboard-poller.js.map +0 -1
- package/dist/input/pointer-poller.d.ts +0 -12
- package/dist/input/pointer-poller.js +0 -67
- package/dist/input/pointer-poller.js.map +0 -1
- package/dist/sprite/sprite.d.ts +0 -51
- package/dist/sprite/sprite.js +0 -161
- package/dist/sprite/sprite.js.map +0 -1
- package/dist/storage/json-storage.d.ts +0 -4
- package/dist/storage/json-storage.js +0 -13
- package/dist/storage/json-storage.js.map +0 -1
- package/dist/test/tsconfig.json +0 -14
- package/dist/text/font.d.ts +0 -6
- package/dist/text/font.js +0 -18
- package/dist/text/font.js.map +0 -1
- package/dist/text/text-layout.d.ts +0 -11
- package/dist/text/text-layout.js +0 -73
- package/dist/text/text-layout.js.map +0 -1
- package/dist/tsconfig.json +0 -13
- package/dist/types/2d.d.ts +0 -9
- package/dist/types/2d.js +0 -2
- package/dist/types/2d.js.map +0 -1
- package/dist/void.js +0 -60
- package/dist/void.js.map +0 -7
- package/dist/void.meta.json +0 -299
- package/tools/void.js +0 -143
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type Box = XY & WH;
|
|
2
|
+
export type WH = {
|
|
3
|
+
w: number;
|
|
4
|
+
h: number;
|
|
5
|
+
};
|
|
6
|
+
export type XY = {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
};
|
|
10
|
+
export type XYZ = {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
z: number;
|
|
14
|
+
};
|
|
15
|
+
export type CardinalDir = 'W' | 'N' | 'E' | 'S';
|
|
16
|
+
export type CompassDir = CardinalDir | 'NE' | 'SE' | 'SW' | 'NW' | 'Origin';
|
|
17
|
+
export declare function boxEq(l: Readonly<Box>, r: Readonly<Box>): boolean;
|
|
18
|
+
export declare function boxHits(l: Readonly<Partial<XY> & WH>, r: Readonly<XY & Partial<WH>>): boolean;
|
|
19
|
+
export declare function whAssign(l: WH, r: Readonly<WH>): void;
|
|
20
|
+
export declare function whEq(l: Readonly<WH>, r: Readonly<WH>): boolean;
|
|
21
|
+
/** l + r. */
|
|
22
|
+
export declare function xyAdd(l: Readonly<XY>, r: Readonly<XY>): XY;
|
|
23
|
+
/** l += r. */
|
|
24
|
+
export declare function xyAddTo(l: XY, r: Readonly<XY>): void;
|
|
25
|
+
export declare function xyAssign(l: XY, r: Readonly<XY>): void;
|
|
26
|
+
/** nonnegative. */
|
|
27
|
+
export declare function xyDistance(from: Readonly<XY>, to: Readonly<XY>): number;
|
|
28
|
+
/** l / r. */
|
|
29
|
+
export declare function xyDiv(l: Readonly<XY>, r: Readonly<XY>): XY;
|
|
30
|
+
export declare function xyEq(l: Readonly<XY>, r: Readonly<XY>): boolean;
|
|
31
|
+
/** nonnegative. */
|
|
32
|
+
export declare function xyMagnitude(xy: Readonly<XY>): number;
|
|
33
|
+
/** the greater of each component. */
|
|
34
|
+
export declare function xyMax(l: Readonly<XY>, r: Readonly<XY>): XY;
|
|
35
|
+
/** the lesser of each component. */
|
|
36
|
+
export declare function xyMin(l: Readonly<XY>, r: Readonly<XY>): XY;
|
|
37
|
+
/** l - r. */
|
|
38
|
+
export declare function xySub(l: Readonly<XY>, r: Readonly<XY>): XY;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export function boxEq(l, r) {
|
|
2
|
+
return xyEq(l, r) && whEq(l, r);
|
|
3
|
+
}
|
|
4
|
+
export function boxHits(l, r) {
|
|
5
|
+
const rWH = { w: r.w ?? 1, h: r.h ?? 1 }; // point? an empty box has no w/h.
|
|
6
|
+
if (!l.w || !l.h || !rWH.w || !rWH.h)
|
|
7
|
+
return false; // noncommutative.
|
|
8
|
+
const lXY = { x: l.x ?? 0, y: l.y ?? 0 };
|
|
9
|
+
return (lXY.x < r.x + rWH.w &&
|
|
10
|
+
lXY.x + l.w > r.x &&
|
|
11
|
+
lXY.y < r.y + rWH.h &&
|
|
12
|
+
lXY.y + l.h > r.y);
|
|
13
|
+
}
|
|
14
|
+
export function whAssign(l, r) {
|
|
15
|
+
l.w = r.w;
|
|
16
|
+
l.h = r.h;
|
|
17
|
+
}
|
|
18
|
+
export function whEq(l, r) {
|
|
19
|
+
return l.w === r.w && l.h === r.h;
|
|
20
|
+
}
|
|
21
|
+
/** l + r. */
|
|
22
|
+
export function xyAdd(l, r) {
|
|
23
|
+
return { x: l.x + r.x, y: l.y + r.y };
|
|
24
|
+
}
|
|
25
|
+
/** l += r. */
|
|
26
|
+
export function xyAddTo(l, r) {
|
|
27
|
+
l.x += r.x;
|
|
28
|
+
l.y += r.y;
|
|
29
|
+
}
|
|
30
|
+
export function xyAssign(l, r) {
|
|
31
|
+
l.x = r.x;
|
|
32
|
+
l.y = r.y;
|
|
33
|
+
}
|
|
34
|
+
/** nonnegative. */
|
|
35
|
+
export function xyDistance(from, to) {
|
|
36
|
+
return xyMagnitude(xySub(from, to));
|
|
37
|
+
}
|
|
38
|
+
/** l / r. */
|
|
39
|
+
export function xyDiv(l, r) {
|
|
40
|
+
return { x: l.x / r.x, y: l.y / r.y };
|
|
41
|
+
}
|
|
42
|
+
export function xyEq(l, r) {
|
|
43
|
+
return l.x === r.x && l.y === r.y;
|
|
44
|
+
}
|
|
45
|
+
/** nonnegative. */
|
|
46
|
+
export function xyMagnitude(xy) {
|
|
47
|
+
return Math.hypot(xy.x, xy.y);
|
|
48
|
+
}
|
|
49
|
+
/** the greater of each component. */
|
|
50
|
+
export function xyMax(l, r) {
|
|
51
|
+
return { x: Math.max(l.x, r.x), y: Math.max(l.y, r.y) };
|
|
52
|
+
}
|
|
53
|
+
/** the lesser of each component. */
|
|
54
|
+
export function xyMin(l, r) {
|
|
55
|
+
return { x: Math.min(l.x, r.x), y: Math.min(l.y, r.y) };
|
|
56
|
+
}
|
|
57
|
+
/** l - r. */
|
|
58
|
+
export function xySub(l, r) {
|
|
59
|
+
return { x: l.x - r.x, y: l.y - r.y };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=geo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"geo.js","sourceRoot":"","sources":["../../../src/types/geo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type JSONValue = JSONPrimitive | JSONArray | JSONObject;
|
|
2
|
+
export type JSONObject = {
|
|
3
|
+
[k: string]: JSONValue;
|
|
4
|
+
};
|
|
5
|
+
export type JSONArray = JSONValue[];
|
|
6
|
+
export type JSONPrimitive = boolean | null | number | string;
|
|
7
|
+
/**
|
|
8
|
+
* like `JSONValue` but deeply allow lossy undefined values that are easier to
|
|
9
|
+
* type but may de/serialize incorrectly. eg:
|
|
10
|
+
*
|
|
11
|
+
* - `JSON.stringify({a: 1, b: undefined, c: 3})`: `'{"a":1,"c":3}'`.
|
|
12
|
+
* - `JSON.stringify([1, undefined, 3])`: `'[1,null,3]'`.
|
|
13
|
+
* - `JSON.stringify(undefined)`: `undefined`.
|
|
14
|
+
*
|
|
15
|
+
* the last case produces unparseable JSON and must be guarded against.
|
|
16
|
+
*
|
|
17
|
+
* `JSON.stringify()` accepts `any` input so there are no typing guards. prefer
|
|
18
|
+
* plain `JSONValue`.
|
|
19
|
+
*
|
|
20
|
+
* the following inputs all throw but only the last is probable.
|
|
21
|
+
*
|
|
22
|
+
* - `JSON.parse('{a: 1, b: undefined, c: 3}')`.
|
|
23
|
+
* - `JSON.parse('[1, undefined, 3]')`.
|
|
24
|
+
* - `JSON.parse('undefined')`.
|
|
25
|
+
*/
|
|
26
|
+
export type PartialJSONValue = PartialJSONPrimitive | PartialJSONArray | PartialJSONObject;
|
|
27
|
+
export type PartialJSONObject = {
|
|
28
|
+
[k in string]?: PartialJSONValue;
|
|
29
|
+
};
|
|
30
|
+
export type PartialJSONArray = PartialJSONValue[];
|
|
31
|
+
export type PartialJSONPrimitive = boolean | null | number | string | undefined;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../src/types/json.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
interface DateConstructor {
|
|
3
|
+
now(): UTCMillis;
|
|
4
|
+
}
|
|
5
|
+
interface Performance {
|
|
6
|
+
now(): Millis;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
declare const millis: unique symbol;
|
|
10
|
+
/** duration in milliseconds. */
|
|
11
|
+
export type Millis = number & {
|
|
12
|
+
readonly [millis]: never;
|
|
13
|
+
};
|
|
14
|
+
declare const utcMillis: unique symbol;
|
|
15
|
+
export type UTCMillis = number & {
|
|
16
|
+
readonly [utcMillis]: never;
|
|
17
|
+
};
|
|
18
|
+
export declare function dateToTimestamp(date: Readonly<Date>): string;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function dateToTimestamp(date) {
|
|
2
|
+
const yyyy = `${date.getFullYear()}`.padStart(4, '0');
|
|
3
|
+
const MM = `${date.getMonth() + 1}`.padStart(2, '0');
|
|
4
|
+
const dd = `${date.getDate()}`.padStart(2, '0');
|
|
5
|
+
const hh = `${date.getHours()}`.padStart(2, '0');
|
|
6
|
+
const mm = `${date.getMinutes()}`.padStart(2, '0');
|
|
7
|
+
const ss = `${date.getSeconds()}`.padStart(2, '0');
|
|
8
|
+
return `${yyyy}${MM}${dd}${hh}${mm}${ss}`;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/types/time.ts"],"names":[],"mappings":"AAiBA,MAAM,UAAU,eAAe,CAAC,IAAoB;IAClD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACrD,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACpD,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAC/C,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAChD,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAClD,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IAClD,OAAO,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"void-version.js","sourceRoot":"","sources":["../../../src/types/void-version.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,WAAW,GAAgB,UAAU,CAAC,WAAW,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Millis } from '../types/time.ts';
|
|
2
|
+
export declare function debounce<T extends unknown[]>(fn: (this: undefined, ...args: T) => void | Promise<void>, delay: Millis): {
|
|
3
|
+
cancel(): void;
|
|
4
|
+
(...args: T): void;
|
|
5
|
+
};
|
|
6
|
+
export declare function retry<T>(fn: () => Promise<T>, retries: number, delayMillis: Millis): Promise<T>;
|
|
7
|
+
/** schedule a new function call overwriting any previous. */
|
|
8
|
+
export declare function throttle<T extends unknown[]>(fn: (this: undefined, ...args: T) => void, period: Millis): {
|
|
9
|
+
cancel(): void;
|
|
10
|
+
(...args: T): void;
|
|
11
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function debounce(fn, delay) {
|
|
2
|
+
let timeout;
|
|
3
|
+
const cancel = () => clearTimeout(timeout);
|
|
4
|
+
return Object.assign((...args) => {
|
|
5
|
+
cancel();
|
|
6
|
+
timeout = setTimeout(() => fn.apply(undefined, args), delay);
|
|
7
|
+
}, { cancel });
|
|
8
|
+
}
|
|
9
|
+
// to-do: cancel.
|
|
10
|
+
export async function retry(fn, retries, delayMillis) {
|
|
11
|
+
for (let i = 0;; i++)
|
|
12
|
+
try {
|
|
13
|
+
return await fn();
|
|
14
|
+
}
|
|
15
|
+
catch (err) {
|
|
16
|
+
if (i >= retries)
|
|
17
|
+
throw err;
|
|
18
|
+
await new Promise(fulfil => setTimeout(fulfil, delayMillis));
|
|
19
|
+
delayMillis = (delayMillis * 2);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/** schedule a new function call overwriting any previous. */
|
|
23
|
+
export function throttle(fn, period) {
|
|
24
|
+
let exec = 0;
|
|
25
|
+
let timeout;
|
|
26
|
+
const cancel = () => clearTimeout(timeout);
|
|
27
|
+
return Object.assign((...args) => {
|
|
28
|
+
cancel();
|
|
29
|
+
const delay = Math.max(0, period - (performance.now() - exec));
|
|
30
|
+
timeout = setTimeout(() => {
|
|
31
|
+
exec = performance.now();
|
|
32
|
+
fn.apply(undefined, args);
|
|
33
|
+
}, delay);
|
|
34
|
+
}, { cancel });
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=async-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-util.js","sourceRoot":"","sources":["../../../src/utils/async-util.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CACtB,EAAyD,EACzD,KAAa;IAEb,IAAI,OAA2B,CAAA;IAC/B,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAC1C,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,GAAG,IAAO,EAAE,EAAE;QACb,MAAM,EAAE,CAAA;QACR,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAA;IAC9D,CAAC,EACD,EAAC,MAAM,EAAC,CACT,CAAA;AACH,CAAC;AAED,iBAAiB;AACjB,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,EAAoB,EACpB,OAAe,EACf,WAAmB;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAI,CAAC,EAAE;QACnB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAA;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,OAAO;gBAAE,MAAM,GAAG,CAAA;YAC3B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;YAC5D,WAAW,GAAG,CAAC,WAAW,GAAG,CAAC,CAAW,CAAA;QAC3C,CAAC;AACL,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,QAAQ,CACtB,EAAyC,EACzC,MAAc;IAEd,IAAI,IAAI,GAAW,CAAW,CAAA;IAC9B,IAAI,OAA2B,CAAA;IAC/B,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAC1C,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,GAAG,IAAO,EAAE,EAAE;QACb,MAAM,EAAE,CAAA;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;QAC9D,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACxB,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;YACxB,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAC3B,CAAC,EAAE,KAAK,CAAC,CAAA;IACX,CAAC,EACD,EAAC,MAAM,EAAC,CACT,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function downloadScreenshot(canvas: HTMLCanvasElement, name: string): Promise<void>;
|
|
2
|
+
export declare function initCanvas(canvas: HTMLCanvasElement | undefined, mode: 'Int' | 'Fraction'): HTMLCanvasElement;
|
|
3
|
+
export declare function requestFullscreen(canvas: HTMLCanvasElement): Promise<boolean>;
|
|
4
|
+
/** draws a canvas to a blob URI. */
|
|
5
|
+
export declare function screenshot(canvas: HTMLCanvasElement): Promise<Disposable & {
|
|
6
|
+
uri: string;
|
|
7
|
+
}>;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
53
|
+
import { dateToTimestamp } from "../types/time.js";
|
|
54
|
+
import { download } from "./dom-util.js";
|
|
55
|
+
export async function downloadScreenshot(canvas, name) {
|
|
56
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
57
|
+
try {
|
|
58
|
+
const img = __addDisposableResource(env_1, await screenshot(canvas), false);
|
|
59
|
+
download(img.uri, `${name}-screenshot-${dateToTimestamp(new Date())}.png`);
|
|
60
|
+
}
|
|
61
|
+
catch (e_1) {
|
|
62
|
+
env_1.error = e_1;
|
|
63
|
+
env_1.hasError = true;
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
__disposeResources(env_1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export function initCanvas(canvas, mode) {
|
|
70
|
+
canvas ??= document.createElement('canvas');
|
|
71
|
+
canvas.width = 0; // guarantee Renderer.#resize().
|
|
72
|
+
canvas.style.cursor = 'none';
|
|
73
|
+
canvas.style.display = 'block'; // no line height spacing.
|
|
74
|
+
canvas.style.outline = 'none'; // disable focus outline.
|
|
75
|
+
canvas.style.cursor = 'none';
|
|
76
|
+
if (mode === 'Int')
|
|
77
|
+
canvas.style.imageRendering = 'pixelated'; // to-do: why doesn't cam mode set this?
|
|
78
|
+
// update on each pointermove *touch* Event like *mouse* Events.
|
|
79
|
+
canvas.style.touchAction = 'none';
|
|
80
|
+
canvas.tabIndex = 0;
|
|
81
|
+
canvas.focus();
|
|
82
|
+
if (!canvas.parentNode)
|
|
83
|
+
document.body.append(canvas);
|
|
84
|
+
return canvas;
|
|
85
|
+
}
|
|
86
|
+
export async function requestFullscreen(canvas) {
|
|
87
|
+
if (!document.fullscreenEnabled)
|
|
88
|
+
return false;
|
|
89
|
+
if (document.fullscreenElement !== canvas)
|
|
90
|
+
try {
|
|
91
|
+
await canvas.requestFullscreen({ navigationUI: 'hide' });
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
if (!document.pointerLockElement) {
|
|
97
|
+
try {
|
|
98
|
+
await canvas.requestPointerLock({ unadjustedMovement: true });
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
if (err instanceof Error && err.name === 'NotSupportedError')
|
|
102
|
+
try {
|
|
103
|
+
await canvas.requestPointerLock();
|
|
104
|
+
}
|
|
105
|
+
catch { }
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
/** draws a canvas to a blob URI. */
|
|
111
|
+
export function screenshot(canvas) {
|
|
112
|
+
return new Promise((fulfil, reject) => {
|
|
113
|
+
canvas.toBlob(blob => {
|
|
114
|
+
if (blob) {
|
|
115
|
+
const img = {
|
|
116
|
+
[Symbol.dispose]() {
|
|
117
|
+
URL.revokeObjectURL(this.uri);
|
|
118
|
+
},
|
|
119
|
+
uri: URL.createObjectURL(blob)
|
|
120
|
+
};
|
|
121
|
+
fulfil(img);
|
|
122
|
+
}
|
|
123
|
+
else
|
|
124
|
+
reject(Error('no blob'));
|
|
125
|
+
}, 'image/png');
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=canvas-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-util.js","sourceRoot":"","sources":["../../../src/utils/canvas-util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function rgbaHex(rgba: number): `#${string}`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-util.js","sourceRoot":"","sources":["../../../src/utils/color-util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AACjD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* proxy for debug CSV query param with case-insensitive keys. when a key
|
|
3
|
+
* exists, the value is as specified or `'true'` if no value. void values
|
|
4
|
+
* default to `'true'` when the `debug` param is empty or `'void'` is set (eg,
|
|
5
|
+
* `localhost:1234?debug` or `localhost:1234?debug=void,foo=bar`). all values
|
|
6
|
+
* default to true when `'all'` is set. extend interface for additional types.
|
|
7
|
+
* doesn't handle multiple values like `localhost:1234?debug=a=1,b=2&debug=b=3`.
|
|
8
|
+
*/
|
|
9
|
+
export interface Debug {
|
|
10
|
+
cam?: string;
|
|
11
|
+
input?: string;
|
|
12
|
+
mem?: string;
|
|
13
|
+
render?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const debug: Readonly<Debug> | undefined;
|
|
16
|
+
/** @internal */
|
|
17
|
+
export declare function Debug(url: string | undefined): Debug | undefined;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const debug = Debug(globalThis.location?.href);
|
|
2
|
+
/** @internal */
|
|
3
|
+
export function Debug(url) {
|
|
4
|
+
if (!url)
|
|
5
|
+
return;
|
|
6
|
+
const csv = [...new URL(url).searchParams].find(([k]) => k.toLowerCase() === 'debug')?.[1];
|
|
7
|
+
if (csv == null)
|
|
8
|
+
return;
|
|
9
|
+
const map = Object.fromEntries(csv
|
|
10
|
+
.split(',') // split KV pairs.
|
|
11
|
+
.filter(Boolean) // drop empties.
|
|
12
|
+
.map(kv => kv.split('=')) // split each pair.
|
|
13
|
+
);
|
|
14
|
+
const target = {};
|
|
15
|
+
for (const k in map)
|
|
16
|
+
target[k.toLowerCase()] = map[k] || 'true';
|
|
17
|
+
const voidKeyset = {
|
|
18
|
+
cam: undefined,
|
|
19
|
+
input: undefined,
|
|
20
|
+
mem: undefined,
|
|
21
|
+
render: undefined
|
|
22
|
+
};
|
|
23
|
+
return new Proxy(target, {
|
|
24
|
+
get(target, k) {
|
|
25
|
+
if (typeof k !== 'string')
|
|
26
|
+
return target[k];
|
|
27
|
+
k = k.toLowerCase();
|
|
28
|
+
return !csv || 'all' in map || (k in voidKeyset && 'void' in map)
|
|
29
|
+
? target[k] || 'true'
|
|
30
|
+
: target[k];
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../../src/utils/debug.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,KAAK,GAAgC,KAAK,CACrD,UAAU,CAAC,QAAQ,EAAE,IAAI,CAC1B,CAAA;AAED,gBAAgB;AAChB,MAAM,UAAU,KAAK,CAAC,GAAuB;IAC3C,IAAI,CAAC,GAAG;QAAE,OAAM;IAChB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAC7C,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CACrC,EAAE,CAAC,CAAC,CAAC,CAAA;IACN,IAAI,GAAG,IAAI,IAAI;QAAE,OAAM;IACvB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAC5B,GAAG;SACA,KAAK,CAAC,GAAG,CAAC,CAAC,kBAAkB;SAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,gBAAgB;SAChC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB;KAChD,CAAA;IAED,MAAM,MAAM,GAA0B,EAAE,CAAA;IACxC,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,CAAA;IAE/D,MAAM,UAAU,GAAsC;QACpD,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,SAAS;KAClB,CAAA;IAED,OAAO,IAAI,KAAK,CAAwB,MAAM,EAAE;QAC9C,GAAG,CAAC,MAAM,EAAE,CAAC;YACX,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,CAAsB,CAAC,CAAA;YAChE,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;YACnB,OAAO,CAAC,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,UAAU,IAAI,MAAM,IAAI,GAAG,CAAC;gBAC/D,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM;gBACrB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { rgbaHex } from "./color-util.js";
|
|
2
|
+
export function initMetaViewport() {
|
|
3
|
+
if (document.querySelector('meta[name="viewport"]'))
|
|
4
|
+
return;
|
|
5
|
+
const meta = document.createElement('meta');
|
|
6
|
+
meta.name = 'viewport';
|
|
7
|
+
// don't wait for double-tap scaling on mobile.
|
|
8
|
+
meta.content =
|
|
9
|
+
'width=device-width, maximum-scale=1, minimum-scale=1, user-scalable=no';
|
|
10
|
+
document.head.appendChild(meta);
|
|
11
|
+
}
|
|
12
|
+
export function initBody(canvas, rgba) {
|
|
13
|
+
if (canvas.parentNode !== document.body)
|
|
14
|
+
return;
|
|
15
|
+
document.body.style.margin = '0';
|
|
16
|
+
// fill the screen except for UI chrome.
|
|
17
|
+
document.body.style.width = '100dvw';
|
|
18
|
+
document.body.style.height = '100dvh';
|
|
19
|
+
document.body.style.overflow = 'hidden';
|
|
20
|
+
document.body.style.background = rgbaHex(rgba);
|
|
21
|
+
}
|
|
22
|
+
export function download(uri, filename) {
|
|
23
|
+
const a = document.createElement('a');
|
|
24
|
+
a.href = uri;
|
|
25
|
+
a.download = filename;
|
|
26
|
+
a.click();
|
|
27
|
+
a.remove();
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=dom-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dom-util.js","sourceRoot":"","sources":["../../../src/utils/dom-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAA;AAEvC,MAAM,UAAU,gBAAgB;IAC9B,IAAI,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC;QAAE,OAAM;IAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;IACtB,+CAA+C;IAC/C,IAAI,CAAC,OAAO;QACV,wEAAwE,CAAA;IAC1E,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,MAAmC,EACnC,IAAY;IAEZ,IAAI,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI;QAAE,OAAM;IAC/C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAA;IAChC,wCAAwC;IACxC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAA;IACpC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAA;IACrC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACvC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,QAAgB;IACpD,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAA;IACZ,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACrB,CAAC,CAAC,KAAK,EAAE,CAAA;IACT,CAAC,CAAC,MAAM,EAAE,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export async function fetchAudio(url) {
|
|
2
|
+
const rsp = await fetch(url, { headers: { accept: 'audio/mpeg' } });
|
|
3
|
+
if (!rsp.ok)
|
|
4
|
+
throw Error(`fetch error ${rsp.status}: ${rsp.statusText} for ${url}`);
|
|
5
|
+
const type = rsp.headers.get('Content-Type');
|
|
6
|
+
// to-do: ogg
|
|
7
|
+
if (!type?.startsWith('audio/mpeg'))
|
|
8
|
+
throw Error(`bad fetch response type ${type} for ${url}`);
|
|
9
|
+
return await rsp.arrayBuffer();
|
|
10
|
+
}
|
|
11
|
+
export function fetchImage(url) {
|
|
12
|
+
const img = new Image();
|
|
13
|
+
const promise = loadImage(img);
|
|
14
|
+
img.src = url;
|
|
15
|
+
return promise;
|
|
16
|
+
}
|
|
17
|
+
export async function loadImage(img) {
|
|
18
|
+
const promise = new Promise((fulfil, reject) => {
|
|
19
|
+
img.onload = () => fulfil(img);
|
|
20
|
+
img.onerror = () => reject(Error(`image load error for ${img.src}`));
|
|
21
|
+
});
|
|
22
|
+
return img.complete ? img : await promise;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=fetch-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-util.js","sourceRoot":"","sources":["../../../src/utils/fetch-util.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAC,OAAO,EAAE,EAAC,MAAM,EAAE,YAAY,EAAC,EAAC,CAAC,CAAA;IAC/D,IAAI,CAAC,GAAG,CAAC,EAAE;QACT,MAAM,KAAK,CAAC,eAAe,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,UAAU,QAAQ,GAAG,EAAE,CAAC,CAAA;IACxE,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAC5C,aAAa;IACb,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;QACjC,MAAM,KAAK,CAAC,2BAA2B,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAA;IAC3D,OAAO,MAAM,GAAG,CAAC,WAAW,EAAE,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAA;IACvB,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IAC9B,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IACb,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAqB;IAErB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC/D,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC9B,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACtE,CAAC,CAAC,CAAA;IACF,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,OAAO,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function clamp(val: number, min: number, max: number): number;
|
|
2
|
+
export declare function closeTo(lhs: number, rhs: number, tolerance: number): boolean;
|
|
3
|
+
/** ratio is [0, 1] to return [start, end]. */
|
|
4
|
+
export declare function lerp(start: number, end: number, ratio: number): number;
|
|
5
|
+
/** returns positive modulo. */
|
|
6
|
+
export declare function mod(dividend: number, divisor: number): number;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// to-do: port tests.
|
|
2
|
+
export function clamp(val, min, max) {
|
|
3
|
+
return Math.max(min, Math.min(max, val));
|
|
4
|
+
}
|
|
5
|
+
export function closeTo(lhs, rhs, tolerance) {
|
|
6
|
+
return Math.abs(lhs - rhs) <= tolerance;
|
|
7
|
+
}
|
|
8
|
+
// to-do: port tests.
|
|
9
|
+
/** ratio is [0, 1] to return [start, end]. */
|
|
10
|
+
export function lerp(start, end, ratio) {
|
|
11
|
+
return start + (end - start) * ratio;
|
|
12
|
+
}
|
|
13
|
+
// to-do: test.
|
|
14
|
+
/** returns positive modulo. */
|
|
15
|
+
export function mod(dividend, divisor) {
|
|
16
|
+
return ((dividend % divisor) + divisor) % divisor;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=math.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../../src/utils/math.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,MAAM,UAAU,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;IACzD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,GAAW,EAAE,SAAiB;IACjE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,CAAA;AACzC,CAAC;AAED,qBAAqB;AACrB,8CAA8C;AAC9C,MAAM,UAAU,IAAI,CAAC,KAAa,EAAE,GAAW,EAAE,KAAa;IAC5D,OAAO,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;AACtC,CAAC;AAED,eAAe;AACf,+BAA+B;AAC/B,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,OAAe;IACnD,OAAO,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAA;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function vibrate(...pattern: number[]): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vibrate.js","sourceRoot":"","sources":["../../../src/utils/vibrate.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,GAAG,OAAiB;IAC1C,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Zoo } from './ents/zoo.ts';
|
|
2
|
+
import type { Atlas, AtlasJSON, TagFormat } from './graphics/atlas.ts';
|
|
3
|
+
import { Cam } from './graphics/cam.ts';
|
|
4
|
+
import { Renderer } from './graphics/renderer.ts';
|
|
5
|
+
import { Sprite } from './graphics/sprite.ts';
|
|
6
|
+
import { type DefaultButton, Input } from './input/input.ts';
|
|
7
|
+
import { Looper } from './looper.ts';
|
|
8
|
+
import { Pool, type PoolOpts } from './mem/pool.ts';
|
|
9
|
+
import type { WH } from './types/geo.ts';
|
|
10
|
+
import type { Millis } from './types/time.ts';
|
|
11
|
+
export type VoidOpts<out Tag extends TagFormat> = {
|
|
12
|
+
preloadAtlas?: {
|
|
13
|
+
image: HTMLImageElement;
|
|
14
|
+
json: AtlasJSON;
|
|
15
|
+
} | undefined;
|
|
16
|
+
backgroundRGBA?: number;
|
|
17
|
+
canvas?: HTMLCanvasElement | undefined;
|
|
18
|
+
minWH?: WH | undefined;
|
|
19
|
+
input?: 'Custom' | 'Default' | undefined;
|
|
20
|
+
mode?: 'Int' | 'Fraction' | undefined;
|
|
21
|
+
sprites?: Partial<Omit<PoolOpts<Sprite<Tag>>, 'alloc' | 'allocBytes'>> | undefined;
|
|
22
|
+
};
|
|
23
|
+
export declare class Void<out Tag extends TagFormat, Button extends string = DefaultButton> {
|
|
24
|
+
#private;
|
|
25
|
+
readonly cam: Cam;
|
|
26
|
+
readonly canvas: HTMLCanvasElement;
|
|
27
|
+
readonly framer: Looper;
|
|
28
|
+
readonly input: Input<Button>;
|
|
29
|
+
readonly preload: Atlas;
|
|
30
|
+
readonly renderer: Renderer;
|
|
31
|
+
readonly sprites: Pool<Sprite<Tag>>;
|
|
32
|
+
readonly zoo: Zoo<Tag>;
|
|
33
|
+
constructor(opts: Readonly<VoidOpts<Tag>>);
|
|
34
|
+
onAllocSprite(pool: Pool<Sprite<TagFormat>>): Sprite<Tag>;
|
|
35
|
+
onEvent(): void;
|
|
36
|
+
/** update input, update canvas, update cam, update world, then render. */
|
|
37
|
+
onFrame(millis: Millis): void;
|
|
38
|
+
onLoop(millis: Millis): void;
|
|
39
|
+
onResize(): void;
|
|
40
|
+
register(op: 'add' | 'remove'): Promise<void>;
|
|
41
|
+
requestFrame(): void;
|
|
42
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
43
|
+
}
|