@the-inclusionist/engine 6.36.1
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/LICENSE +661 -0
- package/README.md +107 -0
- package/app/css/style.css +622 -0
- package/app/public/vendor/fonts/andika-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/andika-400.woff2 +0 -0
- package/app/public/vendor/fonts/andika-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/andika-700.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-400.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-700.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-mono-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-mono-400.woff2 +0 -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/greatvibes-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/lexend-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/lexend-400.woff2 +0 -0
- package/app/public/vendor/fonts/lexend-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/lexend-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/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/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/ufcook-700.woff2 +0 -0
- package/app/public/vendor/fonts/ufmag-400.woff2 +0 -0
- package/app/public/vendor/fonts.css +88 -0
- package/dist-pkg/boot/create-game.d.ts +159 -0
- package/dist-pkg/boot/create-game.js +266 -0
- package/dist-pkg/core/a11y-sr.d.ts +4 -0
- package/dist-pkg/core/a11y-sr.js +20 -0
- package/dist-pkg/core/actions.d.ts +100 -0
- package/dist-pkg/core/actions.js +149 -0
- package/dist-pkg/core/anel.d.ts +17 -0
- package/dist-pkg/core/anel.js +31 -0
- package/dist-pkg/core/collision.d.ts +21 -0
- package/dist-pkg/core/collision.js +62 -0
- package/dist-pkg/core/constants.d.ts +84 -0
- package/dist-pkg/core/constants.js +64 -0
- package/dist-pkg/core/contract.d.ts +227 -0
- package/dist-pkg/core/contract.js +184 -0
- package/dist-pkg/core/dom-query.d.ts +9 -0
- package/dist-pkg/core/dom-query.js +25 -0
- package/dist-pkg/core/entity.d.ts +150 -0
- package/dist-pkg/core/entity.js +38 -0
- package/dist-pkg/core/escape-html.d.ts +16 -0
- package/dist-pkg/core/escape-html.js +32 -0
- package/dist-pkg/core/i18n.d.ts +71 -0
- package/dist-pkg/core/i18n.js +236 -0
- package/dist-pkg/core/layers.d.ts +39 -0
- package/dist-pkg/core/layers.js +71 -0
- package/dist-pkg/core/letter-grid.d.ts +55 -0
- package/dist-pkg/core/letter-grid.js +116 -0
- package/dist-pkg/core/loop.d.ts +17 -0
- package/dist-pkg/core/loop.js +36 -0
- package/dist-pkg/core/password.d.ts +34 -0
- package/dist-pkg/core/password.js +205 -0
- package/dist-pkg/core/rng.d.ts +20 -0
- package/dist-pkg/core/rng.js +61 -0
- package/dist-pkg/core/rotulo-acessivel.d.ts +17 -0
- package/dist-pkg/core/rotulo-acessivel.js +41 -0
- package/dist-pkg/core/run-state.d.ts +115 -0
- package/dist-pkg/core/run-state.js +40 -0
- package/dist-pkg/core/scenes.d.ts +68 -0
- package/dist-pkg/core/scenes.js +64 -0
- package/dist-pkg/core/screens.d.ts +16 -0
- package/dist-pkg/core/screens.js +28 -0
- package/dist-pkg/core/state.d.ts +138 -0
- package/dist-pkg/core/state.js +290 -0
- package/dist-pkg/core/tiles.d.ts +12 -0
- package/dist-pkg/core/tiles.js +61 -0
- package/dist-pkg/core/world.d.ts +4 -0
- package/dist-pkg/core/world.js +58 -0
- package/dist-pkg/educational/activities-registry.d.ts +47 -0
- package/dist-pkg/educational/activities-registry.js +95 -0
- package/dist-pkg/i18n/en.d.ts +3 -0
- package/dist-pkg/i18n/en.js +560 -0
- package/dist-pkg/i18n/es.d.ts +3 -0
- package/dist-pkg/i18n/es.js +558 -0
- package/dist-pkg/i18n/pt.d.ts +3 -0
- package/dist-pkg/i18n/pt.js +618 -0
- package/dist-pkg/input/default-bindings.d.ts +24 -0
- package/dist-pkg/input/default-bindings.js +122 -0
- package/dist-pkg/input/devices.d.ts +15 -0
- package/dist-pkg/input/devices.js +31 -0
- package/dist-pkg/input/edges.d.ts +58 -0
- package/dist-pkg/input/edges.js +49 -0
- package/dist-pkg/input/gamepad.d.ts +203 -0
- package/dist-pkg/input/gamepad.js +531 -0
- package/dist-pkg/input/keyboard-runtime.d.ts +61 -0
- package/dist-pkg/input/keyboard-runtime.js +83 -0
- package/dist-pkg/input/keyboard.d.ts +45 -0
- package/dist-pkg/input/keyboard.js +80 -0
- package/dist-pkg/input/keydown.d.ts +270 -0
- package/dist-pkg/input/keydown.js +381 -0
- package/dist-pkg/input/latch.d.ts +30 -0
- package/dist-pkg/input/latch.js +63 -0
- package/dist-pkg/input/pointer-space.d.ts +40 -0
- package/dist-pkg/input/pointer-space.js +51 -0
- package/dist-pkg/input/state.d.ts +11 -0
- package/dist-pkg/input/state.js +12 -0
- package/dist-pkg/input/touch-bindings.d.ts +210 -0
- package/dist-pkg/input/touch-bindings.js +365 -0
- package/dist-pkg/input/touch.d.ts +173 -0
- package/dist-pkg/input/touch.js +314 -0
- package/dist-pkg/input/transports.d.ts +90 -0
- package/dist-pkg/input/transports.js +96 -0
- package/dist-pkg/input/vocabulary-migration.d.ts +58 -0
- package/dist-pkg/input/vocabulary-migration.js +125 -0
- package/dist-pkg/platform/audio-ambient.d.ts +27 -0
- package/dist-pkg/platform/audio-ambient.js +89 -0
- package/dist-pkg/platform/audio-earcons.d.ts +24 -0
- package/dist-pkg/platform/audio-earcons.js +62 -0
- package/dist-pkg/platform/audio-jingles.d.ts +17 -0
- package/dist-pkg/platform/audio-jingles.js +54 -0
- package/dist-pkg/platform/audio-mixer.d.ts +14 -0
- package/dist-pkg/platform/audio-mixer.js +62 -0
- package/dist-pkg/platform/audio-nav.d.ts +51 -0
- package/dist-pkg/platform/audio-nav.js +99 -0
- package/dist-pkg/platform/audio-sonar.d.ts +71 -0
- package/dist-pkg/platform/audio-sonar.js +173 -0
- package/dist-pkg/platform/audio.d.ts +32 -0
- package/dist-pkg/platform/audio.js +191 -0
- package/dist-pkg/platform/interruptible-speech.d.ts +19 -0
- package/dist-pkg/platform/interruptible-speech.js +79 -0
- package/dist-pkg/platform/speech.d.ts +2 -0
- package/dist-pkg/platform/speech.js +35 -0
- package/dist-pkg/platform/storage.d.ts +87 -0
- package/dist-pkg/platform/storage.js +148 -0
- package/dist-pkg/platform/tts.d.ts +33 -0
- package/dist-pkg/platform/tts.js +142 -0
- package/dist-pkg/render/camera.d.ts +58 -0
- package/dist-pkg/render/camera.js +105 -0
- package/dist-pkg/render/canvas.d.ts +13 -0
- package/dist-pkg/render/canvas.js +26 -0
- package/dist-pkg/render/cenario-data.d.ts +127 -0
- package/dist-pkg/render/cenario-data.js +145 -0
- package/dist-pkg/render/city-tex.d.ts +63 -0
- package/dist-pkg/render/city-tex.js +228 -0
- package/dist-pkg/render/city-tiles.d.ts +11 -0
- package/dist-pkg/render/city-tiles.js +140 -0
- package/dist-pkg/render/crt.d.ts +19 -0
- package/dist-pkg/render/crt.js +92 -0
- package/dist-pkg/render/cvd-matrices.d.ts +35 -0
- package/dist-pkg/render/cvd-matrices.js +91 -0
- package/dist-pkg/render/draw.d.ts +149 -0
- package/dist-pkg/render/draw.js +221 -0
- package/dist-pkg/render/fx.d.ts +63 -0
- package/dist-pkg/render/fx.js +123 -0
- package/dist-pkg/render/hc-role-data.d.ts +14 -0
- package/dist-pkg/render/hc-role-data.js +24 -0
- package/dist-pkg/render/high-contrast.d.ts +109 -0
- package/dist-pkg/render/high-contrast.js +254 -0
- package/dist-pkg/render/lq-filter.d.ts +37 -0
- package/dist-pkg/render/lq-filter.js +94 -0
- package/dist-pkg/render/minimap.d.ts +11 -0
- package/dist-pkg/render/minimap.js +94 -0
- package/dist-pkg/render/parallax.d.ts +85 -0
- package/dist-pkg/render/parallax.js +158 -0
- package/dist-pkg/render/player-anim.d.ts +71 -0
- package/dist-pkg/render/player-anim.js +152 -0
- package/dist-pkg/render/port.d.ts +143 -0
- package/dist-pkg/render/port.js +29 -0
- package/dist-pkg/render/recycling-tex.d.ts +48 -0
- package/dist-pkg/render/recycling-tex.js +164 -0
- package/dist-pkg/render/scene-city.d.ts +77 -0
- package/dist-pkg/render/scene-city.js +181 -0
- package/dist-pkg/render/scene-parallax.d.ts +72 -0
- package/dist-pkg/render/scene-parallax.js +426 -0
- package/dist-pkg/render/scene-sky.d.ts +126 -0
- package/dist-pkg/render/scene-sky.js +295 -0
- package/dist-pkg/render/screen-pipeline.d.ts +134 -0
- package/dist-pkg/render/screen-pipeline.js +177 -0
- package/dist-pkg/render/set-cenario.d.ts +54 -0
- package/dist-pkg/render/set-cenario.js +103 -0
- package/dist-pkg/render/sprite-fx.d.ts +3 -0
- package/dist-pkg/render/sprite-fx.js +40 -0
- package/dist-pkg/render/textures.d.ts +75 -0
- package/dist-pkg/render/textures.js +240 -0
- package/dist-pkg/render/title-scene.d.ts +46 -0
- package/dist-pkg/render/title-scene.js +75 -0
- package/dist-pkg/render/viewports.d.ts +52 -0
- package/dist-pkg/render/viewports.js +185 -0
- package/dist-pkg/render/viz-axes.d.ts +98 -0
- package/dist-pkg/render/viz-axes.js +184 -0
- package/dist-pkg/render/viz-modes.d.ts +61 -0
- package/dist-pkg/render/viz-modes.js +74 -0
- package/dist-pkg/render/viz-setters.d.ts +130 -0
- package/dist-pkg/render/viz-setters.js +244 -0
- package/dist-pkg/render/weather.d.ts +96 -0
- package/dist-pkg/render/weather.js +171 -0
- package/dist-pkg/render/wheelchair-sprites.d.ts +24 -0
- package/dist-pkg/render/wheelchair-sprites.js +63 -0
- package/dist-pkg/render/world-tex.d.ts +18 -0
- package/dist-pkg/render/world-tex.js +87 -0
- package/dist-pkg/ui/activities-menu.d.ts +258 -0
- package/dist-pkg/ui/activities-menu.js +648 -0
- package/dist-pkg/ui/caa-sets.d.ts +39 -0
- package/dist-pkg/ui/caa-sets.js +65 -0
- package/dist-pkg/ui/changed-mark.d.ts +15 -0
- package/dist-pkg/ui/changed-mark.js +96 -0
- package/dist-pkg/ui/debug-panel.d.ts +67 -0
- package/dist-pkg/ui/debug-panel.js +173 -0
- package/dist-pkg/ui/dom.d.ts +24 -0
- package/dist-pkg/ui/dom.js +47 -0
- package/dist-pkg/ui/focus-trap.d.ts +71 -0
- package/dist-pkg/ui/focus-trap.js +99 -0
- package/dist-pkg/ui/fonts.d.ts +41 -0
- package/dist-pkg/ui/fonts.js +59 -0
- package/dist-pkg/ui/hud.d.ts +137 -0
- package/dist-pkg/ui/hud.js +229 -0
- package/dist-pkg/ui/item-announcement.d.ts +19 -0
- package/dist-pkg/ui/item-announcement.js +36 -0
- package/dist-pkg/ui/layout.d.ts +6 -0
- package/dist-pkg/ui/layout.js +54 -0
- package/dist-pkg/ui/loop-crash.d.ts +19 -0
- package/dist-pkg/ui/loop-crash.js +60 -0
- package/dist-pkg/ui/map-hub.d.ts +56 -0
- package/dist-pkg/ui/map-hub.js +138 -0
- package/dist-pkg/ui/menu-nav.d.ts +141 -0
- package/dist-pkg/ui/menu-nav.js +390 -0
- package/dist-pkg/ui/pause-icons.d.ts +327 -0
- package/dist-pkg/ui/pause-icons.js +620 -0
- package/dist-pkg/ui/reach-notice.d.ts +34 -0
- package/dist-pkg/ui/reach-notice.js +71 -0
- package/dist-pkg/ui/settings-audio.d.ts +139 -0
- package/dist-pkg/ui/settings-audio.js +544 -0
- package/dist-pkg/ui/settings-caa.d.ts +45 -0
- package/dist-pkg/ui/settings-caa.js +137 -0
- package/dist-pkg/ui/settings-controls.d.ts +100 -0
- package/dist-pkg/ui/settings-controls.js +152 -0
- package/dist-pkg/ui/settings-empathy.d.ts +62 -0
- package/dist-pkg/ui/settings-empathy.js +137 -0
- package/dist-pkg/ui/settings-motion.d.ts +95 -0
- package/dist-pkg/ui/settings-motion.js +282 -0
- package/dist-pkg/ui/settings-motor.d.ts +77 -0
- package/dist-pkg/ui/settings-motor.js +215 -0
- package/dist-pkg/ui/settings-panel.d.ts +76 -0
- package/dist-pkg/ui/settings-panel.js +187 -0
- package/dist-pkg/ui/settings-typo.d.ts +74 -0
- package/dist-pkg/ui/settings-typo.js +150 -0
- package/dist-pkg/ui/settings-visual.d.ts +111 -0
- package/dist-pkg/ui/settings-visual.js +252 -0
- package/dist-pkg/ui/shell.d.ts +239 -0
- package/dist-pkg/ui/shell.js +430 -0
- package/dist-pkg/ui/title.d.ts +36 -0
- package/dist-pkg/ui/title.js +60 -0
- package/dist-pkg/ui/vlibras.d.ts +11 -0
- package/dist-pkg/ui/vlibras.js +87 -0
- package/dist-pkg/ui/webcam.d.ts +7 -0
- package/dist-pkg/ui/webcam.js +88 -0
- package/docs/CREDITS.md +64 -0
- package/docs/LICENSES.md +132 -0
- package/package.json +115 -0
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
import type { DomQuery } from '../core/dom-query.js';
|
|
3
|
+
import type { PadMap } from '../input/gamepad.js';
|
|
4
|
+
import type { FatosDaCena } from '../core/scenes.js';
|
|
5
|
+
/** ui/dom.ts `$` — injetado para o teste node poder passar um DOM falso. */
|
|
6
|
+
export type { DomQuery } from '../core/dom-query.js';
|
|
7
|
+
/** O subconjunto de `Window` que `printMode` usa (add/remove de ouvinte em CAPTURA + o adiamento de 80ms). */
|
|
8
|
+
export interface ShellWindow {
|
|
9
|
+
addEventListener(type: string, fn: (e: Event) => void, capture: boolean): void;
|
|
10
|
+
removeEventListener(type: string, fn: (e: Event) => void, capture: boolean): void;
|
|
11
|
+
setTimeout(fn: () => void, ms: number): unknown;
|
|
12
|
+
}
|
|
13
|
+
/** Uma tela de pausa (`.screen-pause`) — só o que a casca toca. */
|
|
14
|
+
export interface PauseScreen {
|
|
15
|
+
hidden: boolean;
|
|
16
|
+
querySelectorAll<T extends Element = Element>(sel: string): ArrayLike<T> & Iterable<T>;
|
|
17
|
+
}
|
|
18
|
+
/** Um gamepad, do jeito mínimo que a legenda do título lê. */
|
|
19
|
+
interface PadLike {
|
|
20
|
+
index: number;
|
|
21
|
+
id: string;
|
|
22
|
+
mapping: string;
|
|
23
|
+
}
|
|
24
|
+
/** Para onde o foco vai ao ENTRAR na fase. `null` = ninguém foca nada (não existe hoje; é o default seguro). */
|
|
25
|
+
export type PhaseFocus = 'game-region' | 'pause-menu' | 'title-button';
|
|
26
|
+
/**
|
|
27
|
+
* O que a fase `p` manda o documento fazer. É a sequência de `if`s do `setPhase` original lida como o que ela
|
|
28
|
+
* sempre foi: uma projeção da fase. Nenhum campo depende de histórico — o único que dependeria
|
|
29
|
+
* (`#touch-controls`) mora em `touchControlsPlan`, separado de propósito.
|
|
30
|
+
*/
|
|
31
|
+
export type { FatosDaCena } from '../core/scenes.js';
|
|
32
|
+
export interface PhaseView {
|
|
33
|
+
/** `#title-overlay`.hidden — o splash só aparece no título. */
|
|
34
|
+
titleOverlayHidden: boolean;
|
|
35
|
+
/** `#pause-overlay`.hidden — SEMPRE true. A pausa global foi aposentada na Etapa 2 (agora é uma por tela);
|
|
36
|
+
* o elemento continua no index.html e o original o escondia incondicionalmente. Verbatim. */
|
|
37
|
+
pauseOverlayHidden: true;
|
|
38
|
+
/** `.screen-pause`.hidden de CADA tela — os menus por tela só aparecem na pausa. */
|
|
39
|
+
screenPauseHidden: boolean;
|
|
40
|
+
/** `setMasterMuted(...)` — GAG: fora de 'playing' TODO o som cala (loops de ambiente/chuva inclusive). */
|
|
41
|
+
masterMuted: boolean;
|
|
42
|
+
/** `hideTouchControls()` — menu ativo (título/pausa) = sem controle virtual. */
|
|
43
|
+
hideTouchControls: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* `aria-pressed` do botão de pausa — ele diz ao leitor de tela SE está pausado.
|
|
46
|
+
*
|
|
47
|
+
* O alvo era `#btn-pause`, e esse id NUNCA existiu no documento: o botão saiu da barra e a fiação ficou
|
|
48
|
+
* "guardada p/ compat". A linha que escrevia o atributo era morta, e o teste do navegador não pegava porque
|
|
49
|
+
* o FIXTURE inventava o elemento — um caso que provava que o código escreve num botão que só o teste tem.
|
|
50
|
+
*
|
|
51
|
+
* O alvo agora é `#touch-start`, que é o botão que existe, o que o Dev clica e o ÚNICO caminho de pausa num
|
|
52
|
+
* tablet (não há teclado no Positivo da issue #8).
|
|
53
|
+
*/
|
|
54
|
+
pausePressed: boolean;
|
|
55
|
+
/** Quem recebe o foco ao entrar nesta fase. */
|
|
56
|
+
focus: PhaseFocus;
|
|
57
|
+
}
|
|
58
|
+
/** Verbatim das nove perguntas que o `setPhase` do game.js fazia à fase, agora feitas de uma vez só. */
|
|
59
|
+
export declare function phaseView(f: FatosDaCena): PhaseView;
|
|
60
|
+
/** O estado de `#touch-controls` que interessa: escondido? e havia controle ligado antes da pausa? */
|
|
61
|
+
export interface TouchControlsState {
|
|
62
|
+
/** `tc.hidden`. */
|
|
63
|
+
hidden: boolean;
|
|
64
|
+
/** `tc.dataset.wasOn === '1'`. Ausente/qualquer outro valor = false, como no original. */
|
|
65
|
+
wasOn: boolean;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* O ÚNICO pedaço de `setPhase` com memória: esconder os controles de toque ao pausar (guardando que estavam
|
|
69
|
+
* ligados) e devolvê-los ao retomar. Pura, e por isso pinável sem navegador.
|
|
70
|
+
*
|
|
71
|
+
* O estado que chega aqui é o de ANTES de `hideTouchControls()` — quem chama lê primeiro e esconde depois.
|
|
72
|
+
* Já foi o contrário, e o efeito era que `wasOn` nunca era gravado (o plano via o pad como se já estivesse
|
|
73
|
+
* desligado): pausar no celular sumia com o direcional virtual e retomar não o devolvia.
|
|
74
|
+
*/
|
|
75
|
+
export declare function touchControlsPlan(f: FatosDaCena, st: TouchControlsState, screens: number): TouchControlsState;
|
|
76
|
+
/** Um "chip" da legenda: o glifo (com cor de fundo opcional) seguido da palavra que ele significa. */
|
|
77
|
+
export declare function chip(txt: string, col: string | null, word?: string): string;
|
|
78
|
+
/**
|
|
79
|
+
* O nome FALADO de um glifo de controle. Glifo que já se lê passa intocado.
|
|
80
|
+
*
|
|
81
|
+
* Ver `PAD_GLYPH_SPOKEN` em `input/devices`: a tabela guarda CHAVES e não texto, porque ela é uma `const` de
|
|
82
|
+
* módulo avaliada uma vez no import — texto já resolvido congelaria o idioma no boot. Quem resolve é aqui, a
|
|
83
|
+
* cada chamada, com o idioma vigente naquele instante.
|
|
84
|
+
*/
|
|
85
|
+
export declare function glifoFalado(g: string): string;
|
|
86
|
+
/**
|
|
87
|
+
* A LEGENDA DA PAUSA — duas camadas no mesmo lugar (ADR-0044, item 4).
|
|
88
|
+
*
|
|
89
|
+
* Ela dizia qual botão confirma e qual volta, e carregava `aria-hidden="true"` — ou seja, era invisível
|
|
90
|
+
* justamente para quem não pode ver o glifo. A XAG 106 manda narrar exatamente isto ("A to Select").
|
|
91
|
+
*
|
|
92
|
+
* Mas só tirar o atributo devolveria o ruído que provavelmente o motivou: um leitor de tela lê `✕` como
|
|
93
|
+
* "sinal de multiplicação". Então os CHIPS ficam visíveis e mudos, e ao lado nasce UMA frase só para leitor
|
|
94
|
+
* de tela, com os glifos já traduzidos em palavra. Duas leituras da mesma informação, cada uma no sentido
|
|
95
|
+
* que a alcança.
|
|
96
|
+
*
|
|
97
|
+
* Recebe os pares `[glifo, cor]` que `simNaoGlyphs` escolhe a partir do desenho do controle — a inversão
|
|
98
|
+
* PlayStation/Nintendo (onde "sim" é o botão 1) já vem decidida de lá.
|
|
99
|
+
*/
|
|
100
|
+
export declare function pauseLegendHtml(sim: readonly [string, string], nao: readonly [string, string]): string;
|
|
101
|
+
/** Os quatro botões de ação, na ordem fixa da legenda: pular · especial · correr · trocar. */
|
|
102
|
+
export interface ActionGlyphs {
|
|
103
|
+
action2: readonly [string, string | null];
|
|
104
|
+
action3: readonly [string, string | null];
|
|
105
|
+
action1: readonly [string, string | null];
|
|
106
|
+
action4: readonly [string, string | null];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Linha 1 da legenda: direcional + START/Enter. Igual para toque e gamepad; o teclado sobrescreve os rótulos.
|
|
110
|
+
*
|
|
111
|
+
* As palavras vêm de `legend.*` e são resolvidas AQUI, a cada chamada — não numa tabela de módulo, que
|
|
112
|
+
* congelaria o idioma no boot. Registro CURTO de propósito: esta fileira fica embaixo de um glifo e não tem
|
|
113
|
+
* largura para o "Correr / interagir" que a lista de mapeamento usa (ver a nota em pt.ts).
|
|
114
|
+
*/
|
|
115
|
+
export declare function legendRow1(dirTxt: string, pauseTxt: string): string;
|
|
116
|
+
/**
|
|
117
|
+
* Linha 2 da legenda: os botões de ação, na ordem dos glifos.
|
|
118
|
+
*
|
|
119
|
+
* ⚠️ AS PALAVRAS DEIXARAM DE ESTAR AQUI. Esta função dizia `t('legend.jump')`, `t('legend.run')` — o
|
|
120
|
+
* vocabulário da plataforma dentro de um módulo de engine, e a engine a afirmar que todo jogo tem pular,
|
|
121
|
+
* especial, correr e trocar, nessa ordem. Agora `rotulo` é perguntado ao jogo (a versão CURTA, ver
|
|
122
|
+
* `ActionWord.short`), e uma posição que o jogo não nomeia não vira ficha nenhuma.
|
|
123
|
+
*/
|
|
124
|
+
export declare function legendRow2(g: ActionGlyphs, rotulo: (acao: string) => string | null): string;
|
|
125
|
+
/** O innerHTML final de `#title-legend`: duas `.lg-row`. */
|
|
126
|
+
export declare function legendHtml(l1: string, l2: string): string;
|
|
127
|
+
/**
|
|
128
|
+
* Glifos de um pad FÍSICO. `layout` sai de `padLayoutFromId` (só quando `mapping === 'standard'`; fora do
|
|
129
|
+
* padrão é sempre 'generic'), e `custom` é o mapa do assistente (só consultado FORA do padrão). Verbatim:
|
|
130
|
+
* um botão sem entrada no mapa custom cai no índice default ('0'..'3'), e um índice que o design não conhece
|
|
131
|
+
* vira o par `[índice, '#3a4a6a']` — o cinza de fallback.
|
|
132
|
+
*/
|
|
133
|
+
export declare function padActionGlyphs(layout: string, custom: PadMap | null): ActionGlyphs;
|
|
134
|
+
/** Glifos do joystick VIRTUAL (toque): sempre o design 'generic' (0/1/2/3), sem mapa custom. */
|
|
135
|
+
export declare function touchActionGlyphs(): ActionGlyphs;
|
|
136
|
+
/**
|
|
137
|
+
* Escolhe QUAL gamepad a legenda descreve: o do Jogador 1, se ele tiver um associado (`players[0].pad`);
|
|
138
|
+
* senão o primeiro conectado. Verbatim do laço do game.js — inclusive o detalhe de que, com `p1pad >= 0` e
|
|
139
|
+
* nenhum pad daquele índice presente, o resultado é `null` (a legenda cai no teclado) em vez de pegar outro.
|
|
140
|
+
*/
|
|
141
|
+
export declare function pickLegendPad(pads: readonly (PadLike | null)[], p1pad: number): PadLike | null;
|
|
142
|
+
export interface ShellCtx {
|
|
143
|
+
/** Os três fatos da cena do TOPO, perguntados a cada uso — a raiz é quem tem a pilha e quem nomeia as
|
|
144
|
+
* cenas. Getter, e não valor: a casca projeta o estado ATUAL, não o do momento em que foi ligada. */
|
|
145
|
+
fatosDaCena: () => FatosDaCena;
|
|
146
|
+
/** VOLTAR AO JOGO. É o que o "Continuar" do menu de pausa faz, e o que a entrada de um jogador novo faz.
|
|
147
|
+
* Era `setPhase('playing')` daqui mesmo — mas empilhar é da raiz, e "retomar" é o que a casca quer dizer. */
|
|
148
|
+
retomarJogo: () => void;
|
|
149
|
+
/** Quantos jogadores/telas. Estado de RODADA (ADR-0038): vem da instância que a raiz possui.
|
|
150
|
+
* Era `numPlayers`, um `let` de `core/state` importado como binding vivo — e um `let` de módulo
|
|
151
|
+
* é compartilhado por qualquer segundo jogo que a mesma página carregue (D13 do `demos`). */
|
|
152
|
+
getNumPlayers: () => number;
|
|
153
|
+
/** Os jogadores. Estado de RODADA, pelo mesmo motivo. `readonly unknown[]` porque cada consumidor
|
|
154
|
+
* estreita para a SUA fatia — o tipo real é do jogo, não da engine (ADR-0033). */
|
|
155
|
+
getPlayers: () => readonly unknown[];
|
|
156
|
+
/** ui/dom.ts `$`. Injetado: o módulo nunca alcança `document`. */
|
|
157
|
+
$: DomQuery;
|
|
158
|
+
/** `window` — só para os dois ouvintes em CAPTURA do modo Print e o adiamento de 80ms. */
|
|
159
|
+
win: ShellWindow;
|
|
160
|
+
/** platform/audio.ts `setMasterMuted` — o nó mestre que cala TUDO na pausa/título (GAG). */
|
|
161
|
+
setMasterMuted: (muted: boolean) => void;
|
|
162
|
+
/** core/a11y-sr `srSay` (educado) e `srAlert` (assertivo). */
|
|
163
|
+
srSay: (msg: string) => void;
|
|
164
|
+
srAlert: (msg: string) => void;
|
|
165
|
+
/** `let vpPause` — `buildGameHud` REATRIBUI a array a cada troca de nº de telas. */
|
|
166
|
+
getPauseScreens: () => PauseScreen[];
|
|
167
|
+
/** `let pauseActor` — quem abriu o menu; os submenus de a11y escopam no jogador dele. */
|
|
168
|
+
getPauseActor: () => number;
|
|
169
|
+
/** input/touch.ts via o envelope içado do game.js: some com o direcional virtual. */
|
|
170
|
+
hideTouchControls: () => void;
|
|
171
|
+
/** ui/pause-icons.ts: reflete os `.pi-btn` de todas as telas (estado de a11y). */
|
|
172
|
+
reflectPauseIcons: () => void;
|
|
173
|
+
/** Adaptador da Gamepad API — mesmo padrão de input/gamepad.ts (é o que a torna testável sem navegador). */
|
|
174
|
+
getGamepads: () => readonly (PadLike | null)[];
|
|
175
|
+
/** `document.body.classList.contains('touch-mode')` — injetado para não alcançar `document`. */
|
|
176
|
+
isTouchMode: () => boolean;
|
|
177
|
+
/** input/touch.ts `padLayoutFromId` — id do controle → design de botões. */
|
|
178
|
+
padLayoutFromId: (id: string) => string;
|
|
179
|
+
/** input/gamepad.ts `padMapFor` — mapa do assistente para aquele modelo (só usado FORA do padrão). */
|
|
180
|
+
/** O mapa do controle. `PadMap` vem de `input/gamepad`, que é dono dele — a versão escrita aqui,
|
|
181
|
+
* `Record<string, { b?: number }>`, era uma aproximação: perdia o `boolean` que o mapa admite. */
|
|
182
|
+
padMapFor: (id: string) => PadMap | null;
|
|
183
|
+
/** input/keyboard-runtime.ts `kbFor(i)` — as teclas CONFIGURADAS do jogador `i` (remap respeitado). */
|
|
184
|
+
kbFor: (i: number) => Record<string, string[]>;
|
|
185
|
+
/** ui/settings-controls.ts `keyName` — `KeyboardEvent.code` → rótulo humano. */
|
|
186
|
+
keyName: (code: string) => string;
|
|
187
|
+
/**
|
|
188
|
+
* A palavra CURTA desta posição, na língua do jogo. `null` = o jogo não a usa.
|
|
189
|
+
*
|
|
190
|
+
* ⚠️ Curta e não a longa: a legenda põe a palavra debaixo de um glifo, numa fileira de quatro, e não tem
|
|
191
|
+
* largura para o «Correr / interagir» que a lista de remapeamento usa. A distinção já estava no dicionário
|
|
192
|
+
* (`legend.*` contra `act.*`) e agora atravessa a fronteira COM as palavras — ver `ActionWord.short`.
|
|
193
|
+
*/
|
|
194
|
+
rotuloCurto: (acao: string) => string | null;
|
|
195
|
+
/** `setQuizLevel(n, announce)` — o ciclo 1..5 do nível de alfabetização. */
|
|
196
|
+
setQuizLevel: (n: number, announce: boolean) => void;
|
|
197
|
+
/** `quizLevel` de core/state.ts — lido para calcular o próximo do ciclo. */
|
|
198
|
+
getQuizLevel: () => number;
|
|
199
|
+
openTypo: () => void;
|
|
200
|
+
openAudio: () => void;
|
|
201
|
+
openMovement: () => void;
|
|
202
|
+
openVisual: () => void;
|
|
203
|
+
openHelp: () => void;
|
|
204
|
+
quitGame: () => void;
|
|
205
|
+
/** game/session.ts: cabe mais uma tela nesta janela? */
|
|
206
|
+
fitsN: (n: number) => boolean;
|
|
207
|
+
/** game/session.ts: cria/ativa o jogador seguinte; `null` = sem pad associado ainda. */
|
|
208
|
+
joinPlayer: (padIdx: number | null) => boolean;
|
|
209
|
+
/** ui/hud.ts: crachá "aperte um botão para entrar" na tela do jogador novo. */
|
|
210
|
+
showWaitingBadge: (i: number) => void;
|
|
211
|
+
/** ui/settings-motor.ts: escopa o painel Movimento no jogador que abriu. */
|
|
212
|
+
setMotorPlayer: (i: number) => void;
|
|
213
|
+
/** ui/settings-motion.ts `setSelectedPlayer`: idem para o painel Animação. */
|
|
214
|
+
setMotionPlayer: (i: number) => void;
|
|
215
|
+
/** ui/settings-motion.ts `motion.open`. */
|
|
216
|
+
openMotion: () => void;
|
|
217
|
+
/** Abre o menu de Comunicação Aumentada e Alternativa (ui/settings-caa). */
|
|
218
|
+
openCaa: () => void;
|
|
219
|
+
/** ui/settings-empathy.ts `empathy.open`. */
|
|
220
|
+
openEmpathy: () => void;
|
|
221
|
+
/** `let selVizPlayer` do game.js — escopa Visual e Empatia no jogador que abriu. */
|
|
222
|
+
setSelVizPlayer: (i: number) => void;
|
|
223
|
+
}
|
|
224
|
+
/** A tabela de ações dos `.pm-btn`. Chave = `data-act` do botão (PM_BTNS, de ui/activities-menu.ts). */
|
|
225
|
+
export type PauseActs = Record<string, () => void>;
|
|
226
|
+
export interface ShellApi {
|
|
227
|
+
/** Projeta no documento a cena que está no topo da pilha AGORA. A raiz chama depois de empilhar/desempilhar.
|
|
228
|
+
* (Era `setPhase(p)`: a casca gravava o valor E projetava. Empilhar é da raiz — ela é quem nomeia as cenas.) */
|
|
229
|
+
aplicarCena: () => void;
|
|
230
|
+
/** Põe o 1º `.pm-btn` (Continuar) selecionado em CADA tela de pausa. */
|
|
231
|
+
pauseSelect: () => void;
|
|
232
|
+
/** Modo Print: esconde as pausas para ver a tela limpa; qualquer tecla/clique as traz de volta. */
|
|
233
|
+
printMode: () => void;
|
|
234
|
+
/** Repinta `#title-legend` com o dispositivo e o mapeamento vigentes do Jogador 1. */
|
|
235
|
+
updateTitleLegend: () => void;
|
|
236
|
+
/** A tabela de ações do menu de pausa — consumida por ui/pause-icons.ts (`getPauseActs`). */
|
|
237
|
+
pauseActs: PauseActs;
|
|
238
|
+
}
|
|
239
|
+
export declare function initShell(ctx: ShellCtx): ShellApi;
|