import { useCurrentFrame } from "remotion";
import { H, PIKSEL, R, W, opaklikFor } from "../marka";
import { clamp01, hash, karis } from "../yardimci";
import { isi, type IsiOrnek } from "./Imlec";
/**
* Sahne kenarlarında hero dokusu (PikselZemin'in video hâli): ortası boş,
* kenara yaklaştıkça sıklaşan noktalar. İmleç izi verilirse pikseller
* turuncuya ısınır. Yavaş kayma (parallax) derinlik verir.
*/
export const PikselZemin: React.FC<{
hucre?: number;
tohum?: number;
renk?: string;
/** Kenar bandı: kısa kenarın oranı */
kenar?: number;
izler?: IsiOrnek[];
kayma?: number;
guc?: number;
}> = ({ hucre = 40, tohum = 7, renk = R.primary, kenar = 0.26, izler = [], kayma = 0.25, guc = 1 }) => {
const f = useCurrentFrame();
const bant = Math.min(W, H) * kenar;
const dy = -f * kayma;
const sutun = Math.ceil(W / hucre);
const satir = Math.ceil(H / hucre) + 2;
const rects: React.ReactNode[] = [];
for (let j = 0; j < satir; j++) {
for (let i = 0; i < sutun; i++) {
const cx = i * hucre + hucre / 2;
const cy = j * hucre + hucre / 2 + (dy % hucre);
const kenarUz = Math.min(cx, W - cx, cy, H - cy);
const yogunluk = clamp01(1 - kenarUz / bant) ** 1.6;
if (hash(i, j, tohum) > yogunluk * 0.9) continue;
const h = izler.length ? isi(cx, cy, izler, 110) : 0;
const boy = hucre * PIKSEL.nokta;
rects.push(
,
);
}
}
return (
);
};