Files
Genarrative/src/components/GameCanvas.tsx
高物 c49c64896a
Some checks failed
CI / verify (push) Has been cancelled
初始仓库迁移
2026-04-04 23:57:06 +08:00

45 lines
1.4 KiB
TypeScript

import {lazy, Suspense} from 'react';
import type {GameCanvasProps} from './game-canvas/GameCanvasShared';
export type {
GameCanvasEntitySelection,
GameCanvasProps,
} from './game-canvas/GameCanvasShared';
const GameCanvasRuntime = lazy(async () => {
const module = await import('./game-canvas/GameCanvasRuntime');
return {
default: module.GameCanvasRuntime,
};
});
function GameCanvasLoadingFallback({
sceneName,
}: {
sceneName: string | null;
}) {
return (
<div className="relative h-full w-full overflow-hidden bg-black">
<div className="absolute inset-0 bg-[radial-gradient(circle_at_top,rgba(255,255,255,0.08),transparent_38%),linear-gradient(180deg,rgba(12,16,24,0.96),rgba(3,5,10,1))]" />
{sceneName && (
<div className="absolute left-1/2 top-3 -translate-x-1/2 rounded-full border border-white/10 bg-black/45 px-4 py-1 text-[10px] uppercase tracking-[0.2em] text-zinc-300">
{sceneName}
</div>
)}
<div className="absolute inset-0 flex items-center justify-center text-[11px] uppercase tracking-[0.3em] text-zinc-500">
Loading scene
</div>
</div>
);
}
export function GameCanvas(props: GameCanvasProps) {
return (
<Suspense fallback={<GameCanvasLoadingFallback sceneName={props.currentScenePreset?.name ?? null} />}>
<GameCanvasRuntime {...props} />
</Suspense>
);
}