import { measureText } from "@remotion/layout-utils"; import { AbsoluteFill, Easing, interpolate, useCurrentFrame } from "remotion"; import { IzAc, PikselDevKesme, PikselMarquee, PikselSheen } from "./kinetik"; import { LogoMark } from "./logo"; import { Sahne, useDuzen } from "./ortak"; import { Eyebrow, KelimeKelime, Wordmark } from "./piksel"; import { Kamera, MaskeSatir, OdakDisiPikseller } from "./sinema"; import { FONT, R, ara, hash, trSayi, zipla } from "./tema"; import { VURUSLAR } from "./vurus"; export const vurguStil = { fontFamily: FONT.vurgu, fontStyle: "italic" as const, fontWeight: 800, letterSpacing: "-0.04em", color: R.primary, }; /* ------------------------------------------------------------------ */ /* Açılış — boş ekran → "45.320." (Track Text) → tebrik */ /* ------------------------------------------------------------------ */ export function Acilis() { const { dikey } = useDuzen(); return ( YKS sonuçları açıklandı 45.320.
Sıralaman geldi. Tebrikler! Sırada küçük bir bulmaca var.
); } /* ------------------------------------------------------------------ */ /* Seçenekler — Perspective Marquee: akıp giden bölümler, 21.000+ / 24 */ /* ------------------------------------------------------------------ */ const UST_SIRA = ["Bilgisayar Mühendisliği", "Hukuk", "Tıp", "Psikoloji", "Mimarlık", "İşletme", "Hemşirelik"]; const ALT_SIRA = ["Diş Hekimliği", "Endüstri Mühendisliği", "Öğretmenlik", "Uluslararası İlişkiler", "Yazılım Mühendisliği", "Eczacılık"]; export function Secenek() { const frame = useCurrentFrame(); const { dikey, h } = useDuzen(); const sayi = ara(frame, [4, 40], [0, 21000], Easing.bezier(0.16, 1, 0.3, 1)); const arti = zipla(frame, 38); return (
{trSayi(sayi)} +
program var.
Senin 24 hakkın var.
); } /* ------------------------------------------------------------------ */ /* Kaos — sekmeler gibi açılan sorular, sonra ani sessizlik */ /* ------------------------------------------------------------------ */ const SORULAR = [ "Geçen yılın tabanı yeter mi?", "Kontenjan düştü mü?", "Hangi şehir?", "Devlet mi, vakıf mı?", "Danışman 3.000 TL mi?!", "Teyzem “hukuk yaz” dedi", "Ya boşta kalırsam?", "Hangisi kaçıncı sıraya?", ]; const YER_YATAY = [ [-0.62, -0.62], [0.55, -0.7], [-0.78, -0.08], [0.74, -0.18], [-0.6, 0.55], [0.58, 0.52], [-0.12, 0.8], [0.1, -0.86], ]; const YER_DIKEY = [ [-0.38, -0.74], [0.36, -0.6], [-0.42, -0.42], [0.4, -0.3], [-0.36, 0.34], [0.38, 0.48], [-0.3, 0.66], [0.32, 0.8], ]; export function Kaos() { const frame = useCurrentFrame(); const { dikey, w, h } = useDuzen(); const yerler = dikey ? YER_DIKEY : YER_YATAY; // Sonda kartlar hızlanır, ekran doluyor hissi; sonra sessizliğe sert kesme const telas = ara(frame, [60, 104], [0, 1], Easing.in(Easing.quad)); return ( {SORULAR.map((s, i) => { const [nx, ny] = yerler[i]; const g = zipla(frame, 6 + i * 5); const hizli = 1 + telas * 3; const yuzX = Math.sin(((frame + i * 20) / 18) * hizli) * (16 + telas * 20); const yuzY = Math.cos(((frame + i * 13) / 15) * hizli) * (14 + telas * 18); // Sırayla "sekme değiştirme" vurgusu const aktif = Math.floor(frame / 9) % SORULAR.length === i && frame > 20; return (
{s}
); })}

); } /* ------------------------------------------------------------------ */ /* Nefes — sessizlik. Tek bir turuncu piksel nefes alır. */ /* ------------------------------------------------------------------ */ export function Nefes() { const frame = useCurrentFrame(); const { dikey } = useDuzen(); const nefes = 1 + 0.12 * Math.sin((frame / 30) * Math.PI * 1.1); const kare = dikey ? 64 : 56; return (
Derin bir nefes al.
); } /* ------------------------------------------------------------------ */ /* Logo — BAM: dev piksel kelime süpürür, logoya kesilir, slogan sheen */ /* ------------------------------------------------------------------ */ export function LogoSahnesi() { const frame = useCurrentFrame(); const { dikey } = useDuzen(); const markBoy = dikey ? 250 : 230; const yaziBoy = dikey ? 130 : 150; // Kilit: işaret + yazı (yatayda yan yana, dikeyde alt alta) const yaziGen = measureText({ text: "Kolay", fontFamily: "Bricolage", fontSize: yaziBoy, fontWeight: "300", letterSpacing: `${-0.05 * yaziBoy}px` }).width + measureText({ text: "Tercih", fontFamily: "Bricolage", fontSize: yaziBoy, fontWeight: "600", letterSpacing: `${-0.05 * yaziBoy}px` }).width; const kilit = (
); return ( {kilit}
{dikey ? ( <> Tercih listeni gerçek veriyle kur, ) : ( Tercih listeni gerçek veriyle kur, )}
panikle değil.
); }