Schermo intero (pulsante accanto ai volumi e tasto F) e gioco fino a 2560 px; nei minigiochi la scena lascia lo spazio vero dei comandi; flipper: «Solo tavola», sul telefono senza pulsantiera e «Lascia stare» in alto, molla toccando al centro con «TIENI PREMUTO QUI», ponti rifatti da Codex; prove più salde (tressette)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GiECd9RWGMKV7n3K1mdy8T
This commit is contained in:
+51
-7
@@ -399,16 +399,52 @@ addEventListener('pagehide', () => leave(true));
|
||||
addEventListener('pageshow', () => leave(document.hidden));
|
||||
$('resume').addEventListener('click', closePause);
|
||||
$('pause-map').addEventListener('click', () => { closePause(); openMap(); });
|
||||
// Schermo intero dalla Pausa, dove il browser lo permette (su iPhone no: il pulsante sparisce); Esc o il pulsante per uscire.
|
||||
// I comandi di un minigioco (molla, pulsanti, carte, «Come si gioca») sono più alti del pannello dei verbi: con quelli
|
||||
// aperti la scena lascia intorno lo spazio che occupano davvero, fasce comprese (--below, misurato), così su uno schermo grande o a schermo
|
||||
// intero non finiscono sotto il bordo. Senza comandi vale la riserva del pannello in unità (style.css, #app).
|
||||
// La misura cambia la scena solo per differenze grandi: una frase di stato che va a capo (PONTE SX al flipper) non deve
|
||||
// ridimensionarla a ogni colpo, che a schermo sembra un piano che salta di qualche pixel (Andrea, 1 novembre). E «Come si
|
||||
// gioca» aperto non conta: se lo si apre, la pagina scorre invece di stringere la scena (e poi non torna larga).
|
||||
function fitControls() {
|
||||
const app = $('app'), open = !!document.querySelector('#side > section[id$="-controls"]:not([hidden])');
|
||||
if (!app.classList.toggle('controls', open)) { app.style.removeProperty('--below'); return; }
|
||||
// Tutto quello che non è la scena 16:9: le fasce di audio, pausa e uscita e la pulsantiera (dalla larghezza, non
|
||||
// dalla tela, che mentre cambia risoluzione può avere per un attimo un'altezza qualunque).
|
||||
const box = app.getBoundingClientRect(), help = document.querySelector('#side details[id$="-help"][open]');
|
||||
const extra = help ? help.getBoundingClientRect().height - help.querySelector('summary').getBoundingClientRect().height : 0;
|
||||
const below = Math.ceil(box.height - box.width * 9 / 16 - extra), was = parseFloat(app.style.getPropertyValue('--below'));
|
||||
// Cresce subito (niente deve finire sotto il bordo), cala solo per differenze grandi (niente salti a ogni frase).
|
||||
if (!(below <= was + 1 && below >= was - 24)) app.style.setProperty('--below', `${below}px`);
|
||||
}
|
||||
// «Solo tavola» al flipper (Andrea, 1 novembre): nasconde la pulsantiera, la tavola prende tutta l'altezza; il browser
|
||||
// se lo ricorda (sul telefono in orizzontale la pulsantiera del flipper è già nascosta, style.css).
|
||||
let tableOnly = (() => { try { return storage?.getItem('regolo-solo-tavola') === '1'; } catch { return false; } })();
|
||||
$('table-only').addEventListener('click', e => {
|
||||
tableOnly = !tableOnly;
|
||||
try { storage?.setItem('regolo-solo-tavola', tableOnly ? '1' : '0'); } catch { /* niente memoria: vale per questa volta */ }
|
||||
e.currentTarget.blur();
|
||||
});
|
||||
// Schermo intero, dove il browser lo permette (su iPhone no: i pulsanti spariscono): dalla Pausa, dal pulsante accanto ai
|
||||
// volumi (anche sul titolo) o col tasto F; Esc, il pulsante o F per uscire.
|
||||
function toggleFullscreen() {
|
||||
if (!document.fullscreenEnabled) return false;
|
||||
if (document.fullscreenElement) document.exitFullscreen();
|
||||
else document.documentElement.requestFullscreen({ navigationUI: 'hide' }).catch(() => {});
|
||||
return true;
|
||||
}
|
||||
{
|
||||
const full = $('fullscreen');
|
||||
if (!document.fullscreenEnabled) full.hidden = true;
|
||||
const full = $('fullscreen'), hud = $('fullscreen-hud');
|
||||
if (!document.fullscreenEnabled) full.hidden = hud.hidden = true;
|
||||
else {
|
||||
full.addEventListener('click', () => {
|
||||
if (document.fullscreenElement) document.exitFullscreen();
|
||||
else document.documentElement.requestFullscreen({ navigationUI: 'hide' }).catch(() => {});
|
||||
full.addEventListener('click', toggleFullscreen);
|
||||
hud.addEventListener('click', e => { toggleFullscreen(); e.currentTarget.blur(); });
|
||||
document.addEventListener('fullscreenchange', () => {
|
||||
const on = !!document.fullscreenElement;
|
||||
full.textContent = on ? 'Esci da schermo intero' : 'Schermo intero';
|
||||
hud.setAttribute('aria-label', on ? 'Esci da schermo intero' : 'Schermo intero');
|
||||
hud.title = on ? 'Esci da schermo intero (F o Esc)' : 'Schermo intero (F)';
|
||||
hud.setAttribute('aria-pressed', on);
|
||||
});
|
||||
document.addEventListener('fullscreenchange', () => { full.textContent = document.fullscreenElement ? 'Esci da schermo intero' : 'Schermo intero'; });
|
||||
}
|
||||
}
|
||||
$('to-title').addEventListener('click', () => {
|
||||
@@ -838,6 +874,8 @@ window.addEventListener('keydown', e => {
|
||||
return;
|
||||
}
|
||||
if (debugKey(e)) return;
|
||||
// F: schermo intero ovunque (nessun gioco usa la F; nella ricerca della mappa si scrive, sopra).
|
||||
if ((e.key === 'f' || e.key === 'F') && !e.ctrlKey && !e.metaKey && !e.altKey && !e.repeat && toggleFullscreen()) { e.preventDefault(); return; }
|
||||
if (!$('tutorial').hidden) { if (e.key === 'Escape') closeTutorial(); return; }
|
||||
if (!$('credits').hidden) {
|
||||
if (e.key === 'Escape') { if (!$('face').hidden) $('face').hidden = true; else $('credits').hidden = true; }
|
||||
@@ -1170,6 +1208,12 @@ function updateUi() {
|
||||
// Biliardo e GP di Fortezza: audio, pausa e uscita fuori dal quadro (al GP la pista passa negli angoli).
|
||||
$('stage').classList.toggle('biliardo', !!c && ['biliardo', 'rinquarto', 'gara', 'micro', 'cerbottana', 'condor', 'campana', 'flipper'].includes(story.closeups[c.id].type));
|
||||
$('stage').classList.toggle('briscola', !!cards);
|
||||
const pinball = story.closeups[c?.id]?.type === 'flipper';
|
||||
$('app').classList.toggle('flipper', pinball);
|
||||
$('app').classList.toggle('table-only', pinball && tableOnly);
|
||||
setProp($('table-only'), 'hidden', !pinball);
|
||||
setText($('table-only'), tableOnly ? 'Pulsantiera' : 'Solo tavola');
|
||||
fitControls();
|
||||
setAttr(canvas, 'aria-label', torch ? 'Fessura: sposta la luce con mouse, dito o frecce. Invio cerca il prossimo dettaglio; Esc esce.' : mg ? mg.label : "La scena dell'avventura");
|
||||
// La pagina che comincia a girare fa il suo fruscio.
|
||||
const step = game.closeup?.step ?? null;
|
||||
|
||||
Reference in New Issue
Block a user