boardgame-phaser/packages/sample-game/src/ui/App.tsx

27 lines
935 B
TypeScript
Raw Normal View History

2026-04-04 13:08:28 +08:00
import { useComputed } from '@preact/signals';
import { createGameHost, type GameModule } from 'boardgame-core';
import Phaser from 'phaser';
import { h } from 'preact';
import { PhaserGame, PhaserScene } from 'boardgame-phaser';
export default function App<TState extends Record<string, unknown>>(props: { gameModule: GameModule<TState>, gameScene: { new(): Phaser.Scene } }) {
const gameHost = useComputed(() => {
2026-04-04 12:52:14 +08:00
const gameHost = createGameHost(props.gameModule);
gameHost.setup('setup');
2026-04-04 13:08:28 +08:00
return { gameHost };
});
2026-04-04 13:08:28 +08:00
const scene = useComputed(() => new props.gameScene());
2026-04-04 13:08:28 +08:00
return (
<div className="flex flex-col h-screen">
<div className="flex-1 relative">
<PhaserGame>
2026-04-04 13:08:28 +08:00
<PhaserScene sceneKey="GameScene" scene={scene.value} autoStart data={gameHost.value} />
</PhaserGame>
</div>
</div>
);
}