56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
import { h } from "preact";
|
|
import { PhaserGame, PhaserScene } from "boardgame-phaser";
|
|
import { useMemo } from "preact/hooks";
|
|
import { IndexScene } from "@/scenes/IndexScene";
|
|
import { MapViewerScene } from "@/scenes/MapViewerScene";
|
|
import { GridViewerScene } from "@/scenes/GridViewerScene";
|
|
import { ShapeViewerScene } from "@/scenes/ShapeViewerScene";
|
|
import { GameFlowScene } from "@/scenes/GameFlowScene";
|
|
import { PlaceholderEncounterScene } from "@/scenes/PlaceholderEncounterScene";
|
|
import { createGameState } from "@/state/gameState";
|
|
|
|
// 全局游戏状态单例
|
|
const gameState = createGameState();
|
|
|
|
export default function App() {
|
|
const indexScene = useMemo(() => new IndexScene(), []);
|
|
const mapViewerScene = useMemo(() => new MapViewerScene(), []);
|
|
const gridViewerScene = useMemo(() => new GridViewerScene(), []);
|
|
const shapeViewerScene = useMemo(() => new ShapeViewerScene(), []);
|
|
const gameFlowScene = useMemo(() => new GameFlowScene(gameState), []);
|
|
const placeholderEncounterScene = useMemo(
|
|
() => new PlaceholderEncounterScene(gameState),
|
|
[],
|
|
);
|
|
|
|
return (
|
|
<div className="flex flex-col h-screen">
|
|
<div className="flex-1 flex relative justify-center items-center">
|
|
<PhaserGame
|
|
initialScene="IndexScene"
|
|
config={{ width: 1920, height: 1080 }}
|
|
>
|
|
<PhaserScene sceneKey="IndexScene" scene={indexScene as any} />
|
|
<PhaserScene
|
|
sceneKey="MapViewerScene"
|
|
scene={mapViewerScene as any}
|
|
/>
|
|
<PhaserScene
|
|
sceneKey="GridViewerScene"
|
|
scene={gridViewerScene as any}
|
|
/>
|
|
<PhaserScene
|
|
sceneKey="ShapeViewerScene"
|
|
scene={shapeViewerScene as any}
|
|
/>
|
|
<PhaserScene sceneKey="GameFlowScene" scene={gameFlowScene as any} />
|
|
<PhaserScene
|
|
sceneKey="PlaceholderEncounterScene"
|
|
scene={placeholderEncounterScene as any}
|
|
/>
|
|
</PhaserGame>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|