@the-inclusionist/engine 9.0.0 → 11.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +120 -78
- package/app/css/style.css +761 -377
- package/app/public/vendor/fonts/playwrite-cu.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-es-deco.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-es.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-gb-j.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-gb-s.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-pe.woff2 +0 -0
- package/app/public/vendor/fonts/playwrite-pt.woff2 +0 -0
- package/app/public/vendor/fonts-licences/NOTICE.txt +166 -0
- package/app/public/vendor/fonts-licences/OFL-1.1.txt +86 -0
- package/app/public/vendor/fonts.css +36 -84
- package/dist-pkg/boot/create-game.d.ts +499 -219
- package/dist-pkg/boot/create-game.js +3944 -562
- package/dist-pkg/core/a11y-sr.d.ts +25 -3
- package/dist-pkg/core/a11y-sr.js +38 -19
- package/dist-pkg/core/accessible-label.d.ts +17 -0
- package/dist-pkg/core/accessible-label.js +37 -0
- package/dist-pkg/core/accommodation-subjects.d.ts +26 -0
- package/dist-pkg/core/accommodation-subjects.js +32 -0
- package/dist-pkg/core/accommodations.d.ts +125 -0
- package/dist-pkg/core/accommodations.js +195 -0
- package/dist-pkg/core/actions.d.ts +108 -55
- package/dist-pkg/core/actions.js +122 -71
- package/dist-pkg/core/calm-mode.d.ts +31 -0
- package/dist-pkg/core/calm-mode.js +47 -0
- package/dist-pkg/core/camera-cycle.d.ts +15 -0
- package/dist-pkg/core/camera-cycle.js +7 -0
- package/dist-pkg/core/caption-duration.d.ts +15 -0
- package/dist-pkg/core/caption-duration.js +19 -0
- package/dist-pkg/core/cartridge-problems.d.ts +34 -0
- package/dist-pkg/core/cartridge-problems.js +53 -0
- package/dist-pkg/core/constants.d.ts +0 -54
- package/dist-pkg/core/constants.js +9 -76
- package/dist-pkg/core/contract.d.ts +142 -164
- package/dist-pkg/core/contract.js +222 -208
- package/dist-pkg/core/dom-query.d.ts +4 -4
- package/dist-pkg/core/dom-query.js +12 -20
- package/dist-pkg/core/entity.d.ts +62 -77
- package/dist-pkg/core/entity.js +18 -32
- package/dist-pkg/core/escape-html.d.ts +9 -10
- package/dist-pkg/core/escape-html.js +16 -20
- package/dist-pkg/core/flash-threshold.d.ts +17 -0
- package/dist-pkg/core/flash-threshold.js +113 -0
- package/dist-pkg/core/game-speed.d.ts +11 -0
- package/dist-pkg/core/game-speed.js +16 -0
- package/dist-pkg/core/genres.d.ts +20 -0
- package/dist-pkg/core/genres.js +44 -0
- package/dist-pkg/core/i18n.d.ts +71 -60
- package/dist-pkg/core/i18n.js +186 -200
- package/dist-pkg/core/loop.d.ts +17 -6
- package/dist-pkg/core/loop.js +26 -26
- package/dist-pkg/core/pause-icon-catalogue.d.ts +15 -0
- package/dist-pkg/core/pause-icon-catalogue.js +54 -0
- package/dist-pkg/core/ring.d.ts +17 -0
- package/dist-pkg/core/ring.js +29 -0
- package/dist-pkg/core/rng.d.ts +7 -12
- package/dist-pkg/core/rng.js +23 -53
- package/dist-pkg/core/route.d.ts +26 -26
- package/dist-pkg/core/route.js +126 -121
- package/dist-pkg/core/scenes.d.ts +37 -40
- package/dist-pkg/core/scenes.js +41 -43
- package/dist-pkg/core/screens.d.ts +4 -4
- package/dist-pkg/core/screens.js +11 -16
- package/dist-pkg/core/session-clock.d.ts +23 -0
- package/dist-pkg/core/session-clock.js +37 -0
- package/dist-pkg/core/setting-defaults.d.ts +61 -0
- package/dist-pkg/core/setting-defaults.js +66 -0
- package/dist-pkg/core/speech-rate.d.ts +29 -0
- package/dist-pkg/core/speech-rate.js +47 -0
- package/dist-pkg/core/state.d.ts +118 -118
- package/dist-pkg/core/state.js +322 -297
- package/dist-pkg/core/visual-cycles.d.ts +30 -0
- package/dist-pkg/core/visual-cycles.js +52 -0
- package/dist-pkg/core/visual-state.d.ts +13 -0
- package/dist-pkg/core/visual-state.js +6 -0
- package/dist-pkg/educational/activities-registry.d.ts +1 -1
- package/dist-pkg/educational/activities-registry.js +9 -8
- package/dist-pkg/educational/adaptive-engine.d.ts +11 -11
- package/dist-pkg/educational/adaptive-engine.js +17 -17
- package/dist-pkg/educational/segment-bar.d.ts +12 -12
- package/dist-pkg/educational/segment-bar.js +9 -9
- package/dist-pkg/i18n/en.js +324 -223
- package/dist-pkg/i18n/es.js +323 -223
- package/dist-pkg/i18n/pt.js +348 -226
- package/dist-pkg/input/default-bindings.d.ts +37 -38
- package/dist-pkg/input/default-bindings.js +127 -144
- package/dist-pkg/input/devices.d.ts +7 -7
- package/dist-pkg/input/devices.js +17 -16
- package/dist-pkg/input/edges.d.ts +23 -32
- package/dist-pkg/input/edges.js +23 -28
- package/dist-pkg/input/empathy-filter.d.ts +22 -0
- package/dist-pkg/input/empathy-filter.js +34 -0
- package/dist-pkg/input/face-map.d.ts +96 -0
- package/dist-pkg/input/face-map.js +255 -0
- package/dist-pkg/input/face-signals.d.ts +40 -0
- package/dist-pkg/input/face-signals.js +48 -0
- package/dist-pkg/input/gamepad.d.ts +195 -145
- package/dist-pkg/input/gamepad.js +383 -556
- package/dist-pkg/input/gaze-cycle.d.ts +64 -0
- package/dist-pkg/input/gaze-cycle.js +133 -0
- package/dist-pkg/input/gaze-relative.d.ts +68 -0
- package/dist-pkg/input/gaze-relative.js +142 -0
- package/dist-pkg/input/hand-map.d.ts +28 -0
- package/dist-pkg/input/hand-map.js +142 -0
- package/dist-pkg/input/input-cooldown.d.ts +17 -0
- package/dist-pkg/input/input-cooldown.js +39 -0
- package/dist-pkg/input/key-default.d.ts +30 -0
- package/dist-pkg/input/key-default.js +60 -0
- package/dist-pkg/input/keyboard-runtime.d.ts +15 -21
- package/dist-pkg/input/keyboard-runtime.js +23 -27
- package/dist-pkg/input/keyboard.d.ts +68 -63
- package/dist-pkg/input/keyboard.js +83 -105
- package/dist-pkg/input/keydown.d.ts +123 -137
- package/dist-pkg/input/keydown.js +284 -289
- package/dist-pkg/input/latch-edge.d.ts +33 -21
- package/dist-pkg/input/latch-edge.js +34 -35
- package/dist-pkg/input/latch-scope.d.ts +51 -50
- package/dist-pkg/input/latch-scope.js +61 -82
- package/dist-pkg/input/latch-store.d.ts +26 -30
- package/dist-pkg/input/latch-store.js +42 -50
- package/dist-pkg/input/latch-sync.d.ts +29 -29
- package/dist-pkg/input/latch-sync.js +25 -25
- package/dist-pkg/input/latch.d.ts +14 -17
- package/dist-pkg/input/latch.js +29 -37
- package/dist-pkg/input/pad-defaults.d.ts +13 -16
- package/dist-pkg/input/pad-defaults.js +21 -28
- package/dist-pkg/input/pad-reading.d.ts +76 -0
- package/dist-pkg/input/pad-reading.js +169 -0
- package/dist-pkg/input/pad-wizard.d.ts +99 -0
- package/dist-pkg/input/pad-wizard.js +256 -0
- package/dist-pkg/input/pointer-space.d.ts +19 -20
- package/dist-pkg/input/pointer-space.js +27 -32
- package/dist-pkg/input/pointer.d.ts +39 -40
- package/dist-pkg/input/pointer.js +42 -45
- package/dist-pkg/input/state.d.ts +101 -89
- package/dist-pkg/input/state.js +54 -134
- package/dist-pkg/input/switch-scan.d.ts +59 -0
- package/dist-pkg/input/switch-scan.js +67 -0
- package/dist-pkg/input/synthetic-source.d.ts +42 -0
- package/dist-pkg/input/synthetic-source.js +57 -0
- package/dist-pkg/input/touch-bindings.d.ts +127 -116
- package/dist-pkg/input/touch-bindings.js +158 -173
- package/dist-pkg/input/touch.d.ts +147 -72
- package/dist-pkg/input/touch.js +362 -126
- package/dist-pkg/input/transport-in-use.d.ts +107 -0
- package/dist-pkg/input/transport-in-use.js +130 -0
- package/dist-pkg/input/transports.d.ts +90 -117
- package/dist-pkg/input/transports.js +104 -106
- package/dist-pkg/input/virtual-controller.d.ts +82 -0
- package/dist-pkg/input/virtual-controller.js +69 -0
- package/dist-pkg/input/vocabulary-migration.d.ts +50 -49
- package/dist-pkg/input/vocabulary-migration.js +80 -79
- package/dist-pkg/input/voice-map.d.ts +59 -0
- package/dist-pkg/input/voice-map.js +123 -0
- package/dist-pkg/platform/audio-ambient.d.ts +13 -2
- package/dist-pkg/platform/audio-ambient.js +14 -14
- package/dist-pkg/platform/audio-earcons.d.ts +20 -19
- package/dist-pkg/platform/audio-earcons.js +51 -42
- package/dist-pkg/platform/audio-jingles.js +9 -10
- package/dist-pkg/platform/audio-mixer.d.ts +14 -2
- package/dist-pkg/platform/audio-mixer.js +31 -39
- package/dist-pkg/platform/audio-sonar.d.ts +49 -152
- package/dist-pkg/platform/audio-sonar.js +124 -302
- package/dist-pkg/platform/audio.d.ts +62 -19
- package/dist-pkg/platform/audio.js +193 -168
- package/dist-pkg/platform/choose-by-voice.d.ts +70 -0
- package/dist-pkg/platform/choose-by-voice.js +157 -0
- package/dist-pkg/platform/flash-sampler.d.ts +19 -0
- package/dist-pkg/platform/flash-sampler.js +79 -0
- package/dist-pkg/platform/font-library.d.ts +77 -0
- package/dist-pkg/platform/font-library.js +98 -0
- package/dist-pkg/platform/font-library.json +721 -0
- package/dist-pkg/platform/heavy-catalogue.d.ts +77 -0
- package/dist-pkg/platform/heavy-catalogue.js +256 -0
- package/dist-pkg/platform/heavy-mirror.d.ts +20 -0
- package/dist-pkg/platform/heavy-mirror.js +73 -0
- package/dist-pkg/platform/heavy.d.ts +136 -0
- package/dist-pkg/platform/heavy.js +324 -0
- package/dist-pkg/platform/interruptible-speech.d.ts +23 -16
- package/dist-pkg/platform/interruptible-speech.js +77 -54
- package/dist-pkg/platform/kokoro-port.d.ts +27 -0
- package/dist-pkg/platform/kokoro-port.js +50 -0
- package/dist-pkg/platform/kokoro-runtime.d.ts +20 -0
- package/dist-pkg/platform/kokoro-runtime.js +52 -0
- package/dist-pkg/platform/kokoro.d.ts +70 -0
- package/dist-pkg/platform/kokoro.js +133 -0
- package/dist-pkg/platform/listener-scope.d.ts +12 -0
- package/dist-pkg/platform/listener-scope.js +90 -0
- package/dist-pkg/platform/locale-host.d.ts +14 -0
- package/dist-pkg/platform/locale-host.js +45 -0
- package/dist-pkg/platform/microphone.d.ts +51 -0
- package/dist-pkg/platform/microphone.js +118 -0
- package/dist-pkg/platform/onnx-runtime.d.ts +34 -0
- package/dist-pkg/platform/onnx-runtime.js +42 -0
- package/dist-pkg/platform/reading-in-worker.d.ts +64 -0
- package/dist-pkg/platform/reading-in-worker.js +125 -0
- package/dist-pkg/platform/reading-model.d.ts +94 -0
- package/dist-pkg/platform/reading-model.js +272 -0
- package/dist-pkg/platform/reading-runtime.d.ts +24 -0
- package/dist-pkg/platform/reading-runtime.js +164 -0
- package/dist-pkg/platform/reading-worker.d.ts +41 -0
- package/dist-pkg/platform/reading-worker.js +58 -0
- package/dist-pkg/platform/reading.d.ts +80 -0
- package/dist-pkg/platform/reading.js +136 -0
- package/dist-pkg/platform/speech-recognition.d.ts +60 -0
- package/dist-pkg/platform/speech-recognition.js +104 -0
- package/dist-pkg/platform/speech.d.ts +23 -1
- package/dist-pkg/platform/speech.js +29 -18
- package/dist-pkg/platform/storage-keys.d.ts +96 -0
- package/dist-pkg/platform/storage-keys.js +106 -0
- package/dist-pkg/platform/storage.d.ts +46 -111
- package/dist-pkg/platform/storage.js +104 -169
- package/dist-pkg/platform/tts.d.ts +85 -39
- package/dist-pkg/platform/tts.js +447 -127
- package/dist-pkg/platform/vision-loop.d.ts +23 -0
- package/dist-pkg/platform/vision-loop.js +56 -0
- package/dist-pkg/platform/vision.d.ts +132 -0
- package/dist-pkg/platform/vision.js +117 -0
- package/dist-pkg/platform/voice-listener.d.ts +40 -0
- package/dist-pkg/platform/voice-listener.js +88 -0
- package/dist-pkg/platform/voice-plan.d.ts +15 -98
- package/dist-pkg/platform/voice-plan.js +56 -143
- package/dist-pkg/platform/vosk-runtime.d.ts +96 -0
- package/dist-pkg/platform/vosk-runtime.js +151 -0
- package/dist-pkg/platform/vosk-vocabulary.d.ts +6 -0
- package/dist-pkg/platform/vosk-vocabulary.js +178 -0
- package/dist-pkg/render/canvas.d.ts +13 -7
- package/dist-pkg/render/canvas.js +13 -13
- package/dist-pkg/render/crt.d.ts +48 -12
- package/dist-pkg/render/crt.js +78 -80
- package/dist-pkg/render/cvd-matrices.d.ts +22 -18
- package/dist-pkg/render/cvd-matrices.js +37 -38
- package/dist-pkg/render/hc-role-data.d.ts +7 -7
- package/dist-pkg/render/hc-role-data.js +14 -14
- package/dist-pkg/render/high-contrast.d.ts +67 -56
- package/dist-pkg/render/high-contrast.js +226 -217
- package/dist-pkg/render/low-vision-drawing.d.ts +5 -0
- package/dist-pkg/render/low-vision-drawing.js +46 -0
- package/dist-pkg/render/lq-filter.d.ts +32 -20
- package/dist-pkg/render/lq-filter.js +59 -65
- package/dist-pkg/render/port.d.ts +86 -88
- package/dist-pkg/render/port.js +17 -23
- package/dist-pkg/render/screen-pipeline.d.ts +42 -42
- package/dist-pkg/render/screen-pipeline.js +80 -87
- package/dist-pkg/render/sprite-fx.d.ts +2 -1
- package/dist-pkg/render/sprite-fx.js +16 -14
- package/dist-pkg/render/viewports.d.ts +20 -15
- package/dist-pkg/render/viewports.js +83 -114
- package/dist-pkg/render/viz-axes-labels.d.ts +47 -0
- package/dist-pkg/render/viz-axes-labels.js +88 -0
- package/dist-pkg/render/viz-axes.d.ts +89 -86
- package/dist-pkg/render/viz-axes.js +128 -116
- package/dist-pkg/render/viz-modes.d.ts +28 -29
- package/dist-pkg/render/viz-modes.js +40 -45
- package/dist-pkg/render/viz-refusal.d.ts +32 -0
- package/dist-pkg/render/viz-refusal.js +57 -0
- package/dist-pkg/render/viz-setters.d.ts +104 -66
- package/dist-pkg/render/viz-setters.js +182 -191
- package/dist-pkg/ui/aac-sets.d.ts +45 -0
- package/dist-pkg/ui/aac-sets.js +41 -0
- package/dist-pkg/ui/audio-choices.d.ts +68 -0
- package/dist-pkg/ui/audio-choices.js +98 -0
- package/dist-pkg/ui/audio-rows-that-apply.d.ts +12 -0
- package/dist-pkg/ui/audio-rows-that-apply.js +43 -0
- package/dist-pkg/ui/camera-control.d.ts +53 -0
- package/dist-pkg/ui/camera-control.js +48 -0
- package/dist-pkg/ui/changed-mark.d.ts +9 -8
- package/dist-pkg/ui/changed-mark.js +22 -53
- package/dist-pkg/ui/control-choices.d.ts +37 -0
- package/dist-pkg/ui/control-choices.js +84 -0
- package/dist-pkg/ui/debug-panel.d.ts +59 -43
- package/dist-pkg/ui/debug-panel.js +68 -69
- package/dist-pkg/ui/declared-words.d.ts +21 -0
- package/dist-pkg/ui/declared-words.js +66 -0
- package/dist-pkg/ui/dom.d.ts +10 -14
- package/dist-pkg/ui/dom.js +10 -47
- package/dist-pkg/ui/drawing-problems.d.ts +25 -0
- package/dist-pkg/ui/drawing-problems.js +94 -0
- package/dist-pkg/ui/eye-control.d.ts +36 -0
- package/dist-pkg/ui/eye-control.js +178 -0
- package/dist-pkg/ui/face-control.d.ts +25 -0
- package/dist-pkg/ui/face-control.js +183 -0
- package/dist-pkg/ui/focus-trap.d.ts +39 -49
- package/dist-pkg/ui/focus-trap.js +56 -65
- package/dist-pkg/ui/fonts.d.ts +157 -68
- package/dist-pkg/ui/fonts.js +305 -115
- package/dist-pkg/ui/footer-scroll-driver.d.ts +14 -0
- package/dist-pkg/ui/footer-scroll-driver.js +201 -0
- package/dist-pkg/ui/footer-scroll.d.ts +38 -0
- package/dist-pkg/ui/footer-scroll.js +55 -0
- package/dist-pkg/ui/game-options.d.ts +47 -0
- package/dist-pkg/ui/game-options.js +158 -0
- package/dist-pkg/ui/gaze-overlay.d.ts +64 -0
- package/dist-pkg/ui/gaze-overlay.js +165 -0
- package/dist-pkg/ui/hand-control.d.ts +25 -0
- package/dist-pkg/ui/hand-control.js +143 -0
- package/dist-pkg/ui/help-panel.d.ts +87 -0
- package/dist-pkg/ui/help-panel.js +242 -0
- package/dist-pkg/ui/hud-bands.d.ts +62 -0
- package/dist-pkg/ui/hud-bands.js +146 -0
- package/dist-pkg/ui/hud-row.d.ts +34 -0
- package/dist-pkg/ui/hud-row.js +80 -0
- package/dist-pkg/ui/hud.d.ts +73 -73
- package/dist-pkg/ui/hud.js +94 -98
- package/dist-pkg/ui/item-announcement.d.ts +13 -12
- package/dist-pkg/ui/item-announcement.js +25 -26
- package/dist-pkg/ui/layout.d.ts +103 -28
- package/dist-pkg/ui/layout.js +117 -99
- package/dist-pkg/ui/libras-avatar-clip.d.ts +30 -0
- package/dist-pkg/ui/libras-avatar-clip.js +86 -0
- package/dist-pkg/ui/libras-avatar-load.d.ts +52 -0
- package/dist-pkg/ui/libras-avatar-load.js +134 -0
- package/dist-pkg/ui/libras-avatar-plan.d.ts +102 -0
- package/dist-pkg/ui/libras-avatar-plan.js +211 -0
- package/dist-pkg/ui/libras-avatar-player.d.ts +28 -0
- package/dist-pkg/ui/libras-avatar-player.js +226 -0
- package/dist-pkg/ui/libras-avatar-stage.d.ts +37 -0
- package/dist-pkg/ui/libras-avatar-stage.js +208 -0
- package/dist-pkg/ui/libras-glosses.d.ts +28 -0
- package/dist-pkg/ui/libras-glosses.js +161 -0
- package/dist-pkg/ui/locale-flags.d.ts +16 -0
- package/dist-pkg/ui/locale-flags.js +30 -0
- package/dist-pkg/ui/loop-crash.d.ts +17 -17
- package/dist-pkg/ui/loop-crash.js +33 -62
- package/dist-pkg/ui/menu-intent.d.ts +61 -0
- package/dist-pkg/ui/menu-intent.js +88 -0
- package/dist-pkg/ui/menu-items.d.ts +20 -0
- package/dist-pkg/ui/menu-items.js +51 -0
- package/dist-pkg/ui/menu-nav.d.ts +98 -92
- package/dist-pkg/ui/menu-nav.js +398 -286
- package/dist-pkg/ui/mobility-choices.d.ts +26 -0
- package/dist-pkg/ui/mobility-choices.js +41 -0
- package/dist-pkg/ui/motion-choices.d.ts +31 -0
- package/dist-pkg/ui/motion-choices.js +68 -0
- package/dist-pkg/ui/motion-scene.d.ts +24 -19
- package/dist-pkg/ui/motion-scene.js +29 -61
- package/dist-pkg/ui/mount-panel.d.ts +81 -0
- package/dist-pkg/ui/mount-panel.js +61 -0
- package/dist-pkg/ui/panel-shell.d.ts +65 -31
- package/dist-pkg/ui/panel-shell.js +92 -66
- package/dist-pkg/ui/panel-widgets.d.ts +150 -0
- package/dist-pkg/ui/panel-widgets.js +294 -0
- package/dist-pkg/ui/pause-buttons.d.ts +35 -0
- package/dist-pkg/ui/pause-buttons.js +66 -0
- package/dist-pkg/ui/pause-icons.d.ts +261 -347
- package/dist-pkg/ui/pause-icons.js +671 -601
- package/dist-pkg/ui/pause-markup.d.ts +86 -0
- package/dist-pkg/ui/pause-markup.js +125 -0
- package/dist-pkg/ui/reach-notice.d.ts +22 -23
- package/dist-pkg/ui/reach-notice.js +55 -58
- package/dist-pkg/ui/scan-overlay.d.ts +23 -0
- package/dist-pkg/ui/scan-overlay.js +50 -0
- package/dist-pkg/ui/screen-text.d.ts +25 -0
- package/dist-pkg/ui/screen-text.js +152 -0
- package/dist-pkg/ui/session-clock.d.ts +32 -0
- package/dist-pkg/ui/session-clock.js +67 -0
- package/dist-pkg/ui/settings-aac.d.ts +70 -0
- package/dist-pkg/ui/settings-aac.js +208 -0
- package/dist-pkg/ui/settings-audio.d.ts +97 -114
- package/dist-pkg/ui/settings-audio.js +493 -425
- package/dist-pkg/ui/settings-controls.d.ts +53 -96
- package/dist-pkg/ui/settings-controls.js +143 -215
- package/dist-pkg/ui/settings-empathy.d.ts +39 -30
- package/dist-pkg/ui/settings-empathy.js +53 -60
- package/dist-pkg/ui/settings-mobility.d.ts +192 -0
- package/dist-pkg/ui/settings-mobility.js +332 -0
- package/dist-pkg/ui/settings-motion.d.ts +91 -70
- package/dist-pkg/ui/settings-motion.js +287 -198
- package/dist-pkg/ui/settings-panel.d.ts +58 -45
- package/dist-pkg/ui/settings-panel.js +189 -94
- package/dist-pkg/ui/settings-typo.d.ts +29 -78
- package/dist-pkg/ui/settings-typo.js +158 -129
- package/dist-pkg/ui/settings-visual.d.ts +29 -87
- package/dist-pkg/ui/settings-visual.js +240 -193
- package/dist-pkg/ui/shell.d.ts +112 -135
- package/dist-pkg/ui/shell.js +148 -217
- package/dist-pkg/ui/simulation-list.d.ts +27 -0
- package/dist-pkg/ui/simulation-list.js +76 -0
- package/dist-pkg/ui/simulation-over-the-world.d.ts +23 -0
- package/dist-pkg/ui/simulation-over-the-world.js +131 -0
- package/dist-pkg/ui/simulation-refusal.d.ts +5 -31
- package/dist-pkg/ui/simulation-refusal.js +8 -56
- package/dist-pkg/ui/switchable-control.d.ts +11 -0
- package/dist-pkg/ui/switchable-control.js +19 -0
- package/dist-pkg/ui/title.d.ts +3 -12
- package/dist-pkg/ui/title.js +49 -18
- package/dist-pkg/ui/top-band.d.ts +26 -0
- package/dist-pkg/ui/top-band.js +96 -0
- package/dist-pkg/ui/typo-choices.d.ts +71 -0
- package/dist-pkg/ui/typo-choices.js +85 -0
- package/dist-pkg/ui/visual-axes-panel.d.ts +11 -47
- package/dist-pkg/ui/visual-axes-panel.js +12 -94
- package/dist-pkg/ui/visual-choices.d.ts +77 -0
- package/dist-pkg/ui/visual-choices.js +107 -0
- package/dist-pkg/ui/vlibras.d.ts +77 -10
- package/dist-pkg/ui/vlibras.js +130 -81
- package/dist-pkg/ui/voice-control.d.ts +68 -0
- package/dist-pkg/ui/voice-control.js +276 -0
- package/dist-pkg/ui/voice-settings.d.ts +95 -0
- package/dist-pkg/ui/voice-settings.js +352 -0
- package/dist-pkg/ui/where-the-child-is.d.ts +31 -0
- package/dist-pkg/ui/where-the-child-is.js +70 -0
- package/docs/CREDITS.md +300 -44
- package/docs/LICENSES.md +189 -145
- package/package.json +51 -27
- package/scripts/check-cartridge.mjs +78 -0
- package/scripts/game-build.d.mts +25 -0
- package/scripts/game-build.mjs +144 -0
- package/scripts/heavy-into-the-delivery.mjs +388 -0
- package/scripts/libras-avatar.json +680 -0
- package/scripts/libras-avatar.mjs +246 -0
- package/scripts/libras-glosses/gloss.py +95 -0
- package/scripts/libras-glosses/pyproject.toml +32 -0
- package/scripts/libras-glosses/uv.lock +781 -0
- package/scripts/libras-glosses.mjs +351 -0
- package/scripts/licences/Apache-2.0.txt +176 -0
- package/scripts/licences/GPL-3.0.txt +674 -0
- package/scripts/licences/MIT.txt +17 -0
- package/scripts/licences/OFL-1.1.txt +86 -0
- package/scripts/licences/UFL-1.0.txt +96 -0
- package/scripts/licences/fonts.mjs +389 -0
- package/scripts/licences/third-party.mjs +301 -0
- package/scripts/licences/vosk-browser.NOTICE.txt +268 -0
- package/app/public/vendor/fonts/comicneue-400.woff2 +0 -0
- package/app/public/vendor/fonts/comicneue-700.woff2 +0 -0
- package/app/public/vendor/fonts/fondamento-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/fondamento-400.woff2 +0 -0
- package/app/public/vendor/fonts/inter-400.woff2 +0 -0
- package/app/public/vendor/fonts/inter-700.woff2 +0 -0
- package/app/public/vendor/fonts/lato-400.woff2 +0 -0
- package/app/public/vendor/fonts/lato-700.woff2 +0 -0
- package/app/public/vendor/fonts/literata-400.woff2 +0 -0
- package/app/public/vendor/fonts/literata-700.woff2 +0 -0
- package/app/public/vendor/fonts/newsreader-400.woff2 +0 -0
- package/app/public/vendor/fonts/newsreader-700.woff2 +0 -0
- package/app/public/vendor/fonts/opendyslexic-400.woff2 +0 -0
- package/app/public/vendor/fonts/opensans-400.woff2 +0 -0
- package/app/public/vendor/fonts/opensans-700.woff2 +0 -0
- package/app/public/vendor/fonts/pinyon-400.woff2 +0 -0
- package/app/public/vendor/fonts/pressstart-400.woff2 +0 -0
- package/app/public/vendor/fonts/quattro-400.woff2 +0 -0
- package/app/public/vendor/fonts/quattro-700.woff2 +0 -0
- package/app/public/vendor/fonts/sourcesans-400.woff2 +0 -0
- package/app/public/vendor/fonts/sourcesans-700.woff2 +0 -0
- package/app/public/vendor/fonts/sourceserif-400.woff2 +0 -0
- package/app/public/vendor/fonts/sourceserif-700.woff2 +0 -0
- package/app/public/vendor/fonts/ufmag-400.woff2 +0 -0
- package/dist-pkg/core/anel.d.ts +0 -17
- package/dist-pkg/core/anel.js +0 -31
- package/dist-pkg/core/collision.d.ts +0 -21
- package/dist-pkg/core/collision.js +0 -62
- package/dist-pkg/core/layers.d.ts +0 -63
- package/dist-pkg/core/layers.js +0 -95
- package/dist-pkg/core/letter-grid.d.ts +0 -55
- package/dist-pkg/core/letter-grid.js +0 -116
- package/dist-pkg/core/password.d.ts +0 -34
- package/dist-pkg/core/password.js +0 -205
- package/dist-pkg/core/rotulo-acessivel.d.ts +0 -17
- package/dist-pkg/core/rotulo-acessivel.js +0 -41
- package/dist-pkg/core/run-state.d.ts +0 -115
- package/dist-pkg/core/run-state.js +0 -40
- package/dist-pkg/core/tiles.d.ts +0 -12
- package/dist-pkg/core/tiles.js +0 -61
- package/dist-pkg/core/world.d.ts +0 -4
- package/dist-pkg/core/world.js +0 -58
- package/dist-pkg/input/origem-sintetica.d.ts +0 -44
- package/dist-pkg/input/origem-sintetica.js +0 -60
- package/dist-pkg/input/transporte-em-uso.d.ts +0 -101
- package/dist-pkg/input/transporte-em-uso.js +0 -130
- package/dist-pkg/platform/audio-nav.d.ts +0 -51
- package/dist-pkg/platform/audio-nav.js +0 -99
- package/dist-pkg/platform/guide-intensity.d.ts +0 -40
- package/dist-pkg/platform/guide-intensity.js +0 -73
- package/dist-pkg/platform/pesados-catalogo.d.ts +0 -14
- package/dist-pkg/platform/pesados-catalogo.js +0 -177
- package/dist-pkg/platform/pesados.d.ts +0 -31
- package/dist-pkg/platform/pesados.js +0 -75
- package/dist-pkg/platform/vozes-prontas.d.ts +0 -28
- package/dist-pkg/platform/vozes-prontas.js +0 -61
- package/dist-pkg/render/camera.d.ts +0 -58
- package/dist-pkg/render/camera.js +0 -105
- package/dist-pkg/render/cenario-data.d.ts +0 -127
- package/dist-pkg/render/cenario-data.js +0 -145
- package/dist-pkg/render/city-tex.d.ts +0 -63
- package/dist-pkg/render/city-tex.js +0 -228
- package/dist-pkg/render/city-tiles.d.ts +0 -11
- package/dist-pkg/render/city-tiles.js +0 -140
- package/dist-pkg/render/draw.d.ts +0 -149
- package/dist-pkg/render/draw.js +0 -231
- package/dist-pkg/render/fx.d.ts +0 -63
- package/dist-pkg/render/fx.js +0 -123
- package/dist-pkg/render/minimap.d.ts +0 -11
- package/dist-pkg/render/minimap.js +0 -94
- package/dist-pkg/render/parallax.d.ts +0 -85
- package/dist-pkg/render/parallax.js +0 -158
- package/dist-pkg/render/player-anim.d.ts +0 -71
- package/dist-pkg/render/player-anim.js +0 -152
- package/dist-pkg/render/recycling-tex.d.ts +0 -48
- package/dist-pkg/render/recycling-tex.js +0 -164
- package/dist-pkg/render/scene-city.d.ts +0 -77
- package/dist-pkg/render/scene-city.js +0 -181
- package/dist-pkg/render/scene-parallax.d.ts +0 -72
- package/dist-pkg/render/scene-parallax.js +0 -426
- package/dist-pkg/render/scene-sky.d.ts +0 -126
- package/dist-pkg/render/scene-sky.js +0 -295
- package/dist-pkg/render/set-cenario.d.ts +0 -54
- package/dist-pkg/render/set-cenario.js +0 -103
- package/dist-pkg/render/textures.d.ts +0 -75
- package/dist-pkg/render/textures.js +0 -240
- package/dist-pkg/render/title-scene.d.ts +0 -46
- package/dist-pkg/render/title-scene.js +0 -75
- package/dist-pkg/render/weather.d.ts +0 -96
- package/dist-pkg/render/weather.js +0 -171
- package/dist-pkg/render/wheelchair-sprites.d.ts +0 -32
- package/dist-pkg/render/wheelchair-sprites.js +0 -69
- package/dist-pkg/render/world-tex.d.ts +0 -18
- package/dist-pkg/render/world-tex.js +0 -87
- package/dist-pkg/ui/activities-menu.d.ts +0 -258
- package/dist-pkg/ui/activities-menu.js +0 -648
- package/dist-pkg/ui/caa-sets.d.ts +0 -39
- package/dist-pkg/ui/caa-sets.js +0 -65
- package/dist-pkg/ui/latch-refusal.d.ts +0 -32
- package/dist-pkg/ui/latch-refusal.js +0 -60
- package/dist-pkg/ui/map-hub.d.ts +0 -56
- package/dist-pkg/ui/map-hub.js +0 -138
- package/dist-pkg/ui/settings-caa.d.ts +0 -45
- package/dist-pkg/ui/settings-caa.js +0 -137
- package/dist-pkg/ui/settings-motor.d.ts +0 -175
- package/dist-pkg/ui/settings-motor.js +0 -342
- package/dist-pkg/ui/webcam.d.ts +0 -7
- package/dist-pkg/ui/webcam.js +0 -93
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// input/synthetic-source.ts — WHO DISPATCHED THIS KEY, when it was not a finger on a keyboard (ADR-0109).
|
|
3
|
+
//
|
|
4
|
+
// ========================= THE HARD PART OF THE EDGE, AND IT WAS NAMED =========================
|
|
5
|
+
// The gate `tests/the-keys-source-survives-the-door` has named it since the funnel began: a synthetic `KeyboardEvent`
|
|
6
|
+
// enters through `keydown` and would be stamped as the keyboard — the erasure coming back through the front door. Today
|
|
7
|
+
// the engine's only synthetic key is the menu key the pad and the virtual controller hand to the menus.
|
|
8
|
+
//
|
|
9
|
+
// `isTrusted` tells PRESSED from DISPATCHED — the one property a script cannot forge — but not WHICH assisted transport
|
|
10
|
+
// dispatched it. That has to arrive DECLARED, and that is what this module is.
|
|
11
|
+
//
|
|
12
|
+
// ⚠️ WHY THE STAMP TRAVELS ON THE EVENT, and not in an injected "what is the synthetic source now?". The injected answer
|
|
13
|
+
// is GLOBAL state, and input is not global: a child playing by gaze with an adult pressing a key beside them produces both
|
|
14
|
+
// edges at the same instant, and global state would stamp both as gaze. The event cannot be confused with itself — the
|
|
15
|
+
// origin travels with the edge it belongs to, the same reason the key source is a map by CODE and not a single field.
|
|
16
|
+
//
|
|
17
|
+
// 📌 And it is additive by construction: an unstamped event still works. That is what let the writers migrate one at a
|
|
18
|
+
// time without a single red commit in between.
|
|
19
|
+
import { isTransportName } from './transport-in-use.js';
|
|
20
|
+
/**
|
|
21
|
+
* The property hung on the event.
|
|
22
|
+
*
|
|
23
|
+
* 📌 Prefixed and ugly on purpose: it is an expando on an object that is not ours, and a short name could collide with
|
|
24
|
+
* another library's without anything saying so.
|
|
25
|
+
*/
|
|
26
|
+
export const SOURCE_KEY = '__vpOrigem';
|
|
27
|
+
/**
|
|
28
|
+
* DECLARES that this event came from that device. Returns the event itself, so the dispatch fits on one line.
|
|
29
|
+
*
|
|
30
|
+
* ⚠️ Stamp it BEFORE dispatching. After `dispatchEvent` the listeners have already run, and the stamp would reach an
|
|
31
|
+
* event nobody reads any more.
|
|
32
|
+
*/
|
|
33
|
+
export function stampSource(ev, source) {
|
|
34
|
+
ev[SOURCE_KEY] = source;
|
|
35
|
+
return ev;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* WHO PRODUCED THIS EVENT? `undefined` when it is not known.
|
|
39
|
+
*
|
|
40
|
+
* The whole rule, in three lines and in this order:
|
|
41
|
+
*
|
|
42
|
+
* 1. **A valid stamp wins.** An explicit declaration always beats an inference — inverting it would make a REAL event
|
|
43
|
+
* someone remapped (a pedal, a sip-and-puff switch that emits real keys) read as the keyboard, erasing exactly the
|
|
44
|
+
* information whoever stamped it took the trouble to put there.
|
|
45
|
+
* 2. **No stamp but trusted → `'teclado'`.** That is what `isTrusted` means: the browser saw the person press. It is the
|
|
46
|
+
* one inference this module makes, and it makes it on the property that cannot be forged.
|
|
47
|
+
* 3. **No stamp and not trusted → `undefined`.** A synthetic event nobody signed. Nothing in this engine produces one;
|
|
48
|
+
* code from outside does, and code from outside did not declare. ⚠️ Returning the keyboard here would be the erasure
|
|
49
|
+
* coming back another way, the defect the whole of ADR-0109 exists to close — and worse than the original, because
|
|
50
|
+
* it would have the shape of an answer.
|
|
51
|
+
*/
|
|
52
|
+
export function sourceOfEvent(ev) {
|
|
53
|
+
const declared = ev[SOURCE_KEY];
|
|
54
|
+
if (isTransportName(declared))
|
|
55
|
+
return declared;
|
|
56
|
+
return ev.isTrusted ? 'teclado' : undefined;
|
|
57
|
+
}
|
|
@@ -1,158 +1,147 @@
|
|
|
1
1
|
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import type {
|
|
2
|
+
import type { TransportName } from './transport-in-use.js';
|
|
3
3
|
import { type RectLike } from './pointer-space.js';
|
|
4
4
|
import type { PlayerView } from '../core/entity.js';
|
|
5
5
|
import type { DomQuery } from '../core/dom-query.js';
|
|
6
6
|
import type { KeyScheme } from '../core/entity.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* prefere a cópia a puxar um alias de tipo através de camadas (mesmo precedente de `input/keydown.ts`). */
|
|
10
|
-
export type { KeyScheme } from '../core/entity.js';
|
|
11
|
-
/** As seis bordas de entrada que o toque levanta no jogador (consumidas e zeradas pela física). */
|
|
7
|
+
import { type Action } from '../core/actions.js';
|
|
8
|
+
/** The six input edges touch raises on the player (consumed and cleared by the game's physics). */
|
|
12
9
|
export type EdgeFlag = 'jumpEdge' | 'runEdge' | 'leftEdge' | 'rightEdge' | 'swapEdge' | 'specialEdge';
|
|
13
|
-
/**
|
|
10
|
+
/** An edge to raise: which player (POSITION in the array) and which flag. */
|
|
14
11
|
export interface EdgeRaise {
|
|
15
12
|
playerIndex: number;
|
|
16
13
|
edge: EdgeFlag;
|
|
17
14
|
}
|
|
18
|
-
/**
|
|
19
|
-
* `easy`:
|
|
20
|
-
*
|
|
21
|
-
export type TouchBindPlayer = PlayerView<'ctrl'
|
|
22
|
-
/**
|
|
15
|
+
/** What this module reads (and writes) of a player — and ONLY that. DERIVED from core/entity.
|
|
16
|
+
* `easy`: whoever is in Easy mode raises no `runEdge`, and so does not cling to the wall — the same rule as the
|
|
17
|
+
* keyboard and the pad, which is exactly the one that once drifted across three copies. See the header. */
|
|
18
|
+
export type TouchBindPlayer = PlayerView<'ctrl'> & Partial<PlayerView<'easy' | 'jumpEdge' | 'runEdge' | 'leftEdge' | 'rightEdge' | 'swapEdge' | 'specialEdge'>>;
|
|
19
|
+
/** EVERYTHING the decision needs to know about the world, in one object, built BEFORE any effect. */
|
|
23
20
|
export interface TouchBindSnapshot {
|
|
24
|
-
/**
|
|
25
|
-
*
|
|
21
|
+
/** Player 1's scheme (remappable). The key a screen button holds comes from it, and only it: touch is always P1,
|
|
22
|
+
* even with several screens. */
|
|
26
23
|
controls: KeyScheme;
|
|
27
|
-
/**
|
|
24
|
+
/** the live array of players: edges are raised on ALL who have the code in their own scheme. */
|
|
28
25
|
players: readonly TouchBindPlayer[];
|
|
29
|
-
/** `
|
|
26
|
+
/** `input/state.ts`'s `keys`: the keys held NOW (every transport's, mixed). */
|
|
30
27
|
heldKeys: ReadonlySet<string>;
|
|
31
28
|
}
|
|
32
|
-
/**
|
|
33
|
-
export type { RectLike } from './pointer-space.js';
|
|
34
|
-
/** As quatro direções físicas do direcional, ligadas ou não. */
|
|
29
|
+
/** The d-pad's four physical directions, on or off. */
|
|
35
30
|
export interface DirSet {
|
|
36
31
|
left: boolean;
|
|
37
32
|
right: boolean;
|
|
38
33
|
up: boolean;
|
|
39
34
|
down: boolean;
|
|
40
35
|
}
|
|
41
|
-
/**
|
|
36
|
+
/** A pointer event, reduced to what this module reads (a real `PointerEvent` is assignable to this). */
|
|
42
37
|
export interface PointerLike {
|
|
43
38
|
pointerId: number;
|
|
44
39
|
clientX: number;
|
|
45
40
|
clientY: number;
|
|
46
41
|
preventDefault(): void;
|
|
47
42
|
}
|
|
48
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* The single answer: what this touch MEANS.
|
|
45
|
+
*
|
|
46
|
+
* 🔴 THE CURRENCY OF THIS DECISION IS THE POSITION, NOT THE KEY (ADR-0223). Touch PRESSES the virtual controller, the
|
|
47
|
+
* single door, and the key is an effect of the press written in one place — a screen button that pretended to be the
|
|
48
|
+
* keyboard never reached a cartridge that listens to `onCommand`, because the root's window listener leaves `toque`
|
|
49
|
+
* out.
|
|
50
|
+
*
|
|
51
|
+
* ⚠️ AND A POSITION WITH NO MAPPED KEY IS NOT A `noop`. The map is the GAME's, not the keyboard's (ADR-0111), so a
|
|
52
|
+
* position the cartridge declared reaches it even if the child has no key for it.
|
|
53
|
+
*/
|
|
49
54
|
export type TouchDecision =
|
|
50
|
-
/**
|
|
55
|
+
/** an empty slot, an action that does not exist, or RELEASING `pause` — nothing happens. */
|
|
51
56
|
{
|
|
52
57
|
kind: 'noop';
|
|
53
58
|
}
|
|
54
|
-
/** `pause`
|
|
59
|
+
/** `pause` is the only special case: it is not a position, it calls `togglePause()` directly (and only on PRESS). */
|
|
55
60
|
| {
|
|
56
61
|
kind: 'pause';
|
|
57
62
|
}
|
|
58
|
-
/**
|
|
59
|
-
*
|
|
63
|
+
/** press. `addKey=false` = the key was ALREADY held (another finger, or the keyboard): no edge is raised again — that
|
|
64
|
+
* is what makes this an EDGE and not a state. `hideTips` is independent. */
|
|
60
65
|
| {
|
|
61
66
|
kind: 'press';
|
|
62
|
-
|
|
67
|
+
action: Action;
|
|
63
68
|
addKey: boolean;
|
|
64
69
|
edges: EdgeRaise[];
|
|
65
70
|
hideTips: boolean;
|
|
66
71
|
}
|
|
67
|
-
/**
|
|
72
|
+
/** release. It lowers NO edge (the game's physics clears the edges). */
|
|
68
73
|
| {
|
|
69
74
|
kind: 'release';
|
|
70
|
-
|
|
75
|
+
action: Action;
|
|
71
76
|
};
|
|
72
|
-
/**
|
|
73
|
-
* Ação → borda, na MESMA ordem das outras duas cópias do projeto.
|
|
74
|
-
* ⚠️ TERCEIRA CÓPIA DE UMA TABELA QUE JÁ EXISTE DUAS VEZES — `input/keydown.ts` (`EDGE_BY_ACTION`) e
|
|
75
|
-
* `input/gamepad.ts` (seis `if` dentro de `pollPads`). Ver o bloco de aviso no cabeçalho: as três não
|
|
76
|
-
* concordam sobre o modo Fácil, e a divergência está PRESERVADA de propósito.
|
|
77
|
-
*/
|
|
77
|
+
/** Action → edge: the ONE table keyboard, pad and touch share (`input/edges`), re-exported under touch's old name. */
|
|
78
78
|
export { EDGE_BY_ACTION as TOUCH_EDGE_BY_ACTION } from './edges.js';
|
|
79
|
-
/** `?touch=1`
|
|
80
|
-
export declare const TOUCH_FORCE_RE: RegExp;
|
|
81
|
-
/** Predicado do `?touch=1`, isolado para o teste não repetir o regex. */
|
|
79
|
+
/** The `?touch=1` predicate, isolated so the test does not repeat the regex. */
|
|
82
80
|
export declare function wantsForcedTouch(search: string): boolean;
|
|
83
81
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* `null` =
|
|
82
|
+
* Which KEY does this screen button's position hold? The 1st in Player 1's scheme for that action — the 1st and not all,
|
|
83
|
+
* because only one has to enter `keys` for the whole game to react. Remapping the keyboard remaps touch along with it,
|
|
84
|
+
* for free: it is the same table.
|
|
85
|
+
* `null` = the action is not in the scheme (or the touch map's slot is empty) → no key, and so no edge.
|
|
88
86
|
*/
|
|
89
87
|
export declare function codeForAction(act: string | undefined | null, controls: KeyScheme): string | null;
|
|
90
88
|
/**
|
|
91
|
-
*
|
|
89
|
+
* The edges this touch raises, and on whom.
|
|
92
90
|
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
* da parede (`game/physics.ts:177` e `:179`), e não a velocidade de corrida, o efeito prático é que no modo
|
|
97
|
-
* Fácil a escalada existe pelo botão da tela e não existe pelo teclado nem pelo controle.
|
|
98
|
-
* NÃO acrescente a guarda aqui sem consertar as três cópias de uma vez — ver o cabeçalho.
|
|
91
|
+
* WITH THE EASY-MODE GUARD (`edgeAllowed`, from `input/edges`), the same as the keyboard and the pad: `runEdge` is the
|
|
92
|
+
* trigger that clings to and lets go of a wall, not running speed, so without the guard a child in Easy mode could
|
|
93
|
+
* climb by the screen button and not by keyboard or pad.
|
|
99
94
|
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
* `&&` — assimetria sem intenção. Trocar um TypeError por um no-op não remove rede de conserto nenhuma; é o
|
|
103
|
-
* mesmo precedente que `input/keydown.ts:edgesFor` já abriu, e está anotado lá pelo mesmo motivo.
|
|
95
|
+
* `p.ctrl[a] || []` and not a raw `p.ctrl[a]`: a scheme without the action turns a TypeError into a no-op — the same
|
|
96
|
+
* choice `input/keydown`'s `edgesFor` makes, for the same reason.
|
|
104
97
|
*/
|
|
105
98
|
export declare function touchEdgesFor(act: string, code: string, players: readonly TouchBindPlayer[]): EdgeRaise[];
|
|
106
99
|
/**
|
|
107
|
-
*
|
|
108
|
-
* `pause`
|
|
100
|
+
* THE DECISION. A gesture (mapped action + press/release) + the world → what it means.
|
|
101
|
+
* `pause` first, because it is the only one that is not a position. Then the position and its key; without a key, the
|
|
102
|
+
* press still happens, with no edge.
|
|
109
103
|
*/
|
|
110
104
|
export declare function decideTouch(act: string | undefined | null, on: boolean, s: TouchBindSnapshot): TouchDecision;
|
|
111
|
-
/**
|
|
112
|
-
*
|
|
105
|
+
/** The CROSS's dead zone: ~18% of the SIDE from the centre, on each axis. See the note on `crossDirsAt` about `width`
|
|
106
|
+
* also counting for the vertical axis — it is a real asymmetry. */
|
|
113
107
|
export declare const CROSS_DEAD_FRACTION = 0.18;
|
|
114
108
|
/**
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
*
|
|
109
|
+
* Cross (D-pad): where the finger is → which directions turn on. A neutral core so brushing the middle does not fire.
|
|
110
|
+
* The four comparisons are INDEPENDENT: outside the core, a diagonal turns on TWO directions (which gives a physical
|
|
111
|
+
* 8-sector D-pad's behaviour). The exact centre turns on none.
|
|
118
112
|
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
113
|
+
* Including the asymmetry: both axes' dead zone comes from `rect.width` — the height never enters. On a square cross
|
|
114
|
+
* (what the CSS `--dpad-span` produces) it is the same; on a flattened one, the vertical core would be proportionally
|
|
115
|
+
* larger or smaller than the horizontal. Noted, not fixed.
|
|
122
116
|
*/
|
|
123
117
|
export declare function crossDirsAt(px: number, py: number, rect: RectLike): DirSet;
|
|
124
118
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
119
|
+
* Virtual stick: the cross's rule, but the dead zone comes in PX from `input/touch.ts` (derived from the configurable
|
|
120
|
+
* mm), not as a fraction of the element.
|
|
127
121
|
*/
|
|
128
122
|
export declare function stickDirsAt(px: number, py: number, rect: RectLike, deadPx: number): DirSet;
|
|
129
123
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
124
|
+
* Where the stick's knob goes (px, relative to the base's centre): it follows the finger up to the `travelPx` limit
|
|
125
|
+
* and STOPS there, keeping the angle (a radial clip, not per axis — hence `hypot` and not `clamp`).
|
|
126
|
+
* The `|| 1` avoids a division by zero when the finger lands on the exact centre.
|
|
133
127
|
*/
|
|
134
128
|
export declare function stickKnobOffset(px: number, py: number, rect: RectLike, travelPx: number): {
|
|
135
129
|
x: number;
|
|
136
130
|
y: number;
|
|
137
131
|
};
|
|
138
|
-
/** Só o que `attach()` precisa da janela. `(e: never)` é o mesmo truque de `input/keydown.ts`: o handler é
|
|
139
|
-
* convertido no ponto de registro, e o alvo real (window) satisfaz isto de sobra. */
|
|
140
132
|
/**
|
|
141
|
-
*
|
|
133
|
+
* The event-LISTENING door, generic over the event map because that is what `window` is.
|
|
142
134
|
*
|
|
143
|
-
* ⚠️
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
* adaptador de uma linha em CADA consumidor. O `boot/create-game` escrevia esse adaptador (Achado 12) e o
|
|
148
|
-
* `consumer-quiz/main-quiz` registrou por escrito que "a engine pede uma forma de `window` que o `window`
|
|
149
|
-
* não tem".
|
|
135
|
+
* ⚠️ NOT `fn: (e: never) => void`: a `never` parameter looks like "the listener does not look at the event", but by
|
|
136
|
+
* contravariance it demands that the TARGET accept anything, and the real `window` declares `ev: any`, which is not
|
|
137
|
+
* assignable to `never`. That cost a cast at every registration inside the engine and a one-line adapter in every
|
|
138
|
+
* consumer.
|
|
150
139
|
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
140
|
+
* Generic over `WindowEventMap`, `window` satisfies it DIRECTLY and each listener gets the right event: `'keydown'`
|
|
141
|
+
* matches `KeyboardEvent`, `'pointerdown'` matches `PointerEvent`. No cast and no adapter.
|
|
153
142
|
*
|
|
154
|
-
* `WindowEventMap`
|
|
155
|
-
*
|
|
143
|
+
* `WindowEventMap` is a `lib.dom` global, enabled in `tsconfig` — there is no import to make, and so no new dependency
|
|
144
|
+
* edge.
|
|
156
145
|
*/
|
|
157
146
|
export interface EventTargetLike {
|
|
158
147
|
addEventListener<K extends keyof WindowEventMap>(type: K, fn: (e: WindowEventMap[K]) => void, opts?: boolean | {
|
|
@@ -160,70 +149,92 @@ export interface EventTargetLike {
|
|
|
160
149
|
passive?: boolean;
|
|
161
150
|
}): void;
|
|
162
151
|
}
|
|
163
|
-
/**
|
|
152
|
+
/** How long START holds the action when it is momentary (not `pause`). */
|
|
164
153
|
export declare const START_TAP_MS = 140;
|
|
165
154
|
export interface TouchBindingsCtx {
|
|
166
|
-
/** `ui/dom.ts` `$` —
|
|
155
|
+
/** `ui/dom.ts` `$` — injected; the module never reaches `document`. */
|
|
167
156
|
$: DomQuery;
|
|
168
|
-
/** `window`,
|
|
157
|
+
/** `window`, only for the two global "there was a finger/pointer" listeners. */
|
|
169
158
|
win: EventTargetLike;
|
|
170
|
-
/** `location.search` —
|
|
159
|
+
/** `location.search` — read by getter so the test can lie without touching the URL. */
|
|
171
160
|
getSearch: () => string;
|
|
172
|
-
/**
|
|
161
|
+
/** Player 1's scheme (memoised on the other side), read on every touch. */
|
|
173
162
|
getControls: () => KeyScheme;
|
|
174
|
-
/**
|
|
163
|
+
/** the live array of players. A getter: the host may repopulate it on a restart. */
|
|
175
164
|
getPlayers: () => readonly TouchBindPlayer[];
|
|
176
|
-
marcarTecla: (code: string, origem: Transporte) => void;
|
|
177
165
|
/**
|
|
178
|
-
*
|
|
179
|
-
*
|
|
166
|
+
* THE SINGLE DOOR TO THE CARTRIDGE (ADR-0223): press a POSITION. Answers whether the press reached the GAME — `false`
|
|
167
|
+
* means a menu took it.
|
|
168
|
+
*
|
|
169
|
+
* 🔴 One decision, taken once: what the controller does for touch is what it does for the eyes and the voice, as
|
|
170
|
+
* ADR-0111 decided — with a menu open the position becomes the menu's key, in play it holds the child's key AND
|
|
171
|
+
* delivers the command to the cartridge. A second copy of that decision here is how the two doors once came to
|
|
172
|
+
* disagree.
|
|
180
173
|
*
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
184
|
-
* (`main.ts:1695`) é o remendo que existe hoje exactamente para compensar esta falta.
|
|
174
|
+
* 📌 NO SEAT, and the absence is the statement: this engine's multiplayer is on SEPARATE screens (pillar 7), so a
|
|
175
|
+
* device with a pad has ONE finger and ONE seat. A signature accepting a seat would offer a capability this transport
|
|
176
|
+
* does not have, and nobody could exercise it to prove it.
|
|
185
177
|
*/
|
|
186
|
-
|
|
187
|
-
|
|
178
|
+
press: (action: Action, source: TransportName) => boolean;
|
|
179
|
+
/** Release the POSITION. The controller lets go of the key it held and delivers the release — only for a press the game heard. */
|
|
180
|
+
release: (action: Action, source: TransportName) => void;
|
|
188
181
|
/**
|
|
189
|
-
*
|
|
182
|
+
* THIS EDGE IS THIS PLAYER'S, AND IT CAME FROM TOUCH (ADR-0113 clause 4, issue #127) — `input/state.playerEdge`.
|
|
190
183
|
*
|
|
191
|
-
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
184
|
+
* 🔴 REQUIRED, and it is where the device switch becomes VISIBLE: touch is the transport the child uses beside the
|
|
185
|
+
* keyboard, and without this line the automaton answers `teclado` even with the finger on the screen — so the latch
|
|
186
|
+
* read would be the keyboard's, on the wrong device. 📌 In the root the press has already recorded this edge and resolved
|
|
187
|
+
* touch's latch at the virtual controller's `pressedBy` (ADR-0109 rule 3); a host without that door passes the latched edge
|
|
188
|
+
* of `input/latch-edge` here.
|
|
189
|
+
*/
|
|
190
|
+
playerEdge: (player: number, source: TransportName) => void;
|
|
191
|
+
/**
|
|
192
|
+
* The set for READING — the pure decision asks which keys are already held.
|
|
193
|
+
*
|
|
194
|
+
* ⚠️ `ReadonlySet` and not `Set`: READING the set was never the problem; WRITING into it is what erased the source.
|
|
195
|
+
* The type says so, and a raw write coming back here stops compiling instead of slipping by.
|
|
194
196
|
*/
|
|
195
197
|
readonly heldKeys: ReadonlySet<string>;
|
|
196
|
-
/**
|
|
197
|
-
*
|
|
198
|
+
/** The demo: resets idleness and ends the demo; `true` = the touch was only to wake it up. A function, called when a
|
|
199
|
+
* touch happens, because the demo may be built after this module. */
|
|
198
200
|
attractOnInput: () => boolean;
|
|
199
|
-
/** `input/touch.ts`:
|
|
201
|
+
/** `input/touch.ts`: touch REVEALS the buttons (`hideTouchControls` belongs to whoever sees the keyboard take over). */
|
|
200
202
|
showTouchControls: () => void;
|
|
201
|
-
/**
|
|
203
|
+
/** Hides the host's start tips on a jump; the root has none and passes a no-op. */
|
|
202
204
|
hideTips: () => void;
|
|
203
205
|
togglePause: () => void;
|
|
204
|
-
/**
|
|
205
|
-
|
|
206
|
+
/** The SELECT pill opens the pause menus (ADR-0155). Absent, the pill does nothing — only the root that draws it wires it. */
|
|
207
|
+
openMenus?: () => void;
|
|
208
|
+
/** `input/touch.ts:getTouchMap()` — slot → action, remappable. Read ON EVERY event: a remap in the panel counts on the
|
|
209
|
+
* next touch, without rewiring any listener. */
|
|
206
210
|
getTouchMap: () => Record<string, string>;
|
|
207
|
-
/**
|
|
208
|
-
* `touchMap` NÃO EXISTE naquele escopo — o botão START da tela está quebrado hoje. Este campo é o ponto
|
|
209
|
-
* exato onde esse defeito vive, isolado para poder ser consertado (ou não) numa linha só, com decisão. */
|
|
211
|
+
/** The action of the `start` slot — the root reads it from the live touch map. */
|
|
210
212
|
getStartAction: () => string | undefined;
|
|
211
|
-
/** `input/touch.ts`:
|
|
213
|
+
/** `input/touch.ts`: the stick's travel and dead zone, in px, recomputed on every `applyPadPhysical()`. */
|
|
212
214
|
getStickTravelPx: () => number;
|
|
213
215
|
getStickDeadPx: () => number;
|
|
214
|
-
/** `setTimeout` —
|
|
216
|
+
/** `setTimeout` — injectable only so the START test does not wait 140 ms of clock. */
|
|
215
217
|
defer?: (fn: () => void, ms: number) => void;
|
|
216
218
|
}
|
|
217
219
|
export interface TouchBindingsApi {
|
|
218
|
-
/**
|
|
220
|
+
/** The pure decision, with the world of now. Exposed so the test can compare without applying. */
|
|
219
221
|
decide: (act: string | undefined, on: boolean) => TouchDecision;
|
|
220
|
-
/**
|
|
222
|
+
/** The whole dispatch: decides and stamps it on the world. */
|
|
221
223
|
doTouch: (act: string | undefined, on: boolean) => void;
|
|
222
|
-
/**
|
|
224
|
+
/** What the START button does on a click (pause, or press-and-release after `START_TAP_MS`). */
|
|
223
225
|
pressStart: () => void;
|
|
224
|
-
/**
|
|
226
|
+
/** Reveals the buttons by force, for testing on a desktop. */
|
|
225
227
|
revealForTests: () => void;
|
|
226
|
-
/**
|
|
228
|
+
/** Wires everything: the two global listeners, the `.touch-btn`s, START, the stick and the cross. */
|
|
227
229
|
attach: () => void;
|
|
230
|
+
/**
|
|
231
|
+
* Wires ONLY what is inside `#touch-controls` — buttons, START, stick, cross —, without the window listeners. It is
|
|
232
|
+
* what gets called after the pad is REDRAWN (another cartridge's `mount()`, ADR-0142).
|
|
233
|
+
*
|
|
234
|
+
* ⚠️ IT EXISTS BECAUSE `attach()` TWICE PILES LISTENERS ON THE WINDOW: a hub mounting ten cartridges would end up with
|
|
235
|
+
* twenty `pointerdown` listeners. The pad's nodes are new on every drawing, and their listeners die with the old
|
|
236
|
+
* nodes; the window's do not.
|
|
237
|
+
*/
|
|
238
|
+
rewire: () => void;
|
|
228
239
|
}
|
|
229
240
|
export declare function initTouchBindings(ctx: TouchBindingsCtx): TouchBindingsApi;
|