Forno, stazione e chiesa; uscite della rotonda e di Via Calimara come il paese vero; mappa ordinata
- Dalla Pieve a destra il forno e, a sinistra, la stazione; dal portone centrale si entra nella Pieve (foto di Mariano Mirannalti, nei crediti alla voce «Fotografie»). - Via Calimara: in fondo la Piazza, verso chi guarda la farmacia. Rotonda del River: a sinistra il campo sportivo, in basso l'area feste, dietro la farmacia la Pieve, a destra il Comune, in basso a destra Calimara. - Polisportiva: dal ponte prima il campo principale, poi il secondario col padel; dietro, l'area feste. - Andrea ha 27 anni nel 2007: battute, documento e CLAUDE.md corretti. - Mappa su una griglia ordinata, senza etichette sovrapposte. - Doppio clic: Andrea va al doppio della velocità. In pausa la musica sfuma e si ferma; dopo un minuto senza toccare niente il gioco va in pausa da solo. - Crediti: scorre solo l'elenco, dedica e Chiudi sempre in vista. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017egeN2amL84ErjfgQFtEDn
This commit is contained in:
+8
-2
@@ -64,8 +64,9 @@ try {
|
||||
assert.match(await page.textContent('#credits'), /Yuri Baldi/);
|
||||
assert.match(await page.textContent('#credits'), /Francesco Bacci/);
|
||||
await page.screenshot({ path: `${OUT}/01c-crediti.png` });
|
||||
const fitsCredits = await page.evaluate(() => { const c = document.getElementById('credits'); return c.scrollHeight <= c.clientHeight; });
|
||||
assert.ok(fitsCredits, 'i crediti stanno in una schermata');
|
||||
// L'elenco può scorrere; la dedica e il pulsante Chiudi devono restare dentro lo schermo.
|
||||
const fitsCredits = await page.evaluate(() => { const c = document.getElementById('credits').getBoundingClientRect(), b = document.getElementById('close-credits').getBoundingClientRect(); return b.bottom <= c.bottom && b.top >= c.top; });
|
||||
assert.ok(fitsCredits, 'il pulsante Chiudi dei crediti è in vista');
|
||||
await page.keyboard.press('Escape');
|
||||
assert.ok(await page.isHidden('#credits'), 'Esc chiude i crediti');
|
||||
await page.click('#new-game');
|
||||
@@ -84,6 +85,11 @@ try {
|
||||
assert.ok(await fits(page), 'verbi e inventario fuori dallo schermo');
|
||||
await settle(page);
|
||||
|
||||
// Doppio clic su un punto della scena: Andrea ci va di corsa.
|
||||
const r = await page.locator('#scene').boundingBox();
|
||||
await page.mouse.dblclick(r.x + 300 / 640 * r.width, r.y + 330 / 360 * r.height);
|
||||
assert.ok(await page.evaluate(() => game.hurry), 'il doppio clic fa correre');
|
||||
await settle(page);
|
||||
// Pausa: Esc o il pulsante fermano il gioco; Riprendi torna dov'eri; il titolo offre «Continua».
|
||||
await page.keyboard.press('Escape');
|
||||
await page.waitForSelector('#pause:not([hidden])');
|
||||
|
||||
@@ -182,3 +182,16 @@ test('i personaggi della scena: posa da fermi, battito di ciglia, parlato e posa
|
||||
g.speech.pose = 'point';
|
||||
assert.equal(g.personPose(p), 'point');
|
||||
});
|
||||
|
||||
test('col doppio clic si cammina al doppio della velocità', () => {
|
||||
const far = hurry => {
|
||||
const g = new Game(mini());
|
||||
g.go('a', [10, 50]);
|
||||
g.hurry = hurry;
|
||||
g.walkTo([190, 50]);
|
||||
g.update(0.5);
|
||||
return g.state.x - 10;
|
||||
};
|
||||
const slow = far(false), fast = far(true);
|
||||
assert.ok(slow > 0 && Math.abs(fast - 2 * slow) < 1, `normale ${slow}, doppio ${fast}`);
|
||||
});
|
||||
|
||||
@@ -42,3 +42,19 @@ test('mentre parla qualcuno la musica si abbassa, poi risale', () => {
|
||||
for (let i = 0; i < 40; i++) m.update('g.mp3', 0.1);
|
||||
assert.equal(m.current.audio.volume, 0.6);
|
||||
});
|
||||
|
||||
test('in pausa la musica sfuma fino a zero e si ferma', () => {
|
||||
const played = [], paused = [];
|
||||
globalThis.Audio = class { constructor(src) { this.src = src; this.volume = 0; this.paused = true; }
|
||||
play() { this.paused = false; played.push(this.src); return Promise.resolve(); } pause() { this.paused = true; paused.push(this.src); } };
|
||||
const m = new Music({ volume: 0.5 });
|
||||
for (let i = 0; i < 40; i++) m.update('a.mp3', 0.1);
|
||||
assert.equal(m.current.audio.volume, 0.5);
|
||||
m.hold = true;
|
||||
for (let i = 0; i < 40; i++) m.update('a.mp3', 0.1);
|
||||
assert.ok(m.current.audio.paused && m.current.audio.volume === 0, 'ferma a volume zero');
|
||||
m.hold = false;
|
||||
m.update('a.mp3', 0.1);
|
||||
assert.ok(!m.current.audio.paused && played.length === 2, 'riprende lo stesso brano');
|
||||
delete globalThis.Audio;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user