51 lines
2.1 KiB
TypeScript
51 lines
2.1 KiB
TypeScript
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<CardGameState, { client: Client, cards: [string] }> {
|
|
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;
|
|
}
|
|
}
|
|
|
|
}
|