import {Command} from "@colyseus/command"; import {CardGameState} from "../schema/CardGameState"; import {Client} from "colyseus"; import gameUtil from "../../utils/game.util"; import {Card} from "../schema/Card"; import {PlayerStateConst} from "../../constants/PlayerStateConst"; import {singleton} from "../../common/Singleton"; import {GameEnv} from "../../cfg/GameEnv"; import {GameStateConst} from "../../constants/GameStateConst"; /** * 开局换卡 */ export class ChangeCardCommand extends Command { validate({ client, cards } = this.payload) { const player = this.state.players.get(client.sessionId); return player !== undefined && gameUtil.checkCardsExists(player.cards, cards); } execute({ client, cards } = this.payload) { let sessionId = client.sessionId; let player = this.state.players.get(sessionId); let cardToRemove:Card[] = []; for (let id of cards) { let card = player.cards.get(id); cardToRemove.push(card); } let newCards = gameUtil.changeCard(this.state.cardQueue, player, cardToRemove); client.send('change_card_s2c', {errcode:0, errmsg: '', cards: newCards}); player.state = PlayerStateConst.PLAYER_CHANGE_CARD; let finishCount = 0; for (let [sessionId, player] of this.state.players) { if (player.state === PlayerStateConst.PLAYER_CHANGE_CARD) { finishCount++; } } if (finishCount >= this.room.maxClients) { // TODO:: 延后开始 根据 this.state.firstPlayer确定先手 // 正式开始游戏, 第一个玩家出牌 let curClient = this.room.clients[0]; this.state.currentTurn = curClient.sessionId; this.state.subTurn = ''; let curPlayer = this.state.players.get(curClient.sessionId); let cards = gameUtil.drawCard(this.state.cardQueue, curPlayer, singleton(GameEnv).roundDrawNum); curClient.send('draw_card_s2c', cards); this.state.gameState = GameStateConst.STATE_BEGIN_DRAW; } } }