"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GameManager = void 0; const GameDefine_1 = require("./GameDefine"); class GameManager { constructor() { this.mRound = 0; this.mGameFightPlayer = new Map; this.mAlivePlayerCount = GameDefine_1.ALL_PLAYER_NUM; this.mCharacterNames = ["飞鸟仓介", "雾岛林汐", "飞鸟千寻", "小林琉璃", "小林莲夜"]; } clearGameRoundPlayer() { this.mGameFightPlayer.clear(); } isGameRoundPrepared() { if (this.mGameFightPlayer.size != this.mAlivePlayerCount) { return false; } return true; } //返回值:是否所有人准备完毕 setGameRoundInfo(aPlayerID, aPlayer) { if (aPlayer.mHp <= 0) { return false; } this.mGameFightPlayer.set(aPlayerID, aPlayer); let result = this.isGameRoundPrepared(); if (result) { this.calcuteGameFightResult(); } return result; } claculatePlayerHp(aAttack, aDefender) { if (aAttack.mAttack > aDefender.mDefener) { aDefender.mHp -= aAttack.mAttack - aDefender.mDefener; } } claculateRanking(aPlayers) { let sortPlayers = []; for (const player of aPlayers.values()) { if (player.mHp <= 0) { sortPlayers.push(player); this.mAlivePlayerCount--; } } if (sortPlayers.length > 0) { sortPlayers.sort((a, b) => a.mAgile - b.mAgile); let playerNum = aPlayers.size; for (let i = 0; i < sortPlayers.length; ++i) { sortPlayers[i].mRank = playerNum - i; if (sortPlayers[i].mCharacterName != "") { continue; } let characterName = this.mCharacterNames.pop(); sortPlayers[i].mCharacterName = characterName; if (characterName == "飞鸟千寻") { let player = aPlayers.get(sortPlayers[i].mCurrentEnemy); player.mCharacterName = "高桥林佑"; } } } //计算最后一个存活玩家的排名 if (this.mAlivePlayerCount == 1) { for (const player of aPlayers.values()) { if (player.mHp > 0) { player.mRank = 1; if (this.mCharacterNames.length > 0) { player.mCharacterName = this.mCharacterNames.pop(); } return; } } } } calcuteGameFightResult() { let temp = new Map(this.mGameFightPlayer); let restRound = null; while (temp.size > 0) { const iterator = temp.keys(); const playerID = iterator.next().value; let player = temp.get(playerID); if (!player) { return; } if (player.mIsResting) { restRound = [player, this.mGameFightPlayer.get(player.mCurrentEnemy)], temp.delete(playerID); continue; } else { let enemy = temp.get(player.mCurrentEnemy); if (player.mAgile >= enemy.mAgile) //palyer 敏捷高 { this.claculatePlayerHp(player, enemy); if (enemy.mHp > 0) { this.claculatePlayerHp(enemy, player); } } else //enemy敏捷高 { this.claculatePlayerHp(enemy, player); if (player.mHp > 0) { this.claculatePlayerHp(player, enemy); } } temp.delete(playerID); temp.delete(player.mCurrentEnemy); continue; } } if (restRound != null) { let restPlayer = restRound[0]; let enemy = restRound[1]; if (enemy.mHp > 0) { this.claculatePlayerHp(enemy, restPlayer); } } this.claculateRanking(this.mGameFightPlayer); } } exports.GameManager = GameManager; ;