123 lines
4.2 KiB
JavaScript
123 lines
4.2 KiB
JavaScript
"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;
|
|
;
|