@oidoid/void 0.1.0-4 → 0.1.0-7
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/favicon16.webp +0 -0
- package/dist/public/favicon/favicon192.png +0 -0
- package/dist/public/favicon/favicon192.webp +0 -0
- package/dist/public/favicon/favicon32.png +0 -0
- package/dist/public/favicon/favicon32.webp +0 -0
- package/dist/public/favicon/favicon48.png +0 -0
- package/dist/public/favicon/favicon48.webp +0 -0
- package/dist/public/favicon/favicon64.png +0 -0
- package/dist/public/favicon/favicon64.webp +0 -0
- package/dist/public/index.js +98 -0
- package/dist/public/index.js.map +7 -0
- package/dist/public/preload-atlas.png +0 -0
- package/dist/public/preload-atlas.webp +0 -0
- package/dist/public/void-v0.1.0-6+20251020.7cdf98d.html +111 -0
- package/dist/public/void-v0.1.0-6+20251020.e4e9eef.html +111 -0
- package/dist/public/void-v0.1.0-7+20251021.7cdf98d.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 +41 -0
- package/dist/src/demo/assets/preload-atlas.json +193 -0
- package/dist/src/demo/ents/clock-ent.d.ts +11 -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 +12 -0
- package/dist/src/demo/ents/render-toggle-ent.js +41 -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 +20 -0
- package/dist/src/demo/ents/work-counter-ent.js.map +1 -0
- package/dist/src/demo/game.d.ts +12 -0
- package/dist/src/demo/game.js +135 -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 +39 -0
- package/dist/src/ents/button-ent.js +128 -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 +63 -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 +17 -0
- package/dist/src/ents/zoo.js +45 -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 +220 -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 +36 -0
- package/dist/src/graphics/renderer.js +180 -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 +17 -0
- package/dist/src/looper.js +51 -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/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 +7 -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 +19 -0
- package/dist/src/utils/debug.js +35 -0
- package/dist/src/utils/debug.js.map +1 -0
- package/dist/src/utils/delay-interval.d.ts +7 -0
- package/dist/src/utils/delay-interval.js +29 -0
- package/dist/src/utils/delay-interval.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 +48 -0
- package/dist/src/void.js +102 -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 +22 -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 +90 -0
- package/dist/tools/bundle/html-plugin.js.map +1 -0
- package/dist/tools/tsconfig-base.json +48 -0
- package/dist/tools/tsconfig.json +19 -0
- package/dist/tools/types/config.d.ts +27 -0
- package/dist/tools/types/config.js +31 -0
- package/dist/tools/types/config.js.map +1 -0
- package/dist/tools/types/package-json.d.ts +4 -0
- package/dist/tools/types/package-json.js +2 -0
- package/dist/tools/types/package-json.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 +15 -0
- package/dist/tools/void.js +31 -0
- package/dist/tools/void.js.map +1 -0
- package/package.json +31 -41
- 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 +51 -0
- package/tools/bundle/bundle.ts +64 -0
- package/tools/bundle/html-plugin.ts +135 -0
- package/tools/types/config.ts +65 -0
- package/tools/types/package-json.ts +4 -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 +55 -0
- package/dist/atlas/anim.d.ts +0 -30
- package/dist/atlas/anim.js +0 -16
- package/dist/atlas/anim.js.map +0 -1
- 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 -4
- 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 -184
- 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 -289
- package/src/atlas/anim.js +0 -17
- package/tools/atlas-parser.js +0 -120
- package/tools/void.js +0 -143
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { memProp5x6 } from 'mem-font';
|
|
2
|
+
import { Layer } from "../graphics/layer.js";
|
|
3
|
+
import { fontCharToTag } from "../text/font.js";
|
|
4
|
+
import { layoutText } from "../text/text-layout.js";
|
|
5
|
+
import { xyEq } from "../types/geo.js";
|
|
6
|
+
export class TextEnt {
|
|
7
|
+
#maxW = Infinity;
|
|
8
|
+
#layout = 'Outdated';
|
|
9
|
+
#z = Layer.UIA;
|
|
10
|
+
#scale = 1;
|
|
11
|
+
#sprites = [];
|
|
12
|
+
#str = '';
|
|
13
|
+
#wh = { w: 0, h: 0 };
|
|
14
|
+
#xy = { x: 0, y: 0 };
|
|
15
|
+
free(v) {
|
|
16
|
+
v.sprites.free(...this.#sprites);
|
|
17
|
+
}
|
|
18
|
+
layout(v) {
|
|
19
|
+
if (this.#layout !== 'Outdated')
|
|
20
|
+
return false;
|
|
21
|
+
let len = 0;
|
|
22
|
+
const layout = layoutText({
|
|
23
|
+
font: memProp5x6,
|
|
24
|
+
maxW: this.#maxW,
|
|
25
|
+
scale: this.#scale,
|
|
26
|
+
start: this.#xy,
|
|
27
|
+
str: this.#str
|
|
28
|
+
});
|
|
29
|
+
this.#wh = { w: layout.wh.w, h: layout.wh.h };
|
|
30
|
+
for (const [i, char] of layout.chars.entries()) {
|
|
31
|
+
if (char == null)
|
|
32
|
+
continue;
|
|
33
|
+
const sprite = (this.#sprites[len] ??= v.sprites.alloc());
|
|
34
|
+
sprite.x = char.x;
|
|
35
|
+
sprite.y = char.y;
|
|
36
|
+
sprite.tag = fontCharToTag(memProp5x6, this.#str[i]);
|
|
37
|
+
sprite.stretch = true;
|
|
38
|
+
sprite.w *= this.#scale;
|
|
39
|
+
sprite.h *= this.#scale;
|
|
40
|
+
sprite.z = this.#z;
|
|
41
|
+
len++;
|
|
42
|
+
}
|
|
43
|
+
while (this.#sprites.length > len)
|
|
44
|
+
v.sprites.free(this.#sprites.pop());
|
|
45
|
+
this.#layout = 'Updated';
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
get maxW() {
|
|
49
|
+
return this.#maxW;
|
|
50
|
+
}
|
|
51
|
+
set maxW(w) {
|
|
52
|
+
if (w === this.#maxW)
|
|
53
|
+
return;
|
|
54
|
+
this.#maxW = w;
|
|
55
|
+
this.#layout = 'Outdated';
|
|
56
|
+
}
|
|
57
|
+
get scale() {
|
|
58
|
+
return this.#scale;
|
|
59
|
+
}
|
|
60
|
+
set scale(scale) {
|
|
61
|
+
if (scale === this.#scale)
|
|
62
|
+
return;
|
|
63
|
+
this.#scale = scale;
|
|
64
|
+
this.#layout = 'Outdated';
|
|
65
|
+
}
|
|
66
|
+
get text() {
|
|
67
|
+
return this.#str;
|
|
68
|
+
}
|
|
69
|
+
set text(str) {
|
|
70
|
+
if (str === this.#str)
|
|
71
|
+
return;
|
|
72
|
+
this.#str = str;
|
|
73
|
+
this.#layout = 'Outdated';
|
|
74
|
+
}
|
|
75
|
+
update(v) {
|
|
76
|
+
if (this.#layout === 'Rendered')
|
|
77
|
+
return;
|
|
78
|
+
if (this.#layout === 'Outdated')
|
|
79
|
+
this.layout(v);
|
|
80
|
+
this.#layout = 'Rendered';
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
get scaledLeading() {
|
|
84
|
+
return memProp5x6.leading * this.#scale;
|
|
85
|
+
}
|
|
86
|
+
get wh() {
|
|
87
|
+
return this.#wh;
|
|
88
|
+
}
|
|
89
|
+
get xy() {
|
|
90
|
+
return this.#xy;
|
|
91
|
+
}
|
|
92
|
+
set xy(xy) {
|
|
93
|
+
if (xyEq(xy, this.#xy))
|
|
94
|
+
return;
|
|
95
|
+
this.#xy.x = xy.x;
|
|
96
|
+
this.#xy.y = xy.y;
|
|
97
|
+
this.#layout = 'Outdated';
|
|
98
|
+
}
|
|
99
|
+
get z() {
|
|
100
|
+
return this.#z;
|
|
101
|
+
}
|
|
102
|
+
set z(layer) {
|
|
103
|
+
if (layer === this.#z)
|
|
104
|
+
return;
|
|
105
|
+
this.#z = layer;
|
|
106
|
+
this.#layout = 'Outdated';
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=text-ent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-ent.js","sourceRoot":"","sources":["../../../src/ents/text-ent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TagFormat } from '../graphics/atlas.ts';
|
|
2
|
+
import type { Void } from '../void.ts';
|
|
3
|
+
import { CursorEnt } from './cursor-ent.ts';
|
|
4
|
+
import type { Ent } from './ent.ts';
|
|
5
|
+
/**
|
|
6
|
+
* ents are updated in insertion order. composed ents are updated by their
|
|
7
|
+
* owning ents.
|
|
8
|
+
*/
|
|
9
|
+
export declare class Zoo<out Tag extends TagFormat> {
|
|
10
|
+
#private;
|
|
11
|
+
add(...ents: readonly Ent<Tag>[]): void;
|
|
12
|
+
clear(): void;
|
|
13
|
+
get cursor(): CursorEnt<Tag> | undefined;
|
|
14
|
+
get invalid(): boolean;
|
|
15
|
+
remove(...ents: readonly Readonly<Ent<Tag>>[]): void;
|
|
16
|
+
update(v: Void<Tag, string>): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { debug } from "../utils/debug.js";
|
|
2
|
+
import { CursorEnt } from "./cursor-ent.js";
|
|
3
|
+
/**
|
|
4
|
+
* ents are updated in insertion order. composed ents are updated by their
|
|
5
|
+
* owning ents.
|
|
6
|
+
*/
|
|
7
|
+
export class Zoo {
|
|
8
|
+
#cursor;
|
|
9
|
+
#ents = new Set();
|
|
10
|
+
#invalid = false;
|
|
11
|
+
add(...ents) {
|
|
12
|
+
for (const ent of ents) {
|
|
13
|
+
this.#ents.add(ent);
|
|
14
|
+
if (ent instanceof CursorEnt)
|
|
15
|
+
this.#cursor = ent;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
clear() {
|
|
19
|
+
this.#cursor = undefined;
|
|
20
|
+
this.#ents.clear();
|
|
21
|
+
}
|
|
22
|
+
get cursor() {
|
|
23
|
+
return this.#cursor;
|
|
24
|
+
}
|
|
25
|
+
get invalid() {
|
|
26
|
+
return this.#invalid;
|
|
27
|
+
}
|
|
28
|
+
remove(...ents) {
|
|
29
|
+
for (const ent of ents) {
|
|
30
|
+
this.#ents.delete(ent);
|
|
31
|
+
if (ent === this.#cursor)
|
|
32
|
+
this.#cursor = undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
update(v) {
|
|
36
|
+
this.#invalid = false;
|
|
37
|
+
for (const ent of this.#ents)
|
|
38
|
+
if (ent.update?.(v)) {
|
|
39
|
+
if (!this.#invalid && debug?.invalid)
|
|
40
|
+
console.debug('ent update invalid', ent);
|
|
41
|
+
this.#invalid = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=zoo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zoo.js","sourceRoot":"","sources":["../../../src/ents/zoo.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAA;AAEvC,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAA;AAGzC;;;GAGG;AACH,MAAM,OAAO,GAAG;IACd,OAAO,CAA4B;IAC1B,KAAK,GAAkB,IAAI,GAAG,EAAE,CAAA;IACzC,QAAQ,GAAY,KAAK,CAAA;IAEzB,GAAG,CAAC,GAAG,IAAyB;QAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACnB,IAAI,GAAG,YAAY,SAAS;gBAAE,IAAI,CAAC,OAAO,GAAG,GAAG,CAAA;QAClD,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,MAAM,CAAC,GAAG,IAAmC;QAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACtB,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QACpD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,CAAoB;QACzB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QACrB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK;YAC1B,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,EAAE,OAAO;oBAClC,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;gBAC1C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;YACtB,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { animCels } from "./atlas.js";
|
|
2
|
+
export function parseAtlas(json) {
|
|
3
|
+
return {
|
|
4
|
+
anim: json.anim,
|
|
5
|
+
celXYWH: parseCelXYWH(json),
|
|
6
|
+
tags: Object.keys(json.anim)
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
function parseCelXYWH(json) {
|
|
10
|
+
const cels = [];
|
|
11
|
+
let i = 0;
|
|
12
|
+
for (const anim of Object.values(json.anim)) {
|
|
13
|
+
cels.push(...parseXYWH(anim, json.celXY, i));
|
|
14
|
+
i += anim.cels * 2;
|
|
15
|
+
}
|
|
16
|
+
return cels;
|
|
17
|
+
}
|
|
18
|
+
/** @internal */
|
|
19
|
+
export function parseXYWH(anim, celXY, i) {
|
|
20
|
+
const xywh = [];
|
|
21
|
+
for (let ii = 0; ii < animCels; ii++) {
|
|
22
|
+
const iii = i + 2 * (ii % anim.cels);
|
|
23
|
+
xywh.push(celXY[iii], celXY[iii + 1], anim.w, anim.h);
|
|
24
|
+
}
|
|
25
|
+
return xywh;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=atlas-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atlas-parser.js","sourceRoot":"","sources":["../../../src/graphics/atlas-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,QAAQ,EAAC,MAAM,YAAY,CAAA;AAE1E,MAAM,UAAU,UAAU,CAAC,IAAyB;IAClD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;KAC7B,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAyB;IAC7C,MAAM,IAAI,GAAG,EAAE,CAAA;IACf,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5C,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;IACpB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,SAAS,CACvB,IAAoB,EACpB,KAAwB,EACxB,CAAS;IAET,MAAM,IAAI,GAAG,EAAE,CAAA;IACf,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Box } from '../types/geo.ts';
|
|
2
|
+
import type { Millis } from '../types/time.ts';
|
|
3
|
+
/** every animation is padded to 16 cels as needed by repeating the sequence. */
|
|
4
|
+
export declare const animCels: number;
|
|
5
|
+
/** max animation loop duration. */
|
|
6
|
+
export declare const animMillis: Millis;
|
|
7
|
+
/** 62.5 millis. */
|
|
8
|
+
export declare const celMillis: Millis;
|
|
9
|
+
export type Atlas = {
|
|
10
|
+
anim: {
|
|
11
|
+
[tag: string]: Anim;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* cell source XYWH by `Anim.id` and `Anim.cel`. every animation is padded to
|
|
15
|
+
* 16 cels (`maxAnimCels`) as needed by repeating the sequence.
|
|
16
|
+
*/
|
|
17
|
+
celXYWH: number[];
|
|
18
|
+
/** tag by `Anim.id`. */
|
|
19
|
+
tags: string[];
|
|
20
|
+
};
|
|
21
|
+
export type AtlasJSON = {
|
|
22
|
+
anim: {
|
|
23
|
+
[tag: string]: Anim;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* cel source XY by `Anim.id` and `Anim.cel` for one cycle. truncated to
|
|
27
|
+
* `animCels`.
|
|
28
|
+
*/
|
|
29
|
+
celXY: number[];
|
|
30
|
+
};
|
|
31
|
+
export type Anim = {
|
|
32
|
+
/**
|
|
33
|
+
* number of cels in a full animation cycle including cels extended for
|
|
34
|
+
* duration and the second half of pingpongs.
|
|
35
|
+
*/
|
|
36
|
+
cels: number;
|
|
37
|
+
/** outgoing collision rectangle (red / blue). */
|
|
38
|
+
hitbox?: Box | undefined;
|
|
39
|
+
/** incoming collision rectangle (green / blue). */
|
|
40
|
+
hurtbox?: Box | undefined;
|
|
41
|
+
/** atlas tag index. */
|
|
42
|
+
id: number;
|
|
43
|
+
/** clipbox / source width. */
|
|
44
|
+
w: number;
|
|
45
|
+
/** clipbox / source height. */
|
|
46
|
+
h: number;
|
|
47
|
+
};
|
|
48
|
+
/** `--tagname-format={filestem}--{animation}`. */
|
|
49
|
+
export type TagFormat = `${string}--${string}`;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** every animation is padded to 16 cels as needed by repeating the sequence. */
|
|
2
|
+
export const animCels = 16;
|
|
3
|
+
/** max animation loop duration. */
|
|
4
|
+
export const animMillis = 1000;
|
|
5
|
+
/** 62.5 millis. */
|
|
6
|
+
export const celMillis = (animMillis / animCels);
|
|
7
|
+
//# sourceMappingURL=atlas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atlas.js","sourceRoot":"","sources":["../../../src/graphics/atlas.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,MAAM,CAAC,MAAM,QAAQ,GAAW,EAAE,CAAA;AAClC,mCAAmC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAW,IAAc,CAAA;AAChD,mBAAmB;AACnB,MAAM,CAAC,MAAM,SAAS,GAAW,CAAC,UAAU,GAAG,QAAQ,CAAW,CAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type Box, type CompassDir, type WH, type XY } from '../types/geo.ts';
|
|
2
|
+
import { Layer } from './layer.ts';
|
|
3
|
+
export type LevelClientLocalXY = {
|
|
4
|
+
/** position relative canvas top-left (in DPI scale). */
|
|
5
|
+
client: XY;
|
|
6
|
+
/**
|
|
7
|
+
* position relative canvas top-left in level scale (like level xy but no cam
|
|
8
|
+
* offset) within cam.
|
|
9
|
+
*/
|
|
10
|
+
local: XY;
|
|
11
|
+
/** level x-coord within cam. */
|
|
12
|
+
x: number;
|
|
13
|
+
/** level y-coord within cam. */
|
|
14
|
+
y: number;
|
|
15
|
+
};
|
|
16
|
+
type Canvas = {
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
style: {
|
|
20
|
+
width: string;
|
|
21
|
+
height: string;
|
|
22
|
+
};
|
|
23
|
+
parentElement: {
|
|
24
|
+
clientWidth: number;
|
|
25
|
+
clientHeight: number;
|
|
26
|
+
} | null;
|
|
27
|
+
};
|
|
28
|
+
/** given a min WH and scale, size the camera to the max WH. */
|
|
29
|
+
export declare class Cam {
|
|
30
|
+
#private;
|
|
31
|
+
center(xy: Readonly<XY>): void;
|
|
32
|
+
/** position in fractional level coordinates. */
|
|
33
|
+
clientToXY(client: Readonly<XY>): XY;
|
|
34
|
+
/**
|
|
35
|
+
* position relative canvas top-left in level scale (like level xy but no cam
|
|
36
|
+
* offset). often used for UI that is fixed within the cam.
|
|
37
|
+
*/
|
|
38
|
+
clientToXYLocal(client: Readonly<XY>): XY;
|
|
39
|
+
follow(wh: Readonly<WH>, z: Layer, pivot: CompassDir, opts?: {
|
|
40
|
+
readonly fill?: 'X' | 'Y' | 'XY' | undefined;
|
|
41
|
+
readonly margin?: Partial<Readonly<WH>> | undefined;
|
|
42
|
+
readonly modulo?: Partial<Readonly<XY>> | undefined;
|
|
43
|
+
}): Box;
|
|
44
|
+
/** positive int in level px. */
|
|
45
|
+
get h(): number;
|
|
46
|
+
isVisible(box: Readonly<XY & Partial<WH>>): boolean;
|
|
47
|
+
/** true if cam moved or resized since last update. */
|
|
48
|
+
get invalid(): boolean;
|
|
49
|
+
/** positive int or fraction depending on mode. */
|
|
50
|
+
get minScale(): number;
|
|
51
|
+
set minScale(scale: number);
|
|
52
|
+
/**
|
|
53
|
+
* positive int or infinite min dimensions. set to
|
|
54
|
+
* `{w: Infinity, h: Infinity}` to always use min scale.
|
|
55
|
+
*/
|
|
56
|
+
get minWH(): Readonly<WH>;
|
|
57
|
+
set minWH(wh: Readonly<WH>);
|
|
58
|
+
get mode(): 'Int' | 'Fraction';
|
|
59
|
+
set mode(mode: 'Int' | 'Fraction');
|
|
60
|
+
get portrait(): boolean;
|
|
61
|
+
postupdate(): void;
|
|
62
|
+
/** positive int or fraction depending on mode. */
|
|
63
|
+
get scale(): number;
|
|
64
|
+
toString(): string;
|
|
65
|
+
/**
|
|
66
|
+
* call after input processing but before ent processing. ents that move the
|
|
67
|
+
* camera should be called immediately after update so that the invalid state
|
|
68
|
+
* can be considered.
|
|
69
|
+
*/
|
|
70
|
+
update(canvas: Canvas): void;
|
|
71
|
+
/** positive int in level px. */
|
|
72
|
+
get w(): number;
|
|
73
|
+
/**
|
|
74
|
+
* positive int dimensions in client px of canvas (often
|
|
75
|
+
* `canvas.parentElement.clientWidth/Height` since the canvas is resized)
|
|
76
|
+
* which is assumed to be max WH.
|
|
77
|
+
*/
|
|
78
|
+
get whClient(): Readonly<WH>;
|
|
79
|
+
/** fractional. */
|
|
80
|
+
get x(): number;
|
|
81
|
+
set x(x: number);
|
|
82
|
+
/** fractional. */
|
|
83
|
+
get y(): number;
|
|
84
|
+
set y(y: number);
|
|
85
|
+
/** nonnegative int or fraction depending on mode. */
|
|
86
|
+
get zoomOut(): number;
|
|
87
|
+
set zoomOut(out: number);
|
|
88
|
+
}
|
|
89
|
+
export {};
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { boxHits } from "../types/geo.js";
|
|
2
|
+
import { debug } from "../utils/debug.js";
|
|
3
|
+
import { Layer } from "./layer.js";
|
|
4
|
+
/** given a min WH and scale, size the camera to the max WH. */
|
|
5
|
+
export class Cam {
|
|
6
|
+
#devicePixelRatio = 0;
|
|
7
|
+
#h = 1;
|
|
8
|
+
#invalid = true;
|
|
9
|
+
#minScale = 1;
|
|
10
|
+
#minWH = { w: Infinity, h: Infinity };
|
|
11
|
+
#mode = 'Int';
|
|
12
|
+
#scale = 1;
|
|
13
|
+
#w = 1;
|
|
14
|
+
#whClient = { w: 1, h: 1 };
|
|
15
|
+
#x = 0;
|
|
16
|
+
#y = 0;
|
|
17
|
+
#zoomOut = 0;
|
|
18
|
+
center(xy) {
|
|
19
|
+
this.x = Math.floor(xy.x - this.w / 2);
|
|
20
|
+
this.y = Math.floor(xy.y - this.h / 2);
|
|
21
|
+
}
|
|
22
|
+
/** position in fractional level coordinates. */
|
|
23
|
+
clientToXY(client) {
|
|
24
|
+
const local = this.clientToXYLocal(client);
|
|
25
|
+
return { x: this.#x + local.x, y: this.#y + local.y };
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* position relative canvas top-left in level scale (like level xy but no cam
|
|
29
|
+
* offset). often used for UI that is fixed within the cam.
|
|
30
|
+
*/
|
|
31
|
+
clientToXYLocal(client) {
|
|
32
|
+
return {
|
|
33
|
+
x: (client.x / this.#whClient.w) * this.#w,
|
|
34
|
+
y: (client.y / this.#whClient.h) * this.#h
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
follow(wh, z, pivot, opts) {
|
|
38
|
+
const marginW = opts?.margin?.w ?? 0;
|
|
39
|
+
let x = z > Layer.UIG ? Math.trunc(this.x) : 0;
|
|
40
|
+
switch (pivot) {
|
|
41
|
+
case 'SW':
|
|
42
|
+
case 'W':
|
|
43
|
+
case 'NW':
|
|
44
|
+
x += marginW;
|
|
45
|
+
break;
|
|
46
|
+
case 'SE':
|
|
47
|
+
case 'E':
|
|
48
|
+
case 'NE':
|
|
49
|
+
x += this.w - (wh.w + marginW);
|
|
50
|
+
break;
|
|
51
|
+
case 'N':
|
|
52
|
+
case 'S':
|
|
53
|
+
case 'Origin':
|
|
54
|
+
x += Math.trunc(this.w / 2) - Math.trunc(wh.w / 2);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
x -= x % ((opts?.modulo?.x ?? x) || 1);
|
|
58
|
+
const marginH = opts?.margin?.h ?? 0;
|
|
59
|
+
let y = z > Layer.UIG ? Math.trunc(this.y) : 0;
|
|
60
|
+
switch (pivot) {
|
|
61
|
+
case 'N':
|
|
62
|
+
case 'NE':
|
|
63
|
+
case 'NW':
|
|
64
|
+
y += marginH;
|
|
65
|
+
break;
|
|
66
|
+
case 'SE':
|
|
67
|
+
case 'S':
|
|
68
|
+
case 'SW':
|
|
69
|
+
y += this.h - (wh.h + marginH);
|
|
70
|
+
break;
|
|
71
|
+
case 'E':
|
|
72
|
+
case 'W':
|
|
73
|
+
case 'Origin':
|
|
74
|
+
y += Math.trunc(this.h / 2) - Math.trunc(wh.h / 2);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
y -= y % ((opts?.modulo?.y ?? y) || 1);
|
|
78
|
+
const w = opts?.fill === 'X' || opts?.fill === 'XY' ? this.w - 2 * marginW : wh.w;
|
|
79
|
+
const h = opts?.fill === 'Y' || opts?.fill === 'XY' ? this.h - 2 * marginH : wh.h;
|
|
80
|
+
return { x, y, w, h };
|
|
81
|
+
}
|
|
82
|
+
/** positive int in level px. */
|
|
83
|
+
get h() {
|
|
84
|
+
return this.#h;
|
|
85
|
+
}
|
|
86
|
+
isVisible(box) {
|
|
87
|
+
return boxHits(this, box);
|
|
88
|
+
}
|
|
89
|
+
/** true if cam moved or resized since last update. */
|
|
90
|
+
get invalid() {
|
|
91
|
+
return this.#invalid;
|
|
92
|
+
}
|
|
93
|
+
/** positive int or fraction depending on mode. */
|
|
94
|
+
get minScale() {
|
|
95
|
+
return this.#minScale;
|
|
96
|
+
}
|
|
97
|
+
set minScale(scale) {
|
|
98
|
+
if (this.#scale === scale)
|
|
99
|
+
return;
|
|
100
|
+
this.#scale = scale;
|
|
101
|
+
this.#invalidateWH();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* positive int or infinite min dimensions. set to
|
|
105
|
+
* `{w: Infinity, h: Infinity}` to always use min scale.
|
|
106
|
+
*/
|
|
107
|
+
get minWH() {
|
|
108
|
+
return this.#minWH;
|
|
109
|
+
}
|
|
110
|
+
set minWH(wh) {
|
|
111
|
+
if (this.#minWH.w === wh.w && this.#minWH.h === wh.h)
|
|
112
|
+
return;
|
|
113
|
+
this.#minWH.w = wh.w;
|
|
114
|
+
this.#minWH.h = wh.h;
|
|
115
|
+
this.#invalidateWH();
|
|
116
|
+
}
|
|
117
|
+
get mode() {
|
|
118
|
+
return this.#mode;
|
|
119
|
+
}
|
|
120
|
+
set mode(mode) {
|
|
121
|
+
if (this.#mode === mode)
|
|
122
|
+
return;
|
|
123
|
+
this.#mode = mode;
|
|
124
|
+
this.#invalidateWH();
|
|
125
|
+
}
|
|
126
|
+
get portrait() {
|
|
127
|
+
return this.h > this.w;
|
|
128
|
+
}
|
|
129
|
+
postupdate() {
|
|
130
|
+
this.#invalid = false;
|
|
131
|
+
}
|
|
132
|
+
/** positive int or fraction depending on mode. */
|
|
133
|
+
get scale() {
|
|
134
|
+
return this.#scale;
|
|
135
|
+
}
|
|
136
|
+
toString() {
|
|
137
|
+
return `Cam{(${this.x} ${this.y}) ${this.w}×${this.h}}`;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* call after input processing but before ent processing. ents that move the
|
|
141
|
+
* camera should be called immediately after update so that the invalid state
|
|
142
|
+
* can be considered.
|
|
143
|
+
*/
|
|
144
|
+
update(canvas) {
|
|
145
|
+
if (!canvas.parentElement)
|
|
146
|
+
throw Error('canvas has no parent');
|
|
147
|
+
const { clientWidth, clientHeight } = canvas.parentElement;
|
|
148
|
+
this.#invalid ||=
|
|
149
|
+
this.#whClient.w !== clientWidth ||
|
|
150
|
+
this.#whClient.h !== clientHeight ||
|
|
151
|
+
// doesn't seem like this should be necessary but it is when moving across
|
|
152
|
+
// monitors.
|
|
153
|
+
this.#devicePixelRatio !== devicePixelRatio;
|
|
154
|
+
if (!this.#invalid)
|
|
155
|
+
return;
|
|
156
|
+
this.#devicePixelRatio = devicePixelRatio;
|
|
157
|
+
this.#whClient.w = clientWidth;
|
|
158
|
+
this.#whClient.h = clientHeight;
|
|
159
|
+
this.#invalidateWH();
|
|
160
|
+
canvas.width = this.#w;
|
|
161
|
+
canvas.height = this.#h;
|
|
162
|
+
// ~parentW / parentH.
|
|
163
|
+
canvas.style.width = `${(this.#w * this.#scale) / devicePixelRatio}px`;
|
|
164
|
+
canvas.style.height = `${(this.#h * this.#scale) / devicePixelRatio}px`;
|
|
165
|
+
}
|
|
166
|
+
/** positive int in level px. */
|
|
167
|
+
get w() {
|
|
168
|
+
return this.#w;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* positive int dimensions in client px of canvas (often
|
|
172
|
+
* `canvas.parentElement.clientWidth/Height` since the canvas is resized)
|
|
173
|
+
* which is assumed to be max WH.
|
|
174
|
+
*/
|
|
175
|
+
get whClient() {
|
|
176
|
+
return this.#whClient;
|
|
177
|
+
}
|
|
178
|
+
/** fractional. */
|
|
179
|
+
get x() {
|
|
180
|
+
return this.#x;
|
|
181
|
+
}
|
|
182
|
+
set x(x) {
|
|
183
|
+
this.#invalid ||= this.x !== x;
|
|
184
|
+
this.#x = x;
|
|
185
|
+
}
|
|
186
|
+
/** fractional. */
|
|
187
|
+
get y() {
|
|
188
|
+
return this.#y;
|
|
189
|
+
}
|
|
190
|
+
set y(y) {
|
|
191
|
+
this.#invalid ||= this.y !== y;
|
|
192
|
+
this.#y = y;
|
|
193
|
+
}
|
|
194
|
+
/** nonnegative int or fraction depending on mode. */
|
|
195
|
+
get zoomOut() {
|
|
196
|
+
return this.#zoomOut;
|
|
197
|
+
}
|
|
198
|
+
set zoomOut(out) {
|
|
199
|
+
out = Math.max(0, out);
|
|
200
|
+
if (this.#zoomOut === out)
|
|
201
|
+
return;
|
|
202
|
+
this.#zoomOut = out;
|
|
203
|
+
this.#invalidateWH();
|
|
204
|
+
}
|
|
205
|
+
#invalidateWH() {
|
|
206
|
+
if (!this.#invalid && debug?.invalid)
|
|
207
|
+
console.debug('cam invalid');
|
|
208
|
+
this.#invalid = true;
|
|
209
|
+
const phy = {
|
|
210
|
+
w: this.#whClient.w * devicePixelRatio,
|
|
211
|
+
h: this.#whClient.h * devicePixelRatio
|
|
212
|
+
};
|
|
213
|
+
const scale = Math.max(this.#minScale, Math.min(phy.w / this.#minWH.w, phy.h / this.#minWH.h) -
|
|
214
|
+
(this.#mode === 'Int' ? Math.trunc(this.#zoomOut) : this.#zoomOut));
|
|
215
|
+
this.#scale = this.#mode === 'Int' ? Math.trunc(scale) : scale;
|
|
216
|
+
this.#w = Math.ceil(phy.w / this.#scale);
|
|
217
|
+
this.#h = Math.ceil(phy.h / this.#scale);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=cam.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cam.js","sourceRoot":"","sources":["../../../src/graphics/cam.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** @internal */
|
|
2
|
+
export type GL2 = WebGL2RenderingContext;
|
|
3
|
+
/** @internal */
|
|
4
|
+
export type GLProgram = WebGLProgram;
|
|
5
|
+
/** @internal */
|
|
6
|
+
export type GLShader = WebGLShader;
|
|
7
|
+
/** @internal */
|
|
8
|
+
export type GLTexture = WebGLTexture;
|
|
9
|
+
/** @internal */
|
|
10
|
+
export type GLUniformLocation = WebGLUniformLocation;
|
|
11
|
+
/** @internal */
|
|
12
|
+
export type GLUniformMap = {
|
|
13
|
+
[name: string]: GLUniformLocation;
|
|
14
|
+
};
|
|
15
|
+
/** @internal */
|
|
16
|
+
export type Shader = {
|
|
17
|
+
program: GLProgram | null;
|
|
18
|
+
buffer: WebGLBuffer | null;
|
|
19
|
+
uniform: GLUniformMap;
|
|
20
|
+
vao: WebGLVertexArrayObject | null;
|
|
21
|
+
textures: GLTexture[];
|
|
22
|
+
};
|
|
23
|
+
/** @internal */
|
|
24
|
+
export declare function Shader(gl: GL2, vertGLSL: string, fragGLSL: string, textures: GLTexture[]): Shader;
|