import React from 'react'; import {ClipFigur, Figur, Kamera, type Posenfolge} from '../baukasten/figur'; import type {Gang} from '../baukasten/gang'; import {Vignette} from '../baukasten/helfer'; import {BODEN} from '../baukasten/orte'; import {Abenddunkel, GartenAbend, Laterne, WAND_VOLL, WandSchatten, laterneInNoasHand} from './teile'; // Gemeinsame Bühne für Szene 4–7: die drei an der Hauswand, die Laterne als einzige Lichtquelle. // Lulu und Pino werfen ihren Schatten an die Wand (Noa nicht: ihr Bild enthält die Laterne samt Stab, // deren Schatten wäre falsch – die Lampe ist ja das Licht); er nimmt dieselbe Pose, Drehung und Stauchung an // (nickt Lulu, nickt ihr Schatten mit). Feste Plätze, damit die Szenen zusammenpassen. export const PLATZ = {noa: 700, pino: 880, lulu: 1180, laterneBoden: {x: 560, y: BODEN - 56}}; export type Buehne = { kam: {x: number; y: number; zoom: number}; laterne: {inHand: boolean; x?: number; y?: number; licht: number; schwung?: number}; noa: {pose: string | Posenfolge; x?: number}; pino: {pose: string | Posenfolge; x: number; gang?: Gang; drehung?: number; y?: number; k?: number; versatz?: number}; lulu: {pose: string | Posenfolge; x?: number; hell?: number; drehung?: number; stauchY?: number; k?: number}; wandExtra?: React.ReactNode; // z. B. Hand-Schatten f: number; }; export const Wandszene: React.FC = ({kam, laterne, noa, pino, lulu, wandExtra, f}) => { const noaX = noa.x ?? PLATZ.noa; const luluX = lulu.x ?? PLATZ.lulu; const hand = laterneInNoasHand(noaX); const lat = laterne.inHand ? {x: hand.x, y: hand.y} : {x: laterne.x ?? PLATZ.laterneBoden.x, y: laterne.y ?? PLATZ.laterneBoden.y}; const s = hand.s; const kLulu = lulu.k ?? 1.12; // Lulus Schatten: etwas größer als Lulu, Kopf und Hals passen an die Wand const kPino = pino.k ?? 1 + 220 / Math.max(80, Math.abs(pino.x - lat.x)); const hell = lulu.hell ?? 1; const pinoGeht = pino.gang?.geht(f); return ( <> {/* Schatten an der Wand (hinter den Figuren) */} {wandExtra} {laterne.inHand ? ( ) : ( )} {pinoGeht && pino.gang ? ( ) : ( )} ); };