import Phaser from 'phaser'; import type { BoopState, PlayerType, PieceType } from '@/game/boop'; import { GameHostScene } from 'boardgame-phaser'; import { commands } from '@/game/boop'; import { BoardRenderer } from './BoardRenderer'; import { createPieceSpawner } from './PieceSpawner'; import { SupplyUI } from './SupplyUI'; import { PieceTypeSelector } from './PieceTypeSelector'; import { WinnerOverlay } from './WinnerOverlay'; export class GameScene extends GameHostScene { private boardRenderer!: BoardRenderer; private supplyUI!: SupplyUI; private pieceTypeSelector!: PieceTypeSelector; private winnerOverlay!: WinnerOverlay; constructor() { super('GameScene'); } create(): void { super.create(); // 初始化 UI 组件 this.boardRenderer = new BoardRenderer(this); this.supplyUI = new SupplyUI(this); this.pieceTypeSelector = new PieceTypeSelector(this); this.winnerOverlay = new WinnerOverlay(this, () => this.restartGame()); // 设置棋子生成器 this.disposables.add(createPieceSpawner(this)); // 设置输入处理 this.boardRenderer.setupInput(this.gameHost.state, (row, col) => { this.handleCellClick(row, col); }); // 监听状态变化 this.watch(() => { const winner = this.state.winner; if (winner) { this.winnerOverlay.show(winner); } else { this.winnerOverlay.hide(); } }); this.watch(() => { const currentPlayer = this.state.currentPlayer; this.boardRenderer.updateTurnText(currentPlayer, this.state); this.supplyUI.update(this.state); this.pieceTypeSelector.update(this.state); }); // 设置棋子类型选择器回调 // 可以在这里添加类型改变时的额外逻辑 } private handleCellClick(row: number, col: number): void { const selectedType = this.pieceTypeSelector.getSelectedType(); const cmd = commands.play(this.state.currentPlayer, row, col, selectedType); const error = this.gameHost.onInput(cmd); if (error) { console.warn('Invalid move:', error); } } private restartGame(): void { this.gameHost.setup('setup'); } }