// MapaBase: o mapa da cidade desenhado pelo kit (rio, parques, quadras, ruas brancas, avenidas amarelas, nomes de rua),
// numa janela de 880 px com borda branca. A câmera do mapa anda por chaves `foco` [quadro, cx, cy, zoom, giro]; os pinos, as
// rotas e os chips entram por props e ficam do mesmo tamanho na tela, qualquer que seja o zoom. Herói das cenas de mapa.
import React from 'react';
import {useCurrentFrame} from 'remotion';
import {COR, MONO, MapaCtx, chavesN, e5, ov, seg} from '../base';
import {PinoGrupo, PinoProps} from '../formas/Pino';
import {RotaGrupo, RotaAnimadaProps} from '../formas/RotaAnimada';
import {ChipGrupo, ChipTempoProps} from '../formas/ChipTempo';
export type MapaBaseProps = {
/** chaves da câmera: [quadro, cx, cy, zoom, giro°] em coordenadas do mapa (2000 × 2400); zoom 1 mostra o mapa quase todo */
foco: number[][];
pinos?: PinoProps[];
rotas?: RotaAnimadaProps[];
chips?: ChipTempoProps[];
inicio?: number;
/** centro vertical da janela, px */
y: number;
altura?: number;
fim?: number;
};
const W = 2000, H = 2400, JW = 880;
const VERT = Array.from({length: 8}, (_, k) => 150 + k * 260), HORZ = Array.from({length: 9}, (_, j) => 120 + j * 240);
const NOMES = [['Av. das Flores', 150, 1330, 0], ['R. do Sol', 150 + 260 * 3 - 30, 520, 90], ['R. da Lagoa', 700, 1090, 0], ['Av. Central', 1560, 1900, 90]] as const;
const Cidade: React.FC = React.memo(() =>
{VERT.slice(0, -1).flatMap((x, k) => HORZ.slice(0, -1).map((y, j) => ((k * 7 + j * 3) % 5 === 0) ? null : ))}
{[[1180, 1860], [1300, 1980], [1380, 1790], [310, 1930], [410, 2030], [1620, 300], [1700, 400]].map(([x, y], i) => )}
{[...VERT.map((x) => ({x1: x, y1: -200, x2: x, y2: H + 200})), ...HORZ.map((y) => ({x1: -200, y1: y, x2: W + 200, y2: y}))].map((l, i) => )}
{[...VERT.map((x) => ({x1: x, y1: -200, x2: x, y2: H + 200, a: false})), ...HORZ.map((y) => ({x1: -200, y1: y, x2: W + 200, y2: y, a: false}))].map((l, i) => )}
{[1330, 1090].map((y) => )}
{[1330, 1090].map((y) => )}
{NOMES.map(([n, x, y, r]) => {n})}
);
export const MapaBase: React.FC = ({foco, pinos = [], rotas = [], chips = [], inicio = 0, y, altura = 1100, fim = 1e9}) => {
const f = useCurrentFrame();
if (f < inicio - 1 || f > fim + 14) return null;
const t = ov(seg(f, inicio, inicio + 18)), sai = e5(seg(f, fim, fim + 12));
const [cx, cy, z, giro = 0] = chavesN(f - inicio, foco);
const s = 0.5 * z;
return
;
};