@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
package/dist-pkg/render/fx.js
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/fx — Juice / micro-feedback (Estágio 4, Tier 2): particles (dust/sparkle), screen shake, hit-stop,
|
|
3
|
-
// squash&stretch, + the JUICE toggles. Formulas are verbatim from game.js (behavior-preserving). The reduce-
|
|
4
|
-
// motion flags (`rm`), the PIXI graphics layer (`fxG`) and the round's player list are INJECTED via initFx.
|
|
5
|
-
// `fxClock` is NOT here — it is a general animation clock (coin shimmer reads it) and stays in game.js.
|
|
6
|
-
// Shake/hit-stop state is read by the camera/update/__incl via getters. See docs/5-Refactoring/plano-modularizacao-mapa.md.
|
|
7
|
-
// A corrente da DECORACAO, nao a do jogo: uma particula sorteada aqui nao pode mover o sorteio
|
|
8
|
-
// das moedas. Ver o cabecalho de core/rng.ts (issue #107).
|
|
9
|
-
import { rngDecoracao } from '../core/rng.js';
|
|
10
|
-
const rnd = rngDecoracao.rnd;
|
|
11
|
-
import * as store from '../platform/storage.js';
|
|
12
|
-
/** Juice toggles (persisted in localStorage; edited in the ?debug panel + Sensibilidade → Movimento). */
|
|
13
|
-
export const JUICE = (() => {
|
|
14
|
-
const d = { dust: true, sparkle: true, squash: true, hitstop: true, shake: true, shimmer: true };
|
|
15
|
-
const s = store.getJSON(store.KEYS.juice, null);
|
|
16
|
-
if (s && typeof s === 'object')
|
|
17
|
-
for (const k of Object.keys(d))
|
|
18
|
-
if (k in s)
|
|
19
|
-
d[k] = !!s[k];
|
|
20
|
-
return d;
|
|
21
|
-
})();
|
|
22
|
-
export function saveJuice() {
|
|
23
|
-
store.setJSON(store.KEYS.juice, JUICE);
|
|
24
|
-
}
|
|
25
|
-
/** Standard easing (squash recovery, particle fade). Shared → exported (game.js render reads it too). */
|
|
26
|
-
export const easeOut3 = (t) => 1 - Math.pow(1 - t, 3);
|
|
27
|
-
let particles = [];
|
|
28
|
-
let hitstopT = 0, shakeT = 0, shakeDur = 1, shakeMag = 0;
|
|
29
|
-
let fxG = null;
|
|
30
|
-
let rm = {};
|
|
31
|
-
// A LISTA DE JOGADORES entra por injeção desde 2026-08-26. Era `numPlayers`, um `let` de `core/state`
|
|
32
|
-
// importado como binding vivo — e um `let` de módulo é compartilhado por qualquer segundo jogo que a
|
|
33
|
-
// mesma página carregue (D13 do `demos`, ADR-0038). O que entra aqui é o GETTER da rodada que a raiz
|
|
34
|
-
// possui; o `let` que sobra guarda a função, não a lista.
|
|
35
|
-
let getPlayers = () => [];
|
|
36
|
-
export function initFx(deps) {
|
|
37
|
-
fxG = deps.fxG;
|
|
38
|
-
rm = deps.rm;
|
|
39
|
-
getPlayers = deps.getPlayers;
|
|
40
|
-
}
|
|
41
|
-
export function spawnParticle(x, y, vx, vy, life, color, size, grav) {
|
|
42
|
-
if (particles.length >= 160)
|
|
43
|
-
particles.shift();
|
|
44
|
-
particles.push({ x, y, vx, vy, life, max: life, color, size, g: grav || 0 });
|
|
45
|
-
}
|
|
46
|
-
export function puffDust(x, y, n) {
|
|
47
|
-
if (!JUICE.dust || rm.particles)
|
|
48
|
-
return;
|
|
49
|
-
for (let i = 0; i < n; i++)
|
|
50
|
-
spawnParticle(x + (rnd() - 0.5) * 8, y - 1 - rnd() * 2, (rnd() - 0.5) * 0.9, -0.2 - rnd() * 0.4, 14 + rnd() * 10, 0xcfc6b8, rnd() < 0.4 ? 2 : 1, 0.02);
|
|
51
|
-
}
|
|
52
|
-
export function burstSparkle(x, y, color, n) {
|
|
53
|
-
if (!JUICE.sparkle || rm.particles)
|
|
54
|
-
return;
|
|
55
|
-
const N = n || 8;
|
|
56
|
-
for (let i = 0; i < N; i++) {
|
|
57
|
-
const a = (i / N) * Math.PI * 2 + rnd() * 0.5, sp = 0.5 + rnd() * 0.9;
|
|
58
|
-
spawnParticle(x, y, Math.cos(a) * sp, Math.sin(a) * sp - 0.3, 18 + rnd() * 12, color || 0xffd23f, rnd() < 0.5 ? 2 : 1, 0.015);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
export function addShake(mag, dur) {
|
|
62
|
-
if (!JUICE.shake || rm.parallax)
|
|
63
|
-
return;
|
|
64
|
-
shakeMag = Math.max(shakeMag, mag);
|
|
65
|
-
shakeDur = dur;
|
|
66
|
-
shakeT = Math.max(shakeT, dur);
|
|
67
|
-
}
|
|
68
|
-
export function addHitstop(t) {
|
|
69
|
-
if (!JUICE.hitstop)
|
|
70
|
-
return;
|
|
71
|
-
hitstopT = Math.max(hitstopT, t);
|
|
72
|
-
}
|
|
73
|
-
export function setSquash(pl, amt) {
|
|
74
|
-
if (!JUICE.squash || pl.rmWalk)
|
|
75
|
-
return;
|
|
76
|
-
pl.sq = Math.max(-0.28, Math.min(0.2, amt));
|
|
77
|
-
pl.sqT = 8;
|
|
78
|
-
}
|
|
79
|
-
/** Advance particles + decay shake/squash. (fxClock is stepped by game.js — see header.) */
|
|
80
|
-
export function stepFx(dt) {
|
|
81
|
-
if (shakeT > 0)
|
|
82
|
-
shakeT = Math.max(0, shakeT - dt);
|
|
83
|
-
for (const pl of getPlayers())
|
|
84
|
-
if (pl.sqT && pl.sqT > 0)
|
|
85
|
-
pl.sqT = Math.max(0, pl.sqT - dt);
|
|
86
|
-
for (let i = particles.length - 1; i >= 0; i--) {
|
|
87
|
-
const p = particles[i];
|
|
88
|
-
p.life -= dt;
|
|
89
|
-
if (p.life <= 0) {
|
|
90
|
-
particles.splice(i, 1);
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
p.vy += p.g * dt;
|
|
94
|
-
p.x += p.vx * dt;
|
|
95
|
-
p.y += p.vy * dt;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
export function drawFx() {
|
|
99
|
-
if (!fxG)
|
|
100
|
-
return;
|
|
101
|
-
fxG.clear();
|
|
102
|
-
for (const p of particles) {
|
|
103
|
-
const f = p.life / p.max;
|
|
104
|
-
fxG.beginFill(p.color, 0.9 * easeOut3(f));
|
|
105
|
-
fxG.drawRect(p.x - p.size / 2, p.y - p.size / 2, p.size, p.size);
|
|
106
|
-
fxG.endFill();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/** Decrement hit-stop and report whether the world is still frozen (game.js early-returns on true). */
|
|
110
|
-
export function tickHitstop(dt) {
|
|
111
|
-
if (hitstopT > 0) {
|
|
112
|
-
hitstopT = Math.max(0, hitstopT - dt);
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
/** Current screen-shake amplitude (0 = none); the camera applies the random jitter. */
|
|
118
|
-
export function shakeAmp() {
|
|
119
|
-
return shakeT > 0 && shakeMag > 0 ? shakeMag * (shakeT / shakeDur) : 0;
|
|
120
|
-
}
|
|
121
|
-
export const getParticles = () => particles;
|
|
122
|
-
export const getHitstopT = () => hitstopT;
|
|
123
|
-
export const getShakeT = () => shakeT;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import * as PIXI from 'pixi.js';
|
|
3
|
-
export declare function initMinimap(stage: PIXI.Container, W: number, H: number): void;
|
|
4
|
-
export declare function markSeen(camX: number, camY: number): void;
|
|
5
|
-
export declare function redrawMinimapIfDirty(): void;
|
|
6
|
-
export declare function drawMinimapPlayer(worldX: number, worldY: number): void;
|
|
7
|
-
export declare function resetMinimap(): void;
|
|
8
|
-
export declare function setMinimapCorner(touch: boolean): void;
|
|
9
|
-
export declare function setMinimapVisible(v: boolean): void;
|
|
10
|
-
export declare function getMinimap(): PIXI.Container | null;
|
|
11
|
-
export declare function minimapSeenCount(): number;
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/minimap.ts — minimapa com FOG-OF-WAR (Estágio 4, Tier 1). Um container PixiJS no canto do stage: fundo
|
|
3
|
-
// + tiles JÁ VISTOS (revelados pela câmera) + ponto do jogador. O que já foi visto persiste até o fim da fase.
|
|
4
|
-
// initMinimap cria os objetos (import PURO — nada de PIXI no import); markSeen revela; redrawMinimapIfDirty
|
|
5
|
-
// repinta só quando mudou; drawMinimapPlayer põe o ponto; resetMinimap re-escurece (fim de fase). Cor do tile
|
|
6
|
-
// vem de core/collision (tileAt/isSolidType). Deps: PIXI (npm), constants (TILE/LOGICAL_*), collision.
|
|
7
|
-
import * as PIXI from 'pixi.js';
|
|
8
|
-
import { LOGICAL_W, LOGICAL_H, TILE } from '../core/constants.js';
|
|
9
|
-
import { tileAt, isSolidType } from '../core/collision.js';
|
|
10
|
-
const MM_SCALE = 0.8, MM_PAD = 4;
|
|
11
|
-
let _minimap = null;
|
|
12
|
-
let _mmTiles = null, _mmPlayer = null;
|
|
13
|
-
let _seen = [];
|
|
14
|
-
let _dirty = false;
|
|
15
|
-
let _W = 0, _H = 0, _mmW = 0, _mmH = 0;
|
|
16
|
-
// Cria o container + graphics no stage e a grade de "visto" (W×H). Chamado uma vez no boot do game.js.
|
|
17
|
-
export function initMinimap(stage, W, H) {
|
|
18
|
-
_W = W;
|
|
19
|
-
_H = H;
|
|
20
|
-
_mmW = W * MM_SCALE;
|
|
21
|
-
_mmH = H * MM_SCALE;
|
|
22
|
-
_minimap = new PIXI.Container();
|
|
23
|
-
_minimap.x = MM_PAD;
|
|
24
|
-
_minimap.y = LOGICAL_H - _mmH - MM_PAD;
|
|
25
|
-
_minimap.alpha = 0.92;
|
|
26
|
-
stage.addChild(_minimap);
|
|
27
|
-
const mmBg = new PIXI.Graphics();
|
|
28
|
-
mmBg.beginFill(0x05070f, 0.72);
|
|
29
|
-
mmBg.drawRect(-1, -1, _mmW + 2, _mmH + 2);
|
|
30
|
-
mmBg.endFill();
|
|
31
|
-
_mmTiles = new PIXI.Graphics();
|
|
32
|
-
_mmPlayer = new PIXI.Graphics();
|
|
33
|
-
_minimap.addChild(mmBg, _mmTiles, _mmPlayer);
|
|
34
|
-
_seen = Array.from({ length: H }, () => new Uint8Array(W));
|
|
35
|
-
_dirty = false;
|
|
36
|
-
}
|
|
37
|
-
// Marca como visto todos os tiles dentro da janela da câmera (camX,camY = canto sup-esq do viewport, em px).
|
|
38
|
-
export function markSeen(camX, camY) {
|
|
39
|
-
const tx0 = Math.max(0, (camX / TILE) | 0), tx1 = Math.min(_W - 1, ((camX + LOGICAL_W) / TILE) | 0);
|
|
40
|
-
const ty0 = Math.max(0, (camY / TILE) | 0), ty1 = Math.min(_H - 1, ((camY + LOGICAL_H) / TILE) | 0);
|
|
41
|
-
for (let ty = ty0; ty <= ty1; ty++)
|
|
42
|
-
for (let tx = tx0; tx <= tx1; tx++)
|
|
43
|
-
if (!_seen[ty][tx]) {
|
|
44
|
-
_seen[ty][tx] = 1;
|
|
45
|
-
_dirty = true;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
// Repinta os tiles vistos SÓ se algo novo foi revelado (barato: o fog muda pouco por frame). Cor por tipo.
|
|
49
|
-
export function redrawMinimapIfDirty() {
|
|
50
|
-
if (!_dirty || !_mmTiles)
|
|
51
|
-
return;
|
|
52
|
-
_mmTiles.clear();
|
|
53
|
-
for (let ty = 0; ty < _H; ty++)
|
|
54
|
-
for (let tx = 0; tx < _W; tx++) {
|
|
55
|
-
if (!_seen[ty][tx])
|
|
56
|
-
continue;
|
|
57
|
-
const t = tileAt(tx, ty);
|
|
58
|
-
const col = isSolidType(t) ? 0x9a93b5 : (t === 3 ? 0x2f6fae : (t === 9 ? 0xff5b3a : 0x232038)); // sólido / água / lava / ar
|
|
59
|
-
_mmTiles.beginFill(col, 1);
|
|
60
|
-
_mmTiles.drawRect(tx * MM_SCALE, ty * MM_SCALE, MM_SCALE + 0.4, MM_SCALE + 0.4);
|
|
61
|
-
_mmTiles.endFill();
|
|
62
|
-
}
|
|
63
|
-
_dirty = false;
|
|
64
|
-
}
|
|
65
|
-
// Ponto do jogador (worldX,worldY em px do mundo; o game.js passa o centro do corpo).
|
|
66
|
-
export function drawMinimapPlayer(worldX, worldY) {
|
|
67
|
-
if (!_mmPlayer)
|
|
68
|
-
return;
|
|
69
|
-
_mmPlayer.clear();
|
|
70
|
-
_mmPlayer.beginFill(0xffd23f, 1);
|
|
71
|
-
_mmPlayer.drawRect((worldX / TILE) * MM_SCALE - 1, (worldY / TILE) * MM_SCALE - 1, 2.6, 2.6);
|
|
72
|
-
_mmPlayer.endFill();
|
|
73
|
-
}
|
|
74
|
-
// Fim de fase: o fog-of-war volta a escurecer (o mapa some até ser revisto).
|
|
75
|
-
export function resetMinimap() { _seen.forEach((r) => r.fill(0)); _dirty = true; }
|
|
76
|
-
// Reposiciona o minimapa: no toque vai p/ o canto sup-dir (não briga com os controles); senão inf-esq.
|
|
77
|
-
export function setMinimapCorner(touch) {
|
|
78
|
-
if (!_minimap)
|
|
79
|
-
return;
|
|
80
|
-
if (touch) {
|
|
81
|
-
_minimap.x = LOGICAL_W - _mmW - MM_PAD;
|
|
82
|
-
_minimap.y = MM_PAD;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
_minimap.x = MM_PAD;
|
|
86
|
-
_minimap.y = LOGICAL_H - _mmH - MM_PAD;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
export function setMinimapVisible(v) { if (_minimap)
|
|
90
|
-
_minimap.visible = v; } // some no título / no multiplayer
|
|
91
|
-
export function getMinimap() { return _minimap; } // p/ o __incl (debug/teste)
|
|
92
|
-
export function minimapSeenCount() { let n = 0; for (const r of _seen)
|
|
93
|
-
for (const v of r)
|
|
94
|
-
n += v; return n; } // stat de fog revelado
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import type { CenarioTema, TemaMorros, TemaPredios, FaixaDePredios } from './cenario-data.js';
|
|
3
|
-
import type { CriarAzulejo } from './port.js';
|
|
4
|
-
/** Uma camada de fundo: `factor` = quanto do movimento horizontal da câmera ela reproduz; `fy`, o vertical. */
|
|
5
|
-
export interface CamadaParallax {
|
|
6
|
-
key: string;
|
|
7
|
-
factor: number;
|
|
8
|
-
fy: number;
|
|
9
|
-
}
|
|
10
|
-
export declare const PARALLAX: readonly CamadaParallax[];
|
|
11
|
-
/** Índice da camada → número do arquivo PNG da Cidade (`c4.png`, `c3.png`, `c2.png`). */
|
|
12
|
-
export declare const ARQUIVO_POR_CAMADA: readonly number[];
|
|
13
|
-
/** Onde uma camada fica neste quadro. `x`/`y` = posição DENTRO do camera; `tileX`/`tileY` = rolagem da textura. */
|
|
14
|
-
export interface PosicaoParallax {
|
|
15
|
-
x: number;
|
|
16
|
-
y: number;
|
|
17
|
-
tileX: number;
|
|
18
|
-
tileY: number;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* A matemática do parallax, sem sprite nenhum.
|
|
22
|
-
*
|
|
23
|
-
* `x`/`y` = `camX`/`camY` porque o container `camera` está em `-camX`/`-camY`: a soma dá ZERO, e a camada
|
|
24
|
-
* fica parada na tela. É esse cancelamento que faz o fundo parecer fundo.
|
|
25
|
-
* `tileX`/`tileY` = `-cam * fator`: quanto MENOR o fator, menos a textura rola, mais distante a camada parece.
|
|
26
|
-
* Com `reduzido` (movimento reduzido — `rm.parallax`), a rolagem trava em zero e o fundo vira papel de
|
|
27
|
-
* parede; a contra-posição CONTINUA valendo, senão o fundo passaria a deslizar junto com o mundo — o oposto
|
|
28
|
-
* exato do que a opção existe para dar.
|
|
29
|
-
*/
|
|
30
|
-
export declare function posicoesParallax(camX: number, camY: number, camadas?: readonly CamadaParallax[], reduzido?: boolean): PosicaoParallax[];
|
|
31
|
-
/** `tilePosition` de um `TilingSprite` — só o `set`, que é como o original o escreve. */
|
|
32
|
-
interface PontoObservavel {
|
|
33
|
-
set(x: number, y: number): void;
|
|
34
|
-
}
|
|
35
|
-
/** O que tocamos de um `PIXI.TilingSprite`, e só isso. */
|
|
36
|
-
export interface TilingSpriteLike {
|
|
37
|
-
x: number;
|
|
38
|
-
y: number;
|
|
39
|
-
texture: unknown;
|
|
40
|
-
tilePosition: PontoObservavel;
|
|
41
|
-
/**
|
|
42
|
-
* A ordem-z. Este módulo NÃO a lê — quem a escreve é a raiz de composição, ao encaixar as três camadas
|
|
43
|
-
* no registro canônico do ADR-0020. Está aqui porque a interface é EXPORTADA: ela não descreve só o que
|
|
44
|
-
* o parallax toca, descreve o que ele DEVOLVE, e o consumidor precisa deste campo para posicionar.
|
|
45
|
-
*/
|
|
46
|
-
zIndex: number;
|
|
47
|
-
}
|
|
48
|
-
/** `camera` — só a inserção em posição de z fixa. */
|
|
49
|
-
interface ContainerLike {
|
|
50
|
-
addChildAt(child: unknown, index: number): unknown;
|
|
51
|
-
}
|
|
52
|
-
/** `starsG`/`skyDecoG`/`fogG`: contra-posicionados junto com o parallax. */
|
|
53
|
-
interface PosicionavelLike {
|
|
54
|
-
position: {
|
|
55
|
-
set(x: number, y: number): void;
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
export interface ParallaxCtx {
|
|
59
|
-
camera: ContainerLike;
|
|
60
|
-
criarAzulejo: CriarAzulejo<TilingSpriteLike>;
|
|
61
|
-
placeholderTex: (i: number) => unknown;
|
|
62
|
-
skyTex: (T: CenarioTema) => unknown;
|
|
63
|
-
/** themeHillsTexture — banda de morros. O `tema` escolhe a SILHUETA plantada em cima (árvores, cerca). */
|
|
64
|
-
hillsTex: (T: TemaMorros, near: boolean, tema: string) => unknown;
|
|
65
|
-
/** themeCitySkyTexture — céu + prédios distantes da Cidade, a única camada opaca dela. */
|
|
66
|
-
citySkyTex: (T: TemaPredios) => unknown;
|
|
67
|
-
/** themeSkylineTexture — uma faixa de prédios sobre transparência. */
|
|
68
|
-
skylineTex: (faixa: FaixaDePredios, semente: number) => unknown;
|
|
69
|
-
rm: {
|
|
70
|
-
parallax?: boolean;
|
|
71
|
-
};
|
|
72
|
-
getCenario: () => string;
|
|
73
|
-
getVizMode: () => string;
|
|
74
|
-
clearParallaxTexCache: () => void;
|
|
75
|
-
getDecorDeTela: () => ReadonlyArray<PosicionavelLike | null | undefined>;
|
|
76
|
-
}
|
|
77
|
-
export interface ParallaxApi {
|
|
78
|
-
layers: TilingSpriteLike[];
|
|
79
|
-
texNormal: unknown[];
|
|
80
|
-
updateParallax(camX: number, camY: number): void;
|
|
81
|
-
aplicarTemaParallax(theme: string, T: CenarioTema): void;
|
|
82
|
-
}
|
|
83
|
-
/** Cria as 3 camadas dentro do `camera` e devolve a API que as move e as veste. */
|
|
84
|
-
export declare function createParallax(ctx: ParallaxCtx): ParallaxApi;
|
|
85
|
-
export {};
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/parallax — AS TRÊS CAMADAS DE FUNDO: onde cada uma fica, e de que tema ela é feita.
|
|
3
|
-
//
|
|
4
|
-
// Camada 1 do jogo é o tileset + o personagem. Atrás dele vêm três `TilingSprite`, e é isso que este módulo
|
|
5
|
-
// governa: quanto cada uma se desloca quando a câmera anda (`updateParallax`), e qual textura cada uma veste
|
|
6
|
-
// quando o cenário muda (`aplicarTemaParallax`). Nada mais — o tileset do mundo, o céu vivo da v3, o clima e a
|
|
7
|
-
// Cidade têm cada um o seu módulo, e nenhum deles passa por aqui.
|
|
8
|
-
//
|
|
9
|
-
// ======================= A ENTREGA: A CONTA SAIU DE DENTRO DO EFEITO =======================
|
|
10
|
-
// `updateParallax` era MATEMÁTICA PURA DISFARÇADA DE EFEITO. Dado (camX, camY) e os fatores de profundidade,
|
|
11
|
-
// existe UMA posição determinada para cada camada — mas no monólito essa posição só existia como o lado
|
|
12
|
-
// esquerdo de quatro atribuições dentro de um `for`, e a única forma de conferi-la era subir o jogo inteiro e
|
|
13
|
-
// olhar. Aqui a conta é `posicoesParallax(camX, camY, camadas, reduzido)`, uma função pura que devolve
|
|
14
|
-
// `{x, y, tileX, tileY}` por camada, e o `updateParallax` virou o carimbo dela nos sprites.
|
|
15
|
-
//
|
|
16
|
-
// O que essa separação torna verificável — e o que quebraria em SILÊNCIO sem ela:
|
|
17
|
-
// 1. A CONTRA-POSIÇÃO. Os três sprites vivem DENTRO do container `camera` (têm de viver: é assim que também
|
|
18
|
-
// aparecem nas render-textures do multi-tela). O `camera` anda `-camX` a cada quadro; cada camada é posta
|
|
19
|
-
// em `+camX` para cancelar exatamente esse movimento e ficar PARADA na tela. É o cancelamento que faz o
|
|
20
|
-
// fundo parecer fundo. Inverta o sinal e o céu passa a correr com o dobro da velocidade do mundo, na
|
|
21
|
-
// direção errada — o jogo continua rodando, os testes de física continuam verdes, e só quem olhar percebe.
|
|
22
|
-
// 2. A PROPORCIONALIDADE. O `tilePosition` de cada camada rola por `-camX * fator`. Camada mais distante
|
|
23
|
-
// (fator menor) se mexe MENOS. Ignorar o fator (ou trocá-lo entre duas camadas) achata a profundidade sem
|
|
24
|
-
// erro nenhum em lugar nenhum.
|
|
25
|
-
// 3. O MOVIMENTO REDUZIDO. Com `rm.parallax` ligado (acessibilidade: gatilho vestibular), o `tilePosition`
|
|
26
|
-
// trava em zero — o fundo vira papel de parede — MAS a contra-posição continua valendo. Trocar essa ordem
|
|
27
|
-
// (travar `x`/`y` em vez do `tilePosition`) grudaria o fundo no mundo e produziria exatamente o
|
|
28
|
-
// deslizamento que a opção existe para eliminar, para a pessoa que pediu para não ver deslizamento.
|
|
29
|
-
//
|
|
30
|
-
// ======================= POR QUE A FRONTEIRA CAIU AQUI, E NÃO ANTES NEM DEPOIS =======================
|
|
31
|
-
// ANTES (o dado dos temas) saiu para render/cenario-data.ts: as cores não são geometria de câmera, e são
|
|
32
|
-
// lidas por scene-sky e pelo attract, que não têm nada a ver com rolagem. `PARALLAX` FICOU aqui, e não lá,
|
|
33
|
-
// porque os fatores não variam por tema — são a definição de "o que é fundo" — e porque a conta que os
|
|
34
|
-
// consome é a deste arquivo.
|
|
35
|
-
// DEPOIS (a orquestração da troca de cenário) ficou em render/set-cenario.ts. `setCenario` faz TRÊS coisas:
|
|
36
|
-
// repinta o fundo, RECONSTRÓI A TEXTURA DO MUNDO a partir dos PNG de tile do tema, e avisa a vida ambiente e
|
|
37
|
-
// o alto contraste. Só a primeira é parallax. Trazer as outras duas para cá daria a este módulo a textura do
|
|
38
|
-
// tileset — que não é fundo, é a Camada 1 — e o ciclo de vida do alto contraste. Por isso `aplicarTemaParallax`
|
|
39
|
-
// mora aqui e é CHAMADO de lá: este módulo sabe vestir as três camadas e não sabe por quê.
|
|
40
|
-
//
|
|
41
|
-
// ======================= A PARTE IMPURA, E O QUE ELA GUARDA =======================
|
|
42
|
-
// `aplicarTemaParallax` tem duas metades assimétricas, e a assimetria é o ponto:
|
|
43
|
-
// · Tema `v3` (Campo/Amanhecer/Noite/Floresta): as texturas são GERADAS na hora (render/scene-parallax), de
|
|
44
|
-
// forma síncrona. Não há espera, logo não há corrida.
|
|
45
|
-
// · Cidade (`v3:false`): as três texturas são PNG baixados, e chegam quando chegarem. Entre o pedido e a
|
|
46
|
-
// chegada a pessoa pode ter trocado de cenário de novo — por isso cada callback abre com
|
|
47
|
-
// `if (getCenario() !== theme) return`. Sem essa guarda, um PNG atrasado da Cidade sobrescreveria o céu do
|
|
48
|
-
// tema recém-escolhido. É a corrida mais fácil de introduzir e a mais difícil de reproduzir de mão, e é
|
|
49
|
-
// por ela, mais do que por qualquer outra coisa, que esta metade também entrou num módulo testável.
|
|
50
|
-
// Nos dois caminhos a ordem é a mesma e importa: grava em `texNormal` → invalida o cache de recolor
|
|
51
|
-
// (`clearParallaxTexCache`) → e SÓ pinta o sprite se o modo de visão for 'normal'. Nos modos acessíveis quem
|
|
52
|
-
// pinta é render/viz-setters, lendo a textura crua que acabamos de gravar; pintar aqui atropelaria o recolor.
|
|
53
|
-
//
|
|
54
|
-
// ======================= INJEÇÃO, INTERFACE ESTRUTURAL E ORDEM DE BOOT =======================
|
|
55
|
-
// Nada de `import * as PIXI`: declaramos só o que tocamos — um `TilingSprite` é, aqui, quatro campos
|
|
56
|
-
// (`x`, `y`, `texture`, `tilePosition`) e um construtor de três argumentos. É o precedente de
|
|
57
|
-
// render/scene-sky e render/viewports, e é o que deixa o módulo (e a factory INTEIRA, não só a parte pura)
|
|
58
|
-
// rodar no project `node`, com sprites de mentira e um `Image` falso.
|
|
59
|
-
// Pela mesma razão os três geradores de textura (`placeholderTex`/`skyTex`/`hillsTex`) entram INJETADOS em vez
|
|
60
|
-
// de importados de render/scene-parallax: eles chamam `makeCanvas`, e importá-los aqui obrigaria todo teste da
|
|
61
|
-
// factory a ter um `document`.
|
|
62
|
-
// · `rm` entra por VALOR: é `const` no game.js, mutado in place pelo painel de movimento reduzido (mesma
|
|
63
|
-
// decisão de render/draw.ts). Ler `rm.parallax` a cada quadro já vê o valor novo.
|
|
64
|
-
// · `getCenario`/`getVizMode` entram por GETTER: são as mega-variáveis de core/state.js, REATRIBUÍDAS.
|
|
65
|
-
// · `getDecorDeTela` é GETTER porque `starsG`/`skyDecoG`/`fogG` são declarados MUITO depois no game.js — o
|
|
66
|
-
// monólito protegia isso com `typeof starsG!=='undefined'`. Aqui o game.js passa `() => [starsG, skyDecoG,
|
|
67
|
-
// fogG]` (são `var`, logo içados) e a guarda por elemento fica deste lado.
|
|
68
|
-
// · `createParallax` DEVOLVE `layers` e `texNormal` em vez de recebê-los: o game.js os mantém como `const`
|
|
69
|
-
// desestruturados do retorno, e `texNormal` continua sendo o MESMO array que `initViewports` recebe por
|
|
70
|
-
// VALOR — `aplicarTemaParallax` troca os ELEMENTOS in place, nunca o array.
|
|
71
|
-
//
|
|
72
|
-
// ⚠️ ORDEM DE BOOT: `createParallax` tem de rodar logo depois de `camera` existir e ANTES de qualquer coisa que
|
|
73
|
-
// dependa de `parallaxLayers` — o `camera.addChildAt(ts, i)` dá a ordem-z do fundo, e `starsG` é inserido
|
|
74
|
-
// relativamente a `parallaxLayers[1]`. E tem de rodar ANTES do `setCenario` do boot, que é quem veste as
|
|
75
|
-
// camadas com o tema salvo.
|
|
76
|
-
//
|
|
77
|
-
// SEM I/O NO IMPORT: o corpo do módulo declara `PARALLAX` e funções. Nenhum sprite é criado, nenhuma textura é
|
|
78
|
-
// gerada e nenhuma imagem é pedida até `createParallax`/`aplicarTemaParallax` serem chamados.
|
|
79
|
-
// Ver docs/5-Refactoring/plano-modularizacao-mapa.md (D2-b).
|
|
80
|
-
import { LOGICAL_W, LOGICAL_H } from '../core/constants.js';
|
|
81
|
-
/* Parallax: 3 camadas de FUNDO atrás do tileset (Camada 1 = tileset+personagem).
|
|
82
|
-
Camada 4 (fator 0.10) é a mais distante e "quase não se mexe" — receberá a maior imagem possível do
|
|
83
|
-
PixelLab. Vivem DENTRO do camera (contra-posicionadas p/ ficarem fixas na tela) para também aparecerem nas
|
|
84
|
-
render-textures do multiplayer. tilePosition faz o scroll fracionado → ilusão de profundidade.
|
|
85
|
-
A ORDEM do array é a ordem-z: índice 0 no fundo. */
|
|
86
|
-
export const PARALLAX = [
|
|
87
|
-
{ key: 'sky', factor: 0.10, fy: 0 }, // Camada 4 — mais distante (céu/horizonte), maior imagem
|
|
88
|
-
{ key: 'far', factor: 0.28, fy: 0 }, // Camada 3
|
|
89
|
-
{ key: 'near', factor: 0.52, fy: 0 }, // Camada 2 — mais próxima do tileset
|
|
90
|
-
];
|
|
91
|
-
/** Índice da camada → número do arquivo PNG da Cidade (`c4.png`, `c3.png`, `c2.png`). */
|
|
92
|
-
export const ARQUIVO_POR_CAMADA = [4, 3, 2];
|
|
93
|
-
/**
|
|
94
|
-
* A matemática do parallax, sem sprite nenhum.
|
|
95
|
-
*
|
|
96
|
-
* `x`/`y` = `camX`/`camY` porque o container `camera` está em `-camX`/`-camY`: a soma dá ZERO, e a camada
|
|
97
|
-
* fica parada na tela. É esse cancelamento que faz o fundo parecer fundo.
|
|
98
|
-
* `tileX`/`tileY` = `-cam * fator`: quanto MENOR o fator, menos a textura rola, mais distante a camada parece.
|
|
99
|
-
* Com `reduzido` (movimento reduzido — `rm.parallax`), a rolagem trava em zero e o fundo vira papel de
|
|
100
|
-
* parede; a contra-posição CONTINUA valendo, senão o fundo passaria a deslizar junto com o mundo — o oposto
|
|
101
|
-
* exato do que a opção existe para dar.
|
|
102
|
-
*/
|
|
103
|
-
export function posicoesParallax(camX, camY, camadas = PARALLAX, reduzido = false) {
|
|
104
|
-
return camadas.map((p) => ({
|
|
105
|
-
x: camX,
|
|
106
|
-
y: camY,
|
|
107
|
-
tileX: reduzido ? 0 : -camX * p.factor,
|
|
108
|
-
tileY: reduzido ? 0 : -camY * p.fy,
|
|
109
|
-
}));
|
|
110
|
-
}
|
|
111
|
-
/* ===================== a montagem + o carimbo (impuro) ===================== */
|
|
112
|
-
/** Cria as 3 camadas dentro do `camera` e devolve a API que as move e as veste. */
|
|
113
|
-
export function createParallax(ctx) {
|
|
114
|
-
const layers = PARALLAX.map((_p, i) => {
|
|
115
|
-
const ts = ctx.criarAzulejo(ctx.placeholderTex(i), LOGICAL_W, LOGICAL_H);
|
|
116
|
-
ctx.camera.addChildAt(ts, i); // i=0 (sky) fica no fundo; depois far, near; tileset entra por cima
|
|
117
|
-
return ts;
|
|
118
|
-
});
|
|
119
|
-
// texturas normais (recoloridas p/ o fundo no alto contraste). Array `const` no game.js: os ELEMENTOS mudam.
|
|
120
|
-
const texNormal = layers.map((ts) => ts.texture);
|
|
121
|
-
function updateParallax(camX, camY) {
|
|
122
|
-
const pos = posicoesParallax(camX, camY, PARALLAX, !!ctx.rm.parallax);
|
|
123
|
-
for (let i = 0; i < layers.length; i++) {
|
|
124
|
-
const ts = layers[i], q = pos[i];
|
|
125
|
-
ts.x = q.x;
|
|
126
|
-
ts.y = q.y; // anula o camera → fixa na tela
|
|
127
|
-
ts.tilePosition.set(q.tileX, q.tileY); // rolagem fracionada → profundidade (0,0 no movimento reduzido)
|
|
128
|
-
}
|
|
129
|
-
// L6: decor de TELA da v3 (estrelas atrás dos morros · nuvens/pássaros à frente · névoa na frente de tudo).
|
|
130
|
-
// Guarda por elemento: no boot elas ainda não existem (eram o `typeof starsG!=='undefined'` do monólito).
|
|
131
|
-
for (const g of ctx.getDecorDeTela()) {
|
|
132
|
-
if (g)
|
|
133
|
-
g.position.set(camX, camY);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
/** Grava a textura crua da camada `i`, invalida o recolor e — só no modo 'normal' — pinta o sprite. */
|
|
137
|
-
function vestir(i, t) {
|
|
138
|
-
texNormal[i] = t;
|
|
139
|
-
ctx.clearParallaxTexCache();
|
|
140
|
-
if (ctx.getVizMode() === 'normal')
|
|
141
|
-
layers[i].texture = t; // nos modos acessíveis quem pinta é viz-setters
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* TODA TROCA DE TEMA É SÍNCRONA AGORA (ADR-0042), e isso é mais que uma simplificação.
|
|
145
|
-
*
|
|
146
|
-
* Enquanto a Cidade vinha de PNG, este caminho era assíncrono e carregava a corrida junto: três `Image`
|
|
147
|
-
* baixando, e cada `onload` tendo de perguntar `getCenario() !== theme` antes de pintar, porque a criança
|
|
148
|
-
* podia ter trocado de cenário no meio. Isso sumiu com os arquivos — não há mais o que baixar, e portanto
|
|
149
|
-
* não há mais corrida que possa perder.
|
|
150
|
-
*/
|
|
151
|
-
function aplicarTemaParallax(theme, T) {
|
|
152
|
-
const texs = T.fundo === 'predios'
|
|
153
|
-
? [ctx.citySkyTex(T), ctx.skylineTex(T.predios[1], 977), ctx.skylineTex(T.predios[2], 131)]
|
|
154
|
-
: [ctx.skyTex(T), ctx.hillsTex(T, false, theme), ctx.hillsTex(T, true, theme)];
|
|
155
|
-
layers.forEach((_ts, i) => vestir(i, texs[i]));
|
|
156
|
-
}
|
|
157
|
-
return { layers, texNormal, updateParallax, aplicarTemaParallax };
|
|
158
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import type { ControlledPlayer } from '../core/entity.js';
|
|
3
|
-
/** Uma textura de quadro. Opaca de propósito: este módulo ESCOLHE quadros, nunca os desenha. */
|
|
4
|
-
export type Frame = unknown;
|
|
5
|
-
/** Uma "gracinha" de descanso (render/sprites.FLAVORS): `seq` indexa `tex`, `hold` é o nº de ticks por passo. */
|
|
6
|
-
export interface FlavorLike {
|
|
7
|
-
seq: readonly number[];
|
|
8
|
-
hold: number;
|
|
9
|
-
tex: readonly Frame[];
|
|
10
|
-
}
|
|
11
|
-
/** O conjunto COMPLETO de quadros do personagem. Espelha os `TEX_*` de render/sprites, com nomes curtos. */
|
|
12
|
-
export interface PlayerTextures {
|
|
13
|
-
idle: readonly Frame[];
|
|
14
|
-
walk: readonly Frame[];
|
|
15
|
-
run: readonly Frame[];
|
|
16
|
-
jumpUp: Frame;
|
|
17
|
-
jumpDown: Frame;
|
|
18
|
-
climb: readonly Frame[];
|
|
19
|
-
fly: Frame;
|
|
20
|
-
clingWall: readonly Frame[];
|
|
21
|
-
clingCeil: readonly Frame[];
|
|
22
|
-
swim: readonly Frame[];
|
|
23
|
-
swimIdle: readonly Frame[];
|
|
24
|
-
flavors: readonly FlavorLike[];
|
|
25
|
-
}
|
|
26
|
-
/** Os campos do jogador que a ANIMAÇÃO lê ou escreve. O objeto real (game/player.makePlayer) é superconjunto. */
|
|
27
|
-
/**
|
|
28
|
-
* O jogador visto pela ANIMAÇÃO — derivado de core/entity. O que cada campo significa está documentado lá,
|
|
29
|
-
* uma vez; o que importa registrar AQUI é o que este módulo faz com eles:
|
|
30
|
-
*
|
|
31
|
-
* · LÊ o que a física produziu: `vx`/`vy`, os três contatos, `clinging`/`clingN`/`flying` e `airTime`
|
|
32
|
-
* (quadros desde que saiu do chão — a base do coyote-time). `runCane` decide se `running` pode ligar.
|
|
33
|
-
* · LÊ as preferências de Movimento Reduzido: `rmWalk` congela TODA a locomoção num quadro único,
|
|
34
|
-
* `rmBreath` congela a respiração do idle, `rmFlavor` desliga as gracinhas.
|
|
35
|
-
* · ESCREVE os relógios: `anim` (respiração), `walkAnim` (o passo — NUNCA reseta, senão o ciclo de 8
|
|
36
|
-
* reinicia), `climbFrame` (quadro CONGELADO da ventosa), `idleNow`/`idleTime`, `flavor`/`flavorT`,
|
|
37
|
-
* `walking`/`running` (lidos pelo desenho da bengala em render/draw) e `_tx`, o quadro-base EM COR a
|
|
38
|
-
* partir do qual o multi-tela recolore, por viewport.
|
|
39
|
-
* · `ctrl`/`pad` entram só porque `held` precisa deles. `ControlledPlayer`: a animação roda em partida.
|
|
40
|
-
*
|
|
41
|
-
* `clingN` era `string | null` aqui e `ClingSide | null` na física — a mesma face da ventosa, uma tipada e
|
|
42
|
-
* a outra não. Derivar fecha isso sem discussão.
|
|
43
|
-
*/
|
|
44
|
-
export type AnimPlayer = Pick<ControlledPlayer, 'vx' | 'vy' | 'onGround' | 'onLadder' | 'inWater' | 'clinging' | 'clingN' | 'flying' | 'airTime' | 'runCane' | 'rmWalk' | 'rmBreath' | 'rmFlavor' | 'anim' | 'walkAnim' | 'climbFrame' | 'idleNow' | 'idleTime' | 'flavor' | 'flavorT' | 'walking' | 'running' | '_tx' | 'ctrl' | 'pad'>;
|
|
45
|
-
/** Tudo que a escolha do quadro precisa e que não mora no jogador. */
|
|
46
|
-
export interface PlayerAnimEnv {
|
|
47
|
-
dt: number;
|
|
48
|
-
dir: number;
|
|
49
|
-
wheelchair: boolean;
|
|
50
|
-
held(pl: AnimPlayer, act: string): boolean;
|
|
51
|
-
rnd(): number;
|
|
52
|
-
tex: PlayerTextures;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Coyote-time da ANIMAÇÃO (E16), em quadros. Existe para matar o flicker walk↔jump no pouso: `onGround`
|
|
56
|
-
* pisca por 1 quadro ao repousar, e sem essa folga o personagem alternava entre andar e pular ao aterrissar.
|
|
57
|
-
* É o coyote do RENDER e é independente do coyote da física (game/physics) — mudar um não muda o outro.
|
|
58
|
-
*/
|
|
59
|
-
export declare const COYOTE = 5;
|
|
60
|
-
/**
|
|
61
|
-
* Escolhe o quadro do jogador para ESTE tick e adianta os relógios de animação.
|
|
62
|
-
*
|
|
63
|
-
* Cadeia de prioridade E17, do mais específico ao mais genérico — a ORDEM é a regra, não um detalhe:
|
|
64
|
-
* ventosa → escada → água → voo → aéreo(pulo) → andando → idle
|
|
65
|
-
* Estar na água DENTRO de uma escada mostra escada; grudado na parede dentro d'água mostra ventosa.
|
|
66
|
-
*
|
|
67
|
-
* Também escreve em `pl` (ver AnimPlayer): `walking`/`running` (bengala), `idleNow`, os relógios e `_tx`.
|
|
68
|
-
*
|
|
69
|
-
* @returns o quadro escolhido (o mesmo valor que fica em `pl._tx`).
|
|
70
|
-
*/
|
|
71
|
-
export declare function choosePlayerFrame(pl: AnimPlayer, env: PlayerAnimEnv): Frame;
|