import React from 'react';
import {random, useCurrentFrame} from 'remotion';
import {ClipFigur, Figur, GROESSE, NOA_HOEHE} from '../baukasten/figur';
import {Drachen, type DrachenLage, drachenHalt} from '../baukasten/drachen';
import {Drachenschnur, spulenPunkt} from '../baukasten/drachenschnur';
import {luluMaulC9, punkt} from '../baukasten/helfer';
import {Blaetterwind} from '../baukasten/natur';
import {BODEN, Ort} from '../baukasten/orte';
// Bildteile für Folge 9 „Lulu und der Drachen“. Der Wind weht die ganze Folge von links nach rechts:
// Blätter, Grashalme, Drachenschwanz und Lulus Schal (Clip lulu_C11_schal-wind) zeigen alle nach rechts.
// Feste Plätze mitten auf der Wiese, weit weg vom Apfelbaum (links bei x ≈ 340).
// Lulu steht links (windaufwärts), Noa rechts: Steigt der Drachen nach rechts (mit dem Wind), läuft die
// Schnur von Noa nach rechts oben – nie an Lulus Hals vorbei. Pino ganz links am Boden.
export const PLATZ = {noa: 1340, lulu: 1000, pino: 600};
export const LULU_Y = BODEN - 6;
// Lulu senkt den Hals (Clip C9) bis Clipbild 105: dann ist ihr Maul hier, knapp über dem Drachen im Gras
const C9_TEMPO = 1.25;
export const C9_START = 17;
export const C9_UNTEN = 105;
export const c9 = (bilder: number) => (bilder * 30) / 24 / C9_TEMPO;
const MAUL_UNTEN = luluMaulC9(C9_UNTEN);
export const DRACHEN_IM_GRAS = {x: punkt('lulu', PLATZ.lulu, LULU_Y, MAUL_UNTEN.cx, MAUL_UNTEN.cy).x, y: BODEN - 40};
// In der Pose lulu_A_apfel hält Lulu den Apfel bei 574/193 (Leinwand) – dort hält sie jetzt den Drachen
export const DRACHEN_IM_MAUL = punkt('lulu', PLATZ.lulu, LULU_Y, 574.5, 193);
// In der Pose noa_A_haende-oben sind die Fäustlinge um 674/218 – der Drachen liegt dazwischen
export const drachenUeberNoa = (noaX: number) => punkt('noa', noaX, BODEN, 674.5, 80); // über dem Kopf, nicht vor dem Gesicht
// Windiger Herbstgarten: Blätter wehen nach rechts, Grashalme biegen sich im Takt der Böen
export const WindGarten: React.FC<{abend?: boolean; wind?: number; boeen?: number}> = ({abend = false, wind = 1, boeen = 0}) => {
const f = useCurrentFrame();
const boe = 0.6 + 0.4 * Math.sin(f * 0.05) + boeen;
return (
<>
{wind > 0 && }
>
);
};
// Lulu im Wind: Clip mit wehendem Schal (Schleife), sonst eine Pose
export const LuluImWind: React.FC<{pose?: string; stauchY?: number}> = ({pose, stauchY}) =>
pose ? (
) : (
);
// Drachen samt Schnur zu Noas Spule (Pose noa_A_drachenschnur). Schaut Noa nach links (spiegeln),
// läuft die Schnur hinter ihr – deshalb vor ihr zeichnen lassen (vorNoa = false).
export const SchnurUndDrachen: React.FC<{lage: DrachenLage; noaX: number; spiegeln: boolean; schnur?: boolean; flattern?: number; leuchten?: [number, number, number]}> = ({
lage,
noaX,
spiegeln,
schnur = true,
flattern,
leuchten,
}) => {
const hoch = lage.y < BODEN - 160;
const schwanz = lage.liegt ? 0 : hoch ? 30 : 12;
return (
<>
{schnur && (
)}
>
);
};
// Lulu holt den Drachen aus dem Gras und hält ihn mit dem Maul hoch (wie den Apfel in Folge 1):
// Hals runter (Clip C9 vorwärts), Drachen ins Maul, Hals hoch (Clip rückwärts), dann die Pose
// lulu_A_apfel – der Drachen liegt genau über dem gemalten Apfel. Die Schnur hält immer Noa.
export const hebenPlan = (start: number) => {
const unten = start + c9(C9_UNTEN - C9_START);
const hoch = unten + 10;
const oben = hoch + c9(C9_UNTEN);
return {start, unten, hoch, oben};
};
export const drachenBeiLulu = (f: number, plan: ReturnType): DrachenLage => {
if (f < plan.unten) return {x: DRACHEN_IM_GRAS.x, y: BODEN - 36, drehung: 90, liegt: true};
if (f >= plan.oben) return {x: DRACHEN_IM_MAUL.x, y: DRACHEN_IM_MAUL.y + 95, drehung: -15};
const bild = f < plan.hoch ? C9_UNTEN : C9_UNTEN - ((f - plan.hoch) * 1.25 * 24) / 30;
const m = luluMaulC9(bild);
const maul = punkt('lulu', PLATZ.lulu, LULU_Y, m.cx, m.cy);
// am Maul hängt der Drachen an seiner oberen Spitze, also unter dem Maul (nicht vor dem Gesicht)
return {x: maul.x, y: maul.y + 95, drehung: -15 * Math.min(1, Math.max(0, (f - plan.hoch) / 20))};
};
// `danach`: was Lulu nach dem Loslassen zeigt ('wind' = Schal-Clip) – nie die Apfel-Pose ohne Drachen!
export const LuluHebt: React.FC<{plan: ReturnType; danach?: string}> = ({plan, danach}) => {
const f = useCurrentFrame();
if (f < plan.start) return ;
if (f < plan.hoch) return ;
if (f < plan.oben) return ;
if (danach === 'wind') return ;
return danach ? : ;
};