@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
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/city-tiles.ts — OS DOIS TILES DA CIDADE, como DADOS e não como PNG (pilar "arte = dados", ADR-0010).
|
|
3
|
-
//
|
|
4
|
-
// `tile_fill` e `tile_surface` eram dois PNG de 16×16 baixados por `carregarTilesDoTema`. Aqui eles voltam como
|
|
5
|
-
// `PixelPainter` — a mesma forma que `render/city-tex` já usa para os pombos, os gatos e as silhuetas: uma
|
|
6
|
-
// lista de retângulos `px(x, y, w, h, cor)`.
|
|
7
|
-
//
|
|
8
|
-
// POR QUE RETÂNGULOS E NÃO UMA REGRA DE ALVENARIA. A primeira tentativa foi inferir a regra (tijolo 7×6, junta
|
|
9
|
-
// de 1 px, fiada alternada, bisel) e gerá-la. Deu 66% de acerto exato: a arte tem variação FEITA À MÃO — o
|
|
10
|
-
// bisel muda de tijolo para tijolo, e nenhuma regra curta a alcança. A decomposição em retângulos custa 51 e
|
|
11
|
-
// 62 chamadas e acerta 100%. Entre uma regra elegante que erra um quinto dos pixels e uma lista que acerta
|
|
12
|
-
// todos, num tile de 16×16 desenhado à mão, a lista é a resposta honesta.
|
|
13
|
-
//
|
|
14
|
-
// O QUE ISSO COMPRA, além de tirar dois PNG do pacote: o desenho passa a ser recolorível (o alto contraste e
|
|
15
|
-
// as paletas seguras para daltonismo mexem em cores, não em bitmaps), some o carregamento assíncrono — e com
|
|
16
|
-
// ele a guarda de corrida de `set-cenario` e os 404 de boot dos temas que não têm arte própria.
|
|
17
|
-
import { pixelCanvas } from './canvas.js';
|
|
18
|
-
/** O TILE do miolo da parede: alvenaria em fiada alternada. 51 retângulos, 9 cores, fiel ao pixel. */
|
|
19
|
-
export const paintTileFill = (px) => {
|
|
20
|
-
px(0, 0, 1, 1, '#403b48');
|
|
21
|
-
px(1, 0, 3, 1, '#b8b6c1');
|
|
22
|
-
px(4, 0, 2, 1, '#bcbdc9');
|
|
23
|
-
px(6, 0, 2, 1, '#828291');
|
|
24
|
-
px(8, 0, 1, 1, '#403b48');
|
|
25
|
-
px(9, 0, 1, 1, '#b1b0bc');
|
|
26
|
-
px(10, 0, 4, 1, '#b8b6c1');
|
|
27
|
-
px(14, 0, 2, 1, '#403b48');
|
|
28
|
-
px(0, 1, 1, 1, '#b1b0bc');
|
|
29
|
-
px(1, 1, 6, 5, '#828291');
|
|
30
|
-
px(7, 1, 1, 4, '#403b48');
|
|
31
|
-
px(8, 1, 1, 5, '#b8b6c1');
|
|
32
|
-
px(9, 1, 6, 5, '#828291');
|
|
33
|
-
px(15, 1, 1, 5, '#393543');
|
|
34
|
-
px(0, 2, 1, 3, '#b8b6c1');
|
|
35
|
-
px(0, 5, 1, 1, '#b1b0bc');
|
|
36
|
-
px(7, 5, 1, 1, '#3e2e3f');
|
|
37
|
-
px(0, 6, 1, 3, '#403b48');
|
|
38
|
-
px(1, 6, 1, 1, '#777485');
|
|
39
|
-
px(2, 6, 4, 1, '#828291');
|
|
40
|
-
px(6, 6, 3, 3, '#403b48');
|
|
41
|
-
px(9, 6, 5, 1, '#828291');
|
|
42
|
-
px(14, 6, 2, 2, '#403b48');
|
|
43
|
-
px(1, 7, 5, 1, '#403b48');
|
|
44
|
-
px(9, 7, 5, 1, '#403b48');
|
|
45
|
-
px(1, 8, 1, 1, '#b1b0bc');
|
|
46
|
-
px(2, 8, 2, 1, '#b8b6c1');
|
|
47
|
-
px(4, 8, 1, 1, '#bcbdc9');
|
|
48
|
-
px(5, 8, 1, 1, '#b1b0bc');
|
|
49
|
-
px(9, 8, 1, 1, '#b1b0bc');
|
|
50
|
-
px(10, 8, 2, 1, '#b8b6c1');
|
|
51
|
-
px(12, 8, 1, 1, '#bcbdc9');
|
|
52
|
-
px(13, 8, 1, 1, '#b1b0bc');
|
|
53
|
-
px(14, 8, 1, 1, '#403b48');
|
|
54
|
-
px(15, 8, 1, 1, '#393543');
|
|
55
|
-
px(0, 9, 1, 5, '#b1b0bc');
|
|
56
|
-
px(1, 9, 6, 5, '#828291');
|
|
57
|
-
px(7, 9, 1, 3, '#403b48');
|
|
58
|
-
px(8, 9, 1, 5, '#b8b6c1');
|
|
59
|
-
px(9, 9, 6, 5, '#828291');
|
|
60
|
-
px(15, 9, 1, 2, '#403b48');
|
|
61
|
-
px(15, 11, 1, 3, '#393543');
|
|
62
|
-
px(7, 12, 1, 2, '#393543');
|
|
63
|
-
px(0, 14, 1, 2, '#403b48');
|
|
64
|
-
px(1, 14, 5, 1, '#828291');
|
|
65
|
-
px(6, 14, 3, 2, '#403b48');
|
|
66
|
-
px(9, 14, 5, 1, '#828291');
|
|
67
|
-
px(14, 14, 2, 2, '#403b48');
|
|
68
|
-
px(1, 15, 1, 1, '#444653');
|
|
69
|
-
px(2, 15, 4, 1, '#403b48');
|
|
70
|
-
px(9, 15, 5, 1, '#403b48');
|
|
71
|
-
};
|
|
72
|
-
/** O TILE do TOPO da plataforma: mesma alvenaria com a borda superior iluminada. 62 retângulos, 23 cores. */
|
|
73
|
-
export const paintTileSurface = (px) => {
|
|
74
|
-
px(0, 0, 1, 1, '#8b8994');
|
|
75
|
-
px(1, 0, 3, 1, '#bbbac5');
|
|
76
|
-
px(4, 0, 2, 1, '#bdbdc8');
|
|
77
|
-
px(6, 0, 2, 1, '#a6a5b2');
|
|
78
|
-
px(8, 0, 1, 1, '#8b8994');
|
|
79
|
-
px(9, 0, 1, 1, '#b8b7c3');
|
|
80
|
-
px(10, 0, 4, 1, '#bbbac5');
|
|
81
|
-
px(14, 0, 2, 1, '#8b8994');
|
|
82
|
-
px(0, 1, 1, 1, '#b6b5c1');
|
|
83
|
-
px(1, 1, 6, 1, '#9b9aa8');
|
|
84
|
-
px(7, 1, 1, 1, '#74717d');
|
|
85
|
-
px(8, 1, 1, 1, '#bab8c3');
|
|
86
|
-
px(9, 1, 6, 1, '#9b9aa8');
|
|
87
|
-
px(15, 1, 1, 1, '#706e7a');
|
|
88
|
-
px(0, 2, 1, 1, '#b9b7c2');
|
|
89
|
-
px(1, 2, 6, 1, '#90909e');
|
|
90
|
-
px(7, 2, 1, 1, '#5e5a66');
|
|
91
|
-
px(8, 2, 1, 1, '#b9b7c2');
|
|
92
|
-
px(9, 2, 6, 1, '#90909e');
|
|
93
|
-
px(15, 2, 1, 1, '#585562');
|
|
94
|
-
px(0, 3, 1, 2, '#b8b6c1');
|
|
95
|
-
px(1, 3, 6, 3, '#828291');
|
|
96
|
-
px(7, 3, 1, 2, '#403b48');
|
|
97
|
-
px(8, 3, 1, 3, '#b8b6c1');
|
|
98
|
-
px(9, 3, 6, 3, '#828291');
|
|
99
|
-
px(15, 3, 1, 3, '#393543');
|
|
100
|
-
px(0, 5, 1, 1, '#b1b0bc');
|
|
101
|
-
px(7, 5, 1, 1, '#3e2e3f');
|
|
102
|
-
px(0, 6, 1, 3, '#403b48');
|
|
103
|
-
px(1, 6, 1, 1, '#777485');
|
|
104
|
-
px(2, 6, 4, 1, '#828291');
|
|
105
|
-
px(6, 6, 3, 3, '#403b48');
|
|
106
|
-
px(9, 6, 5, 1, '#828291');
|
|
107
|
-
px(14, 6, 2, 2, '#403b48');
|
|
108
|
-
px(1, 7, 5, 1, '#403b48');
|
|
109
|
-
px(9, 7, 5, 1, '#403b48');
|
|
110
|
-
px(1, 8, 1, 1, '#b1b0bc');
|
|
111
|
-
px(2, 8, 2, 1, '#b8b6c1');
|
|
112
|
-
px(4, 8, 1, 1, '#bcbdc9');
|
|
113
|
-
px(5, 8, 1, 1, '#b1b0bc');
|
|
114
|
-
px(9, 8, 1, 1, '#b1b0bc');
|
|
115
|
-
px(10, 8, 2, 1, '#b8b6c1');
|
|
116
|
-
px(12, 8, 1, 1, '#bcbdc9');
|
|
117
|
-
px(13, 8, 1, 1, '#b1b0bc');
|
|
118
|
-
px(14, 8, 1, 1, '#403b48');
|
|
119
|
-
px(15, 8, 1, 1, '#393543');
|
|
120
|
-
px(0, 9, 1, 5, '#b1b0bc');
|
|
121
|
-
px(1, 9, 6, 5, '#828291');
|
|
122
|
-
px(7, 9, 1, 3, '#403b48');
|
|
123
|
-
px(8, 9, 1, 5, '#b8b6c1');
|
|
124
|
-
px(9, 9, 6, 5, '#828291');
|
|
125
|
-
px(15, 9, 1, 2, '#403b48');
|
|
126
|
-
px(15, 11, 1, 3, '#393543');
|
|
127
|
-
px(7, 12, 1, 2, '#393543');
|
|
128
|
-
px(0, 14, 1, 2, '#403b48');
|
|
129
|
-
px(1, 14, 5, 1, '#828291');
|
|
130
|
-
px(6, 14, 3, 2, '#403b48');
|
|
131
|
-
px(9, 14, 5, 1, '#828291');
|
|
132
|
-
px(14, 14, 2, 2, '#403b48');
|
|
133
|
-
px(1, 15, 1, 1, '#444653');
|
|
134
|
-
px(2, 15, 4, 1, '#403b48');
|
|
135
|
-
px(9, 15, 5, 1, '#403b48');
|
|
136
|
-
};
|
|
137
|
-
/** Os dois tiles como canvas 16×16 — a forma que `worldCanvas` consumia das imagens carregadas. */
|
|
138
|
-
export function cityTiles() {
|
|
139
|
-
return { fill: pixelCanvas(16, 16, paintTileFill), surface: pixelCanvas(16, 16, paintTileSurface) };
|
|
140
|
-
}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
import type { PlayerView } from '../core/entity.js';
|
|
3
|
-
import { type AnimPlayer, type Frame, type PlayerTextures } from './player-anim.js';
|
|
4
|
-
import type { RenderizarEm } from './port.js';
|
|
5
|
-
/** O que este módulo toca de um `PIXI.Graphics`. Superconjunto do `DrawGraphics` de wheelchair-sprites. */
|
|
6
|
-
export interface GraphicsLike {
|
|
7
|
-
clear(): unknown;
|
|
8
|
-
lineStyle(width: number, color?: number, alpha?: number): unknown;
|
|
9
|
-
beginFill(color: number, alpha?: number): unknown;
|
|
10
|
-
endFill(): unknown;
|
|
11
|
-
drawRect(x: number, y: number, w: number, h: number): unknown;
|
|
12
|
-
moveTo(x: number, y: number): unknown;
|
|
13
|
-
lineTo(x: number, y: number): unknown;
|
|
14
|
-
drawCircle(x: number, y: number, r: number): unknown;
|
|
15
|
-
}
|
|
16
|
-
/** O sprite do personagem — só posição, escala, alpha, visibilidade e textura. */
|
|
17
|
-
export interface PlayerSprite {
|
|
18
|
-
x: number;
|
|
19
|
-
y: number;
|
|
20
|
-
alpha: number;
|
|
21
|
-
visible: boolean;
|
|
22
|
-
scale: {
|
|
23
|
-
set(x: number, y: number): void;
|
|
24
|
-
};
|
|
25
|
-
texture: unknown;
|
|
26
|
-
}
|
|
27
|
-
/** `camera` (PIXI.Container): daqui só a posição importa; ela é passada opaca ao renderer. */
|
|
28
|
-
export interface CameraLike {
|
|
29
|
-
x: number;
|
|
30
|
-
y: number;
|
|
31
|
-
}
|
|
32
|
-
/** `app.renderer` — só a passada em render-texture do caminho multi-tela. */
|
|
33
|
-
/** O sprite de um item declarado: o mínimo que o desenho toca. */
|
|
34
|
-
export interface ItemSprite {
|
|
35
|
-
visible: boolean;
|
|
36
|
-
alpha: number;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Um power-up, do ponto de vista do DESENHO: um sprite, e nada mais.
|
|
40
|
-
*
|
|
41
|
-
* Era `extends Powerup`, importado de `game/powerups` — e esse `import type` era a ÚLTIMA aresta deste módulo
|
|
42
|
-
* para o jogo. Tipo apagado em tempo de compilação não entra no pacote, é verdade; mas ele obriga o arquivo a
|
|
43
|
-
* existir para o `tsc`, e obriga QUALQUER jogo a ter um power-up com aquela forma. O desenho toca `sprite` e
|
|
44
|
-
* mais nada — declarar só isso é a fatia mínima, a mesma regra de `core/entity`.
|
|
45
|
-
*/
|
|
46
|
-
interface PowerupWithSprite {
|
|
47
|
-
sprite?: {
|
|
48
|
-
visible: boolean;
|
|
49
|
-
} | null;
|
|
50
|
-
/**
|
|
51
|
-
* ⚠️ `kind` NÃO é lido aqui — e entrou mesmo assim, em 2026-08-26. O desenho ENTREGA o power-up ao
|
|
52
|
-
* `powerupVisibleTo` injetado, e é ele que lê o `kind` (a chave do portão é global; o resto é por
|
|
53
|
-
* jogador). Uma fatia mínima descreve o que o módulo CONSOME; em posição de parâmetro ela precisa
|
|
54
|
-
* descrever também o que ele ENTREGA, senão o callback real não cabe no ctx.
|
|
55
|
-
*
|
|
56
|
-
* É a quinta vez que esta forma aparece na árvore — `held` em audio-nav, `setSquash` na física, o
|
|
57
|
-
* menu de pausa no gamepad, o `navPause` — e a lição é a mesma: repassar é uma exigência, não uma
|
|
58
|
-
* leitura. A fatia continua mínima: dois campos, e nenhum tipo de `game/` importado.
|
|
59
|
-
*/
|
|
60
|
-
kind: string;
|
|
61
|
-
}
|
|
62
|
-
/** O jogador, do ponto de vista do DESENHO (a animação usa `AnimPlayer`, do qual este é superconjunto). */
|
|
63
|
-
/**
|
|
64
|
-
* O jogador visto pelo DESENHO: tudo o que a animação lê, mais posição, dano e apresentação.
|
|
65
|
-
* `sq`/`sqT` são o squash&stretch (amplitude e relógio, escritos por render/fx.setSquash); `easy` desenha a
|
|
66
|
-
* hitbox de coleta tolerante translúcida; `viz` é o modo de visão, que recolore por viewport.
|
|
67
|
-
*/
|
|
68
|
-
export type DrawPlayer = AnimPlayer & PlayerView<'i' | 'x' | 'y' | 'facing' | 'hurtTimer' | 'sq' | 'sqT' | 'easy' | 'visual' | 'sprite'>;
|
|
69
|
-
/** Flags de Movimento Reduzido que o DESENHO consulta (o objeto `rm` do game.js tem mais chaves). */
|
|
70
|
-
export interface ReducedMotion {
|
|
71
|
-
items?: boolean;
|
|
72
|
-
}
|
|
73
|
-
export interface DrawCtx {
|
|
74
|
-
/** Quantos jogadores/telas. Estado de RODADA (ADR-0038): vem da instância que a raiz possui.
|
|
75
|
-
* Era `numPlayers`, um `let` de `core/state` importado como binding vivo — e um `let` de módulo
|
|
76
|
-
* é compartilhado por qualquer segundo jogo que a mesma página carregue (D13 do `demos`). */
|
|
77
|
-
getNumPlayers: () => number;
|
|
78
|
-
/** Os jogadores. Estado de RODADA, pelo mesmo motivo. `readonly unknown[]` porque cada consumidor
|
|
79
|
-
* estreita para a SUA fatia — o tipo real é do jogo, não da engine (ADR-0033). */
|
|
80
|
-
getPlayers: () => readonly unknown[];
|
|
81
|
-
camera: CameraLike;
|
|
82
|
-
renderizarEm: RenderizarEm;
|
|
83
|
-
caneLayer: GraphicsLike;
|
|
84
|
-
chairLayer: GraphicsLike;
|
|
85
|
-
/**
|
|
86
|
-
* CAIXA DE COLISÃO do jogador (largura × altura, em px). ENTRA em vez de ser importada de `game/player`, e
|
|
87
|
-
* isso não é política nova: `render/scene-city`, `render/scene-sky` e `platform/audio-nav` já a recebem
|
|
88
|
-
* assim — este módulo é que tinha ficado para trás, sozinho na camada de render importando do jogo.
|
|
89
|
-
*
|
|
90
|
-
* Ela aparece em três lugares e sempre pela mesma razão: `pl.y` é o PÉ do jogador, e meia caixa acima é o
|
|
91
|
-
* meio do corpo. É conhecimento de gênero — um top-down não ancora no pé, um quiz não tem corpo — e por
|
|
92
|
-
* isso pertence a quem tem corpo, não a quem desenha.
|
|
93
|
-
*/
|
|
94
|
-
BOX: {
|
|
95
|
-
w: number;
|
|
96
|
-
h: number;
|
|
97
|
-
};
|
|
98
|
-
easyHitbox: GraphicsLike;
|
|
99
|
-
getVpTex(): unknown[];
|
|
100
|
-
isWheelchair(): boolean;
|
|
101
|
-
getFxClock(): number;
|
|
102
|
-
getPowerups(): readonly PowerupWithSprite[];
|
|
103
|
-
/**
|
|
104
|
-
* Os sprites dos ITENS declarados, na ordem em que o jogo os declara. Era `getCoinSprites()`, importado de
|
|
105
|
-
* `game/coin-spawning` — o desenho sabia que os itens são moedas.
|
|
106
|
-
*/
|
|
107
|
-
getItemSprites(): readonly (ItemSprite | null | undefined)[];
|
|
108
|
-
/** O item `j` aparece para o jogador `i`? Era `!cn.taken` — a regra "coletado some" é do jogo. */
|
|
109
|
-
itemVisibleTo(j: number, playerIndex: number): boolean;
|
|
110
|
-
/**
|
|
111
|
-
* O item `j` é DESTE jogador? Era `cn.owner === i`, e o que o desenho faz com a resposta é esmaecer o item
|
|
112
|
-
* alheio (lote C). A ideia de POSSE é do jogo: um cooperativo responde `true` sempre e ninguém esmaece nada.
|
|
113
|
-
*/
|
|
114
|
-
itemOwnedBy(j: number, playerIndex: number): boolean;
|
|
115
|
-
/**
|
|
116
|
-
* O power-up `pu` aparece para o jogador `i`? Era `!puTaken(pu, i)`, que trazia a regra "chave é global,
|
|
117
|
-
* o resto é por jogador" — uma frase sobre ESTE jogo, dentro do desenho.
|
|
118
|
-
*/
|
|
119
|
-
powerupVisibleTo(pu: PowerupWithSprite, playerIndex: number): boolean;
|
|
120
|
-
rm: ReducedMotion;
|
|
121
|
-
WORLD_PX_W(): number;
|
|
122
|
-
WORLD_PX_H(): number;
|
|
123
|
-
caneOn(pl: DrawPlayer): boolean;
|
|
124
|
-
updateParallax(camX: number, camY: number): void;
|
|
125
|
-
drawElevators(): void;
|
|
126
|
-
markSeen(camX: number, camY: number): void;
|
|
127
|
-
redrawMinimapIfDirty(): void;
|
|
128
|
-
drawMinimapPlayer(worldX: number, worldY: number): void;
|
|
129
|
-
applySharedTextures(viz: string): void;
|
|
130
|
-
renderVpOverlay(i: number, viz: string): void;
|
|
131
|
-
playerVizTex(base: Frame, viz: string): unknown;
|
|
132
|
-
updateGameHud(): void;
|
|
133
|
-
playerTextures(): PlayerTextures;
|
|
134
|
-
held(pl: AnimPlayer, act: string): boolean;
|
|
135
|
-
}
|
|
136
|
-
export interface DrawApi {
|
|
137
|
-
/** Enquadra `pl`, aplica clamp+tremor+arredondamento e reposiciona o parallax.
|
|
138
|
-
* `i` é o índice do jogador, e existe porque CADA JOGADOR TEM A SUA CÂMERA (ver `camDe`). */
|
|
139
|
-
placeCam(pl: DrawPlayer, i?: number): {
|
|
140
|
-
camX: number;
|
|
141
|
-
camY: number;
|
|
142
|
-
};
|
|
143
|
-
/** Desenha o quadro inteiro (era `draw()` no game.js). */
|
|
144
|
-
drawFrame(): void;
|
|
145
|
-
/** Escolhe o quadro de animação de `pl` e o aplica no sprite (era a cauda do `stepPlayer`). */
|
|
146
|
-
animatePlayer(pl: DrawPlayer, dt: number, dir: number): Frame;
|
|
147
|
-
}
|
|
148
|
-
export declare function initDraw(ctx: DrawCtx): DrawApi;
|
|
149
|
-
export {};
|
package/dist-pkg/render/draw.js
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
// render/draw.ts — O QUADRO. Onde a câmera para e o que é carimbado nela, uma vez por tick, depois que
|
|
3
|
-
// `update()` já simulou o mundo. Extraído verbatim do game.js (`placeCam` + `draw`), mais a aplicação da
|
|
4
|
-
// textura escolhida no sprite do jogador (a última linha do antigo `stepPlayer`).
|
|
5
|
-
//
|
|
6
|
-
// O QUE ENTROU
|
|
7
|
-
// · `placeCam(pl)` — a câmera: enquadra o jogador, CLAMPA nas bordas do mundo, aplica o tremor de tela
|
|
8
|
-
// (render/fx.shakeAmp) RE-CLAMPANDO (senão o tremor mostraria o vazio fora do mapa),
|
|
9
|
-
// arredonda para pixel inteiro (o jogo é 320×180: meio pixel é tremulação) e
|
|
10
|
-
// reposiciona o parallax. Devolve `{camX,camY}` PRÉ-arredondamento, que é o que o
|
|
11
|
-
// minimapa usa para marcar o que já foi visto.
|
|
12
|
-
// · `drawFrame()` — o quadro inteiro: transform dos sprites de jogador (squash&stretch com easing,
|
|
13
|
-
// ancorado nos pés + piscada de dano), elevadores, partículas, bengala, cadeira de
|
|
14
|
-
// rodas, hitbox tolerante do modo Fácil, e ENTÃO um dos DOIS caminhos de câmera
|
|
15
|
-
// (tela única direta vs. multi-tela com uma render-texture por viewport), clima e HUD.
|
|
16
|
-
// · `animatePlayer()` — chama a decisão de quadro (render/player-anim) e a aplica no sprite, passando pelo
|
|
17
|
-
// recolor do modo de visão (`playerVizTex`).
|
|
18
|
-
//
|
|
19
|
-
// POR QUE A FRONTEIRA CAIU AQUI
|
|
20
|
-
// `placeCam` e `draw` são inseparáveis: os DOIS caminhos de câmera do `draw` chamam `placeCam`, e o de
|
|
21
|
-
// multi-tela depende do efeito colateral dela (mover `camera` antes de cada `renderer.render`). Separá-los
|
|
22
|
-
// só produziria dois módulos que se importam. Já `animatePlayer` veio junto por outro motivo: a escolha do
|
|
23
|
-
// quadro é pura e mora em render/player-anim.ts, mas APLICÁ-LA toca um `PIXI.Sprite` e o cache de recolor de
|
|
24
|
-
// render/viewports — exatamente o tipo de coisa que este módulo já faz. Deixá-la no game.js manteria lá uma
|
|
25
|
-
// linha órfã de render dentro de uma função de lógica de jogo.
|
|
26
|
-
//
|
|
27
|
-
// O QUE FICOU DE FORA, E POR QUÊ
|
|
28
|
-
// · `configureRender()` — a MONTAGEM do multi-tela (criar/destruir as render-textures, os sprites de
|
|
29
|
-
// viewport, as molduras e as bolinhas). É ciclo de vida do render-graph, não desenho de quadro; e vive
|
|
30
|
-
// colada ao `app.renderer.resize` e ao HUD. Fica no game.js para uma rodada própria.
|
|
31
|
-
// · `updateParallax()` — mexe nos `TilingSprite` criados no game.js e na decor de tela da v3; entra
|
|
32
|
-
// injetada.
|
|
33
|
-
// · `applySharedTextures()` (render/viz-setters) e `renderVpOverlay()` (render/viewports) — já são módulos;
|
|
34
|
-
// entram injetados porque suas instâncias são criadas no game.js.
|
|
35
|
-
// · A coleta de moedas, os power-ups e o portão que precediam a animação no `stepPlayer`: são LÓGICA DE
|
|
36
|
-
// JOGO (dependem de `coins`, `powerups`, `gate`, quiz e HUD) e continuam no game.js.
|
|
37
|
-
//
|
|
38
|
-
// INJEÇÃO — a regra e as EXCEÇÕES conscientes
|
|
39
|
-
// Vale a regra da casa: o que o game.js REATRIBUI entra por getter; o que é estável entra por valor. Daí
|
|
40
|
-
// `getVpTex` (o `let vpTex` que `configureRender` troca a cada mudança de nº de telas), `isWheelchair`
|
|
41
|
-
// (`let wheelchair`), `getFxClock` (`let fxClock`, o relógio do cintilar) e `getPowerups` (`let powerups`)
|
|
42
|
-
// serem GETTERS. `rm` (o objeto de Movimento Reduzido) é `const` e mutado IN PLACE → entra por valor.
|
|
43
|
-
//
|
|
44
|
-
// EXCEÇÃO (desvio consciente da instrução de recorte, que pedia getters também para `numPlayers`, `coins` e
|
|
45
|
-
// `players`): esses três são `export let` de core/state.ts, ou seja, BINDINGS VIVOS de ES Modules. Importá-los
|
|
46
|
-
// aqui já entrega o valor atual a cada leitura — `setNumPlayersValue`/`setCoins` são vistos na hora, sem
|
|
47
|
-
// getter. Getter aqui não acrescentaria correção, só uma indireção a mais e um ctx maior; e o precedente do
|
|
48
|
-
// repositório é este (game/coin-spawning.ts importa `coins`+`setCoins` direto; game/physics.ts importa
|
|
49
|
-
// `players`). A regra do getter vale para o que mora no ESCOPO PRIVADO do game.js, que módulo nenhum enxerga.
|
|
50
|
-
//
|
|
51
|
-
// PIXI POR INTERFACE ESTRUTURAL, não por `import * as PIXI` — mesmo precedente de render/viewports.ts e
|
|
52
|
-
// render/scene-sky.ts. `camera`, `renderer`, as camadas de `Graphics` e os sprites entram como interfaces com
|
|
53
|
-
// só os membros que este módulo toca, para o arquivo carregar no project `node` do Vitest.
|
|
54
|
-
// Pelo mesmo motivo, os colaboradores que importam PIXI (game/level-geometry.drawElevators,
|
|
55
|
-
// render/minimap.*) entram por closure em vez de import: o game.js já tem as camadas deles em mão.
|
|
56
|
-
// São importados direto só os módulos-folha node-safe: constantes, RNG, render/fx, render/wheelchair-sprites,
|
|
57
|
-
// render/viz-modes, game/powerups, game/coin-spawning e core/state.
|
|
58
|
-
//
|
|
59
|
-
// ORDEM DE BOOT: `initDraw` não faz I/O nem toca o render-graph — só fecha closures. Pode ser chamada em
|
|
60
|
-
// qualquer ponto do game.js posterior às camadas de `Graphics`, à `camera` e ao `app`; o resto do ctx é
|
|
61
|
-
// função e resolve tarde. Ver docs/5-Refactoring/plano-modularizacao-mapa.md (C1).
|
|
62
|
-
import { LOGICAL_W, LOGICAL_H, EASY } from '../core/constants.js';
|
|
63
|
-
// A corrente da DECORACAO, nao a do jogo: uma particula sorteada aqui nao pode mover o sorteio
|
|
64
|
-
// das moedas. Ver o cabecalho de core/rng.ts (issue #107).
|
|
65
|
-
import { rngDecoracao } from '../core/rng.js';
|
|
66
|
-
const rnd = rngDecoracao.rnd;
|
|
67
|
-
import { JUICE, easeOut3, shakeAmp, drawFx } from './fx.js';
|
|
68
|
-
import { criarCamera } from './camera.js';
|
|
69
|
-
import { drawCane, drawRunCane, drawChair } from './wheelchair-sprites.js';
|
|
70
|
-
import { chaveDeTextura, ehBaixaVisao } from './viz-axes.js';
|
|
71
|
-
// (`game/powerups` e `game/coin-spawning` SAÍRAM daqui no item 19 — ver o bloco "ITENS DECLARADOS" abaixo.)
|
|
72
|
-
import { drawWeather } from './weather.js';
|
|
73
|
-
import { choosePlayerFrame } from './player-anim.js';
|
|
74
|
-
export function initDraw(ctx) {
|
|
75
|
-
/* ===================== câmera ===================== */
|
|
76
|
-
// A CONTA saiu para `render/camera` (item 22: M1 extraiu as fórmulas, M2 as embrulhou num OBJETO). Aqui
|
|
77
|
-
// ficou o CARIMBO dela no render-graph: o sorteio do tremor, a escrita no container e o aviso ao parallax.
|
|
78
|
-
//
|
|
79
|
-
// ========================= UMA CÂMERA POR JOGADOR, E POR QUÊ AGORA =========================
|
|
80
|
-
// O caminho multi-tela chama `placeCam(PLS[i])` para CADA jogador dentro do MESMO quadro. Com uma câmera
|
|
81
|
-
// só, a posição do jogador i entraria como ponto de partida da do jogador i+1. Hoje isso não daria em
|
|
82
|
-
// nada — com zona-morta 0×0 a câmera é sem memória e `seguir` equivale a `enquadrar`, letra por letra
|
|
83
|
-
// (`tests/camera.node.test.js` prende essa igualdade). No dia em que a zona deixar de ser zero, daria: as
|
|
84
|
-
// câmeras dos jogadores se puxariam. É mais barato separar antes de o defeito existir do que depois, e
|
|
85
|
-
// separar agora não muda um pixel do que a criança vê.
|
|
86
|
-
//
|
|
87
|
-
// ⚠️ `pular()` AINDA NÃO TEM CHAMADOR. Ele é para nascer/renascer/trocar de fase, e enquanto a zona é zero
|
|
88
|
-
// não faz falta nenhuma — `seguir` já centra. Quando o Dev escolher uma zona, o nascimento sem `pular`
|
|
89
|
-
// aparece como um deslize da câmera até o jogador no primeiro quadro da fase. Fica anotado aqui, e não
|
|
90
|
-
// fingido de resolvido.
|
|
91
|
-
const cams = new Map();
|
|
92
|
-
const camDe = (i) => {
|
|
93
|
-
let c = cams.get(i);
|
|
94
|
-
if (!c) {
|
|
95
|
-
c = criarCamera({ w: ctx.WORLD_PX_W(), h: ctx.WORLD_PX_H() }, { w: LOGICAL_W, h: LOGICAL_H });
|
|
96
|
-
cams.set(i, c);
|
|
97
|
-
}
|
|
98
|
-
// O mundo muda de tamanho ao trocar de fase, e a câmera não é avisada por ninguém — reprender todo quadro
|
|
99
|
-
// custa duas contas e dispensa um evento que hoje não existe.
|
|
100
|
-
else
|
|
101
|
-
c.redimensionar({ w: ctx.WORLD_PX_W(), h: ctx.WORLD_PX_H() }, { w: LOGICAL_W, h: LOGICAL_H });
|
|
102
|
-
return c;
|
|
103
|
-
};
|
|
104
|
-
function placeCam(pl, i = 0) {
|
|
105
|
-
const c = camDe(i);
|
|
106
|
-
// `pl.y` é o PÉ do jogador; o meio do corpo fica meia caixa acima. Esta conversão é a única coisa de
|
|
107
|
-
// PLATAFORMA que havia no enquadramento, e agora ela mora aqui, onde o corpo existe — e não na câmera.
|
|
108
|
-
c.seguir(pl.x, pl.y - ctx.BOX.h / 2);
|
|
109
|
-
const k = shakeAmp(); // JUICE: tremor decai linearmente (render/fx)
|
|
110
|
-
// Os dois sorteios ficam DENTRO do `if`, como no original: com `k === 0` ele não chamava `rnd()`, e
|
|
111
|
-
// chamá-lo duas vezes por quadro deslocaria o fluxo do gerador COMPARTILHADO — mesma semente, outro jogo.
|
|
112
|
-
const cam = k > 0 ? c.quadro(k, rnd() * 2 - 1, rnd() * 2 - 1) : c.base;
|
|
113
|
-
ctx.camera.x = -Math.round(cam.camX);
|
|
114
|
-
ctx.camera.y = -Math.round(cam.camY);
|
|
115
|
-
ctx.updateParallax(cam.camX, cam.camY);
|
|
116
|
-
return cam;
|
|
117
|
-
}
|
|
118
|
-
/* ===================== animação do personagem ===================== */
|
|
119
|
-
function animatePlayer(pl, dt, dir) {
|
|
120
|
-
const tx = choosePlayerFrame(pl, {
|
|
121
|
-
dt, dir, wheelchair: ctx.isWheelchair(), held: ctx.held, rnd, tex: ctx.playerTextures(),
|
|
122
|
-
});
|
|
123
|
-
// solo/default; no MP o drawFrame troca a textura por viewport (applySharedTextures)
|
|
124
|
-
// ⚠️ `chaveDeTextura` E NÃO A ASSINATURA DE `playerVizTex`. Medido na etapa 0 da #104: aquela função só
|
|
125
|
-
// age quando existe `DIRECT_CFG[mode]`, e devolve a textura como veio para todo o resto. Então o que
|
|
126
|
-
// muda é o CHAMADOR — a metade do estado que interessa à textura — e a porta fica onde estava.
|
|
127
|
-
if (pl.sprite)
|
|
128
|
-
pl.sprite.texture = ctx.playerVizTex(tx, chaveDeTextura(pl.visual));
|
|
129
|
-
return tx;
|
|
130
|
-
}
|
|
131
|
-
/* ===================== o quadro ===================== */
|
|
132
|
-
function drawFrame() {
|
|
133
|
-
const PLS = ctx.getPlayers();
|
|
134
|
-
for (const pl of PLS) {
|
|
135
|
-
if (!pl.sprite)
|
|
136
|
-
continue;
|
|
137
|
-
pl.sprite.x = pl.x;
|
|
138
|
-
pl.sprite.y = pl.y + 1;
|
|
139
|
-
// JUICE: squash&stretch com easing, ancorado nos pés
|
|
140
|
-
const q = (JUICE.squash && !pl.rmWalk && (pl.sqT || 0) > 0) ? (pl.sq || 0) * easeOut3((pl.sqT || 0) / 8) : 0;
|
|
141
|
-
// sem escala procedural de respiração (parecia mastigar) — respiração é por FRAMES
|
|
142
|
-
pl.sprite.scale.set((pl.facing < 0 ? -1 : 1) * (1 - q * 0.7), 1 + q);
|
|
143
|
-
pl.sprite.alpha = pl.hurtTimer > 0 ? (Math.floor(pl.hurtTimer / 4) % 2 ? 0.4 : 1) : 1;
|
|
144
|
-
}
|
|
145
|
-
ctx.drawElevators(); // cadeirante: plataforma do elevador sob os pés (largo/fino)
|
|
146
|
-
drawFx(); // JUICE: partículas (poeira/brilhos) na camada acima dos players
|
|
147
|
-
const shimOn = JUICE.shimmer && !ctx.rm.items; // JUICE: cintilar dos itens (respeita Movimento Reduzido)
|
|
148
|
-
const fxClock = ctx.getFxClock();
|
|
149
|
-
// modo cego: bengala SÓ andando (corrida = bengala de roda); nada parado/nadando/voando/escada
|
|
150
|
-
ctx.caneLayer.clear();
|
|
151
|
-
for (const pl of PLS) {
|
|
152
|
-
if (!ctx.caneOn(pl) || !pl.sprite || !pl.sprite.visible)
|
|
153
|
-
continue;
|
|
154
|
-
if (pl.running)
|
|
155
|
-
drawRunCane(ctx.caneLayer, pl);
|
|
156
|
-
else if (pl.walking)
|
|
157
|
-
drawCane(ctx.caneLayer, pl);
|
|
158
|
-
}
|
|
159
|
-
// cadeirante: desenha a cadeira nos jogadores (exceto nadando/voando)
|
|
160
|
-
ctx.chairLayer.clear();
|
|
161
|
-
if (ctx.isWheelchair()) {
|
|
162
|
-
for (const pl of PLS) {
|
|
163
|
-
if (pl.sprite && pl.sprite.visible && !pl.inWater && !pl.flying)
|
|
164
|
-
drawChair(ctx.chairLayer, pl);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
// Fácil: hitbox de coleta tolerante (retângulo translúcido) — só para os jogadores em Fácil
|
|
168
|
-
ctx.easyHitbox.clear();
|
|
169
|
-
const pad = EASY.pad;
|
|
170
|
-
for (const pl of PLS) {
|
|
171
|
-
if (!pl.easy)
|
|
172
|
-
continue;
|
|
173
|
-
ctx.easyHitbox.lineStyle(1, 0xffffff, 0.45);
|
|
174
|
-
ctx.easyHitbox.beginFill(0xffffff, 0.10);
|
|
175
|
-
ctx.easyHitbox.drawRect(pl.x - ctx.BOX.w / 2 - pad, pl.y - ctx.BOX.h - pad, ctx.BOX.w + 2 * pad, ctx.BOX.h + 2 * pad);
|
|
176
|
-
ctx.easyHitbox.endFill();
|
|
177
|
-
}
|
|
178
|
-
if (ctx.getNumPlayers() <= 1) {
|
|
179
|
-
// O CINTILAR fica: é juice da engine (render/fx), e vale para moeda, estrela ou peça de tabuleiro.
|
|
180
|
-
const itens = ctx.getItemSprites();
|
|
181
|
-
for (let j = 0; j < itens.length; j++) {
|
|
182
|
-
const s = itens[j];
|
|
183
|
-
if (s)
|
|
184
|
-
s.alpha = shimOn ? 0.8 + 0.2 * Math.sin(fxClock * 0.12 + j * 1.7) : 1;
|
|
185
|
-
}
|
|
186
|
-
const { camX, camY } = placeCam(PLS[0]);
|
|
187
|
-
ctx.markSeen(camX, camY);
|
|
188
|
-
ctx.redrawMinimapIfDirty();
|
|
189
|
-
ctx.drawMinimapPlayer(PLS[0].x, PLS[0].y - ctx.BOX.h / 2);
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
// Otimização: se TODOS estão no mesmo modo (caso comum), troca as texturas UMA vez; senão, por viewport.
|
|
193
|
-
// ⚠️ A COMPARAÇÃO PASSOU A SER PELA CHAVE DE TEXTURA, e isso é output-preservador e mais barato ao
|
|
194
|
-
// mesmo tempo. `applySharedTextures` só usa o modo para escolher TEXTURA (`worldTexFor`,
|
|
195
|
-
// `parallaxTexFor`, `treeTexFor`, `spriteTexFor`, `pupTexFor`), e todas devolvem a base para o que não
|
|
196
|
-
// está em `DIRECT_CFG` — conferido em `high-contrast.worldTexFor`. Antes, dois jogadores em `normal` e
|
|
197
|
-
// `fix-deuter` contavam como modos DIFERENTES e disparavam uma re-aplicação de texturas que produzia
|
|
198
|
-
// exactamente as mesmas texturas. Agora contam como iguais, porque para a textura eles são.
|
|
199
|
-
const v0 = chaveDeTextura(PLS[0].visual);
|
|
200
|
-
const allSame = PLS.every((p) => chaveDeTextura(p.visual) === v0);
|
|
201
|
-
const anyOverlay = PLS.some((p) => ehBaixaVisao(p.visual));
|
|
202
|
-
if (allSame)
|
|
203
|
-
ctx.applySharedTextures(v0);
|
|
204
|
-
for (let i = 0, n = ctx.getNumPlayers(); i < n; i++) {
|
|
205
|
-
const viz = chaveDeTextura(PLS[i].visual);
|
|
206
|
-
if (!allSame)
|
|
207
|
-
ctx.applySharedTextures(viz); // só troca por viewport quando os modos diferem
|
|
208
|
-
const itens2 = ctx.getItemSprites();
|
|
209
|
-
for (let j = 0; j < itens2.length; j++) {
|
|
210
|
-
const s = itens2[j];
|
|
211
|
-
if (!s)
|
|
212
|
-
continue;
|
|
213
|
-
s.visible = ctx.itemVisibleTo(j, i);
|
|
214
|
-
// Lote C: item alheio esmaecido — quem é "alheio" é o jogo que diz; JUICE: cintilar multiplicativo
|
|
215
|
-
s.alpha = (ctx.itemOwnedBy(j, i) ? 1 : 0.4) * (shimOn ? 0.8 + 0.2 * Math.sin(fxClock * 0.12 + j * 1.7) : 1);
|
|
216
|
-
}
|
|
217
|
-
for (const pu of ctx.getPowerups()) {
|
|
218
|
-
if (pu.sprite)
|
|
219
|
-
pu.sprite.visible = ctx.powerupVisibleTo(pu, i);
|
|
220
|
-
}
|
|
221
|
-
placeCam(PLS[i], i);
|
|
222
|
-
ctx.renderizarEm(ctx.camera, ctx.getVpTex()[i], true); // LIMPA: cada quadro é um quadro, não um acúmulo
|
|
223
|
-
if (anyOverlay)
|
|
224
|
-
ctx.renderVpOverlay(i, viz); // passada extra só se algum jogador está em baixa visão
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
drawWeather(); // chuva/clarão em tela-espaço, sobre tudo
|
|
228
|
-
ctx.updateGameHud(); // HUD por jogador (moedas + poder) em DOM sobreposto (alta definição)
|
|
229
|
-
}
|
|
230
|
-
return { placeCam, drawFrame, animatePlayer };
|
|
231
|
-
}
|
package/dist-pkg/render/fx.d.ts
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
export interface Particle {
|
|
3
|
-
x: number;
|
|
4
|
-
y: number;
|
|
5
|
-
vx: number;
|
|
6
|
-
vy: number;
|
|
7
|
-
life: number;
|
|
8
|
-
max: number;
|
|
9
|
-
color: number;
|
|
10
|
-
size: number;
|
|
11
|
-
g: number;
|
|
12
|
-
}
|
|
13
|
-
export interface JuiceFlags {
|
|
14
|
-
dust: boolean;
|
|
15
|
-
sparkle: boolean;
|
|
16
|
-
squash: boolean;
|
|
17
|
-
hitstop: boolean;
|
|
18
|
-
shake: boolean;
|
|
19
|
-
shimmer: boolean;
|
|
20
|
-
}
|
|
21
|
-
/** Juice toggles (persisted in localStorage; edited in the ?debug panel + Sensibilidade → Movimento). */
|
|
22
|
-
export declare const JUICE: JuiceFlags;
|
|
23
|
-
export declare function saveJuice(): void;
|
|
24
|
-
/** Standard easing (squash recovery, particle fade). Shared → exported (game.js render reads it too). */
|
|
25
|
-
export declare const easeOut3: (t: number) => number;
|
|
26
|
-
/** Minimal PIXI.Graphics surface drawFx needs (kept structural so the module stays PIXI-free for node tests). */
|
|
27
|
-
interface FxGraphics {
|
|
28
|
-
clear(): void;
|
|
29
|
-
beginFill(color: number, alpha?: number): unknown;
|
|
30
|
-
drawRect(x: number, y: number, w: number, h: number): unknown;
|
|
31
|
-
endFill(): unknown;
|
|
32
|
-
}
|
|
33
|
-
interface ReducedMotion {
|
|
34
|
-
particles?: boolean;
|
|
35
|
-
parallax?: boolean;
|
|
36
|
-
}
|
|
37
|
-
interface Squashable {
|
|
38
|
-
rmWalk?: boolean;
|
|
39
|
-
sq?: number;
|
|
40
|
-
sqT?: number;
|
|
41
|
-
}
|
|
42
|
-
export declare function initFx(deps: {
|
|
43
|
-
fxG: FxGraphics;
|
|
44
|
-
rm: ReducedMotion;
|
|
45
|
-
getPlayers: () => readonly unknown[];
|
|
46
|
-
}): void;
|
|
47
|
-
export declare function spawnParticle(x: number, y: number, vx: number, vy: number, life: number, color: number, size: number, grav?: number): void;
|
|
48
|
-
export declare function puffDust(x: number, y: number, n: number): void;
|
|
49
|
-
export declare function burstSparkle(x: number, y: number, color?: number, n?: number): void;
|
|
50
|
-
export declare function addShake(mag: number, dur: number): void;
|
|
51
|
-
export declare function addHitstop(t: number): void;
|
|
52
|
-
export declare function setSquash(pl: Squashable, amt: number): void;
|
|
53
|
-
/** Advance particles + decay shake/squash. (fxClock is stepped by game.js — see header.) */
|
|
54
|
-
export declare function stepFx(dt: number): void;
|
|
55
|
-
export declare function drawFx(): void;
|
|
56
|
-
/** Decrement hit-stop and report whether the world is still frozen (game.js early-returns on true). */
|
|
57
|
-
export declare function tickHitstop(dt: number): boolean;
|
|
58
|
-
/** Current screen-shake amplitude (0 = none); the camera applies the random jitter. */
|
|
59
|
-
export declare function shakeAmp(): number;
|
|
60
|
-
export declare const getParticles: () => Particle[];
|
|
61
|
-
export declare const getHitstopT: () => number;
|
|
62
|
-
export declare const getShakeT: () => number;
|
|
63
|
-
export {};
|