@oidoid/void 0.1.0-7 → 0.1.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/dist/public/index.js +19 -15
- package/dist/public/index.js.map +4 -4
- package/dist/public/preload-atlas.webp +0 -0
- package/dist/public/void-v0.1.0+20251227.1060661.html +115 -0
- package/dist/schema/config-file.v0.json +86 -15
- package/dist/schema/level-file.v0.json +423 -0
- package/dist/src/audio.d.ts +1 -0
- package/dist/src/audio.d.ts.map +1 -0
- package/dist/src/demo/assets/manifest.json +2 -2
- package/dist/src/demo/assets/void.game.json +202 -0
- package/dist/src/demo/ents/cam.d.ts +6 -0
- package/dist/src/demo/ents/cam.d.ts.map +1 -0
- package/dist/src/demo/ents/cam.js +21 -0
- package/dist/src/demo/ents/cam.js.map +1 -0
- package/dist/src/demo/ents/clock.d.ts +10 -0
- package/dist/src/demo/ents/clock.d.ts.map +1 -0
- package/dist/src/demo/ents/clock.js +16 -0
- package/dist/src/demo/ents/clock.js.map +1 -0
- package/dist/src/demo/ents/draw.d.ts +6 -0
- package/dist/src/demo/ents/draw.d.ts.map +1 -0
- package/dist/src/demo/ents/draw.js +14 -0
- package/dist/src/demo/ents/draw.js.map +1 -0
- package/dist/src/demo/ents/ent.d.ts +6 -0
- package/dist/src/demo/ents/ent.d.ts.map +1 -0
- package/dist/src/demo/ents/ent.js +2 -0
- package/dist/src/demo/ents/ent.js.map +1 -0
- package/dist/src/demo/ents/loader.d.ts +6 -0
- package/dist/src/demo/ents/loader.d.ts.map +1 -0
- package/dist/src/demo/ents/loader.js +45 -0
- package/dist/src/demo/ents/loader.js.map +1 -0
- package/dist/src/demo/ents/render-toggle.d.ts +7 -0
- package/dist/src/demo/ents/render-toggle.d.ts.map +1 -0
- package/dist/src/demo/ents/render-toggle.js +8 -0
- package/dist/src/demo/ents/render-toggle.js.map +1 -0
- package/dist/src/demo/ents/tally.d.ts +8 -0
- package/dist/src/demo/ents/tally.d.ts.map +1 -0
- package/dist/src/demo/ents/tally.js +14 -0
- package/dist/src/demo/ents/tally.js.map +1 -0
- package/dist/src/demo/index.d.ts +1 -0
- package/dist/src/demo/index.d.ts.map +1 -0
- package/dist/src/demo/index.js +12 -3
- package/dist/src/demo/index.js.map +1 -1
- package/dist/src/demo/level/level-file.json +50 -0
- package/dist/src/demo/level/level-parser.d.ts +5 -0
- package/dist/src/demo/level/level-parser.d.ts.map +1 -0
- package/dist/src/demo/level/level-parser.js +21 -0
- package/dist/src/demo/level/level-parser.js.map +1 -0
- package/dist/src/demo/level/level-schema.d.ts +4 -0
- package/dist/src/demo/level/level-schema.d.ts.map +1 -0
- package/dist/src/demo/level/level-schema.js +2 -0
- package/dist/src/demo/level/level-schema.js.map +1 -0
- package/dist/src/demo/types/decl.d.ts +30 -0
- package/dist/src/demo/types/decl.d.ts.map +1 -0
- package/dist/src/demo/types/decl.js +2 -0
- package/dist/src/demo/types/decl.js.map +1 -0
- package/dist/src/demo/void.json +8 -4
- package/dist/src/ents/button.d.ts +14 -0
- package/dist/src/ents/button.d.ts.map +1 -0
- package/dist/src/ents/button.js +59 -0
- package/dist/src/ents/button.js.map +1 -0
- package/dist/src/ents/cam.d.ts +3 -0
- package/dist/src/ents/cam.d.ts.map +1 -0
- package/dist/src/ents/cam.js +2 -0
- package/dist/src/ents/cam.js.map +1 -0
- package/dist/src/ents/cursor.d.ts +20 -0
- package/dist/src/ents/cursor.d.ts.map +1 -0
- package/dist/src/ents/cursor.js +49 -0
- package/dist/src/ents/cursor.js.map +1 -0
- package/dist/src/ents/debug-input.d.ts +8 -0
- package/dist/src/ents/debug-input.d.ts.map +1 -0
- package/dist/src/ents/debug-input.js +25 -0
- package/dist/src/ents/debug-input.js.map +1 -0
- package/dist/src/ents/draw.d.ts +3 -0
- package/dist/src/ents/draw.d.ts.map +1 -0
- package/dist/src/ents/draw.js +2 -0
- package/dist/src/ents/draw.js.map +1 -0
- package/dist/src/ents/ent-query.d.ts +26 -0
- package/dist/src/ents/ent-query.d.ts.map +1 -0
- package/dist/src/ents/ent-query.js +10 -0
- package/dist/src/ents/ent-query.js.map +1 -0
- package/dist/src/ents/ent.d.ts +92 -6
- package/dist/src/ents/ent.d.ts.map +1 -0
- package/dist/src/ents/fps.d.ts +7 -0
- package/dist/src/ents/fps.d.ts.map +1 -0
- package/dist/src/ents/fps.js +14 -0
- package/dist/src/ents/fps.js.map +1 -0
- package/dist/src/ents/hud.d.ts +14 -0
- package/dist/src/ents/hud.d.ts.map +1 -0
- package/dist/src/ents/hud.js +38 -0
- package/dist/src/ents/hud.js.map +1 -0
- package/dist/src/ents/loader.d.ts +3 -0
- package/dist/src/ents/loader.d.ts.map +1 -0
- package/dist/src/ents/loader.js +2 -0
- package/dist/src/ents/loader.js.map +1 -0
- package/dist/src/ents/nine-patch.d.ts +17 -0
- package/dist/src/ents/nine-patch.d.ts.map +1 -0
- package/dist/src/ents/nine-patch.js +99 -0
- package/dist/src/ents/nine-patch.js.map +1 -0
- package/dist/src/ents/override.d.ts +8 -0
- package/dist/src/ents/override.d.ts.map +1 -0
- package/dist/src/ents/override.js +8 -0
- package/dist/src/ents/override.js.map +1 -0
- package/dist/src/ents/sprite.d.ts +8 -0
- package/dist/src/ents/sprite.d.ts.map +1 -0
- package/dist/src/ents/sprite.js +10 -0
- package/dist/src/ents/sprite.js.map +1 -0
- package/dist/src/ents/sys.d.ts +14 -0
- package/dist/src/ents/sys.d.ts.map +1 -0
- package/dist/src/ents/sys.js +2 -0
- package/dist/src/ents/sys.js.map +1 -0
- package/dist/src/ents/text.d.ts +21 -0
- package/dist/src/ents/text.d.ts.map +1 -0
- package/dist/src/ents/text.js +118 -0
- package/dist/src/ents/text.js.map +1 -0
- package/dist/src/ents/zoo.d.ts +18 -11
- package/dist/src/ents/zoo.d.ts.map +1 -0
- package/dist/src/ents/zoo.js +75 -15
- package/dist/src/ents/zoo.js.map +1 -1
- package/dist/src/graphics/atlas-parser.d.ts +3 -1
- package/dist/src/graphics/atlas-parser.d.ts.map +1 -0
- package/dist/src/graphics/atlas-parser.js.map +1 -1
- package/dist/src/graphics/atlas.d.ts +9 -15
- package/dist/src/graphics/atlas.d.ts.map +1 -0
- package/dist/src/graphics/cam.d.ts +13 -10
- package/dist/src/graphics/cam.d.ts.map +1 -0
- package/dist/src/graphics/cam.js +23 -17
- package/dist/src/graphics/cam.js.map +1 -1
- package/dist/src/graphics/gl.d.ts +1 -8
- package/dist/src/graphics/gl.d.ts.map +1 -0
- package/dist/src/graphics/gl.js +0 -1
- package/dist/src/graphics/gl.js.map +1 -1
- package/dist/src/graphics/layer.d.ts +21 -17
- package/dist/src/graphics/layer.d.ts.map +1 -0
- package/dist/src/graphics/layer.js +23 -18
- package/dist/src/graphics/layer.js.map +1 -1
- package/dist/src/graphics/pixel-ratio-observer.d.ts +8 -0
- package/dist/src/graphics/pixel-ratio-observer.d.ts.map +1 -0
- package/dist/src/graphics/pixel-ratio-observer.js +23 -0
- package/dist/src/graphics/pixel-ratio-observer.js.map +1 -0
- package/dist/src/graphics/render-mode.d.ts +2 -0
- package/dist/src/graphics/render-mode.d.ts.map +1 -0
- package/dist/src/graphics/render-mode.js +2 -0
- package/dist/src/graphics/render-mode.js.map +1 -0
- package/dist/src/graphics/renderer.d.ts +9 -4
- package/dist/src/graphics/renderer.d.ts.map +1 -0
- package/dist/src/graphics/renderer.js +30 -13
- package/dist/src/graphics/renderer.js.map +1 -1
- package/dist/src/graphics/sprite-frag.glsl.d.ts +1 -0
- package/dist/src/graphics/sprite-frag.glsl.d.ts.map +1 -0
- package/dist/src/graphics/sprite-frag.glsl.js +3 -4
- package/dist/src/graphics/sprite-frag.glsl.js.map +1 -1
- package/dist/src/graphics/sprite-vert.glsl.d.ts +1 -0
- package/dist/src/graphics/sprite-vert.glsl.d.ts.map +1 -0
- package/dist/src/graphics/sprite-vert.glsl.js +9 -7
- package/dist/src/graphics/sprite-vert.glsl.js.map +1 -1
- package/dist/src/graphics/sprite.d.ts +54 -16
- package/dist/src/graphics/sprite.d.ts.map +1 -0
- package/dist/src/graphics/sprite.js +109 -32
- package/dist/src/graphics/sprite.js.map +1 -1
- package/dist/src/index.d.ts +31 -6
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +33 -9
- package/dist/src/index.js.map +1 -1
- package/dist/src/input/context-menu.d.ts +1 -1
- package/dist/src/input/context-menu.d.ts.map +1 -0
- package/dist/src/input/context-menu.js +0 -1
- package/dist/src/input/context-menu.js.map +1 -1
- package/dist/src/input/gamepad.d.ts +1 -1
- package/dist/src/input/gamepad.d.ts.map +1 -0
- package/dist/src/input/gamepad.js +0 -1
- package/dist/src/input/gamepad.js.map +1 -1
- package/dist/src/input/input.d.ts +30 -23
- package/dist/src/input/input.d.ts.map +1 -0
- package/dist/src/input/input.js +53 -31
- package/dist/src/input/input.js.map +1 -1
- package/dist/src/input/keyboard.d.ts +1 -0
- package/dist/src/input/keyboard.d.ts.map +1 -0
- package/dist/src/input/pointer.d.ts +1 -0
- package/dist/src/input/pointer.d.ts.map +1 -0
- package/dist/src/input/pointer.js +11 -8
- package/dist/src/input/pointer.js.map +1 -1
- package/dist/src/input/wheel.d.ts +6 -1
- package/dist/src/input/wheel.d.ts.map +1 -0
- package/dist/src/input/wheel.js +5 -1
- package/dist/src/input/wheel.js.map +1 -1
- package/dist/src/level/level-parser.d.ts +26 -0
- package/dist/src/level/level-parser.d.ts.map +1 -0
- package/dist/src/level/level-parser.js +258 -0
- package/dist/src/level/level-parser.js.map +1 -0
- package/dist/src/level/level-schema-json.d.ts +5 -0
- package/dist/src/level/level-schema-json.d.ts.map +1 -0
- package/dist/src/level/level-schema-json.js +2 -0
- package/dist/src/level/level-schema-json.js.map +1 -0
- package/dist/src/level/level-schema.d.ts +87 -0
- package/dist/src/level/level-schema.d.ts.map +1 -0
- package/dist/src/level/level-schema.js +2 -0
- package/dist/src/level/level-schema.js.map +1 -0
- package/dist/src/level/level.d.ts +8 -0
- package/dist/src/level/level.d.ts.map +1 -0
- package/dist/src/level/level.js +2 -0
- package/dist/src/level/level.js.map +1 -0
- package/dist/src/looper.d.ts +1 -0
- package/dist/src/looper.d.ts.map +1 -0
- package/dist/src/looper.js +5 -2
- package/dist/src/looper.js.map +1 -1
- package/dist/src/mem/pool-map.d.ts +6 -0
- package/dist/src/mem/pool-map.d.ts.map +1 -0
- package/dist/src/mem/pool-map.js +2 -0
- package/dist/src/mem/pool-map.js.map +1 -0
- package/dist/src/mem/pool.d.ts +5 -1
- package/dist/src/mem/pool.d.ts.map +1 -0
- package/dist/src/mem/pool.js +22 -21
- package/dist/src/mem/pool.js.map +1 -1
- package/dist/src/mem/sprite-pool.d.ts +12 -0
- package/dist/src/mem/sprite-pool.d.ts.map +1 -0
- package/dist/src/mem/sprite-pool.js +11 -0
- package/dist/src/mem/sprite-pool.js.map +1 -0
- package/dist/src/random/random.d.ts +1 -0
- package/dist/src/random/random.d.ts.map +1 -0
- package/dist/src/storage/local-storage.d.ts +2 -1
- package/dist/src/storage/local-storage.d.ts.map +1 -0
- package/dist/src/storage/local-storage.js.map +1 -1
- package/dist/src/text/font.d.ts +5 -3
- package/dist/src/text/font.d.ts.map +1 -0
- package/dist/src/text/font.js +8 -5
- package/dist/src/text/font.js.map +1 -1
- package/dist/src/text/mem-prop-5x6.json +20 -5
- package/dist/src/text/text-layout.d.ts +16 -5
- package/dist/src/text/text-layout.d.ts.map +1 -0
- package/dist/src/text/text-layout.js +46 -28
- package/dist/src/text/text-layout.js.map +1 -1
- package/dist/src/types/bundle.d.ts +10 -0
- package/dist/src/types/bundle.d.ts.map +1 -0
- package/dist/src/types/bundle.js +2 -0
- package/dist/src/types/bundle.js.map +1 -0
- package/dist/src/types/game-config.d.ts +27 -0
- package/dist/src/types/game-config.d.ts.map +1 -0
- package/dist/src/types/game-config.js +2 -0
- package/dist/src/types/game-config.js.map +1 -0
- package/dist/src/types/geo.d.ts +9 -2
- package/dist/src/types/geo.d.ts.map +1 -0
- package/dist/src/types/geo.js +16 -0
- package/dist/src/types/geo.js.map +1 -1
- package/dist/src/types/json.d.ts +1 -0
- package/dist/src/types/json.d.ts.map +1 -0
- package/dist/src/types/time.d.ts +13 -2
- package/dist/src/types/time.d.ts.map +1 -0
- package/dist/src/types/time.js +10 -0
- package/dist/src/types/time.js.map +1 -1
- package/dist/src/utils/async-util.d.ts +1 -0
- package/dist/src/utils/async-util.d.ts.map +1 -0
- package/dist/src/utils/async-util.js +2 -0
- package/dist/src/utils/async-util.js.map +1 -1
- package/dist/src/utils/canvas-util.d.ts +3 -1
- package/dist/src/utils/canvas-util.d.ts.map +1 -0
- package/dist/src/utils/canvas-util.js +7 -3
- package/dist/src/utils/canvas-util.js.map +1 -1
- package/dist/src/utils/color-util.d.ts +6 -0
- package/dist/src/utils/color-util.d.ts.map +1 -0
- package/dist/src/utils/color-util.js +12 -0
- package/dist/src/utils/color-util.js.map +1 -1
- package/dist/src/utils/debug.d.ts +1 -0
- package/dist/src/utils/debug.d.ts.map +1 -0
- package/dist/src/utils/debug.js +4 -4
- package/dist/src/utils/debug.js.map +1 -1
- package/dist/src/utils/delay-interval.d.ts +1 -0
- package/dist/src/utils/delay-interval.d.ts.map +1 -0
- package/dist/src/utils/dom-util.d.ts +3 -2
- package/dist/src/utils/dom-util.d.ts.map +1 -0
- package/dist/src/utils/dom-util.js +16 -12
- package/dist/src/utils/dom-util.js.map +1 -1
- package/dist/src/utils/fetch-util.d.ts +2 -1
- package/dist/src/utils/fetch-util.d.ts.map +1 -0
- package/dist/src/utils/fetch-util.js +2 -2
- package/dist/src/utils/math.d.ts +1 -0
- package/dist/src/utils/math.d.ts.map +1 -0
- package/dist/src/utils/math.js +1 -1
- package/dist/src/utils/math.js.map +1 -1
- package/dist/src/utils/obj-util.d.ts +7 -0
- package/dist/src/utils/obj-util.d.ts.map +1 -0
- package/dist/src/utils/obj-util.js +8 -0
- package/dist/src/utils/obj-util.js.map +1 -0
- package/dist/src/utils/str-util.d.ts +2 -0
- package/dist/src/utils/str-util.d.ts.map +1 -0
- package/dist/src/utils/str-util.js +6 -0
- package/dist/src/utils/str-util.js.map +1 -0
- package/dist/src/utils/vibrate.d.ts +1 -0
- package/dist/src/utils/vibrate.d.ts.map +1 -0
- package/dist/src/void.d.ts +42 -30
- package/dist/src/void.d.ts.map +1 -0
- package/dist/src/void.js +78 -34
- package/dist/src/void.js.map +1 -1
- package/dist/tools/atlas-pack/aseprite-json.d.ts +5 -0
- package/dist/tools/atlas-pack/aseprite-json.d.ts.map +1 -0
- package/dist/tools/atlas-pack/aseprite-json.js +2 -0
- package/dist/tools/atlas-pack/aseprite-json.js.map +1 -0
- package/dist/tools/atlas-pack/aseprite.d.ts +58 -31
- package/dist/tools/atlas-pack/aseprite.d.ts.map +1 -0
- package/dist/tools/atlas-pack/aseprite.js +1 -1
- package/dist/tools/atlas-pack/aseprite.js.map +1 -1
- package/dist/tools/atlas-pack/atlas-json-parser.d.ts +11 -10
- package/dist/tools/atlas-pack/atlas-json-parser.d.ts.map +1 -0
- package/dist/tools/atlas-pack/atlas-json-parser.js +14 -14
- package/dist/tools/atlas-pack/atlas-json-parser.js.map +1 -1
- package/dist/tools/atlas-pack/atlas-pack.d.ts +4 -2
- package/dist/tools/atlas-pack/atlas-pack.d.ts.map +1 -0
- package/dist/tools/atlas-pack/atlas-pack.js +1 -6
- package/dist/tools/atlas-pack/atlas-pack.js.map +1 -1
- package/dist/tools/bundle/bundle.d.ts +3 -3
- package/dist/tools/bundle/bundle.d.ts.map +1 -0
- package/dist/tools/bundle/bundle.js +32 -7
- package/dist/tools/bundle/bundle.js.map +1 -1
- package/dist/tools/bundle/html-plugin.d.ts +1 -0
- package/dist/tools/bundle/html-plugin.d.ts.map +1 -0
- package/dist/tools/bundle/html-plugin.js +5 -20
- package/dist/tools/bundle/html-plugin.js.map +1 -1
- package/dist/tools/tsconfig-base.json +1 -1
- package/dist/tools/tsconfig.json +1 -2
- package/dist/{schema → tools/types}/config-file.d.ts +21 -9
- package/dist/tools/types/config-file.d.ts.map +1 -0
- package/dist/{schema → tools/types}/config-file.js +18 -5
- package/dist/tools/types/config-file.js.map +1 -0
- package/dist/tools/types/config.d.ts +10 -9
- package/dist/tools/types/config.d.ts.map +1 -0
- package/dist/tools/types/config.js +23 -5
- package/dist/tools/types/config.js.map +1 -1
- package/dist/tools/types/package-json.d.ts +3 -2
- package/dist/tools/types/package-json.d.ts.map +1 -0
- package/dist/tools/utils/argv.d.ts +3 -0
- package/dist/tools/utils/argv.d.ts.map +1 -0
- package/dist/tools/utils/argv.js +1 -1
- package/dist/tools/utils/argv.js.map +1 -1
- package/dist/tools/utils/exec.d.ts +2 -1
- package/dist/tools/utils/exec.d.ts.map +1 -0
- package/dist/tools/utils/exec.js.map +1 -1
- package/dist/tools/utils/file-util.d.ts +1 -0
- package/dist/tools/utils/file-util.d.ts.map +1 -0
- package/dist/tools/utils/html-parser.d.ts +1 -0
- package/dist/tools/utils/html-parser.d.ts.map +1 -0
- package/dist/tools/void.d.ts +1 -0
- package/dist/tools/void.d.ts.map +1 -0
- package/dist/tools/void.js +3 -16
- package/dist/tools/void.js.map +1 -1
- package/package.json +18 -20
- package/readme.md +63 -1
- package/dist/meta.json +0 -1
- package/dist/package.json +0 -66
- 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/favicon64.png +0 -0
- package/dist/public/preload-atlas.png +0 -0
- package/dist/public/void-v0.1.0-6+20251020.7cdf98d.html +0 -111
- package/dist/public/void-v0.1.0-6+20251020.e4e9eef.html +0 -111
- package/dist/public/void-v0.1.0-7+20251021.7cdf98d.html +0 -111
- package/dist/schema/config-file.js.map +0 -1
- package/dist/src/demo/assets/preload-atlas.json +0 -193
- package/dist/src/demo/ents/clock-ent.d.ts +0 -11
- package/dist/src/demo/ents/clock-ent.js +0 -26
- package/dist/src/demo/ents/clock-ent.js.map +0 -1
- package/dist/src/demo/ents/render-toggle-ent.d.ts +0 -12
- package/dist/src/demo/ents/render-toggle-ent.js +0 -41
- package/dist/src/demo/ents/render-toggle-ent.js.map +0 -1
- package/dist/src/demo/ents/work-counter-ent.d.ts +0 -10
- package/dist/src/demo/ents/work-counter-ent.js +0 -20
- package/dist/src/demo/ents/work-counter-ent.js.map +0 -1
- package/dist/src/demo/game.d.ts +0 -12
- package/dist/src/demo/game.js +0 -135
- package/dist/src/demo/game.js.map +0 -1
- package/dist/src/demo/types/tag.d.ts +0 -2
- package/dist/src/demo/types/tag.js +0 -2
- package/dist/src/demo/types/tag.js.map +0 -1
- package/dist/src/ents/button-ent.d.ts +0 -39
- package/dist/src/ents/button-ent.js +0 -128
- package/dist/src/ents/button-ent.js.map +0 -1
- package/dist/src/ents/cursor-ent.d.ts +0 -18
- package/dist/src/ents/cursor-ent.js +0 -63
- package/dist/src/ents/cursor-ent.js.map +0 -1
- package/dist/src/ents/follow-cam-ent.d.ts +0 -25
- package/dist/src/ents/follow-cam-ent.js +0 -87
- package/dist/src/ents/follow-cam-ent.js.map +0 -1
- package/dist/src/ents/nine-patch-ent.d.ts +0 -43
- package/dist/src/ents/nine-patch-ent.js +0 -143
- package/dist/src/ents/nine-patch-ent.js.map +0 -1
- package/dist/src/ents/text-ent.d.ts +0 -23
- package/dist/src/ents/text-ent.js +0 -109
- package/dist/src/ents/text-ent.js.map +0 -1
- package/dist/src/types/void-version.d.ts +0 -7
- package/dist/src/types/void-version.js +0 -2
- package/dist/src/types/void-version.js.map +0 -1
- package/schema/config-file.test.ts +0 -55
- package/schema/config-file.ts +0 -69
- package/schema/config-file.v0.json +0 -68
- package/tools/atlas-pack/aseprite.ts +0 -60
- package/tools/atlas-pack/atlas-json-parser.test.ts +0 -780
- package/tools/atlas-pack/atlas-json-parser.ts +0 -159
- package/tools/atlas-pack/atlas-pack.ts +0 -51
- package/tools/bundle/bundle.ts +0 -64
- package/tools/bundle/html-plugin.ts +0 -135
- package/tools/types/config.ts +0 -65
- package/tools/types/package-json.ts +0 -4
- package/tools/utils/argv.test.ts +0 -41
- package/tools/utils/argv.ts +0 -29
- package/tools/utils/exec.ts +0 -22
- package/tools/utils/file-util.ts +0 -11
- package/tools/utils/html-parser.ts +0 -9
- package/tools/void.ts +0 -55
|
Binary file
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en"><head>
|
|
3
|
+
<meta charset="utf-8">
|
|
4
|
+
<title>void</title>
|
|
5
|
+
<link href="data:image/webp;base64,UklGRmYAAABXRUJQVlA4TFoAAAAvD8ADEA4HbRsJEqYD+jSfyMzuUohaKRIIJDRh7G8yh0AgUUp5uTn6PwEc/5/kIwBZf6VNA+lu1ZBea67ULpla6waQpPYGYn2ofbA+1G5H63JpH6whNzVArgE=" rel="icon" sizes="16x16" type="image/webp">
|
|
6
|
+
<link rel="manifest" href="data:application/json,%7B%22author%22%3A%22oidoid%22%2C%22background_color%22%3A%22%23e6e6e6%22%2C%22description%22%3A%22void%202D%20game%20library%20demo.%22%2C%22display%22%3A%22standalone%22%2C%22homepage_url%22%3A%22https%3A%2F%2Foidoid.com%2F%22%2C%22icons%22%3A%5B%7B%22src%22%3A%22data%3Aimage%2Fwebp%3Bbase64%2CUklGRmYAAABXRUJQVlA4TFoAAAAvD8ADEA4HbRsJEqYD%2BjSfyMzuUohaKRIIJDRh7G8yh0AgUUp5uTn6PwEc%2F5%2FkIwBZf6VNA%2Blu1ZBea67ULpla6waQpPYGYn2ofbA%2B1G5H63JpH6whNzVArgE%3D%22%2C%22sizes%22%3A%2216x16%22%2C%22type%22%3A%22image%2Fwebp%22%7D%2C%7B%22src%22%3A%22data%3Aimage%2Fwebp%3Bbase64%2CUklGRoIAAABXRUJQVlA4THYAAAAvH8AHEA4HbSNJEqYFejSPyHy7PQRaFSkSCCQ0YexvModAIFFKebk5%2Bj8Bffz%2F5QNJv%2FpOtn81hQSSGgmHCk5rJLyumtziFCplUxUUtFYvMwWFO8ZEQW8ChZsU9CZQqHWqoJXeVLhJQSt0J%2B%2BAJt0VuvN6L78B%22%2C%22sizes%22%3A%2232x32%22%2C%22type%22%3A%22image%2Fwebp%22%7D%2C%7B%22src%22%3A%22data%3Aimage%2Fwebp%3Bbase64%2CUklGRowAAABXRUJQVlA4TIAAAAAvL8ALEFUwbttGUk1T6LY5hVya04N9OoBAIMmfZrgBBAJJEPur3n9Gbts4km6asn0f4WkzaPqITIQbVYgJv%2BotBYIK9TTmbAucsARd2SKEB8APVI7JV4sfqBZLHxcEXYZLIb8Bznfy75bNyVmLpb8T5GcAWQLbGwIXCWzHFm0rYA%3D%3D%22%2C%22sizes%22%3A%2248x48%22%2C%22type%22%3A%22image%2Fwebp%22%7D%2C%7B%22src%22%3A%22data%3Aimage%2Fwebp%3Bbase64%2CUklGRnYAAABXRUJQVlA4TGkAAAAvP8APEB8gECD8WdCvSSBAyHDjf0SHQIDQ58a0jvkPwN%2BUgYM2khypSTbJIlmXPjaBiP5PQF62Lc2b%2F9RHldKF8izqQnlbO6Uy0rsiriRJW2QpqTiGjIljyMpLceRNGRMH0newGUjfzgAA%22%2C%22sizes%22%3A%2264x64%22%2C%22type%22%3A%22image%2Fwebp%22%7D%2C%7B%22src%22%3A%22data%3Aimage%2Fwebp%3Bbase64%2CUklGRp4AAABXRUJQVlA4TJEAAAAvv8AvEB8gECD8WdCvSSBAyHDjf0SHQIDQ58a0jvkPwN%2BUAZNIkiSNyTJZJovcz25QRP8nYB7nsgrMy38fD3auAiqwFQCfrdTOtwLgJzvkcFt0rq4H7naoVmq1IeYy52qlbotjoFKrtaFW6tqo1GptqJW6IR6u1Go9vFqpa6NSq5UwM8BbagXM4T6YGT45lzcBAA%3D%3D%22%2C%22sizes%22%3A%22192x192%22%2C%22type%22%3A%22image%2Fwebp%22%7D%5D%2C%22manifest_version%22%3A3%2C%22name%22%3A%22void%22%2C%22orientation%22%3A%22any%22%2C%22short_name%22%3A%22void%22%2C%22start_url%22%3A%22https%3A%2F%2Foidoid.com%2F%22%2C%22theme_color%22%3A%22%23e6e6e6%22%2C%22version%22%3A%220.1.0%22%7D">
|
|
7
|
+
</head>
|
|
8
|
+
<body style="background-color: #e6e6e6">
|
|
9
|
+
<img alt="" id="preload-atlas" style="display: none" src="data:image/webp;base64,UklGRuYDAABXRUJQVlA4TNkDAAAvT8AQELXQjSRbtlWhIeMCHlwDCCxExw4CYzCAwINJ5ZzV3WvfhwFL2fGacf1RXUdNJKvV6xCHDgzgASE4wAZ9upQx8HttZhQ1khT1HhJW3FpZD8jBBU/0wBziH5IkuWGbJYODDRsDUFznDcXXjVrVlVhvZ56aFY6pGVqA6FXV7hv1A9jVLXgjUM8Kx/T7dX787GIFblRcX/8OwK/6AoZNeZ/Ke6xJc2R0o4p1JDyGTXmfBV/s39escFxngYICSueb/Rg2431V9TrXEsfsPY0FDrG5Hm8eIWzG2/u69rXE4b3dUCCIfuwMYWv+PIcMoxRC3LTv6zKd75wczavYe6BANnT3IeCdcM5QhZ7/CC4skArdj4VcgbsoZ1CFAoILC2RCV1TtiryDBQhvDVSZ0DxwdVUuFGoKriEtADzdrIB95kKBTKg6d+AGXmCoDAtZNikgruURQKs+I7BKuFTLHbgYv/QZ2Rd+zS9aRf0BF/KvF4hPSf+SVdTcNpX0mZSua2bnqwAX49Y+k+jrunb3TLoK4UJ+7TOJvnxoz0oVB1WGe7J9XdeJPwtVrmtvESb4C/hMLjRW2p2q4lO7mF/V3psVyPRVcyrwAr+Y0wk82ncy/kN9qhAQq/TeWIVzNfOdFgU2cpD+ylU29FlDqhAu5i/AkCtAuAIIoMCASJWKQE38xU54DWVShtRN1Q1ypdYTsBy+CQjswrxCgjLaHJkngDwBqqb464Q+CPEpvLFVMQmTze9/9y9OalPxjwJFhqDe9fwL7z8p4KL5C+Jzt82E9x8KsHxBSradOWQX0cvk4D0lvrS0wnt52T4F95T6EhkugzSpY8gLZSRL1XPff9zGOuBX6C/s2509QaRKTAgEfgW+FJBXxLtk+USvrf8P13SDLyk5GVSXUuhjO1yGvcXJuMTDT1UoC9lv9A4eEC+qq+t+S+QzFte/1eyidrOnRDCb4AKQyLfv0a9KpQpvJXHzp2pxRpbTYDc+ZYeuhOTzUnkzMnVQZ4JT+dmXBUeEZKnymdQDvIOL8IS7L92j1akmqMTAEnlkZnF06S6zp5DLEyMgQNo8JFB5RSqoCWmxyalPZZT1YqGyE0fo1SfCKl9TpTCWnliRy4L2A1uw5OVaAQLYxL3PnaX+FDN8gUxIQ7BWvn1xIagSrkz45EXUTbOTtZg/DYlJeOlXn9TKm/hC+2VFQPMw8HEqKhMuetDitOQXJiA1gdPHI9IjhrJm2Sp+zuKfolRg9GYN5sOh+7wsfsLWXn4Ad78PLaVSjp7/7a77/cnTCgf/kD9PVqHg5QfYGQ6L7h5gf2vhXs0XAA==">
|
|
10
|
+
<script type="module" async="">var s={hash:"1060661",published:"20251227",version:"0.1.0"};var Se={id:"mem-prop-5x6",name:"mem 5x6",cellW:5,cellH:6,leading:1,lineH:7,baseline:1,kerning:{" ":0," 0":0," 1":0," 2":0," 3":0," 4":0," 5":0," 6":0," 7":0," 8":0," 9":0,"##":-1,"#_":0,"',":0,"'.":0,"'/":0,"'J":0,"'S":0,"'_":0,"'j":0,"'s":0,"(+":0,"(-":0,"(<":0,"(f":0,"({":0,"(~":0,")_":0,"*,":0,"*.":0,"*/":0,"*S":0,"*_":0,"*j":0,"*s":0,"+)":0,"+,":0,"+.":0,"+/":0,"+>":0,"+?":0,"+I":0,"+S":0,"+T":0,"+Z":0,"+]":0,"+_":0,"+`":0,"+j":0,"+s":0,"+}":0,",'":0,",*":0,",+":0,",-":0,",<":0,",?":0,",T":0,",Y":0,",Z":0,',"':0,",\\":0,",^":0,",`":0,",f":0,",t":0,",z":0,",{":0,",~":0,"-)":0,"-,":0,"--":0,"-.":0,"-/":0,"->":0,"-?":0,"-I":0,"-S":0,"-T":0,"-Z":0,"-]":0,"-_":0,"-`":0,"-j":0,"-s":0,"-}":0,".'":0,".*":0,".+":0,".-":0,".<":0,".?":0,".T":0,".Y":0,".Z":0,'."':0,".\\":0,".^":0,".`":0,".f":0,".t":0,".z":0,".{":0,".~":0,"/,":0,"/.":0,"//":0,"/J":0,"/S":0,"/_":0,"/j":0,"/s":0,"0 ":0,"1 ":0,"1T":0,"1Y":0,"1Z":0,"1f":0,"1t":0,"1z":0,"2 ":0,"3 ":0,"4 ":0,"5 ":0,"6 ":0,"7 ":0,"8 ":0,"9 ":0,":?":0,":T":0,":Z":0,":`":0,";?":0,";T":0,";Z":0,"<+":0,"<-":0,"<<":0,"<f":0,"<{":0,"<~":0,"==":0,"=_":0,">)":0,">,":0,">.":0,">/":0,">>":0,">?":0,">I":0,">S":0,">T":0,">Z":0,">]":0,">_":0,">`":0,">j":0,">s":0,">}":0,"?,":0,"?.":0,"?/":0,"?S":0,"?_":0,"?j":0,"?s":0,"@_":0,"C+":0,"C-":0,"C<":0,Cf:0,"C{":0,"C~":0,D_:0,"E+":0,"E-":0,"E<":0,Ef:0,"E{":0,"E~":0,"F&":0,"F+":0,"F,":0,"F-":0,"F.":0,"F/":0,"F:":0,"F;":0,"F<":0,FJ:0,FS:0,F_:0,Fa:0,Fe:0,Ff:0,Fg:0,Fj:0,Fq:0,Fs:0,"F{":0,"F~":0,"I+":0,"I-":0,"I<":0,If:0,"I{":0,"I~":0,"L'":0,"L*":0,"L+":0,"L-":0,L4:0,L7:0,"L<":0,"L?":0,LT:0,LY:0,LZ:0,'L"':0,"L\\":0,"L^":0,"L`":0,Lf:0,Lt:0,Lz:0,"L{":0,"L~":0,"P,":0,"P.":0,"P/":0,PS:0,P_:0,Pj:0,Ps:0,"S&":0,"S+":0,"S,":0,"S-":0,"S.":0,"S/":0,"S:":0,"S;":0,"S<":0,SJ:0,SS:0,S_:0,Sa:0,Se:0,Sf:0,Sg:0,Sj:0,Sq:0,Ss:0,"S{":0,"S~":0,"T&":0,"T+":0,"T,":0,"T-":0,"T.":0,"T/":0,"T:":0,"T;":0,"T<":0,TJ:0,TS:0,T_:0,Ta:0,Te:0,Tf:0,Tg:0,Tj:0,Tq:0,Ts:0,"T{":0,"T~":0,V_:0,"Y,":0,"Y.":0,"Y/":0,YS:0,Y_:0,Yj:0,Ys:0,"Z'":0,"Z*":0,"Z+":0,"Z-":0,Z4:0,Z7:0,"Z<":0,"Z?":0,ZT:0,ZY:0,ZZ:0,'Z"':0,"Z\\":0,"Z^":0,"Z`":0,Zf:0,Zt:0,Zz:0,"Z{":0,"Z~":0,"[+":0,"[-":0,"[<":0,"[f":0,"[{":0,"[~":0,'",':0,'".':0,'"/':0,'"J':0,'"S':0,'"_':0,'"j':0,'"s':0,"\\'":0,"\\*":0,"\\+":0,"\\-":0,"\\<":0,"\\?":0,"\\T":0,"\\Y":0,"\\Z":0,'\\"':0,"\\\\":0,"\\^":0,"\\`":0,"\\f":0,"\\t":0,"\\z":0,"\\{":0,"\\~":0,"^,":0,"^.":0,"^/":0,"^J":0,"^S":0,"^_":0,"^j":0,"^s":0,"_#":0,"_%":0,"_'":0,"_(":0,"_*":0,"_+":0,"_-":0,"_<":0,"_=":0,"_?":0,"_@":0,_T:0,_V:0,_Y:0,_Z:0,'_"':0,"_\\":0,"_^":0,__:0,"_`":0,_a:0,_e:0,_f:0,_t:0,_v:0,_z:0,"_{":0,"_~":0,"`,":0,"`.":0,"`/":0,"`J":0,"`S":0,"`_":0,"`j":0,"`s":0,"f,":0,"f.":0,"f/":0,fS:0,f_:0,fj:0,fs:0,"q#":0,q$:0,"q%":0,"q&":0,"q'":0,"q(":0,"q*":0,"q+":0,"q-":0,q0:0,q1:0,q2:0,q3:0,q4:0,q5:0,q6:0,q7:0,q8:0,q9:0,"q<":0,"q=":0,"q?":0,"q@":0,qA:0,qB:0,qC:0,qD:0,qE:0,qF:0,qG:0,qH:0,qI:0,qJ:0,qK:0,qL:0,qM:0,qN:0,qO:0,qP:0,qQ:0,qR:0,qS:0,qT:0,qU:0,qV:0,qW:0,qX:0,qY:0,qZ:0,"q[":0,'q"':0,"q\\":0,"q]":0,"q^":0,"q`":0,qa:0,qb:0,qc:0,qd:0,qe:0,qf:0,qh:0,qk:0,qm:0,qn:0,qo:0,qq:0,qr:0,qs:0,qt:0,qu:0,qv:0,qw:0,qx:0,qz:0,"q{":0,"q}":0,"q~":0,"r,":0,"r.":0,"r/":0,rS:0,r_:0,rj:-1,rs:0,"s,":0,"s.":0,"s/":0,sJ:0,sS:0,s_:0,sj:0,ss:0,"z'":0,"z*":0,"z+":0,"z-":0,z4:0,z7:0,"z<":0,"z?":0,zT:0,zY:0,zZ:0,'z"':0,"z\\":0,"z^":0,"z`":0,zf:0,zt:0,zz:0,"z{":0,"z~":0,"{+":0,"{-":0,"{<":0,"{f":0,"{{":0,"{~":0,"})":0,"},":0,"}.":0,"}/":0,"}>":0,"}?":0,"}I":0,"}S":0,"}T":0,"}Z":0,"}]":0,"}_":0,"}`":0,"}j":0,"}s":0,"}}":0,"~'":0,"~?":0,"~T":0,"~Z":0,'~"':0,"~\\":0,"~^":0,"~_":0,"~`":0,"~t":0,"~z":0},defaultKerning:1,defaultWhitespaceKerning:-1,endOfLineKerning:0,charW:{" ":4,"!":1,"#":5,"&":4,"'":1,"(":2,")":2,",":1,".":1,":":1,";":1,"@":5,M:5,W:5,"[":2,"\n":0,"]":2,"`":2,i:1,l:1,m:5,q:4,w:5,"|":1},defaultCharW:3,descends:{$:!0,",":!0,"/":!0,";":!0,Q:!0,"\\":!0,_:!0,g:!0,j:!0,p:!0,q:!0,y:!0}};var S=Se;var C=class{query="button & sprite";free(e){ot(e)}update(e,i){if(!e.invalid&&!i.input.invalid)return;e.invalid=!0;let{button:r}=e,n=r.type==="Toggle";r.pressed.x=e.sprite.x,r.pressed.y=e.sprite.y,r.pressed.w=e.sprite.w,r.pressed.h=e.sprite.h,r.selected.x=e.sprite.x,r.selected.y=e.sprite.y,r.selected.w=e.sprite.w,r.selected.h=e.sprite.h;let o=!!i.zoo.cursor&&i.zoo.cursor.sprite.hitsZ(e.sprite,i.cam),a=o&&i.input.isOnStart("A")?n?!E(e):!0:n?E(e):i.input.isOn("A")||!!i.zoo.cursor?.cursor.keyboard&&i.input.isOn("A");r.started=E(e)!==a,r.pressed.visible=a,r.selected.visible=o,i.input.handled||=o}};function ot(t){t.button.pressed.free(),t.button.selected.free(),t.invalid=!0}function Ee(t,e){t.button.pressed.visible=e,t.invalid=!0}function E(t){return t.button.pressed.visible}var u={Bottom:0,A:1,B:2,C:3,D:4,E:5,F:6,G:7,UIA:8,UIB:9,UIC:10,UID:11,UIE:12,UIF:13,UIG:14,Top:15};function T(t){return t>=u.UIA}function Te(t,e){t.x=e.x,t.y=e.y,t.w=e.w,t.h=e.h}function b(t,e){let i={w:e.w??1,h:e.h??1};if(!t.w||!t.h||!i.w||!i.h)return!1;let r={x:t.x??0,y:t.y??0};return r.x<e.x+i.w&&r.x+t.w>e.x&&r.y<e.y+i.h&&r.y+t.h>e.y}function Re(t,e){return t.w===e.w&&t.h===e.h}function Ce(t,e){return{x:t.x+e.x,y:t.y+e.y}}function Pe(t,e){return st(pe(t,e))}function st(t){return Math.hypot(t.x,t.y)}function Be(t,e){return{x:Math.max(t.x,e.x),y:Math.max(t.y,e.y)}}function Le(t,e){return{x:Math.min(t.x,e.x),y:Math.min(t.y,e.y)}}function pe(t,e){return{x:t.x-e.x,y:t.y-e.y}}function _e(t,e){return(t%e+e)%e}var x=16,me=1/64,Me={w:4095,h:4095},ue=class{i;#e;constructor(e,i){this.#e=e,this.i=i}above(e){return(this.z===e.z?(this.zend?this.y+this.h:this.y)-(e.zend?e.y+e.h:e.y):this.z-e.z)>0}get cel(){return this.#e.view.getUint8(this.i+10)&31}set cel(e){let i=this.#e.view.getUint8(this.i+10);this.#e.view.setUint8(this.i+10,i&-32|e&31)}get clipbox(){return{x:this.x,y:this.y,w:this.w,h:this.h}}clips(e){return b(this,e)}clipsZ(e,i){if(this.ui===e.ui)return this.clips(e);let r={x:e.x+(e.ui?1:-1)*Math.floor(i.x),y:e.y+(e.ui?1:-1)*Math.floor(i.y),w:e.w,h:e.h};return b(this,r)}get flipX(){return!!(this.#e.view.getUint8(this.i+6)&64)}set flipX(e){let i=this.#e.view.getUint8(this.i+6);this.#e.view.setUint8(this.i+6,i&-65|-e&64)}get flipY(){return!!(this.#e.view.getUint8(this.i+6)&32)}set flipY(e){let i=this.#e.view.getUint8(this.i+6);this.#e.view.setUint8(this.i+6,i&-33|-e&32)}free(){this.#e.free(this)}get h(){return this.#e.view.getUint16(this.i+8,!0)>>>4}set h(e){let i=this.#e.view.getUint16(this.i+8,!0);this.#e.view.setUint16(this.i+8,i&-65521|(e&4095)<<4,!0)}get id(){return this.#e.view.getUint16(this.i+10,!0)>>>5&2047}set id(e){let i=this.#e.view.getUint16(this.i+10,!0);this.#e.view.setUint16(this.i+10,i&-65505|(e&2047)<<5,!0)}init(){this.cel=0,this.flipX=!1,this.flipY=!1,this.h=0,this.id=0,this.stretch=!1,this.visible=!0,this.w=0,this.x=0,this.y=0,this.z=u.Bottom,this.zend=!1}get stretch(){return!!(this.#e.view.getUint8(this.i+6)&128)}set stretch(e){let i=this.#e.view.getUint8(this.i+6);this.#e.view.setUint8(this.i+6,i&-129|-e&128)}get ui(){return T(this.z)}get visible(){return(this.#e.view.getUint8(this.i+12)&1)===1}set visible(e){let i=this.#e.view.getUint8(this.i+12);this.#e.view.setUint8(this.i+12,i&-2|(e?1:0))}get w(){return this.#e.view.getUint16(this.i+7,!0)&4095}set w(e){let i=this.#e.view.getUint16(this.i+7,!0);this.#e.view.setUint16(this.i+7,i&-4096|e&4095,!0)}get x(){return(this.#e.view.getUint32(this.i+0,!0)<<8>>8)/64}set x(e){let i=this.#e.view.getUint32(this.i+0,!0);this.#e.view.setUint32(this.i+0,i&-16777216|e*64&16777215,!0)}get y(){return(this.#e.view.getUint32(this.i+3,!0)<<8>>8)/64}set y(e){let i=this.#e.view.getUint32(this.i+3,!0);this.#e.view.setUint32(this.i+3,i&-16777216|e*64&16777215,!0)}get z(){return this.#e.view.getUint8(this.i+6)&15}set z(e){let i=this.#e.view.getUint8(this.i+6);this.#e.view.setUint8(this.i+6,i&-16|e&15)}get zend(){return!!(this.#e.view.getUint8(this.i+6)&16)}set zend(e){let i=this.#e.view.getUint8(this.i+6);this.#e.view.setUint8(this.i+6,i&-17|-e&16)}},P=class t extends ue{#e;#i;#t;#r;constructor(e,i,r,n){super(e,i),this.#e=r,this.#r=n}get anim(){return this.#e.anim[this.tag]}diagonalize(e){ce(this,e.x*e.y)}get flipX(){return super.flipX}set flipX(e){this.flipX!==e&&(super.flipX=e,this.#i=void 0,this.#t=void 0)}get flipY(){return super.flipY}set flipY(e){this.flipY!==e&&(super.flipY=e,this.#i=void 0,this.#t=void 0)}get h(){return super.h}set h(e){this.h!==e&&(super.h=e,this.#i=void 0,this.#t=void 0)}get hitbox(){if(this.#i)return this.#i;let{hitbox:e}=this.anim;if(e)return this.#i??={x:Math.floor(this.x+(this.flipX?this.w-e.w-e.x:e.x)),y:Math.floor(this.y+(this.flipY?this.h-e.h-e.y:e.y)),w:e.w,h:e.h}}hits(e){let i=e instanceof t?e.hurtbox??e:e;return b(this.hitbox??this,i)}hitsZ(e,i){if(this.ui===e.ui)return this.hits(e);let r={...e.hurtbox??e.clipbox};return r.x+=(e.ui?1:-1)*Math.floor(i.x),r.y+=(e.ui?1:-1)*Math.floor(i.y),b(this.hitbox??this,r)}get hurtbox(){if(this.#t)return this.#t;let{hurtbox:e}=this.anim;if(e)return this.#t??={x:Math.floor(this.x+(this.flipX?this.w-e.w-e.x:e.x)),y:Math.floor(this.y+(this.flipY?this.h-e.h-e.y:e.y)),w:e.w,h:e.h}}get id(){return super.id}set id(e){this.id!==e&&(super.id=e,this.#i=void 0,this.#t=void 0)}get looped(){return _e(this.looperCel-this.cel,32)>=this.anim.cels}get looperCel(){return this.#r.age/62.5%(this.anim.cels*2)}reset(){this.cel=this.looperCel}get tag(){return this.#e.tags[this.id]}set tag(e){let i=this.#e.anim[e];this.w=i.w,this.h=i.h,this.id=i.id,this.reset()}toString(){return`Sprite{${this.tag} (${this.x} ${this.y} ${this.z}) ${this.w}\xD7${this.h}}`}get w(){return super.w}set w(e){this.w!==e&&(super.w=e,this.#i=void 0,this.#t=void 0)}get x(){return super.x}set x(e){this.x!==e&&(super.x=e,this.#i=void 0,this.#t=void 0)}get y(){return super.y}set y(e){this.y!==e&&(super.y=e,this.#i=void 0,this.#t=void 0)}};function ce(t,e){e&&(t.x=Math.floor(t.x)+.5,t.y=Math.floor(t.y)+.5-(e>0?0:me))}function B(t){return Math.trunc(t/me)*me}var L=class{query="cursor & sprite";update(e,i){i.input.point?.invalid&<(e,i.input.point),dt(e,i),e.cursor.keyboard&&(i.input.dir.x||i.input.dir.y||!i.input.point&&i.input.isAnyStarted("A"))&&at(e,i.input,i.tick.s),e.cursor.pick&&(e.sprite.tag=i.input.isOn("A")?e.cursor.pick:e.cursor.point)}};function at(t,e,i){let r=B(t.cursor.keyboard*i);e.isAnyOnStart("U","D","L","R")&&e.dir.x&&e.dir.y&&t.sprite.diagonalize(e.dir),e.dir.x&&(t.sprite.x=Math.min(t.cursor.bounds.x+t.cursor.bounds.w,Math.max(t.cursor.bounds.x,t.sprite.x+e.dir.x*r))),e.dir.y&&(t.sprite.y=Math.min(t.cursor.bounds.y+t.cursor.bounds.h,Math.max(t.cursor.bounds.y,t.sprite.y+e.dir.y*r))),t.sprite.z=u.Top,t.sprite.visible=!0,t.invalid=!0}function lt(t,e){t.sprite.x=e.local.x,t.sprite.y=e.local.y,t.sprite.z=u.Top,t.sprite.visible=e.type==="Mouse",t.invalid=!0}function dt(t,e){e.cam.invalid&&(t.cursor.bounds.x=-t.sprite.w,t.cursor.bounds.y=-t.sprite.h,t.cursor.bounds.w=e.cam.w+t.sprite.w,t.cursor.bounds.h=e.cam.h+t.sprite.h)}var l=pt(globalThis.location?.href);function pt(t){if(!t)return;let e=[...new URL(t).searchParams].find(([o])=>o.toLowerCase()==="debug")?.[1];if(e==null)return;let i=Object.fromEntries(e.split(",").filter(Boolean).map(o=>o.split("="))),r={};for(let o in i)r[o.toLowerCase()]=i[o]||"true";let n={cam:"",input:"",mem:"",render:""};return new Proxy(r,{get(o,a){if(typeof a!="string"||(a=a.toLowerCase(),o[a]))return o[a];if(!e||"all"in i||a in n&&"void"in i)return"true"}})}var _=class{query="debugInput";update(e,i){if(l?.input){if(i.input.started){let r=!!i.input.on.length;console.debug(r?`[input] buttons on: ${i.input.on.join(" ")}.`:"[input] buttons off.");let n=i.input.combo;n.length>1&&r&&console.debug(`[input] combo: ${n.map(o=>o.join("+")).join(" ")}.`)}i.input.point?.invalid&&i.input.point?.click&&!i.input.point.pinch&&console.debug(`[input] ${i.input.point.drag.on?"drag":"click"} xy: ${i.input.point.x} ${i.input.point.y}.`),i.input.point?.pinch&&console.debug(`[input] pinch xy: ${i.input.point.pinch.xy.x} ${i.input.point.pinch.xy.y}.`),i.input.wheel&&console.debug(`[input] wheel xy: ${i.input.wheel.delta.xy.x} ${i.input.wheel.delta.xy.y}.`)}}};function ye(t){return t.split(" | ").sort(Ye).map(e=>e.split(" & ").sort(Ye))}function Ye(t,e){return t.localeCompare(e,"en")}var M=class{query="fps & text";update(e){let i=performance.now();i-e.fps.next.created>=1e3&&(e.fps.prevFrames=e.fps.next.frames,e.fps.next={created:i,frames:0}),e.fps.next.frames++,e.text=e.fps.prevFrames.toString().padStart(3," "),e.invalid=!0}};var Y=class{query="hud & sprite";update(e,i){if(!e.invalid&&!i.cam.invalid)return;let r=i.cam.follow(e.sprite,e.sprite.z,e.hud.origin,e.hud);Te(e.sprite,r),e.invalid=!0}};var A=class{query="ninePatch & sprite";free(e){mt(e)}update(e){if(!e.invalid)return;let i=ut(e);yt(e,i),ht(e),ct(e,i)}};function mt(t){t.ninePatch.patch.w?.free(),t.ninePatch.patch.nw?.free(),t.ninePatch.patch.n?.free(),t.ninePatch.patch.ne?.free(),t.ninePatch.patch.e?.free(),t.ninePatch.patch.se?.free(),t.ninePatch.patch.s?.free(),t.ninePatch.patch.sw?.free(),t.ninePatch.patch.center?.free(),t.invalid=!0}function ut(t){let{sprite:e,ninePatch:i}=t;return{x:e.x+i.pad.w,y:e.y+i.pad.n}}function ht(t){let{border:e,pad:i,patch:r}=t.ninePatch,n=t.sprite.w-e.w-e.e-i.w-i.e,o=t.sprite.h-e.n-e.s-i.n-i.s;r.n&&(r.n.w=n),r.s&&(r.s.w=n),r.w&&(r.w.h=o),r.e&&(r.e.h=o),r.center&&(r.center.w=n,r.center.h=o)}function ct(t,e){let{patch:i,pad:r,border:n}=t.ninePatch,o={x:t.sprite.x+t.sprite.w-n.e-r.e,y:t.sprite.y+t.sprite.h-n.s-r.s};i.ne&&(i.ne.x=o.x,i.ne.y=e.y),i.e&&(i.e.x=o.x,i.e.y=e.y+n.n),i.se&&(i.se.x=o.x,i.se.y=o.y),i.s&&(i.s.x=e.x+n.w,i.s.y=o.y),i.sw&&(i.sw.x=e.x,i.sw.y=o.y)}function yt(t,e){let{border:i,patch:r}=t.ninePatch;r.nw&&(r.nw.x=e.x,r.nw.y=e.y),r.w&&(r.w.x=e.x,r.w.y=e.y+i.n),r.n&&(r.n.x=e.x+i.w,r.n.y=e.y),r.center&&(r.center.x=e.x+i.w,r.center.y=e.y+i.n)}var X=class{query="override";update(e){e.override.invalid!=null&&(e.invalid=e.override.invalid)}};var k=class{query="sprite";free(e){e.sprite.free(),e.invalid=!0}};function Ae(t,e){let i=e.codePointAt(0);return(i==null||i>255)&&(i=63),`${t.id}--${i.toString(16).padStart(2,"0")}`}function fe(t,e){return t.cellH-(t.descends[e]?0:t.baseline)}function Xe(t,e,i){return e===`
|
|
11
|
+
`||i==null||i===`
|
|
12
|
+
`?t.endOfLineKerning:t.kerning[e+i]!=null?t.kerning[e+i]:/^\s?$/.test(e)||/^\s?$/.test(i)?t.defaultWhitespaceKerning:t.defaultKerning}function xe(t,e){return t.charW[e]??t.defaultCharW}function He(t){let e=[],i=t.scale??1,r=t.start??{x:0,y:0},n=t.maxW??1/0,o={x:r.x,y:r.y},a=0,d=0;for(;e.length<t.text.length;){let m=e.length,h=t.text[m],p;h===`
|
|
13
|
+
`?p=ft(t.font,o,r.x,i,a):/^\s*$/.test(h)?p=xt(t.font,o,n,ze(t.font,h,t.text[m+1],i),r.x,i,d,h,a):(p=ke(t.font,o,n,t.text,m,r.x,i,d,a),o.x>0&&p.cursor.y===w(t.font,r.x,o.y,i).y&&n-o.x+p.cursor.x<=n&&(o=w(t.font,r.x,o.y,i),p=ke(t.font,o,n,t.text,m,r.x,i,d,a))),e.push(...p.chars),o.x=p.cursor.x,o.y=p.cursor.y,a=p.w,d=p.trimmedLineH}return{chars:e,cursor:o,w:a,h:w(t.font,o.x,o.y,i).y-r.y,trimmedH:o.y+d*i-r.y}}function ke(t,e,i,r,n,o,a,d,m){let h=[],{x:p,y:f}=e;for(;;n++){let v=r[n];if(!v||/^\s*$/.test(v))break;let ge=fe(t,v),we=ze(t,v,r[n+1],a),ve=p>o&&p+we>o+i;ve&&({x:p,y:f}=w(t,o,f,a)),d=ve?ge:Math.max(d,ge),h.push({x:p,y:f,w:xe(t,v),h:t.cellH}),p+=we,m=Math.max(m,p-o)}return{chars:h,cursor:{x:p,y:f},trimmedLineH:d,w:m}}function w(t,e,i,r){return{x:e,y:i+t.lineH*r}}function ft(t,e,i,r,n){let o=w(t,i,e.y,r);return{chars:[void 0],cursor:o,trimmedLineH:0,w:Math.max(n,e.x-i)}}function xt(t,e,i,r,n,o,a,d,m){let h=e.x>n&&e.x+r>=i?w(t,n,e.y,o):{x:e.x+r,y:e.y},p=fe(t,d);return{chars:[void 0],cursor:h,trimmedLineH:e.y===h.y?Math.max(a,p):p,w:Math.max(m,e.x-n)}}function ze(t,e,i,r){return r*(xe(t,e)+Xe(t,e,i))}var H=class{query="sprite & text & textWH";update(e){e.invalid&&bt(e)}},z=class{query="sprite & text & textWH & textXY";free(e){for(let i of e.textXY.chars)i.free();e.textXY.chars.length=0,e.invalid=!0}update(e,i){e.invalid&>(e,i)}};function bt(t){let e=He({font:S,maxW:t.textWH.maxW,scale:t.textWH.scale,start:{x:0,y:0},text:t.text});t.textWH.layout=e;let i=e.w+t.textWH.pad.w+t.textWH.pad.e,r=(t.textWH.trim==="Leading"?e.h-S.leading*t.textWH.scale:t.textWH.trim==="Descender"?e.trimmedH:e.h)+t.textWH.pad.n+t.textWH.pad.s;t.ninePatch&&(i+=t.ninePatch.border.w+t.ninePatch.border.e+t.ninePatch.pad.w+t.ninePatch.pad.e,r+=t.ninePatch.border.n+t.ninePatch.border.s+t.ninePatch.pad.n+t.ninePatch.pad.s),t.sprite.w=i,t.sprite.h=r,t.invalid=!0}function gt(t,e){let i=0,r=t.textWH.layout;for(let[n,o]of r.chars.entries()){if(o==null)continue;let a=t.textXY.chars[i]??=e.alloc();a.x=t.sprite.x+o.x+t.textWH.pad.w+(t.ninePatch?t.ninePatch.border.w+t.ninePatch.pad.w:0),a.y=t.sprite.y+o.y+t.textWH.pad.n+(t.ninePatch?t.ninePatch.border.n+t.ninePatch.pad.n:0),a.z=t.textXY.z,a.tag=Ae(S,t.text[n]),a.stretch=!0,a.w*=t.textWH.scale,a.h*=t.textWH.scale,i++}for(;t.textXY.chars.length>i;)t.textXY.chars.pop().free();t.invalid=!0}function W(t,e){e!==t.text&&(t.text=e,t.invalid=!0)}var D=class{#e;#i;#t=new Set;#r={};#n=!1;add(...e){for(let i of e)l&&this.#s(i),this.#t.add(i),i.cursor?this.#e=i:i.loader&&(this.#i=i)}addDefaultSystems(){this.addSystem({button:new C,cursor:new L,debugInput:new _,fps:new M,hud:new Y,ninePatch:new A,override:new X,sprite:new k,textWH:new H,textXY:new z})}addSystem(e){Object.assign(this.#r,e)}clear(){this.#e=void 0,this.#t.clear(),this.#r={}}get cursor(){return this.#e}get loader(){return this.#i}get invalid(){return this.#n}*query(e){let i=ye(e);for(let r of this.#t)We(r,i)&&(yield r)}remove(...e){for(let i of e)i!==this.#i?this.#t.delete(i):i===this.#e&&(this.#e=void 0)}findById(e){for(let i of this.#t)if(i.id===e)return i}update(e){this.#n=!1;for(let i of this.#t){for(let r in i)this.#r[r]?.update?.(i,e);i.invalid&&l?.invalid&&console.debug("[invalid] ent update invalid",i),this.#n||=!!i.invalid,i.invalid=!1}}#s(e){for(let i in e){let r=this.#r[i];if(r&&(r.querySet??=ye(r.query),!We(e,r.querySet)))throw Error(`ent ${e.id??e.name??"?"} does not satisfy query: ${r.query}`)}}};function We(t,e){return e.some(i=>i.every(r=>r[0]==="!"?!(r.slice(1)in t):r in t))}function De(t){return{anim:t.anim,celXYWH:wt(t),tags:Object.keys(t.anim)}}function wt(t){let e=[],i=0;for(let r of Object.values(t.anim))e.push(...vt(r,t.celXY,i)),i+=r.cels*2;return e}function vt(t,e,i){let r=[];for(let n=0;n<16;n++){let o=i+2*(n%t.cels);r.push(e[o],e[o+1],t.w,t.h)}return r}var I=class{#e=0;#i=1;#t=!0;#r=1;#n={w:1/0,h:1/0};#s="Int";#a=1;#l=1;#d={w:1,h:1};#m=0;#o=0;#u=0;center(e){this.x=Math.floor(e.x-this.w/2),this.y=Math.floor(e.y-this.h/2)}clientToXY(e){let i=this.clientToXYLocal(e);return{x:this.#m+i.x,y:this.#o+i.y}}clientToXYLocal(e){return{x:e.x/this.#d.w*this.#l,y:e.y/this.#d.h*this.#i}}diagonalize(e){ce(this,e.x*e.y)}follow(e,i,r,n){let o=T(i)?0:Math.floor(this.x);switch(r){case"SW":case"W":case"NW":o+=n?.margin?.w??0;break;case"SE":case"E":case"NE":o+=this.w-(e.w+(n?.margin?.e??0));break;case"N":case"S":case"Center":o+=Math.trunc(this.w/2)-Math.trunc(e.w/2);break}o-=o%((n?.modulo?.x??o)||1);let a=T(i)?0:Math.floor(this.y);switch(r){case"N":case"NE":case"NW":a+=n?.margin?.n??0;break;case"SE":case"S":case"SW":a+=this.h-(e.h+(n?.margin?.s??0));break;case"E":case"W":case"Center":a+=Math.trunc(this.h/2)-Math.trunc(e.h/2);break}a-=a%((n?.modulo?.y??a)||1);let d=n?.fill==="X"||n?.fill==="XY"?this.w-(n?.margin?.w??0)-(n?.margin?.e??0):e.w,m=n?.fill==="Y"||n?.fill==="XY"?this.h-(n?.margin?.n??0)-(n?.margin?.s??0):e.h;return{x:o,y:a,w:d,h:m}}get h(){return this.#i}isVisible(e){return b(this,e)}get invalid(){return this.#t}get minScale(){return this.#r}set minScale(e){this.#a!==e&&(this.#a=e,this.#p())}get minWH(){return this.#n}set minWH(e){this.#n.w===e.w&&this.#n.h===e.h||(this.#n.w=e.w,this.#n.h=e.h,this.#p())}get mode(){return this.#s}set mode(e){this.#s!==e&&(this.#s=e,this.#p())}get portrait(){return this.h>this.w}postupdate(){this.#t=!1}get scale(){return this.#a}toString(){return`Cam{(${this.x} ${this.y}) ${this.w}\xD7${this.h}}`}update(e){if(!e.parentElement)throw Error("canvas has no parent");let{clientWidth:i,clientHeight:r}=e.parentElement;this.#t||=this.#d.w!==i||this.#d.h!==r||this.#e!==devicePixelRatio,this.#t&&(this.#e=devicePixelRatio,this.#d.w=i,this.#d.h=r,this.#p(),e.width=this.#l,e.height=this.#i,e.style.width=`${this.#l*this.#a/devicePixelRatio}px`,e.style.height=`${this.#i*this.#a/devicePixelRatio}px`)}get w(){return this.#l}get whClient(){return this.#d}get x(){return this.#m}set x(e){this.#t||=this.x!==e,this.#m=e}get y(){return this.#o}set y(e){this.#t||=this.y!==e,this.#o=e}get zoomOut(){return this.#u}set zoomOut(e){e=Math.max(0,e),this.#u!==e&&(this.#u=e,this.#p())}#p(){!this.#t&&l?.invalid&&console.debug("[invalid] cam invalid"),this.#t=!0;let e={w:this.#d.w*devicePixelRatio,h:this.#d.h*devicePixelRatio},i=Math.max(this.#r,Math.min(e.w/this.#n.w,e.h/this.#n.h)-(this.#s==="Int"?Math.trunc(this.#u):this.#u));this.#a=this.#s==="Int"?Math.trunc(i):i,this.#l=Math.ceil(e.w/this.#a),this.#i=Math.ceil(e.h/this.#a)}};var U=class{enable=!1;#e;constructor(e){this.#e=e}register(e){let i=this.#e[`${e}EventListener`].bind(this.#e);return i("contextmenu",this.#i),i("touchstart",this.#i,{passive:!1}),this}[Symbol.dispose](){this.register("remove")}#i=e=>{!e.isTrusted||e.metaKey||e.altKey||e.ctrlKey||this.enable||e.preventDefault()}};var q=class{bits=0;bitByAxis={};bitByButton={};onEvent=()=>{};#e;constructor(e){this.#e=e}get connected(){return isSecureContext&&navigator.getGamepads().filter(Boolean).length>0}register(e){let i=this.#e[`${e}EventListener`].bind(this.#e);return i("gamepadconnected",this.onEvent),i("gamepaddisconnected",this.onEvent),this}reset(){this.bits=0}[Symbol.dispose](){this.register("remove")}update(){if(isSecureContext)for(let e of navigator.getGamepads()){for(let[i,r]of e?.axes.entries()??[]){let n=this.bitByAxis[i];if(!n)continue;let o=r<0?n[0]:r===0?0:n[1];this.bits|=Math.abs(r)>=.5?o:0}for(let[i,r]of e?.buttons.entries()??[]){let n=this.bitByButton[i];n!=null&&(this.bits|=r.pressed?n:0)}}}};var O=class{bitByCode={};invalid=!1;onEvent=()=>{};#e={};#i;constructor(e){this.#i=e}get bits(){let e=0;for(let i in this.bitByCode)e|=this.#e[i]?this.bitByCode[i]:0;return e}postupdate(){this.invalid=!1}register(e){let i=this.#i[`${e}EventListener`].bind(this.#i);for(let r of["keydown","keyup"])i(r,this.#t);return this}reset(){this.invalid=!1,this.#e={}}[Symbol.dispose](){this.register("remove")}#t=e=>{!e.isTrusted||this.bitByCode[e.code]==null||e.type==="keydown"&&(e.metaKey||e.altKey||e.ctrlKey)||(this.invalid=!0,this.#e[e.code]=e.type==="keydown",e.preventDefault(),this.onEvent())}};var St={mouse:"Mouse",pen:"Pen",touch:"Touch"},Et=["pointercancel","pointerdown","pointermove","pointerup"],V=class{bitByButton={};dragMinClient=5;invalid=!1;onEvent=()=>{};primary;secondary={};#e;#i;constructor(e){this.#i=e}get boundsClient(){if(!this.primary?.bits&&!Object.keys(this.secondary).length)return;let e={x:1/0,y:1/0},i={x:-1/0,y:-1/0};for(let r of[this.primary,...Object.values(this.secondary)])r?.bits&&(e=Le(e,r.xyClient),i=Be(i,r.xyClient));return{x:e.x,y:e.y,w:i.x-e.x,h:i.y-e.y}}get centerClient(){let e=this.boundsClient;return e?Ce(e,{x:e.w/2,y:e.h/2}):this.primary?.xyClient}get locked(){return this.#i.ownerDocument.pointerLockElement===this.#i}get pinchClient(){if(!this.#e)return;let e=this.#n;return e?pe(e,this.#e):void 0}postupdate(){this.invalid=!1}register(e){let i=this.#i[`${e}EventListener`].bind(this.#i);for(let r of Et)i(r,this.#r);return this}reset(){this.invalid=!1,this.primary=void 0;for(let e in this.secondary)delete this.secondary[e];this.#e=void 0}update(){((this.primary?.bits?1:0)+Object.values(this.secondary).length<2||!this.#e)&&(this.#e=this.#n)}[Symbol.dispose](){this.register("remove")}#t(e){let i=0;for(let r=1;r<=e;r<<=1)(r&e)===r&&(i|=this.bitByButton[r]??0);return i}#r=e=>{if(!e.isTrusted)return;this.invalid=!0;let i=e.metaKey||e.altKey||e.ctrlKey?0:this.#t(e.buttons),r=this.locked;if(i&&e.type==="pointerdown"&&(e.preventDefault(),!r))try{this.#i.setPointerCapture(e.pointerId)}catch{}let n=e.isPrimary?this.primary:this.secondary[e.pointerId],o;if(r){let f=1/devicePixelRatio;o={x:Math.min(Math.max(0,(n?.xyClient.x??e.offsetX)+e.movementX*f),this.#i.clientWidth),y:Math.min(Math.max(0,(n?.xyClient.y??e.offsetY)+e.movementY*f),this.#i.clientHeight)}}else o={x:e.offsetX,y:e.offsetY};let a=e.type,d=St[e.pointerType],m;i&&(e.type==="pointerdown"?m={x:o.x,y:o.y}:e.type==="pointermove"&&(m=n?.clickClient));let h=!!i&&(n?.drag||!!m&&Pe(m,o)>=this.dragMinClient),p={clickClient:m,bits:i,drag:h,ev:a,id:e.pointerId,primary:e.isPrimary,type:d,xyClient:o};e.isPrimary?this.primary=p:i?this.secondary[e.pointerId]=p:delete this.secondary[e.pointerId],this.onEvent()};get#n(){if((this.primary?.bits?1:0)+Object.values(this.secondary).length<2)return;let e=this.boundsClient;return e?{x:e.w,y:e.h}:void 0}};var F=class{deltaClient;onEvent=()=>{};#e;constructor(e){this.#e=e}postupdate(){this.deltaClient=void 0}register(e){return this.#e[`${e}EventListener`].bind(this.#e)("wheel",this.#i,{passive:!0}),this}reset(){this.deltaClient=void 0}[Symbol.dispose](){this.register("remove")}#i=e=>{!e.isTrusted||e.metaKey||e.altKey||e.ctrlKey||(this.deltaClient={x:e.deltaX,y:e.deltaY,z:e.deltaZ},this.onEvent())}};var $=class{comboMaxIntervalMillis=300;gestured=!1;handled=!1;invalid=!1;minHeldMillis=300;#e={};#i={};#t=0;#r;#n=[];#s;#a={x:0,y:0};#l;#d=0;#m;#o;#u;#p=0;#h;#f;constructor(e,i){this.#r=e,this.#s=new U(i),this.#l=new q(globalThis),this.#m=new O(i.ownerDocument),this.#o=new V(i),this.#h=new F(i)}get anyOn(){return this.#t!==0}get combo(){let e=[];for(let i of this.#n){let r=[];for(let n=1;n<=i;n<<=1)(n&i)===n&&this.#i[n]&&r.push(this.#i[n]);r.sort(),e.push(r)}return e}get contextMenu(){return this.#s}get dir(){return this.#a}get gamepad(){return this.#l.connected?{}:void 0}get held(){return!this.handled&&this.#d>=this.minHeldMillis}isAnyOn(...e){return!this.handled&&!!(this.#t&this.#c(e))}isAnyOnStart(...e){return this.started&&this.isAnyOn(...e)}isAnyOnStill(...e){let i=this.#c(e);return!this.handled&&!!(this.#t&this.#p&i)}isAnyStarted(...e){let i=this.#c(e);return!this.handled&&(this.#t&i)!==(this.#p&i)}isCombo(...e){return e.length===this.#n.length&&this.isComboEndsWith(...e)}isComboEndsWith(...e){for(let[i,r]of e.entries()){let n=this.#c(r);if(this.#n.at(-e.length+i)!==n)return!1}return!this.handled&&(this.#n.at(-1)===this.#t||!this.#t)}isComboEndsWithStart(...e){return this.isOnStart(...e.at(-1))&&this.isComboEndsWith(...e)}isComboStart(...e){return this.isOnStart(...e.at(-1))&&this.isCombo(...e)}isOff(...e){return!this.handled&&!this.isOn(...e)}isOffStart(...e){let i=this.#c(e);return(this.#p&i)===i&&this.started&&this.isOff(...e)}isOn(...e){let i=this.#c(e);return!this.handled&&(this.#t&i)===i}isOnStart(...e){return this.started&&this.isOn(...e)}get key(){return{invalid:this.#m.invalid}}mapDefault(){this.mapKeyboardCode("U","ArrowUp"),this.mapKeyboardCode("D","ArrowDown"),this.mapKeyboardCode("L","ArrowLeft"),this.mapKeyboardCode("R","ArrowRight"),this.mapKeyboardCode("C","KeyC"),this.mapKeyboardCode("A","KeyX","Space"),this.mapKeyboardCode("B","KeyZ"),this.mapKeyboardCode("Menu","Enter"),this.mapKeyboardCode("Back","Escape"),this.mapGamepadAxis("U","D",1,3),this.mapGamepadAxis("L","R",0,2),this.mapGamepadButton("U",12),this.mapGamepadButton("D",13),this.mapGamepadButton("L",14),this.mapGamepadButton("R",15),this.mapGamepadButton("C",2),this.mapGamepadButton("B",0),this.mapGamepadButton("A",1),this.mapGamepadButton("Menu",9),this.mapGamepadButton("Back",8),this.mapPointerClick("A",1),this.mapPointerClick("B",2),this.mapPointerClick("C",4)}mapGamepadAxis(e,i,...r){for(let n of r)this.#l.bitByAxis[n]=[this.#y(e),this.#y(i)]}mapGamepadButton(e,...i){for(let r of i)this.#l.bitByButton[r]=this.#y(e)}mapKeyboardCode(e,...i){for(let r of i)this.#m.bitByCode[r]=this.#y(e)}mapPointerClick(e,...i){for(let r of i)this.#o.bitByButton[r]=this.#y(e)}get on(){let e=[];for(let i in this.#e)this.isOn(i)&&e.push(i);return e.sort()}set onEvent(e){this.#l.onEvent=e,this.#m.onEvent=e,this.#o.onEvent=e,this.#h.onEvent=e}get point(){return this.#u}get pointer(){return this.#o}register(e){return globalThis[`${e}EventListener`]("blur",this.reset),this.#s.register(e),this.#l.register(e),this.#m.register(e),this.#o.register(e),this.#h.register(e),this}reset=()=>{this.#t=0,this.#p=0,this.handled=!1,this.#d=0,this.#n.length=0,this.#l.reset(),this.#m.reset(),this.#o.reset(),this.#u=void 0,this.#h.reset(),this.#f=void 0};get started(){return!this.handled&&this.#t!==this.#p}update(e){if(this.handled=!1,this.#l.update(),this.#o.update(),this.#p=this.#t,this.#t=this.#l.bits|this.#m.bits|(this.#o.primary?.bits??0),this.invalid=this.#t!==this.#p||this.#o.invalid||!!this.#h.deltaClient,this.gestured||=!!this.#t,this.#a.x=this.#a.y=0,(this.#e.U&this.#t)===this.#e.U&&(this.#a.y-=1),(this.#e.D&this.#t)===this.#e.D&&(this.#a.y+=1),(this.#e.L&this.#t)===this.#e.L&&(this.#a.x-=1),(this.#e.R&this.#t)===this.#e.R&&(this.#a.x+=1),(e>this.comboMaxIntervalMillis&&this.#t!==this.#p||this.#d+e>this.comboMaxIntervalMillis&&!this.#t)&&(this.#n.length=0),this.#t===this.#p?this.#d=this.#d+e:this.#d=e,this.#t&&this.#t!==this.#p&&(this.#p&&(this.#n.length=0),this.#n.push(this.#t)),this.#o.primary){let i=this.#o.pinchClient,r=this.#o.primary.drag&&!Object.values(this.#o.secondary).length,n=[];for(let d of Object.values(this.#o.secondary))n.push({type:d.type,click:d.clickClient?{client:d.clickClient,local:this.#r.clientToXYLocal(d.clickClient),...this.#r.clientToXY(d.clickClient)}:void 0,...this.#r.clientToXY(d.xyClient),client:d.xyClient,local:this.#r.clientToXYLocal(d.xyClient)});let o=this.#o.centerClient,a={client:o,local:this.#r.clientToXYLocal(o),...this.#r.clientToXY(o)};this.#u={center:a,click:this.#o.primary.clickClient?{client:this.#o.primary.clickClient,local:this.#r.clientToXYLocal(this.#o.primary.clickClient),...this.#r.clientToXY(this.#o.primary.clickClient)}:void 0,drag:{on:r,start:!this.#u?.drag.on&&r,end:!!this.#u?.drag.on&&!r},invalid:this.#o.invalid,pinch:i?{client:i,xy:this.#r.clientToXY(i)}:void 0,secondary:n,type:this.#o.primary.type,...this.#r.clientToXY(this.#o.primary.xyClient),client:this.#o.primary.xyClient,local:this.#r.clientToXYLocal(this.#o.primary.xyClient)}}else this.#u=void 0;this.#f=this.#h.deltaClient?{delta:{client:this.#h.deltaClient,xy:this.#r.clientToXY(this.#h.deltaClient)}}:void 0,this.#m.postupdate(),this.#o.postupdate(),this.#h.postupdate()}[Symbol.dispose](){this.register("remove")}get wheel(){return this.#f}#c(e){let i=0;for(let r of e)i|=this.#e[r]??0;return i}#y(e){let i=this.#e[e]??=1<<Object.keys(this.#e).length;return this.#i[i]=e,i}};function y(t){return t!=null&&!Array.isArray(t)&&typeof t=="object"}function Ie(t){return t[0]?`${t[0].toLocaleLowerCase()}${t.slice(1)}`:t}function Ue(t,e,i,r){return{ents:t.ents?.map(n=>Ct(n,e,i,r))??[],keepZoo:t.keepZoo??!1,minWH:t.minWH?Xt(t.minWH):{w:1/0,h:1/0}}}function N(t){if(!t||typeof t=="number"){let e=t??0;return{n:e,s:e,w:e,e}}return"x"in t||"y"in t?{n:t.y??0,s:t.y??0,w:t.x??0,e:t.x??0}:{n:t.n??0,s:t.s??0,w:t.w??0,e:t.e??0}}function Tt(t,e,i){let r=c(t.pressed,e,i);t.z&&(r.z=u[t.z]),r.visible=!1;let n=c(t.selected,e,i);return t.z&&(n.z=u[t.z]),{pressed:r,selected:n,started:!1,type:t.type??"Button"}}function Rt(t,e){if(!t.sprite)throw Error("cursor missing sprite");return t.sprite.visible=!1,{bounds:{x:0,y:0,w:0,h:0},keyboard:e.keyboard??0,pick:e.pick,point:t.sprite.tag}}function Ct(t,e,i,r){let n={};for(let o in t){let a=o;n[a]=i(n,t,a,e,r)??Pt(n,t,a,e,r)}return n.invalid=!0,n}function Pt(t,e,i,r,n){if(e[i]!=null)switch(i){case"button":return Tt(e[i],r,n);case"cursor":return Rt(t,e[i]);case"fps":return Bt(e[i]);case"hud":return Lt(e[i]);case"cam":case"draw":case"debugInput":case"id":case"name":case"text":return e[i];case"ninePatch":return _t(t,e[i],r,n);case"override":return Mt(e[i]);case"sprite":return c(e[i],r,n);case"textWH":return Yt(e[i]);case"textXY":return At(t,e[i]);default:}}function Bt(t){return{prevFrames:0,next:{created:performance.now(),frames:0}}}function Lt(t){return{fill:t.fill,margin:N(t.margin??0),modulo:kt(t.modulo??0),origin:t.origin}}function _t(t,e,i,r){if(!t.sprite)throw Error("nine patch missing sprite");let n={center:e.patch.center==null?void 0:c(e.patch.center,i,r),n:e.patch.n==null?void 0:c(e.patch.n,i,r),s:e.patch.s==null?void 0:c(e.patch.s,i,r),w:e.patch.w==null?void 0:c(e.patch.w,i,r),e:e.patch.e==null?void 0:c(e.patch.e,i,r),nw:e.patch.nw==null?void 0:c(e.patch.nw,i,r),ne:e.patch.ne==null?void 0:c(e.patch.ne,i,r),sw:e.patch.sw==null?void 0:c(e.patch.sw,i,r),se:e.patch.se==null?void 0:c(e.patch.se,i,r)},o=N(e.border),a={border:o,pad:N(e.pad),patch:n};return n.center&&(n.center.z=t.sprite.z),n.n&&(n.n.h=o.n,(!y(e.patch.n)||e.patch.n.z==null)&&(n.n.z=t.sprite.z)),n.s&&(n.s.h=o.s,(!y(e.patch.s)||e.patch.s.z==null)&&(n.s.z=t.sprite.z)),n.w&&(n.w.w=o.w,(!y(e.patch.w)||e.patch.w.z==null)&&(n.w.z=t.sprite.z)),n.e&&(n.e.w=o.e,(!y(e.patch.e)||e.patch.e.z==null)&&(n.e.z=t.sprite.z)),n.nw&&(n.nw.w=o.w,n.nw.h=o.n,(!y(e.patch.nw)||e.patch.nw.z==null)&&(n.nw.z=t.sprite.z)),n.ne&&(n.ne.w=o.e,n.ne.h=o.n,(!y(e.patch.ne)||e.patch.ne.z==null)&&(n.ne.z=t.sprite.z)),n.sw&&(n.sw.w=o.w,n.sw.h=o.s,(!y(e.patch.sw)||e.patch.sw.z==null)&&(n.sw.z=t.sprite.z)),n.se&&(n.se.w=o.e,n.se.h=o.s,(!y(e.patch.se)||e.patch.se.z==null)&&(n.se.z=t.sprite.z)),a}function Mt(t){return{invalid:t.invalid}}function c(t,e,i){let r=typeof t=="string"?"default":Ie(t.pool??"Default");if(!e[r])throw Error(`no ${r} sprite pool`);let n=e[r].alloc();if(typeof t=="string"){if(!(t in i.anim))throw Error(`no tag "${t}"`);return n.tag=t,n}if(t.tag!=null){if(!(t.tag in i.anim))throw Error(`no tag "${t.tag}"`);n.tag=t.tag}return n.visible=t.visible??t.tag!=null,t.flip&&(n.flipX=t.flip==="X"||t.flip==="XY",n.flipY=t.flip==="Y"||t.flip==="XY"),t.stretch!=null&&(n.stretch=t.stretch),t.w!=null&&(n.w=t.w),t.h!=null&&(n.h=t.h),t.scale!=null&&(n.w*=typeof t.scale=="number"?t.scale:t.scale.x??1,n.h*=typeof t.scale=="number"?t.scale:t.scale.y??1),t.x!=null&&(n.x=t.x),t.y!=null&&(n.y=t.y),t.z!=null&&(n.z=u[t.z]),t.zend!=null&&(n.zend=t.zend),n}function Yt(t){return{layout:{chars:[],cursor:{x:0,y:0},w:0,h:0,trimmedH:0},maxW:t.maxW??Me.w,pad:N(t.pad),scale:t.scale??1,trim:t.trim}}function At(t,e){return{chars:[],z:e.z?u[e.z]:t.sprite?.z??u.Bottom}}function Xt(t){return typeof t=="number"?{w:t,h:t}:{w:Number(t?.w??0),h:Number(t?.h??0)}}function kt(t){return typeof t=="number"?{x:t,y:t}:{x:t.x??0,y:t.y??0}}var G=class{#e;#i;#t=0;#r;#n;constructor(e){if(e.allocBytes<=0)throw Error("byte allocation must be > 0");if(e.pageBlocks<=0)throw Error("page blocks must be > 0");this.#i={...e,init:e.init??(()=>{}),minPages:e.minPages??1};let i=this.#i.minPages*e.pageBlocks;this.#e=new Array(i),this.#r=new Uint8Array,this.#a(i,"Init")}alloc(){this.#t>=this.#s&&this.#a(this.#s+this.#i.pageBlocks,"Call");let e=this.#e[this.#t];return e.i=this.#t*this.#i.allocBytes,this.#t++,this.#i.init(e),e}clear(){this.#t=0;let e=this.#i.minPages*this.#i.pageBlocks;this.#s>e&&this.#a(e,"Call")}free(e){if(!this.#t)throw Error("pool underflow");this.#t--;let i=this.#t*this.#i.allocBytes;this.#r.copyWithin(e.i,i,i+this.#i.allocBytes),this.#e[this.#t].i=e.i,[this.#e[e.i],this.#e[this.#t]]=[this.#e[this.#t],this.#e[e.i]];let r=Math.floor((this.#s-this.#t)/this.#i.pageBlocks);r&&this.#s/this.#i.pageBlocks-r>=this.#i.minPages&&this.#a(this.#s-r*this.#i.pageBlocks,"Call")}get size(){return this.#t}get view(){return this.#n}toDebugString(){let e="";for(let i=0;i<this.#r.buffer.byteLength;i++)i&&!(i%this.#i.allocBytes)&&(e+=" "),e+=this.#r[i].toString(16).padStart(2,"0");return e}get#s(){return this.#r.buffer.byteLength/this.#i.allocBytes}#a(e,i){i==="Call"&&l?.mem&&console.debug(`[mem] ${e<this.#s?"shrinking":"growing"} pool to ${e}`),this.#e.length=e;for(let o=this.#s;o<e;o++)this.#e[o]=this.#i.alloc(this);let r=new ArrayBuffer(e*this.#i.allocBytes),n=new Uint8Array(r);n.set(this.#r.subarray(0,e*this.#i.allocBytes)),this.#r=n,this.#n=new DataView(r)}};function K(t){return new G({alloc:e=>new P(e,0,t.atlas,t.looper),init:e=>e.init(),allocBytes:x,...t})}var Q=class{#e;constructor(e){this.#e=e*16807%2147483647,this.#e<=0&&(this.#e=(this.#e+2147483646)%2147483646+1)}get num(){return this.#e=this.#e*16807%2147483647,(this.#e-1)/2147483646}get seed(){return this.#e}};var Z=s;function J(t,e){return((e==="Sec"?0:(59-t.getSeconds()%60)*1e3)+1e3-t.getMilliseconds()%1e3)%(e==="Sec"?1e3:6e4)}function qe(t){return`#${t.toString(16).padStart(8,"0")}`}function Oe(t){let[e,i,r,n]=t.match(/[0-9.]+/g)?.map(Number)??[];return(Math.round(e??0)<<24|Math.round(i??0)<<16|Math.round(r??0)<<8|Math.round((n??1)*255))>>>0}function Ve(t){document.body.style.margin="0",document.body.style.width="100dvw",document.body.style.height="100dvh",document.body.style.overflow="hidden",document.body.style.background=qe(t)}function Fe(t){if(!document.querySelector('meta[name="viewport"]')){let e=document.createElement("meta");e.name="viewport",e.content="width=device-width, maximum-scale=1, minimum-scale=1, user-scalable=no",document.head.appendChild(e)}if(t&&!document.querySelector('meta[name="description"]')){let e=document.createElement("meta");e.name="description",e.content=t,document.head.appendChild(e)}}function $e(t,e){if(t??=document.createElement("canvas"),t.width=0,t.style.cursor="none",t.style.display="block",t.style.outline="none",e==="Int"&&(t.style.imageRendering="pixelated"),t.style.touchAction="none",t.tabIndex=0,t.focus(),!t.parentNode){let i=document.createElement("main");i.style.backgroundColor=document.body.style.backgroundColor,i.style.height="100%",i.append(t),document.body.append(i)}return t}var j=class{#e;#i;#t=0;#r;#n=0;constructor(e,i,r){this.#e=e,this.#i=i,this.#r=r}register(e){return e==="add"?this.#n=setTimeout(()=>{this.#r(),this.#t=setInterval(this.#r,this.#i)},this.#e()):(clearTimeout(this.#n),clearInterval(this.#t)),this}[Symbol.dispose](){this.register("remove")}};async function Ne(t){let e=new Promise((i,r)=>{t.onload=()=>i(t),t.onerror=()=>r(Error(`image load error for ${t.src}`))});return t.complete?t:await e}var ee=class{onChange=()=>{};#e;register(e){return this.#e?.removeEventListener("change",this.#i),e==="add"?(this.#e=matchMedia(`not (resolution: ${devicePixelRatio}dppx)`),this.#e.addEventListener("change",this.#i)):this.#e=void 0,this}[Symbol.dispose](){this.register("remove")}#i=()=>{this.register("add"),this.onChange()}};function Ke(t,e,i,r){let n=zt(t,e,i);return t.useProgram(n),{buffer:t.createBuffer(),program:n,textures:r,uniform:Ht(t,n),vao:t.createVertexArray()}}function Ht(t,e){let i=e?t.getProgramParameter(e,t.ACTIVE_UNIFORMS):0,r=l?.render?new Proxy({},{get(n,o){if(n[o]==null)throw Error(`no shader uniform "${o}"`);return n[o]}}):{};for(let n=0;n<i;++n){let o=t.getActiveUniform(e,n);if(!o)throw Error(`no shader uniform at index ${n}`);let a=t.getUniformLocation(e,o.name);if(!a)throw Error(`no shader uniform "${o.name}"`);let d=o.name.replace("[0]","");r[d]=a}return r}function zt(t,e,i){let r=t.createProgram();if(!r)return null;let n=Ge(t,"VERTEX_SHADER",e),o=Ge(t,"FRAGMENT_SHADER",i);if(!n||!o)return null;if(t.attachShader(r,n),t.attachShader(r,o),t.linkProgram(r),l?.render&&!t.getProgramParameter(r,t.LINK_STATUS)){let a=t.getProgramInfoLog(r)?.slice(0,-1);throw Error(`shader link failure; ${a}`)}return t.detachShader(r,o),t.detachShader(r,n),t.deleteShader(o),t.deleteShader(n),r}function Ge(t,e,i){let r=t.createShader(t[e]);if(!r)return r;if(t.shaderSource(r,i.trim()),t.compileShader(r),l?.render&&!t.getShaderParameter(r,t.COMPILE_STATUS)){let n=t.getShaderInfoLog(r)?.slice(0,-1);throw Error(`shader compile failure; ${n}`)}return r}var Qe=`#version 300 es
|
|
14
|
+
#pragma debug(${l?.render?"on":"off"})
|
|
15
|
+
#pragma optimize(${l?.render?"off":"on"})
|
|
16
|
+
|
|
17
|
+
precision highp int;
|
|
18
|
+
precision highp float;
|
|
19
|
+
precision highp usampler2D;
|
|
20
|
+
|
|
21
|
+
uniform sampler2D uTex;
|
|
22
|
+
uniform uvec2 uTexWH;
|
|
23
|
+
|
|
24
|
+
flat in uint vStretch;
|
|
25
|
+
flat in ivec4 vTexXYWH;
|
|
26
|
+
flat in uint vVisible;
|
|
27
|
+
in vec2 vDstWH;
|
|
28
|
+
flat in ivec2 vDstWHFixed;
|
|
29
|
+
|
|
30
|
+
out vec4 oRGBA;
|
|
31
|
+
|
|
32
|
+
void main() {
|
|
33
|
+
if (vVisible == 0u || vDstWHFixed.x == 0 || vDstWHFixed.y == 0)
|
|
34
|
+
discard;
|
|
35
|
+
|
|
36
|
+
vec2 px = vec2(vTexXYWH.xy) + (
|
|
37
|
+
vStretch == 1u ? (vDstWH * vec2(vTexXYWH.zw) / vec2(vDstWHFixed))
|
|
38
|
+
: mod(vDstWH, vec2(vTexXYWH.zw))
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
oRGBA = texture(uTex, px / vec2(uTexWH));
|
|
42
|
+
if(oRGBA.a < .001) discard;
|
|
43
|
+
}
|
|
44
|
+
`;var Ze=`#version 300 es
|
|
45
|
+
#pragma debug(${l?.render?"on":"off"})
|
|
46
|
+
#pragma optimize(${l?.render?"off":"on"})
|
|
47
|
+
|
|
48
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/WebGL_best_practices#essl300_minimum_requirements_webgl_2
|
|
49
|
+
precision highp int;
|
|
50
|
+
precision highp float;
|
|
51
|
+
precision highp usampler2D;
|
|
52
|
+
|
|
53
|
+
uniform ivec4 uCam;
|
|
54
|
+
uniform usampler2D uCels;
|
|
55
|
+
uniform float uAge;
|
|
56
|
+
|
|
57
|
+
layout (location=0) in ivec2 iUV;
|
|
58
|
+
layout (location=1) in uint iy8_x24;
|
|
59
|
+
layout (location=2) in uint iw8_sxyz_llll_y16;
|
|
60
|
+
layout (location=3) in uint ii11_c5_h12_w4;
|
|
61
|
+
layout (location=4) in uint r31_v;
|
|
62
|
+
|
|
63
|
+
const int maxY = 0x20000;
|
|
64
|
+
const int layers = 16;
|
|
65
|
+
const int maxDepth = maxY * layers;
|
|
66
|
+
|
|
67
|
+
flat out uint vStretch;
|
|
68
|
+
flat out ivec4 vTexXYWH;
|
|
69
|
+
flat out uint vVisible;
|
|
70
|
+
out vec2 vDstWH;
|
|
71
|
+
flat out ivec2 vDstWHFixed;
|
|
72
|
+
|
|
73
|
+
void main() {
|
|
74
|
+
int x = int(floor(float(int((iy8_x24 & 0xffffffu) << 8) >> 8) / 64.));
|
|
75
|
+
int y = int(floor(float(int(iy8_x24 >> 24) | (int(iw8_sxyz_llll_y16 & 0xffffu) << 16 >> 8)) / 64.));
|
|
76
|
+
int z = int((iw8_sxyz_llll_y16 >> 16) & 0xfu);
|
|
77
|
+
bool zend = bool(iw8_sxyz_llll_y16 & 0x100000u);
|
|
78
|
+
bool flipY = bool(iw8_sxyz_llll_y16 & 0x200000u);
|
|
79
|
+
bool flipX = bool(iw8_sxyz_llll_y16 & 0x400000u);
|
|
80
|
+
bool stretch = bool(iw8_sxyz_llll_y16 & 0x800000u);
|
|
81
|
+
int id = int((ii11_c5_h12_w4 >> 17) & 0x7ff0u); // ignore cel.
|
|
82
|
+
int cel = int((ii11_c5_h12_w4 >> 16) & 0xfu); // ignore the MSB.
|
|
83
|
+
int w = int(((ii11_c5_h12_w4 & 0xfu) << 8) | (iw8_sxyz_llll_y16 >> 24));
|
|
84
|
+
int h = int((ii11_c5_h12_w4 >> 4) & 0xfffu);
|
|
85
|
+
bool visible = bool(r31_v & 0x1u);
|
|
86
|
+
|
|
87
|
+
// https://www.patternsgameprog.com/opengl-2d-facade-25-get-the-z-of-a-pixel
|
|
88
|
+
float depth = float((${u.Top} - z + 1) * maxY - (y + (zend ? 0 : h))) / float(maxDepth);
|
|
89
|
+
|
|
90
|
+
ivec2 targetWH = iUV * ivec2(w, h);
|
|
91
|
+
|
|
92
|
+
vec2 end = vec2(x + targetWH.x, y + targetWH.y);
|
|
93
|
+
// UI layers are always given in screen coordinates.
|
|
94
|
+
// to-do: how to handle non-int mode?
|
|
95
|
+
vec2 camXY = z >= ${u.UIA} ? vec2(0, 0) : vec2(uCam.xy);
|
|
96
|
+
vec2 clip = ((-2. * camXY + 2. * end) / vec2(uCam.zw) - 1.) * vec2(1, -1);
|
|
97
|
+
gl_Position = vec4(clip, depth, 1);
|
|
98
|
+
|
|
99
|
+
int frame = (((int(uAge / ${62.5}) & 0x1f) - cel) + ${16}) & 0xf;
|
|
100
|
+
uvec4 texXYWH = texelFetch(uCels, ivec2(0, id + frame), 0);
|
|
101
|
+
vTexXYWH = ivec4(texXYWH);
|
|
102
|
+
vVisible = uint(visible);
|
|
103
|
+
|
|
104
|
+
vDstWH = vec2(targetWH * ivec2(flipX ? -1 : 1, flipY ? -1 : 1));
|
|
105
|
+
vDstWHFixed = ivec2(w, h) * ivec2(flipX ? -1 : 1, flipY ? -1 : 1);
|
|
106
|
+
|
|
107
|
+
vStretch = stretch ? 1u : 0u;
|
|
108
|
+
}
|
|
109
|
+
`;var Je=new Int8Array([1,1,0,1,1,0,0,0]),te=class{always=l?.render==="always";clears=0;loseContext;#e;#i=0;#t=!0;#r;#n=!1;#s;#a;#l;constructor(e,i,r){this.#a=e,this.#e=i,this.#s=r}clear(e){if(!this.#r)return;let{gl:i}=this.#r;this.#i!==e&&(this.#i=e,i.clearColor((e>>>24&255)/255,(e>>>16&255)/255,(e>>>8&255)/255,(e>>>0&255)/255)),i.clear(i.COLOR_BUFFER_BIT|i.DEPTH_BUFFER_BIT),this.clears++}draw(e){if(!this.#l||!this.#r)return;let{gl:i,spriteShader:r}=this.#r;if(i.bindBuffer(i.ARRAY_BUFFER,r.buffer),i.bufferData(i.ARRAY_BUFFER,e.view,i.DYNAMIC_DRAW,0,e.size*x),i.bindBuffer(i.ARRAY_BUFFER,null),i.bindVertexArray(r.vao),i.drawArraysInstanced(i.TRIANGLE_STRIP,0,Je.length/2,e.size),i.bindVertexArray(null),l?.render){let n=i.getError();n!==i.NO_ERROR&&console.error(`[render] GL error x${n.toString(16)}`)}this.#n=!1}get hasContext(){return this.#r!=null}get invalid(){return this.#n||this.always}load(e){this.#l=e,this.#r=this._Context()}predraw(e){if(!this.#r)return;let{gl:i,spriteShader:r,viewport:n}=this.#r;Re(n,e)||(i.viewport(0,0,e.w,e.h),n.w=e.w,n.h=e.h),i.useProgram(r.program),i.uniform4i(r.uniform.uCam,Math.floor(e.x),Math.floor(e.y),e.w,e.h),i.uniform1f(r.uniform.uAge,this.#s.age);for(let[o,a]of r.textures.entries())i.activeTexture(i.TEXTURE0+o),i.bindTexture(i.TEXTURE_2D,a)}register(e){return this.#e[`${e}EventListener`]("webglcontextlost",this.#d),this.#e[`${e}EventListener`]("webglcontextrestored",this.#m),this}setDepth(e){this.#t=e,this.#r&&(e?this.#r.gl.enable(this.#r.gl.DEPTH_TEST):this.#r.gl.disable(this.#r.gl.DEPTH_TEST))}[Symbol.dispose](){this.register("remove")}_Context(){let e=this.#r?.gl??Wt(this.#e,this.always);if(!e)return;let i=Ke(e,Ze,Qe,[e.createTexture(),e.createTexture()]);return e.enable(e.BLEND),e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA),this.setDepth(this.#t),e.depthRange(0,1),e.clearDepth(1),e.depthFunc(e.LESS),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,!1),e.bindVertexArray(i.vao),e.bindBuffer(e.ARRAY_BUFFER,e.createBuffer()),e.bufferData(e.ARRAY_BUFFER,Je,e.STATIC_DRAW),e.enableVertexAttribArray(0),e.vertexAttribIPointer(0,2,e.BYTE,0,0),e.bindBuffer(e.ARRAY_BUFFER,null),e.bindBuffer(e.ARRAY_BUFFER,i.buffer),e.enableVertexAttribArray(1),e.vertexAttribIPointer(1,1,e.UNSIGNED_INT,x,0),e.vertexAttribDivisor(1,1),e.enableVertexAttribArray(2),e.vertexAttribIPointer(2,1,e.UNSIGNED_INT,x,4),e.vertexAttribDivisor(2,1),e.enableVertexAttribArray(3),e.vertexAttribIPointer(3,1,e.UNSIGNED_INT,x,8),e.vertexAttribDivisor(3,1),e.enableVertexAttribArray(4),e.vertexAttribIPointer(4,1,e.UNSIGNED_INT,x,12),e.vertexAttribDivisor(4,1),e.bindBuffer(e.ARRAY_BUFFER,null),e.bindTexture(e.TEXTURE_2D,i.textures[0]),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),this.#l&&e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,this.#l),e.bindTexture(e.TEXTURE_2D,null),e.bindTexture(e.TEXTURE_2D,i.textures[1]),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST),e.texImage2D(e.TEXTURE_2D,0,e.RGBA16UI,1,this.#a.celXYWH.length/4,0,e.RGBA_INTEGER,e.UNSIGNED_SHORT,new Uint16Array(this.#a.celXYWH)),e.bindTexture(e.TEXTURE_2D,null),e.bindVertexArray(null),e.uniform1i(i.uniform.uTex,0),e.uniform1i(i.uniform.uCels,1),this.#l&&e.uniform2ui(i.uniform.uTexWH,this.#l.naturalWidth,this.#l.naturalHeight),!this.#n&&l?.invalid&&console.debug("[invalid] renderer invalid"),this.#n=!0,this.loseContext=e.getExtension("WEBGL_lose_context")??void 0,this.#r={gl:e,spriteShader:i,viewport:{w:0,h:0}}}#d=e=>{e.preventDefault(),console.debug("[render] GL context lost"),this.#r=void 0};#m=()=>{console.debug("[render] GL context restored"),this.#r=this._Context()}};function Wt(t,e){let i=t.getContext("webgl2",{antialias:!1,powerPreference:"low-power",preserveDrawingBuffer:!0,...!l?.render&&{desynchronized:e}});if(!i){console.debug("[render] no GL context");return}return l?.render&&!i.getContextAttributes()?.desynchronized&&console.debug("[render] no GL DOM desynchronization"),i}var ie=class{age=0;onFrame;#e=0;#i=!1;#t=0;register(e){let i=`${e}EventListener`;return document[i]("visibilitychange",this.#s),e==="remove"&&this.#r(),this.#i=e==="add",this}requestFrame(){this.#e||document.hidden||!this.#i||(this.#t=performance.now(),this.#e=requestAnimationFrame(this.#n))}[Symbol.dispose](){this.register("remove")}#r(){this.#e&&cancelAnimationFrame(this.#e),this.#e=0}#n=()=>{let e=performance.now(),i=e-this.#t;this.age=e,this.#e=0,this.onFrame?.(i)};#s=e=>{e.isTrusted&&(document.hidden?this.#r():this.requestFrame())}};var re=class{cam=new I;canvas;input;looper=new ie;pool;preload;random;renderer;tick={ms:0,s:0};zoo=new D;#e;#i=!1;#t=new ee;#r;#n;#s=!1;#a=new ResizeObserver(()=>this.onResize());constructor(e){if(Fe(e.description),this.canvas=$e(e.canvas,e.config.init.mode),!this.canvas.parentElement)throw Error("no canvas parent");if(this.#e=e.config.init.background??Oe(getComputedStyle(this.canvas.parentElement).backgroundColor),e.canvas||Ve(this.#e),this.cam.minWH=e.config.init.minWH,this.cam.mode=e.config.init.mode,this.cam.update(this.canvas),this.random=e.random??new Q(Date.now()),this.input=new $(this.cam,this.canvas),e.config.init.input!=="Custom"&&this.input.mapDefault(),this.input.onEvent=()=>this.onEvent(),this.#t.onChange=()=>this.onResize(),this.#n=e.preloadAtlas??void 0,!!this.#n!=!!e.config.atlas)throw Error("atlas misconfigured");this.preload=e.config.atlas?De(e.config.atlas):{anim:{},celXYWH:[],tags:[]},this.renderer=new te(this.preload??{},this.canvas,this.looper),this.pool={default:K({atlas:this.preload,looper:this.looper,minPages:e.sprites?.minPages??3,pageBlocks:e.sprites?.pageBlocks??1e3})},this.looper.onFrame=i=>this.onFrame(i),this.zoo.addSystem({loader:e.loaderSys}),this.zoo.add(e.loader)}alloc(e="default"){return this.pool[e].alloc()}get backgroundRGBA(){return this.#e}get invalid(){return this.zoo.invalid||this.cam.invalid||this.renderer.invalid||this.#i}set invalid(e){this.#i=e}onEvent(){this.requestFrame("Force")}onFrame(e){this.tick.ms=e,this.tick.s=e/1e3,!document.hidden&&(this.input.update(e),this.requestFrame(),this.#i=!1,this.zoo.update(this),this.cam.postupdate())}onPoll(){this.requestFrame("Force")}onResize(){this.requestFrame("Force")}setPoller(e,i){this.#r&&this.#r.register("remove"),this.#r=new j(i??(()=>0),e,()=>this.onPoll()),this.#s&&this.#r.register("add")}async register(e){this.input.register(e),this.renderer.register(e),this.looper.register(e),e==="add"?this.#a.observe(this.canvas.parentElement):this.#a.unobserve(this.canvas.parentElement),this.#t.register(e),e==="add"&&this.looper.requestFrame(),this.#r?.register(e),this.#n&&await Ne(this.#n),this.renderer.load(this.#n),this.#s=e==="add"}requestFrame(e){(e||this.renderer.always||this.input.anyOn||this.input.gamepad)&&this.looper.requestFrame()}async[Symbol.asyncDispose](){await this.register("remove")}};var je="void 2D game library demo.";var et={atlas:{anim:{"background--OrangeCheckerboard":{cels:1,h:2,id:0,w:2},"background--GreyCheckerboard":{cels:1,h:2,id:1,w:2},"background--Kiwi":{cels:1,h:2,id:2,w:2},"background--Strawberry":{cels:1,h:2,id:3,w:2},"background--Grape":{cels:1,h:2,id:4,w:2},"background--Blueberry":{cels:1,h:2,id:5,w:2},"background--Bubblegum":{cels:1,h:2,id:6,w:2},"background--Transparent":{cels:1,h:2,id:7,w:2},"background--Black":{cels:1,h:2,id:8,w:2},"backpacker--WalkRight":{cels:16,h:13,hitbox:{x:2,y:0,w:4,h:4},id:9,w:8},"backpacker--WalkDown":{cels:16,h:13,hitbox:{x:2,y:0,w:4,h:4},id:10,w:8},"backpacker--WalkUp":{cels:16,h:13,hitbox:{x:2,y:0,w:4,h:4},id:11,w:8},"cursor--Pointer":{cels:1,h:14,hitbox:{x:0,y:0,w:2,h:2},hurtbox:{x:0,y:0,w:2,h:2},id:12,w:8},"mem-prop-5x6--00":{cels:1,h:6,id:13,w:5},"mem-prop-5x6--01":{cels:1,h:6,id:14,w:5},"mem-prop-5x6--02":{cels:1,h:6,id:15,w:5},"mem-prop-5x6--03":{cels:1,h:6,id:16,w:5},"mem-prop-5x6--04":{cels:1,h:6,id:17,w:5},"mem-prop-5x6--05":{cels:1,h:6,id:18,w:5},"mem-prop-5x6--06":{cels:1,h:6,id:19,w:5},"mem-prop-5x6--07":{cels:1,h:6,id:20,w:5},"mem-prop-5x6--08":{cels:1,h:6,id:21,w:5},"mem-prop-5x6--09":{cels:1,h:6,id:22,w:5},"mem-prop-5x6--0a":{cels:1,h:6,id:23,w:5},"mem-prop-5x6--0b":{cels:1,h:6,id:24,w:5},"mem-prop-5x6--0c":{cels:1,h:6,id:25,w:5},"mem-prop-5x6--0d":{cels:1,h:6,id:26,w:5},"mem-prop-5x6--0e":{cels:1,h:6,id:27,w:5},"mem-prop-5x6--0f":{cels:1,h:6,id:28,w:5},"mem-prop-5x6--10":{cels:1,h:6,id:29,w:5},"mem-prop-5x6--11":{cels:1,h:6,id:30,w:5},"mem-prop-5x6--12":{cels:1,h:6,id:31,w:5},"mem-prop-5x6--13":{cels:1,h:6,id:32,w:5},"mem-prop-5x6--14":{cels:1,h:6,id:33,w:5},"mem-prop-5x6--15":{cels:1,h:6,id:34,w:5},"mem-prop-5x6--16":{cels:1,h:6,id:35,w:5},"mem-prop-5x6--17":{cels:1,h:6,id:36,w:5},"mem-prop-5x6--18":{cels:1,h:6,id:37,w:5},"mem-prop-5x6--19":{cels:1,h:6,id:38,w:5},"mem-prop-5x6--1a":{cels:1,h:6,id:39,w:5},"mem-prop-5x6--1b":{cels:1,h:6,id:40,w:5},"mem-prop-5x6--1c":{cels:1,h:6,id:41,w:5},"mem-prop-5x6--1d":{cels:1,h:6,id:42,w:5},"mem-prop-5x6--1e":{cels:1,h:6,id:43,w:5},"mem-prop-5x6--1f":{cels:1,h:6,id:44,w:5},"mem-prop-5x6--20":{cels:1,h:6,id:45,w:5},"mem-prop-5x6--21":{cels:1,h:6,id:46,w:5},"mem-prop-5x6--22":{cels:1,h:6,id:47,w:5},"mem-prop-5x6--23":{cels:1,h:6,id:48,w:5},"mem-prop-5x6--24":{cels:1,h:6,id:49,w:5},"mem-prop-5x6--25":{cels:1,h:6,id:50,w:5},"mem-prop-5x6--26":{cels:1,h:6,id:51,w:5},"mem-prop-5x6--27":{cels:1,h:6,id:52,w:5},"mem-prop-5x6--28":{cels:1,h:6,id:53,w:5},"mem-prop-5x6--29":{cels:1,h:6,id:54,w:5},"mem-prop-5x6--2a":{cels:1,h:6,id:55,w:5},"mem-prop-5x6--2b":{cels:1,h:6,id:56,w:5},"mem-prop-5x6--2c":{cels:1,h:6,id:57,w:5},"mem-prop-5x6--2d":{cels:1,h:6,id:58,w:5},"mem-prop-5x6--2e":{cels:1,h:6,id:59,w:5},"mem-prop-5x6--2f":{cels:1,h:6,id:60,w:5},"mem-prop-5x6--30":{cels:1,h:6,id:61,w:5},"mem-prop-5x6--31":{cels:1,h:6,id:62,w:5},"mem-prop-5x6--32":{cels:1,h:6,id:63,w:5},"mem-prop-5x6--33":{cels:1,h:6,id:64,w:5},"mem-prop-5x6--34":{cels:1,h:6,id:65,w:5},"mem-prop-5x6--35":{cels:1,h:6,id:66,w:5},"mem-prop-5x6--36":{cels:1,h:6,id:67,w:5},"mem-prop-5x6--37":{cels:1,h:6,id:68,w:5},"mem-prop-5x6--38":{cels:1,h:6,id:69,w:5},"mem-prop-5x6--39":{cels:1,h:6,id:70,w:5},"mem-prop-5x6--3a":{cels:1,h:6,id:71,w:5},"mem-prop-5x6--3b":{cels:1,h:6,id:72,w:5},"mem-prop-5x6--3c":{cels:1,h:6,id:73,w:5},"mem-prop-5x6--3d":{cels:1,h:6,id:74,w:5},"mem-prop-5x6--3e":{cels:1,h:6,id:75,w:5},"mem-prop-5x6--3f":{cels:1,h:6,id:76,w:5},"mem-prop-5x6--40":{cels:1,h:6,id:77,w:5},"mem-prop-5x6--41":{cels:1,h:6,id:78,w:5},"mem-prop-5x6--42":{cels:1,h:6,id:79,w:5},"mem-prop-5x6--43":{cels:1,h:6,id:80,w:5},"mem-prop-5x6--44":{cels:1,h:6,id:81,w:5},"mem-prop-5x6--45":{cels:1,h:6,id:82,w:5},"mem-prop-5x6--46":{cels:1,h:6,id:83,w:5},"mem-prop-5x6--47":{cels:1,h:6,id:84,w:5},"mem-prop-5x6--48":{cels:1,h:6,id:85,w:5},"mem-prop-5x6--49":{cels:1,h:6,id:86,w:5},"mem-prop-5x6--4a":{cels:1,h:6,id:87,w:5},"mem-prop-5x6--4b":{cels:1,h:6,id:88,w:5},"mem-prop-5x6--4c":{cels:1,h:6,id:89,w:5},"mem-prop-5x6--4d":{cels:1,h:6,id:90,w:5},"mem-prop-5x6--4e":{cels:1,h:6,id:91,w:5},"mem-prop-5x6--4f":{cels:1,h:6,id:92,w:5},"mem-prop-5x6--50":{cels:1,h:6,id:93,w:5},"mem-prop-5x6--51":{cels:1,h:6,id:94,w:5},"mem-prop-5x6--52":{cels:1,h:6,id:95,w:5},"mem-prop-5x6--53":{cels:1,h:6,id:96,w:5},"mem-prop-5x6--54":{cels:1,h:6,id:97,w:5},"mem-prop-5x6--55":{cels:1,h:6,id:98,w:5},"mem-prop-5x6--56":{cels:1,h:6,id:99,w:5},"mem-prop-5x6--57":{cels:1,h:6,id:100,w:5},"mem-prop-5x6--58":{cels:1,h:6,id:101,w:5},"mem-prop-5x6--59":{cels:1,h:6,id:102,w:5},"mem-prop-5x6--5a":{cels:1,h:6,id:103,w:5},"mem-prop-5x6--5b":{cels:1,h:6,id:104,w:5},"mem-prop-5x6--5c":{cels:1,h:6,id:105,w:5},"mem-prop-5x6--5d":{cels:1,h:6,id:106,w:5},"mem-prop-5x6--5e":{cels:1,h:6,id:107,w:5},"mem-prop-5x6--5f":{cels:1,h:6,id:108,w:5},"mem-prop-5x6--60":{cels:1,h:6,id:109,w:5},"mem-prop-5x6--61":{cels:1,h:6,id:110,w:5},"mem-prop-5x6--62":{cels:1,h:6,id:111,w:5},"mem-prop-5x6--63":{cels:1,h:6,id:112,w:5},"mem-prop-5x6--64":{cels:1,h:6,id:113,w:5},"mem-prop-5x6--65":{cels:1,h:6,id:114,w:5},"mem-prop-5x6--66":{cels:1,h:6,id:115,w:5},"mem-prop-5x6--67":{cels:1,h:6,id:116,w:5},"mem-prop-5x6--68":{cels:1,h:6,id:117,w:5},"mem-prop-5x6--69":{cels:1,h:6,id:118,w:5},"mem-prop-5x6--6a":{cels:1,h:6,id:119,w:5},"mem-prop-5x6--6b":{cels:1,h:6,id:120,w:5},"mem-prop-5x6--6c":{cels:1,h:6,id:121,w:5},"mem-prop-5x6--6d":{cels:1,h:6,id:122,w:5},"mem-prop-5x6--6e":{cels:1,h:6,id:123,w:5},"mem-prop-5x6--6f":{cels:1,h:6,id:124,w:5},"mem-prop-5x6--70":{cels:1,h:6,id:125,w:5},"mem-prop-5x6--71":{cels:1,h:6,id:126,w:5},"mem-prop-5x6--72":{cels:1,h:6,id:127,w:5},"mem-prop-5x6--73":{cels:1,h:6,id:128,w:5},"mem-prop-5x6--74":{cels:1,h:6,id:129,w:5},"mem-prop-5x6--75":{cels:1,h:6,id:130,w:5},"mem-prop-5x6--76":{cels:1,h:6,id:131,w:5},"mem-prop-5x6--77":{cels:1,h:6,id:132,w:5},"mem-prop-5x6--78":{cels:1,h:6,id:133,w:5},"mem-prop-5x6--79":{cels:1,h:6,id:134,w:5},"mem-prop-5x6--7a":{cels:1,h:6,id:135,w:5},"mem-prop-5x6--7b":{cels:1,h:6,id:136,w:5},"mem-prop-5x6--7c":{cels:1,h:6,id:137,w:5},"mem-prop-5x6--7d":{cels:1,h:6,id:138,w:5},"mem-prop-5x6--7e":{cels:1,h:6,id:139,w:5},"mem-prop-5x6--7f":{cels:1,h:6,id:140,w:5},"oidoid--Default":{cels:1,h:16,id:141,w:16}},celXY:[22,37,21,27,21,29,21,31,20,33,22,33,20,35,22,35,20,37,24,26,24,26,8,16,8,16,0,16,0,16,16,14,16,14,72,13,72,13,32,26,32,26,0,16,0,16,64,13,64,13,56,13,56,13,48,13,48,13,40,13,40,13,32,13,32,13,56,13,56,13,24,13,24,13,72,0,72,0,64,0,64,0,24,0,24,0,56,0,56,0,48,0,48,0,48,0,48,0,24,0,24,0,40,0,40,0,32,0,32,0,32,0,32,0,16,0,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,45,56,40,56,10,53,5,53,0,53,35,51,30,51,25,51,20,51,15,51,35,45,70,50,65,50,60,50,55,50,50,50,45,50,40,50,10,47,5,47,0,47,70,62,50,56,65,62,60,62,55,62,50,62,45,62,40,62,10,59,5,59,0,59,35,57,70,32,30,57,25,57,20,57,15,57,75,56,70,56,65,56,60,56,75,50,55,56,10,35,75,32,15,33,0,35,5,35,40,38,45,38,65,32,60,32,55,32,50,32,45,32,40,26,50,26,55,26,60,26,65,26,70,26,75,26,16,27,0,29,5,29,10,29,40,32,45,26,10,41,30,45,25,45,20,45,15,45,75,44,70,44,65,44,60,44,55,44,50,44,45,44,40,44,50,38,5,41,0,41,35,39,30,39,25,39,20,39,15,39,75,38,70,38,65,38,60,38,55,38,45,56,0,0]},init:{input:"Default",minWH:{w:320,h:240},minScale:1,mode:"Int",zoomOut:0}};var tt={$schema:"../level/level-file.json",ents:[{name:"Debug",debugInput:!0},{name:"Cam",cam:{}},{id:"Cursor",sprite:{tag:"cursor--Pointer"},cursor:{}},{name:"FPS",fps:!0,text:"",sprite:{z:"UIA"},textWH:{trim:"Descender"},hud:{origin:"SE",margin:4},textXY:{},override:{invalid:!1}},{name:"Overlay",sprite:{pool:"Overlay",tag:"background--GreyCheckerboard",w:4095,h:4095,z:"Top"}},{id:"RenderToggle",name:"RenderToggle",text:"render",sprite:{z:"UID"},textWH:{pad:2,scale:2,trim:"Leading"},hud:{origin:"NE",margin:{n:2,e:2}},ninePatch:{border:1,pad:2,patch:{center:"background--Grape",n:"background--Bubblegum",s:"background--Kiwi",w:"background--Strawberry",e:"background--Blueberry"}},button:{pressed:"background--Bubblegum",selected:"background--OrangeCheckerboard",type:"Toggle",z:"UIC"},renderToggle:{},textXY:{z:"UIE"}},{name:"Clock",text:"",sprite:{z:"UIF"},clock:{},textWH:{scale:2,trim:"Descender"},hud:{margin:{y:4},origin:"S"},textXY:{}},{name:"Logo",sprite:{tag:"oidoid--Default",z:"UIF"},hud:{origin:"SW",margin:4}},{name:"Border",sprite:{z:"UIG"},hud:{origin:"NW",fill:"XY"},ninePatch:{patch:{n:"background--Black",s:"background--Black",w:"background--Black",e:"background--Black",nw:"background--Black",ne:"background--Black",sw:"background--Black",se:"background--Black"},border:1}},{name:"Backpacker",sprite:{tag:"backpacker--WalkRight",x:7,y:7,z:"C",stretch:!0,scale:5}},{name:"Tally",text:"",sprite:{z:"UIA"},tally:{},textWH:{},hud:{origin:"NE",margin:{n:4,e:60}},textXY:{},override:{invalid:!1}},{name:"Draw",draw:{}}]};function it(t,e,i){return Ue(t,e,qt,i)}var qt=(t,e,i)=>{if(e[i]==null)throw Error("no component val");switch(i){case"clock":return e[i];case"renderToggle":if(!t.button)throw Error("no button in render toggle");return Ee(t,l?.render==="always"),e[i];case"tally":return{updates:0}}};var ne=class{query="cam";update(e,i){i.input.isAnyOnStart("U","D","L","R")&&i.cam.diagonalize(i.input.dir);let r=B(25*i.tick.s);i.input.isOn("U")&&(i.cam.y-=r),i.input.isOn("D")&&(i.cam.y+=r),i.input.isOn("L")&&(i.cam.x-=r),i.input.isOn("R")&&(i.cam.x+=r),i.input.wheel?.delta.xy.y&&(i.cam.zoomOut-=i.input.wheel.delta.client.y*.01),i.cam.update(i.canvas)}};var oe=class{query="clock & text";update(e){W(e,Ot(new Date))}};function Ot(t){let e=`${t.getHours()%12||12}`.padStart(2," "),i=`${t.getMinutes()}`.padStart(2,"0"),r=`${t.getSeconds()}`.padStart(2,"0");return`${e}:${i}:${r}`}var se=class{query="draw";update(e,i){i.invalid&&(i.renderer.clear(i.backgroundRGBA),i.renderer.predraw(i.cam),i.renderer.setDepth(!0),i.renderer.draw(i.pool.default),i.renderer.setDepth(!1),i.renderer.draw(i.pool.overlay))}};var ae=class{query="button & renderToggle & sprite";update(e,i){i.renderer.always=E(e)}};var le=class{query="tally & text";update(e,i){e.tally.updates++;let r=[`${`${e.tally.updates}`.padStart(8," ")} updates`,`${`${i.renderer.clears+1}`.padStart(8," ")} renders`].join(`
|
|
110
|
+
`);W(e,r)}};var de=class{query="loader";update(e,i){switch(e.loader.level){case void 0:{Vt(e,i);return}case"Init":return;default:e.loader.level}}};function Vt(t,e){e.pool.overlay=K({atlas:e.preload,looper:e.looper,pageBlocks:10}),e.setPoller((l?.seconds?1:60)*1e3,()=>J(new Date,l?.seconds?"Sec":"Min")),e.zoo.addDefaultSystems(),e.zoo.addSystem({cam:new ne,clock:new oe,draw:new se,renderToggle:new ae,tally:new le});let i=it(tt,e.pool,e.preload);e.zoo.add(...i.ents),t.loader.level="Init"}console.debug(`void v${Z.version}+${Z.published}.${Z.hash} \u2500\u2500\u2500oidoid>\xB0\u2500\u2500`);var be=new re({config:et,description:je,preloadAtlas:document.querySelector("#preload-atlas"),loader:{loader:{level:void 0}},loaderSys:new de});be.setPoller((l?.seconds?1:60)*1e3,()=>J(new Date,l?.seconds?"Sec":"Min"));await be.register("add");l&&(globalThis.v=be);
|
|
111
|
+
//# sourceMappingURL=index.js.map
|
|
112
|
+
</script>
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
</body></html>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://
|
|
3
|
+
"$id": "https://oidoid.github.io/void/config-file.v0.json",
|
|
4
4
|
"title": "void Config File Schema",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"description": "a JSON representation of a void config file.",
|
|
@@ -8,8 +8,7 @@
|
|
|
8
8
|
"Atlas": {
|
|
9
9
|
"type": "object",
|
|
10
10
|
"description": "sprite sheet config.",
|
|
11
|
-
"
|
|
12
|
-
"required": ["dir", "image", "json"],
|
|
11
|
+
"required": ["dir", "image"],
|
|
13
12
|
"properties": {
|
|
14
13
|
"dir": {
|
|
15
14
|
"type": "string",
|
|
@@ -20,42 +19,79 @@
|
|
|
20
19
|
"type": "string",
|
|
21
20
|
"description": "sprite sheet image output.",
|
|
22
21
|
"examples": ["dist/public/atlas.webp", "atlas.png"]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"MinCamWH": {
|
|
26
|
+
"$ref": "#/$defs/WH",
|
|
27
|
+
"description": "min cam dimensions. infinity always uses min scale.",
|
|
28
|
+
"properties": {
|
|
29
|
+
"w": { "$ref": "#/$defs/UnboundedUInt" },
|
|
30
|
+
"h": { "$ref": "#/$defs/UnboundedUInt" }
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"RGBA": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"description": "color (red, green, blue, alpha) in hex.",
|
|
36
|
+
"pattern": "^[A-Fa-f0-9]{8}$",
|
|
37
|
+
"examples": ["01234567"]
|
|
38
|
+
},
|
|
39
|
+
"UnboundedUInt": {
|
|
40
|
+
"oneOf": [{ "type": "integer", "minimum": 0 }, { "enum": ["Infinity"] }]
|
|
41
|
+
},
|
|
42
|
+
"WH": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"description": "area.",
|
|
45
|
+
"properties": {
|
|
46
|
+
"w": {
|
|
47
|
+
"type": "integer",
|
|
48
|
+
"description": "width.",
|
|
49
|
+
"minimum": 0,
|
|
50
|
+
"maximum": 4095
|
|
23
51
|
},
|
|
24
|
-
"
|
|
25
|
-
"type": "
|
|
26
|
-
"description": "
|
|
27
|
-
"
|
|
52
|
+
"h": {
|
|
53
|
+
"type": "integer",
|
|
54
|
+
"description": "height.",
|
|
55
|
+
"minimum": 0,
|
|
56
|
+
"maximum": 4095
|
|
28
57
|
}
|
|
29
58
|
}
|
|
30
59
|
}
|
|
31
60
|
},
|
|
32
|
-
"
|
|
61
|
+
"required": ["out"],
|
|
62
|
+
"unevaluatedProperties": false,
|
|
33
63
|
"properties": {
|
|
34
64
|
"$schema": {
|
|
35
65
|
"type": "string",
|
|
36
66
|
"description": "the configuration schema URI.",
|
|
37
|
-
"default": "https://
|
|
67
|
+
"default": "https://oidoid.github.io/void/config-file.v0.json"
|
|
38
68
|
},
|
|
39
69
|
"entry": {
|
|
40
70
|
"type": "string",
|
|
41
|
-
"
|
|
42
|
-
"
|
|
71
|
+
"description": "HTML entrypoint input. the file should include a script tag sourcing the TypeScript / JavaScript entrypoint.",
|
|
72
|
+
"default": "src/assets/index.html"
|
|
43
73
|
},
|
|
44
74
|
"meta": {
|
|
45
75
|
"type": "string",
|
|
46
|
-
"
|
|
47
|
-
"
|
|
76
|
+
"description": "esbuild bundle metadata file output.",
|
|
77
|
+
"default": "dist/meta.json"
|
|
48
78
|
},
|
|
49
79
|
"out": {
|
|
50
80
|
"type": "object",
|
|
51
81
|
"description": "output config.",
|
|
52
|
-
"
|
|
82
|
+
"required": ["game"],
|
|
83
|
+
"unevaluatedProperties": false,
|
|
53
84
|
"properties": {
|
|
54
85
|
"dir": {
|
|
55
86
|
"type": "string",
|
|
56
87
|
"description": "HTML and JavaScript output directory.",
|
|
57
88
|
"default": "dist/public/"
|
|
58
89
|
},
|
|
90
|
+
"game": {
|
|
91
|
+
"type": "string",
|
|
92
|
+
"description": "game config output.",
|
|
93
|
+
"examples": ["src/assets/void.game.json", "void.game.json"]
|
|
94
|
+
},
|
|
59
95
|
"name": {
|
|
60
96
|
"type": "string",
|
|
61
97
|
"description": "HTML output file stem when watch is disabled. defaults to entry.",
|
|
@@ -63,6 +99,41 @@
|
|
|
63
99
|
}
|
|
64
100
|
}
|
|
65
101
|
},
|
|
66
|
-
"preloadAtlas": { "$ref": "#/$defs/Atlas" }
|
|
102
|
+
"preloadAtlas": { "$ref": "#/$defs/Atlas", "unevaluatedProperties": false },
|
|
103
|
+
"init": {
|
|
104
|
+
"type": "object",
|
|
105
|
+
"description": "init config.",
|
|
106
|
+
"unevaluatedProperties": false,
|
|
107
|
+
"properties": {
|
|
108
|
+
"background": {
|
|
109
|
+
"$ref": "#/$defs/RGBA",
|
|
110
|
+
"description": "render clear color. defaults to canvas parent background color."
|
|
111
|
+
},
|
|
112
|
+
"input": {
|
|
113
|
+
"description": "button mapping. defaults to init all default buttons, custom to leave all unmapped.",
|
|
114
|
+
"enum": ["Default", "Unmapped"],
|
|
115
|
+
"$comment": "to-do: support custom mapping here."
|
|
116
|
+
},
|
|
117
|
+
"minWH": {
|
|
118
|
+
"$ref": "#/$defs/MinCamWH",
|
|
119
|
+
"description": "min cam dimensions. infinity always uses min scale. defaults to infinity.",
|
|
120
|
+
"unevaluatedProperties": false
|
|
121
|
+
},
|
|
122
|
+
"minScale": {
|
|
123
|
+
"type": "number",
|
|
124
|
+
"description": "min cam scale.",
|
|
125
|
+
"minimum": 1
|
|
126
|
+
},
|
|
127
|
+
"mode": {
|
|
128
|
+
"description": "use fractional or integral rendering.",
|
|
129
|
+
"enum": ["Int", "Float"]
|
|
130
|
+
},
|
|
131
|
+
"zoomOut": {
|
|
132
|
+
"type": "number",
|
|
133
|
+
"description": "cam zoom offset.",
|
|
134
|
+
"minimum": 0
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
67
138
|
}
|
|
68
139
|
}
|