Folge 8: Noa wirft wieder einen Schatten, sobald sie die Laterne nicht hält (beim Hand-Schattenspiel ausgeblendet, sonst doppelter Hase)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
79cd9459dc
commit
120b75a0da
2 changed files with 8 additions and 4 deletions
|
|
@ -84,7 +84,8 @@ export const Szene7: React.FC = () => {
|
||||||
f={f}
|
f={f}
|
||||||
kam={kam}
|
kam={kam}
|
||||||
laterne={{inHand: false, licht: 1, x: LATERNE.x, y: LATERNE.y}}
|
laterne={{inHand: false, licht: 1, x: LATERNE.x, y: LATERNE.y}}
|
||||||
noa={{pose: [[0, 'noa_B_hocken'], [z.bild0.start + 4, 'noa_B_hand-hase'], [z.hals.start, 'noa_B_hocken'], [z.igel.start - 2, 'noa_B_hand-igel']], x: NOA_X}}
|
// Noas Körperschatten nur ohne erhobene Hand – sonst gäbe es den Hasen/Igel an der Wand doppelt
|
||||||
|
noa={{pose: [[0, 'noa_B_hocken'], [z.bild0.start + 4, 'noa_B_hand-hase'], [z.hals.start, 'noa_B_hocken'], [z.igel.start - 2, 'noa_B_hand-igel']], x: NOA_X, schatten: 1 - Math.max(hase, igel)}}
|
||||||
pino={{pose: [[0, 'pino_A4_staunen'], [z.p1.start, 'pino_A3_lachen']], x: LATERNE.x - 230}}
|
pino={{pose: [[0, 'pino_A4_staunen'], [z.p1.start, 'pino_A3_lachen']], x: LATERNE.x - 230}}
|
||||||
lulu={{pose: 'lulu_A3_lachen', stauchY: strecken}}
|
lulu={{pose: 'lulu_A3_lachen', stauchY: strecken}}
|
||||||
wandExtra={
|
wandExtra={
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ import {BODEN} from '../baukasten/orte';
|
||||||
import {Abenddunkel, GartenAbend, Laterne, WAND_VOLL, WandSchatten, laterneInNoasHand} from './teile';
|
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.
|
// 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,
|
// Alle werfen ihren Schatten an die Wand – Noa nur, wenn sie die Laterne nicht hält (ihr Laternenbild enthält
|
||||||
// deren Schatten wäre falsch – die Lampe ist ja das Licht); er nimmt dieselbe Pose, Drehung und Stauchung an
|
// 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.
|
// (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 const PLATZ = {noa: 700, pino: 880, lulu: 1180, laterneBoden: {x: 560, y: BODEN - 56}};
|
||||||
|
|
@ -15,7 +15,7 @@ export const PLATZ = {noa: 700, pino: 880, lulu: 1180, laterneBoden: {x: 560, y:
|
||||||
export type Buehne = {
|
export type Buehne = {
|
||||||
kam: {x: number; y: number; zoom: number};
|
kam: {x: number; y: number; zoom: number};
|
||||||
laterne: {inHand: boolean; x?: number; y?: number; licht: number; schwung?: number};
|
laterne: {inHand: boolean; x?: number; y?: number; licht: number; schwung?: number};
|
||||||
noa: {pose: string | Posenfolge; x?: number};
|
noa: {pose: string | Posenfolge; x?: number; schatten?: number}; // schatten: Deckkraft 0–1 (0 solange sie die Laterne hält)
|
||||||
pino: {pose: string | Posenfolge; x: number; gang?: Gang; drehung?: number; y?: number; k?: number; versatz?: 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};
|
lulu: {pose: string | Posenfolge; x?: number; hell?: number; drehung?: number; stauchY?: number; k?: number};
|
||||||
wandExtra?: React.ReactNode; // z. B. Hand-Schatten (an der Wand, hinter den Figuren)
|
wandExtra?: React.ReactNode; // z. B. Hand-Schatten (an der Wand, hinter den Figuren)
|
||||||
|
|
@ -31,6 +31,8 @@ export const Wandszene: React.FC<Buehne> = ({kam, laterne, noa, pino, lulu, wand
|
||||||
const s = hand.s;
|
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 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 kPino = pino.k ?? 1 + 220 / Math.max(80, Math.abs(pino.x - lat.x));
|
||||||
|
const kNoa = 1 + 160 / Math.max(120, Math.abs(noaX - lat.x));
|
||||||
|
const noaSchatten = laterne.inHand ? 0 : (noa.schatten ?? 1);
|
||||||
const hell = lulu.hell ?? 1;
|
const hell = lulu.hell ?? 1;
|
||||||
const pinoGeht = pino.gang?.geht(f);
|
const pinoGeht = pino.gang?.geht(f);
|
||||||
// Niemand steht ganz still: alle atmen, Lulu wiegt sich leicht – die Schatten machen es mit
|
// Niemand steht ganz still: alle atmen, Lulu wiegt sich leicht – die Schatten machen es mit
|
||||||
|
|
@ -44,6 +46,7 @@ export const Wandszene: React.FC<Buehne> = ({kam, laterne, noa, pino, lulu, wand
|
||||||
{/* Schatten an der Wand (hinter den Figuren) */}
|
{/* Schatten an der Wand (hinter den Figuren) */}
|
||||||
<WandSchatten pose={lulu.pose} x={luluX} licht={lat} hoehe={340 * 2.05} k={kLulu} wand={WAND_VOLL} drehung={luluDreh} stauchY={luluStauch} />
|
<WandSchatten pose={lulu.pose} x={luluX} licht={lat} hoehe={340 * 2.05} k={kLulu} wand={WAND_VOLL} drehung={luluDreh} stauchY={luluStauch} />
|
||||||
<WandSchatten pose={pinoGeht ? 'pino_A6_blick-rechts' : pino.pose} x={pino.x} licht={lat} hoehe={340 * 0.4} k={kPino} wand={WAND_VOLL} drehung={pino.drehung} stauchY={pinoStauch} versatz={pino.versatz} />
|
<WandSchatten pose={pinoGeht ? 'pino_A6_blick-rechts' : pino.pose} x={pino.x} licht={lat} hoehe={340 * 0.4} k={kPino} wand={WAND_VOLL} drehung={pino.drehung} stauchY={pinoStauch} versatz={pino.versatz} />
|
||||||
|
{noaSchatten > 0 && <WandSchatten pose={noa.pose} x={noaX} licht={lat} hoehe={340} k={kNoa} wand={WAND_VOLL} stauchY={atmen(f, 2)} deckkraft={0.36 * noaSchatten} />}
|
||||||
{wandExtra}
|
{wandExtra}
|
||||||
<Figur pose={lulu.pose} x={luluX} y={BODEN - 6} drehung={luluDreh} stauchY={luluStauch} filter={hell < 1 ? `brightness(${hell})` : undefined} />
|
<Figur pose={lulu.pose} x={luluX} y={BODEN - 6} drehung={luluDreh} stauchY={luluStauch} filter={hell < 1 ? `brightness(${hell})` : undefined} />
|
||||||
<Figur pose={noa.pose} x={noaX} y={BODEN} stauchY={atmen(f, 2)} />
|
<Figur pose={noa.pose} x={noaX} y={BODEN} stauchY={atmen(f, 2)} />
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue