import { MutableSignal, mutableSignal } from 'boardgame-core'; export interface ValidMove { card: string; fromX: number; fromY: number; toX: number; toY: number; } // 先选择牌,然后选择棋子,最后选择移动 export interface OnitamaUIState { selectedPiece: { x: number; y: number } | null; selectedCard: string | null; validMoves: ValidMove[]; } export function createOnitamaUIState(): MutableSignal { return mutableSignal({ selectedPiece: null, selectedCard: null, validMoves: [], }); } export function clearSelection(uiState: MutableSignal): void { uiState.produce(state => { state.selectedPiece = null; state.selectedCard = null; state.validMoves = []; }); } export function selectPiece( uiState: MutableSignal, x: number, y: number ): void { uiState.produce(state => { state.selectedPiece = { x, y }; }); } export function selectCard( uiState: MutableSignal, card: string ): void { uiState.produce(state => { // 如果点击已选中的卡牌,取消选择 if (state.selectedCard === card) { state.selectedPiece = null; state.selectedCard = null; state.validMoves = []; } else { // 选择新卡牌,清除棋子选择 state.selectedPiece = null; state.selectedCard = card; state.validMoves = []; } }); } export function deselectCard( uiState: MutableSignal ): void { uiState.produce(state => { state.selectedCard = null; state.selectedPiece = null; state.validMoves = []; }); } export function setValidMoves( uiState: MutableSignal, moves: ValidMove[] ): void { uiState.produce(state => { state.validMoves = moves; }); }