import { BattlePhase } from '../battle'; import { LoadScheduler } from './LoadScheduler'; import { membershipFromArray, type ReadonlyMembershipSet } from '../../tools/MembershipSet'; /** 战斗 COMBAT 阶段禁止后台 IO;PREP / 暂停 / 结算 / 战斗结束后允许分帧预载 */ const ALLOWED_BATTLE_PHASES: ReadonlyMembershipSet = membershipFromArray([ BattlePhase.PREP, BattlePhase.PAUSE, BattlePhase.WAIT_REVIVE, BattlePhase.END, ]); /** * 战斗期间大厅资源后台预载门闩:仅非 COMBAT 相位消耗 background 队列预算。 */ export class BattleBackgroundLoadGate { private static _installed = false; static install(): void { if (this._installed) return; this._installed = true; LoadScheduler.getInstance().setBackgroundAllowed(() => this.isAllowed()); } static isAllowed(): boolean { const session = gg.battle.match?.session; if (!session) return true; return ALLOWED_BATTLE_PHASES.has(session.phase); } }