Musica, vecchietti con sprite, nuove scene del paese e generatore degli sfondi
Lavoro della sessione precedente: colonna sonora (titolo, paese, ricordi) con muto e volume, vecchietta e vecchietto sulla panchina, scene di Pieve, oratorio, Via de' Medici, Villa Adami, salita, campeggio, Bosco ai Frati e viale dei cipressi, panorama dell'introduzione, tools/genera.py per gli sfondi dalle foto. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UdeKd62opy9PKgpQXtVctF
This commit is contained in:
+15
-2
@@ -47,12 +47,23 @@ try {
|
||||
await page.waitForSelector('#title:not([hidden])');
|
||||
await page.screenshot({ path: `${OUT}/01-titolo.png` });
|
||||
await page.click('#new-game');
|
||||
// L'introduzione: una riga per clic, poi comincia la partita.
|
||||
await page.waitForSelector('#intro:not([hidden])');
|
||||
await page.screenshot({ path: `${OUT}/01b-intro.png` });
|
||||
for (let i = 0; i < 10 && await page.isVisible('#intro'); i++) await page.click('#intro', { position: { x: 40, y: 40 } });
|
||||
assert.ok(await page.isHidden('#intro'), 'l\'introduzione non finisce');
|
||||
await page.waitForFunction(() => game.speech);
|
||||
await page.screenshot({ path: `${OUT}/02-inizio.png` });
|
||||
const fits = async p => p.evaluate(() => document.querySelector('#panel').getBoundingClientRect().bottom <= innerHeight);
|
||||
assert.ok(await fits(page), 'verbi e inventario fuori dallo schermo');
|
||||
await settle(page);
|
||||
|
||||
// Musica: dopo il primo clic suona il brano del paese; muto e volume si ricordano.
|
||||
assert.ok((await page.evaluate(() => music.current?.src)).endsWith('paese.mp3'), 'musica del paese');
|
||||
await page.click('#mute');
|
||||
await page.locator('#volume').fill('30');
|
||||
assert.deepEqual(await page.evaluate(() => JSON.parse(localStorage.getItem('leggenda-regolo-audio'))), { volume: 0.3, muted: false });
|
||||
|
||||
for (const [verb, target, item] of solution) {
|
||||
if (verb === 'choose') {
|
||||
await page.locator('#choices li', { hasText: target }).click();
|
||||
@@ -68,7 +79,7 @@ try {
|
||||
if (verb === 'talk') await page.screenshot({ path: `${OUT}/03-dialogo.png` });
|
||||
await settle(page);
|
||||
if (target === 'cosa_luccicante') await page.screenshot({ path: `${OUT}/04-squama.png` });
|
||||
if (target === 'vicolo') await page.screenshot({ path: `${OUT}/05-fortezza.png` });
|
||||
if (target === 'su_fortezza') await page.screenshot({ path: `${OUT}/05-fortezza.png` });
|
||||
}
|
||||
await page.waitForSelector('#ending:not([hidden])');
|
||||
await page.screenshot({ path: `${OUT}/06-fine.png` });
|
||||
@@ -78,7 +89,7 @@ try {
|
||||
// Una partita a metà riprende da dove era rimasta.
|
||||
await page.click('#restart');
|
||||
await settle(page);
|
||||
for (const exit of ['vicolo', 'sentiero_trebbio']) {
|
||||
for (const exit of ['verso_villa_adami', 'su_villa_adami', 'salita', 'su_fortezza', 'sentiero_trebbio', 'al_trebbio']) {
|
||||
await clickScene(page, await hotspotCenter(page, exit));
|
||||
await settle(page);
|
||||
}
|
||||
@@ -98,12 +109,14 @@ try {
|
||||
|
||||
const phone = await open({ width: 390, height: 844 });
|
||||
await phone.click('#new-game');
|
||||
await phone.click('#skip-intro');
|
||||
await settle(phone);
|
||||
const overflow = await phone.evaluate(() => document.documentElement.scrollWidth > innerWidth);
|
||||
assert.equal(overflow, false, 'scorrimento orizzontale su telefono');
|
||||
await phone.screenshot({ path: `${OUT}/08-telefono.png` });
|
||||
const landscape = await open({ width: 844, height: 390 });
|
||||
await landscape.click('#new-game');
|
||||
await landscape.click('#skip-intro');
|
||||
await settle(landscape);
|
||||
assert.equal(await landscape.evaluate(() => document.documentElement.scrollWidth > innerWidth), false);
|
||||
await landscape.screenshot({ path: `${OUT}/09-orizzontale.png`, fullPage: true });
|
||||
|
||||
Reference in New Issue
Block a user