"use client"; import { type CSSProperties, useEffect, useRef } from "react"; import { problemaPorId } from "@/lib/jogo/problemas"; import { ARMAS, HORDAS, JOGADOR } from "@/lib/jogo/valores"; import type { Retrato } from "./contrato"; import { TOQUE_TOPO } from "./medidas"; const AREA_TOPO = "env(safe-area-inset-top)"; const AREA_ESQUERDA = "env(safe-area-inset-left)"; const AREA_DIREITA = "env(safe-area-inset-right)"; /** Centro do aviso: 22% da altura, no terço de cima, longe da mira. */ const AVISO_CENTRO = "22%"; /** Barra do topo (botão de 44 px entre duas folgas) onde o feed começa. */ const BARRA_TOPO = `calc(max(var(--sp-2), ${AREA_TOPO}) + 44px + var(--sp-2))`; /** No toque o feed termina acima do botão mais alto, com uma folga. */ const FEED_ALTURA_MAXIMA = `calc(100dvh - ${BARRA_TOPO} - ${TOQUE_TOPO} - var(--sp-2))`; type Props = { retrato: Retrato; mudo: boolean; aoAlternarMudo(): void; aoContinuar(): void; aoSair(): void; }; const fundo = "bg-[rgba(10,10,10,.72)] font-[family-name:var(--font-mono)] tracking-[0.02em] text-[#f4f2ed]"; const painel = `${fundo} text-[13px]`; const botao = "pointer-events-auto inline-flex min-h-11 items-center justify-center border border-white/40 bg-[var(--ink)] px-sp-4 font-display text-[15px] font-medium text-[#f4f2ed] hover:bg-white/15"; function Alto({ retrato }: { retrato: Retrato }) { const problema = problemaPorId(retrato.problemaAtual)?.nome ?? ""; if (retrato.fase === "chefao") return <>Chefão · {problema}; return ( <> Horda {retrato.horda + 1} de {HORDAS.tamanhos.length} · {problema} · faltam {retrato.restantes} ); } function IconeSom({ mudo }: { mudo: boolean }) { return ( ); } export default function Hud({ retrato, mudo, aoAlternarMudo, aoContinuar, aoSair, }: Props) { const continuar = useRef(null); useEffect(() => { if (retrato.pausado) continuar.current?.focus(); }, [retrato.pausado]); const arma = ARMAS[retrato.arma]; const municao = retrato.arma === 0 ? "∞" : arma.gasta ? String(retrato.municao) : null; const resolvido = retrato.fase === "pausa" ? problemaPorId(retrato.problemaAtual) : undefined; const emJogo = retrato.fase === "horda" || retrato.fase === "chefao"; const vida = Math.max(0, Math.min(JOGADOR.vida, Math.round(retrato.vida))); return (