UNPKG

md5-fight-plus

Version:

74 lines (70 loc) 2.54 kB
import { SyncBailHook } from "@/hooks/SyncBailHook"; import { BattleFieldInstance } from "@/types/battleField"; import { PlayerInstanceProperty } from "@/types/player"; import { registerRoundHooks } from "../hooks/registrant/registerRoundHooks"; import { registerHooks } from "../hooks/registrant/registerHooks"; import { initRound } from "./initRound"; import { RoundTimeOutEvent } from "@/events/roundTimeOut"; import { registerAfterActionHook } from "./registerIntercept"; import { createLogger, RoundStart } from "@/logs"; import { getPlayerState, getPlayers } from "@/utils"; export function createBattleField( p1: PlayerInstanceProperty, p2: PlayerInstanceProperty ) { const battleFieldInstance: BattleFieldInstance = {}; //初始化参数 initPlayer(battleFieldInstance, p1, p2); initRound(battleFieldInstance); initFight(battleFieldInstance); initHooks(battleFieldInstance); initLogger(battleFieldInstance); //注册一些钩子 registerHooks(battleFieldInstance); registerRoundHooks(battleFieldInstance); registerAfterActionHook(battleFieldInstance); battleFieldInstance.hooks.init.call(battleFieldInstance); return battleFieldInstance; } export function initPlayer( battleField: BattleFieldInstance, p1: PlayerInstanceProperty, p2: PlayerInstanceProperty ) { if (!battleField.players) battleField.players = { left: undefined, right: undefined }; if (p1) battleField.players.left = p1; if (p2) battleField.players.right = p2; p1.battleField = battleField; p2.battleField = battleField; } export function initFight(battleField: BattleFieldInstance) { battleField.fight = () => { battleField.hooks.fightStart.call(battleField); try { for (; battleField.roundCount < 200; battleField.roundCount++) { battleField.round(); } throw new RoundTimeOutEvent(); } catch (err) { const message = err.message ? err.message : err; battleField.logger.addInfo(`游戏结束,原因: ${message}`, "game over"); battleField.logger.addError(`游戏结束,原因: ${message}`, "game over"); } }; } export function initHooks(battleField: BattleFieldInstance) { battleField.hooks = { init: new SyncBailHook<BattleFieldInstance>(), // 计算运行时属性 // 计算玩家技能组 fightStart: new SyncBailHook<BattleFieldInstance>(), }; } export function initLogger(battleField: BattleFieldInstance) { battleField.logger = createLogger({ filePath: "battleField.log.json", mode: "JSON", battleField, }); }