选择英雄界面增加超时
This commit is contained in:
parent
18761f4c43
commit
f19adf27f9
@ -40,6 +40,8 @@ export class GameEnv {
|
||||
public waitingPlayerTime: number;
|
||||
// 匹配等待时, 每进入一个玩家, 等待时间延长n秒
|
||||
public waitingPlayerOnePlus: number;
|
||||
// 英雄选择时间
|
||||
public pickHeroTime: number;
|
||||
|
||||
public init(data: Map<number, BaseCfg>) {
|
||||
this.initCardNum = data.get(BaseConst.INIT_CARD_NUM).value;
|
||||
@ -61,5 +63,6 @@ export class GameEnv {
|
||||
this.gameResultTime = data.get(BaseConst.GAME_RESULT_TIME).value;
|
||||
this.waitingPlayerTime = data.get(BaseConst.WAITING_PLAYER_TIME).value;
|
||||
this.waitingPlayerOnePlus = data.get(BaseConst.WAITING_PLAYER_ONEPLUS).value;
|
||||
this.pickHeroTime = data.get(BaseConst.PICK_HERO_TIME).value;
|
||||
}
|
||||
}
|
||||
|
@ -37,6 +37,8 @@ export class BaseConst {
|
||||
public static readonly WAITING_PLAYER_TIME = 99018;
|
||||
// 匹配等待时, 每进入一个玩家, 等待时间延长n秒
|
||||
public static readonly WAITING_PLAYER_ONEPLUS = 99019;
|
||||
// 英雄选择时间
|
||||
public static readonly PICK_HERO_TIME = 99020;
|
||||
|
||||
|
||||
|
||||
|
@ -3,6 +3,12 @@ import {CardGameState} from "../schema/CardGameState";
|
||||
import {Client} from "colyseus";
|
||||
import {PlayerStateConst} from "../../constants/PlayerStateConst";
|
||||
import {GameStateConst} from "../../constants/GameStateConst";
|
||||
import {singleton} from "../../common/Singleton";
|
||||
import {GameEnv} from "../../cfg/GameEnv";
|
||||
import {SelectHeroCommand} from "./SelectHeroCommand";
|
||||
import {HeroCfg} from "../../cfg/parsers/HeroCfg";
|
||||
import {BaseConst} from "../../constants/BaseConst";
|
||||
import arrUtil from "../../utils/array.util";
|
||||
|
||||
/**
|
||||
* 玩家已准备
|
||||
@ -32,6 +38,23 @@ export class PlayReadyCommand extends Command<CardGameState, {
|
||||
}
|
||||
await this.room.setPrivate(true);
|
||||
this.room.state.updateGameState(GameStateConst.CHANGE_HERO);
|
||||
let self = this;
|
||||
/**
|
||||
* 超时后随机选一个英雄
|
||||
*/
|
||||
let pickHeroTimeOut = function () {
|
||||
for (let [, curPlayer] of self.state.players) {
|
||||
if (curPlayer.state == PlayerStateConst.PLAYER_READY ) {
|
||||
let heroMap: Map<number, HeroCfg> = global.$cfg.get(BaseConst.HERO);
|
||||
let heroArr = [...heroMap.values()];
|
||||
let hero = arrUtil.randomGet(heroArr, 1);
|
||||
let targetClient = self.room.getClient(curPlayer);
|
||||
self.room.dispatcher.dispatch(new SelectHeroCommand(), {client: targetClient, heroId: hero[0].id});
|
||||
}
|
||||
}
|
||||
}
|
||||
let time = singleton(GameEnv).pickHeroTime * 1000;
|
||||
this.room.beginSchedule(time, pickHeroTimeOut, 'pick_hero');
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -11,9 +11,12 @@ import {GameEnv} from "../../cfg/GameEnv";
|
||||
/**
|
||||
* 选择英雄
|
||||
*/
|
||||
export class SelectHeroCommand extends Command<CardGameState, {client: Client, heroId: number}> {
|
||||
execute({ client, heroId} = this.payload) {
|
||||
export class SelectHeroCommand extends Command<CardGameState, { client: Client, heroId: number }> {
|
||||
execute({client, heroId} = this.payload) {
|
||||
let player = this.state.players.get(client.sessionId);
|
||||
if (player.state != PlayerStateConst.PLAYER_READY) {
|
||||
return;
|
||||
}
|
||||
const heroMap = global.$cfg.get(BaseConst.HERO);
|
||||
if (!heroMap || !heroMap.has(heroId)) {
|
||||
this.room.sSelectHero(client, {errcode: 1, errmsg: '无法找到对应英雄的配置'});
|
||||
@ -39,12 +42,13 @@ export class SelectHeroCommand extends Command<CardGameState, {client: Client, h
|
||||
this.room.battleMan.addPlayer(player);
|
||||
this.room.bSelectHero({errocode: 0, errmsg: '', player: client.sessionId, heroId: heroId});
|
||||
let readyCount = 0;
|
||||
for (let [sessionId, player] of this.state.players) {
|
||||
for (let [, player] of this.state.players) {
|
||||
if (player.state === PlayerStateConst.PLAYER_SELECT_HERO) {
|
||||
readyCount++;
|
||||
}
|
||||
}
|
||||
if (readyCount >= this.room.maxClients) {
|
||||
this.room.stopSchedule('pick_hero');
|
||||
return [new BeginGameCommand()];
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user