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.
);
}
/* ------------------------------------------------------------------ */
/* 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.
);
}