Files
CardServer/RoomManager.js

201 lines
6.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RoomManager = void 0;
const Player_1 = require("./Player");
const MatchMaker_1 = require("./MatchMaker");
const GameDefine_1 = require("./GameDefine");
const GameManager_1 = require("./GameManager");
const GetLocalTime_1 = require("./GetLocalTime");
;
class Room {
constructor() {
this.mPlayers = new Map;
this.mStatus = 0; //0房间开启1所有人准备进入fight2fight结束
this.mMatchMaker = (0, MatchMaker_1.createMatchmaker)(this.mPlayers);
this.mGameManager = new GameManager_1.GameManager();
this.mCreatedTime = (0, GetLocalTime_1.getLocalTime)();
}
isRoomPrepared() {
if (this.mPlayers.size != GameDefine_1.ALL_PLAYER_NUM) {
return false;
}
for (const value of this.mPlayers.values()) {
if (value.mPrepared == false) {
return false;
}
}
return true;
}
setRoomPrepared() {
this.generatePairings();
this.mStatus = 1;
}
generatePairings() {
let tempPlayers = new Map;
for (const key of this.mPlayers.keys()) {
const player = this.mPlayers.get(key);
if (player && player.mHp > 0) {
tempPlayers.set(key, player);
}
}
this.mMatchMaker.updatePlayers(tempPlayers);
let result = this.mMatchMaker.generatePairings();
for (let i = 0; i < result.length; ++i) {
let player = this.mPlayers.get(result[i].playerId);
if (player) {
player.mCurrentEnemy = result[i].opponentId;
player.mIsResting = result[i].isResting;
}
}
return result;
}
getGameInfos() {
let gameInfo = [];
for (const player of this.mPlayers.values()) {
gameInfo.push({ playerId: player.mPlayerName,
opponentId: player.mCurrentEnemy,
socketID: player.mSocketId,
rank: player.mRank,
character: player.mCharacterName,
hp: player.mHp });
}
return gameInfo;
}
getGameRoundInfos() {
let gameInfo = [];
for (const player of this.mGameManager.mGameFightPlayer.values()) {
gameInfo.push({ playerId: player.mPlayerName,
opponentId: player.mCurrentEnemy,
socketID: player.mSocketId,
rank: player.mRank,
character: player.mCharacterName,
hp: player.mHp });
}
return gameInfo;
}
getGameInfo(aPlayerID) {
let player = this.mPlayers.get(aPlayerID);
if (player) {
return { playerId: player.mPlayerName, opponentId: player.mCurrentEnemy, socketID: player.mSocketId, rank: player.mRank, character: player.mCharacterName, hp: player.mHp };
}
return null;
}
setGameFight(aPlayerID, aAttack, aDefender) {
let player = this.mPlayers.get(aPlayerID);
if (!player) {
return false;
}
player.mAttack = aAttack;
player.mDefener = aDefender;
return this.mGameManager.setGameRoundInfo(aPlayerID, player);
}
}
class RoomManager {
constructor() {
this.mRooms = new Map;
}
static getInstance() {
if (this.mInstance == null) {
this.mInstance = new RoomManager();
}
return this.mInstance;
}
join(aRoomID, aName, aSocket) {
const room = this.mRooms.get(aRoomID);
if (!room) {
return [false, "No room Id", null, null];
}
if (room.mPlayers.has(aName)) {
let player = room.mPlayers.get(aName);
if (player) {
player.setPlayerSocketId(aSocket.id);
aSocket.join(aRoomID);
return [true, "", room.mStatus, player];
}
else {
return [false, "unKnow error", null, null];
}
}
if (room.mPlayers.size < GameDefine_1.ALL_PLAYER_NUM) {
let player = new Player_1.Player(aName, aSocket.id);
aSocket.join(aRoomID);
room.mPlayers.set(aName, player);
return [true, "", 0, null];
}
return [false, "room full", null, null];
}
setPlayerInfo(roomId, playerId, strength, stamina, agile, cards) {
let room = this.mRooms.get(roomId);
if (!room) {
return false;
}
let player = room.mPlayers.get(playerId);
if (!player) {
return false;
}
player.setPlayerInfo(strength, stamina, agile, cards);
if (room.isRoomPrepared() == true) {
room.setRoomPrepared();
return true;
}
return false;
}
createRoom(aRoomID) {
this.mRooms.set(aRoomID, new Room());
}
getPlayersByRoomID(aRoomID) {
let room = this.mRooms.get(aRoomID);
let result = [];
if (room === null || room === void 0 ? void 0 : room.mPlayers) {
for (const value of room.mPlayers.values()) {
result.push({ playerName: value.mPlayerName, playerPrepared: value.mPrepared });
}
}
return result;
}
getGameInfos(aRoomID) {
let room = this.mRooms.get(aRoomID);
if (room) {
return room.getGameInfos();
}
return [];
}
getGameInfo(aRoomID, aPlayerID) {
let room = this.mRooms.get(aRoomID);
if (room) {
return room.getGameInfo(aPlayerID);
}
return null;
}
getGameRoundInfos(aRoomID, aPlayerID) {
let room = this.mRooms.get(aRoomID);
if (room) {
return room.getGameRoundInfos();
}
return [];
}
//返回值是否所有人都准备完毕
setGameFight(aRoomID, aPlayerID, aAttack, aDefender) {
let room = this.mRooms.get(aRoomID);
if (!room) {
return false;
}
let result = room.setGameFight(aPlayerID, aAttack, aDefender);
if (result) {
room.generatePairings();
}
return result;
}
clearGameRoundPlayer(aRoomID) {
let room = this.mRooms.get(aRoomID);
if (!room) {
return;
}
room.mGameManager.clearGameRoundPlayer();
}
isRoomExist(aRoomID) {
return this.mRooms.has(aRoomID);
}
}
exports.RoomManager = RoomManager;