S1: fix sunet campanie — deblochează AudioContext la gestul părintelui
Camerele cheamă parent.beep() din iframe; gestul din iframe NU deblochează AudioContext-ul orchestratorului (părinte), care rămânea suspended → tăcere. Fix: creează+resume beep._ctx în handler-ul btn-start (gest direct pe părinte), escape-builder.html:1928. Verificat: ctx 'running' după start (era NO_CTX). Suita smoke 21/21 fără regresie. Board: TODOS.md ▶ BOARD ACTIV S1 [x]. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
12
TODOS.md
12
TODOS.md
@@ -16,11 +16,13 @@ Direcția cerută de user (decizii confirmate, vezi `HANDOFF.md`). Model hibrid
|
||||
părțile grele se prototipează în PARALEL în `scratch/`, verificate jucabile, apoi integrator le
|
||||
portează în `escape-builder.html` (un singur fișier, integrare secvențială).
|
||||
|
||||
- [ ] **S1 — fix sunet campanie** *(prioritar, rapid)*
|
||||
Reinvestighează ÎNTÂI: `beep` E deja definit la `escape-builder.html:1725` în orchestrator
|
||||
(devine `window.beep` → `parent.beep` ar trebui să rezolve). Ipoteza veche din HANDOFF
|
||||
(beep nedefinit) pare GREȘITĂ. Suspect real: AudioContext `suspended` până la gest user,
|
||||
sau context creat înainte de click „Începe aventura". Confirmă cauza în browser înainte de fix.
|
||||
- [x] **S1 — fix sunet campanie** *(GATA, verificat în browser)*
|
||||
Cauză reală: orchestratorul crea `beep._ctx` lazy la primul `parent.beep()` din iframe;
|
||||
gestul din iframe NU deblochează AudioContext-ul părintelui → ctx `suspended` → tăcere.
|
||||
(Ipoteza HANDOFF „beep nedefinit" era greșită; `beep` e la `escape-builder.html:1725`.)
|
||||
Fix: deblocare ctx în handler-ul `btn-start` (gest direct pe părinte), `escape-builder.html:1928`.
|
||||
Verificat: `scratch/verify-audio-s1.mjs` → ctx `running` după start (era `NO_CTX`). Smoke 21/21.
|
||||
TODO la S4: portează asertarea `beep._ctx.state==='running'` în `tests/smoke.mjs`.
|
||||
- [ ] **S2a — prototip Bomberman complet** → `scratch/bomberman-proto.html`
|
||||
Standalone jucabil: dușmani cu AI urmărire, bombe plasabile + explozii în lanț, blocuri
|
||||
distructibile, pericole, vieți + game-over + respawn fără pierderea progresului puzzle,
|
||||
|
||||
@@ -1925,7 +1925,12 @@ function hideAll(){
|
||||
document.getElementById('intro-title').textContent = MASTER.title;
|
||||
document.getElementById('intro-story').textContent = (MASTER.player?'Salut, '+MASTER.player+'! ':'')+MASTER.story;
|
||||
document.getElementById('intro-promise').textContent = N+' camere \\u00b7 ${nStyles} stiluri \\u00b7 1 cuvânt magic';
|
||||
document.getElementById('btn-start').onclick = function(){ clearProgress(); mountRoom(0); };
|
||||
document.getElementById('btn-start').onclick = function(){
|
||||
/* Deblochează AudioContext-ul AICI (gest direct pe părinte) — camerele cheamă
|
||||
parent.beep() din iframe, iar gestul din iframe NU deblochează ctx-ul părintelui. */
|
||||
try{ var c=beep._ctx||(beep._ctx=new(window.AudioContext||window.webkitAudioContext)()); if(c.state==='suspended') c.resume(); }catch(e){}
|
||||
clearProgress(); mountRoom(0);
|
||||
};
|
||||
|
||||
buildDots();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user