Mappa del paese per spostarsi veloci; Codex nei crediti
Il pulsante «Mappa» (o il tasto P) apre la pianta del paese a gradini: ci sono i posti già visti, le strade sono le uscite fra loro, un clic porta lì (game.travel, mai durante un dialogo o una battuta). Ogni scena ha la sua posizione in `map`; un posto nuovo entra con una riga. Test: posti solo visti, strade, viaggio rifiutato in un dialogo; nel browser dal Trebbio alla Piazza. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UdeKd62opy9PKgpQXtVctF
This commit is contained in:
@@ -136,6 +136,15 @@ try {
|
||||
await page.waitForSelector('#continue:not([hidden])');
|
||||
await page.click('#continue');
|
||||
assert.equal(await page.evaluate(() => game.state.scene), 'trebbio');
|
||||
// La mappa: dal Trebbio alla Piazza con due clic; i posti mai visti (la Pieve) non ci sono.
|
||||
await settle(page);
|
||||
await page.click('#map-button');
|
||||
assert.equal(await page.locator('#map-board button[data-scene="pieve"]').count(), 0, 'la Pieve non è ancora vista');
|
||||
assert.ok(await page.isVisible('#map-board button.here[data-scene="trebbio"]'));
|
||||
await page.screenshot({ path: `${OUT}/07b-mappa.png` });
|
||||
await page.click('#map-board button[data-scene="piazza"]');
|
||||
assert.ok(await page.isHidden('#map'));
|
||||
assert.equal(await page.evaluate(() => game.state.scene), 'piazza');
|
||||
|
||||
const phone = await open({ width: 390, height: 844 });
|
||||
await phone.click('#splash'); // un clic salta il cartello
|
||||
|
||||
@@ -145,3 +145,27 @@ test('il libro dell\'oratorio: «La storia infinita» ha una pagina sola', () =>
|
||||
const said = settle(g).map(s => s.text);
|
||||
assert.ok(said.some(t => t.includes('FINE')), 'aperto, dice FINE');
|
||||
});
|
||||
|
||||
test('la mappa: ogni scena ci sta, i posti compaiono solo visti, il viaggio rispetta i dialoghi', () => {
|
||||
for (const [id, sc] of Object.entries(story.scenes)) {
|
||||
assert.ok(Array.isArray(sc.map), `${id} non è sulla mappa`);
|
||||
assert.ok(sc.map.every(v => v >= 0 && v <= 100), `${id} fuori dalla pianta`);
|
||||
}
|
||||
const g = new Game(story);
|
||||
g.go('piazza', story.start.at);
|
||||
settle(g);
|
||||
assert.deepEqual(g.mapPlaces().map(p => p.id), ['piazza']);
|
||||
assert.equal(g.travel('trebbio'), false, 'non si va dove non si è mai stati');
|
||||
g.go('pieve', story.scenes.pieve.entry);
|
||||
settle(g);
|
||||
assert.deepEqual(g.mapRoads(), [['piazza', 'pieve']], 'la strada fra due posti visti');
|
||||
assert.ok(g.mapPlaces().find(p => p.id === 'pieve').here);
|
||||
assert.ok(g.travel('piazza'));
|
||||
settle(g);
|
||||
assert.equal(g.state.scene, 'piazza');
|
||||
assert.equal(g.travel('piazza'), false, 'già qui');
|
||||
g.act('talk', 'vecchietti');
|
||||
settle(g);
|
||||
assert.ok(g.dialogue);
|
||||
assert.equal(g.travel('pieve'), false, 'non si scappa da un dialogo');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user