-
Notifications
You must be signed in to change notification settings - Fork 0
Display and PWA
Rota /display — tela dedicada para a TV/projetor/tablet apontado pros jogadores.
- Cena ativa renderizada em fullscreen (text/color/image/CRT).
- Lighting overlay sobreposta (washes, alerta, vinheta).
- TrackerPanel lateral durante combate (combatentes + iniciativa).
- DiceFeed na borda inferior com últimas rolagens (substitui o antigo popup).
- Áudio das camadas tocando aqui (não no painel do mestre).
- AudioToggle 🔊 fixo no canto pra ligar/desligar áudio (lembra preferência).
- HistoryButton pra abrir histórico completo de rolagens em overlay.
vite-plugin-pwa gera o service worker e o manifest. O /display é instalável como app nativo no iOS/Android/desktop.
- iPad/iPhone: abrir no Safari → Compartilhar → "Adicionar à Tela Inicial".
- Android Chrome: aparece banner "Adicionar ao início". Ou: menu → "Instalar app".
- Desktop: ícone de install na barra de endereço.
Quando instalado:
- Roda fullscreen, sem chrome do browser.
- Splash screen com ícone d20 (favicon do projeto).
- Funciona offline (assets em cache do SW), mas o estado da sessão precisa do servidor — sem conexão, ele só mostra o último estado em cache.
Barra de chat na borda inferior com as últimas 8 rolagens (do rollHistory). Cada linha:
23 | 1d20+5 [18] +5 vantagem · acertou
A rolagem mais recente ganha pulso de destaque (anel verde-azulado) por ~6s. Sem cobrir a cena, sem bloquear pointer events.
Auto-scroll: lista rola pra mostrar a nova rolagem embaixo.
Mais detalhes em Dice and Roll History.
Lateral direita, visível quando combate está ativo. Lista:
- Combatentes em ordem de iniciativa.
- Turno atual destacado.
- Round + número de combatentes.
Não mostra HP/status detalhado pra evitar revelar mecanismo aos jogadores (decisão de design — o painel do mestre tem tudo, o display tem só o que o grupo precisa enxergar).
Browsers exigem gesto pra liberar áudio. Primeira visita ao /display → estado é "off". Botão 🔊 no canto liga.
Pref salva em localStorage. Quando ligado: AudioContext destrava, samples iniciam, layers marcadas como playing tocam.
Se não há cena ativa (activeSceneId === null), o display mostra scene--idle (placeholder discreto). Útil pro mestre limpar a tela entre cenas.
Cada cena tem seu próprio look. Display não tem tema global — é controlado pela cena ativa + lighting.
Fontes (self-hosted, sem Google Fonts):
- Special Elite — typewriter
- IM Fell English — scroll/pergaminho
- Caveat — handwritten (notas/cards)
- Monospace — terminal CRT
Quando o servidor sobe, ele printa no console um QR code apontando pra http://<lan-ip>:4000/display. Cole o tablet/iPad em qualquer dispositivo → escaneia → instala como PWA.
Setup
Conteúdo
Ferramentas
- Combat Tracker
- Creature Library
- Encounter Library
- Clocks
- Party Resources
- Random Tables
- Dice and Roll History
- GM Notes
- RPG Systems
Display
Arquitetura