import { AGENT_WORKSPACES } from '../../lib/agentWorkspaces' import { AGENT_SUPERVISOR } from '../../lib/agentWorkspaces' /** * Sitzordnung im 3D-Meetingraum (Runde 6, §5/§6/§7). * * Eine einzige Tabelle bestimmt, wer wo sitzt. Namen, Funktionen, Porträts und * Zielseiten kommen dabei nicht von hier, sondern aus `AGENT_WORKSPACES` — * derselben zentralen Konfiguration, die Menü und Seitenköpfe verwenden. Hier * steht ausschliesslich die Geometrie (§24, Schritt 7: nichts doppelt pflegen). * * Koordinaten sind Meter im Weltsystem der Szene: * - x: negativ = links vom Betrachter, positiv = rechts * - z: 0 am Kopfende des Betrachters, negativ = in den Raum hinein * * Die Agenten wechseln die Tischseite in der Reihenfolge der Konfiguration * (Ferdi links, Bruno rechts, Livia links, …). Das verteilt sie gleichmässig, * hält die Abstände gross genug, dass sich niemand überlappt, und macht den * Arbeitsablauf auch am Tisch ablesbar. */ /** Auf welcher Tischseite ein Platz liegt. */ export const SeatSide = { LEFT: 'LEFT', RIGHT: 'RIGHT', /** Kopfende gegenüber dem Betrachter — nur Thomas. */ HEAD: 'HEAD', } as const export type SeatSide = typeof SeatSide[keyof typeof SeatSide] export interface MeetingSeat { /** Agenten-ID; identisch mit `AGENT_PHOTOS` und den Mockdaten. */ id: string name: string role: string /** Zielseite des Klicks. */ path: string side: SeatSide /** Sitzposition in Metern. */ x: number z: number } /** * Sitzplätze der fünf Agenten, in Metern (Runde 6, §3.2). * * Ferdi und Bruno sind die direkten Nachbarn des Betrachters — einer links, * einer rechts, schräg frontal und dicht an der vorderen Tischkante. Dadurch * entsteht hinter ihnen Platz, in dem die übrigen drei gestaffelt Raum haben, * ohne sich zu überlagern. * * Vorher standen alle fünf zu weit hinten und drängten sich am Fluchtpunkt. */ const PLAETZE: Record = { ferdi: { side: SeatSide.LEFT, x: -1.14, z: -1.20 }, bruno: { side: SeatSide.RIGHT, x: 1.14, z: -1.20 }, livia: { side: SeatSide.LEFT, x: -1.42, z: -2.90 }, nora: { side: SeatSide.RIGHT, x: 1.42, z: -2.90 }, sina: { side: SeatSide.LEFT, x: -1.30, z: -4.75 }, } /** * Notplatz für einen Agenten ohne Eintrag oben — sichtbar hinten rechts statt * lautlos im Nichts. */ const FALLBACK = { side: SeatSide.RIGHT, x: 1.30, z: -4.75 } /** Kopfende gegenüber. Unverändert: die Position wirkt gut (§3.2). */ const HEAD_Z = -6.75 export const MEETING_SEATS: MeetingSeat[] = [ ...AGENT_WORKSPACES.map(agent => ({ id: agent.id, name: agent.name, role: agent.role, path: agent.path, ...(PLAETZE[agent.id] ?? FALLBACK), })), { id: AGENT_SUPERVISOR.id, name: AGENT_SUPERVISOR.name, role: AGENT_SUPERVISOR.role, path: AGENT_SUPERVISOR.path, side: SeatSide.HEAD, x: 0, z: HEAD_Z, }, ]