Hustler-Pixelwelt: Hochhaus zusammengesteckt (Welt mit Regie, Kopfzeile, Detailansicht), CSS-Importe, forwardRef im Mini-Läufer

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-22 08:23:49 +00:00
1 parent 4c5074f4f6
commit b4e67a43a2
7 files changed
+135 -27

No files matched your search

+38 -3
View File
@@ -1,8 +1,16 @@
// Bildschirm „Hochhaus“ (Spielwelt, Kopfzeile, Detailansicht). Gerüst von T3: Zustände wie bisher im WorkersBoard; T5–T8 füllen die Welt.
import { useRef, useState } from 'react'
import HochhausKopf from './HochhausKopf'
import HochhausWelt from './HochhausWelt'
import HustlerDialog from './HustlerDialog'
import RegieEbene from './RegieEbene'
// Bildschirm „Hochhaus“: Spielwelt mit Regie-Ebene (T5, T8), Kopfzeile (T6) und Detailansicht eines Hustlers (T7). Zustände wie bisher im WorkersBoard.
// Reine Darstellung ohne Auth-Bezug: isAdmin, der Feed (feed = { state, error, loaded, refresh }), die Hustler-Tabelle (workers), die Regie-Anbindung
// (regieRef, die Seite ruft regieRef.current.push(events) bei neuen Ereignissen) und der Bildschirmwechsel (onOpen(tab)) kommen von der Seite.
// Kein CSS-Import und keine Bilder: die Stile hängt WorkersPage ein (Regeln dieser Datei in styles/hustler/hustler-ui.css).
export default function Hochhaus({ api, isAdmin, feed, workers, regieRef, onOpen }) {
const weltRef = useRef(null)
const [auswahl, setAuswahl] = useState(null) // workerId der offenen Detailansicht (null = keine)
const ready = feed.loaded && Boolean(feed.state)
// Dienst noch nie erreicht: Pixel-Leerzustand mit Fehlertext und „Neu laden“
if (!ready && feed.error) {
@@ -24,10 +32,37 @@ export default function Hochhaus({ api, isAdmin, feed, workers, regieRef, onOpen
)
}
// T5 füllt diesen Rahmen mit der Welt (Kopfzeile T6, Detailansicht T7, Regie T8)
// Die Regie-Ebene liegt in der skalierten Bühne (Weltkoordinaten); ihr Handle ist regieRef der Seite, die neue Ereignisse hineinreicht.
// Solange die Detailansicht offen ist, ruhen Rad, Ziehen und Tasten der Kamera (gesperrt).
return (
<div className="hk-hochhaus">
<div className="hk-welt-rahmen" />
<HochhausWelt
ref={weltRef}
state={feed.state}
workers={workers}
onZeige={setAuswahl}
onOpen={onOpen}
gesperrt={auswahl !== null}
>
<RegieEbene ref={regieRef} />
</HochhausWelt>
<HochhausKopf
api={api}
isAdmin={isAdmin}
state={feed.state}
error={feed.error}
refresh={feed.refresh}
onGanz={() => { if (weltRef.current) weltRef.current.ganz() }}
/>
{auswahl !== null && (
<HustlerDialog
api={api}
workerId={auswahl}
workers={workers}
onClose={() => setAuswahl(null)}
onWechsel={setAuswahl}
/>
)}
</div>
)
}
+4
View File
@@ -14,6 +14,10 @@ import '../styles/hustler/hochhaus.css'
import '../styles/hustler/keller.css'
import '../styles/hustler/pult.css'
import '../styles/hustler/hustler-ui.css'
import '../styles/hustler/hustler-welt.css'
import '../styles/hustler/hustler-kopf.css'
import '../styles/hustler/hustler-detail.css'
import '../styles/hustler/hustler-regie.css'
// Bildschirme der Seite: das Hochhaus, das Pult (Freigabe von P3) und der Keller (Bot-Leads von P6). Eine Reiterleiste gibt es nicht mehr;
// gewechselt wird im Haus (Etage Freigabe, Etage Keller) und über „◂ Hochhaus“ in Pult und Keller.