Files
CardServer/RoomManager.js

201 lines
6.4 KiB
JavaScript
Raw Permalink Normal View History

2025-10-11 14:45:08 +08:00
"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);
2025-10-11 14:45:08 +08:00
}
}
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) {
2025-10-11 14:45:08 +08:00
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];
}
2025-10-11 14:45:08 +08:00
}
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;