Il carosello dei Ringraziamenti si ferma, si sfoglia e ingrandisce le foto
Tutti gli sfondi del paese (game.reelPictures, uno per scena, col nome del posto) e ogni ritratto una volta sola (prima tre si ripetevano). Scorre da solo ma si ferma sotto il mouse, si trascina col mouse o col dito, si spinge con la rotella, con le frecce ai lati e con quelle della tastiera; un tocco su una foto la mostra grande col nome (il tocco si legge al rilascio: con la cattura del puntatore il clic non arriva all'immagine). Test della fila e prova nel browser. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GiECdBYE8csKd4tcFvwntT
This commit is contained in:
@@ -70,6 +70,22 @@ export function shuffledCredits(credits, random = Math.random) {
|
||||
});
|
||||
}
|
||||
|
||||
// Le immagini del carosello dei Ringraziamenti: tutti gli sfondi del paese (uno per scena, senza doppioni) col nome
|
||||
// del posto, e un ritratto dei crediti ogni quattro sfondi; i ritratti che non trovano posto chiudono la fila.
|
||||
export function reelPictures(story) {
|
||||
const seen = new Set(), scenes = [];
|
||||
for (const s of Object.values(story.scenes)) {
|
||||
if (!s.background || seen.has(s.background)) continue;
|
||||
seen.add(s.background);
|
||||
scenes.push({ src: s.background, name: s.name, kind: 'scene' });
|
||||
}
|
||||
const faces = (story.credits ?? []).flatMap(c => c.names).filter(n => n.face).map(facePicture);
|
||||
let next = 0;
|
||||
const placed = scenes.flatMap((p, i) => i % 4 === 3 && next < faces.length ? [p, faces[next++]] : [p]);
|
||||
return [...placed, ...faces.slice(next)];
|
||||
}
|
||||
export const facePicture = n => ({ src: n.face, name: n.name, kind: n.face.endsWith('palio.png') ? 'palio' : 'face' });
|
||||
|
||||
// La ricerca della mappa: ogni parola scritta deve stare nel nome del posto, senza badare a maiuscole, accenti e
|
||||
// apostrofi («camp» trova Campomigliaio, «de medici» trova Via de' Medici).
|
||||
const plain = text => text.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '').replace(/[^a-z0-9]+/g, ' ').trim();
|
||||
|
||||
Reference in New Issue
Block a user