diff --git a/src/plugin/boss/barrage.ts b/src/plugin/boss/barrage.ts index 76d5352..df0ea4a 100644 --- a/src/plugin/boss/barrage.ts +++ b/src/plugin/boss/barrage.ts @@ -2,9 +2,15 @@ import { MotaOffscreenCanvas2D } from '@/core/fx/canvas2d'; import { RenderItem, RenderItemPosition } from '@/core/render/item'; import { Transform } from '@/core/render/transform'; import { IStateDamageable } from '@/game/state/interface'; +import EventEmitter from 'eventemitter3'; import { Ticker } from 'mutate-animate'; -export abstract class BarrageBoss { +interface BarrageBossEvent { + end: []; + start: []; +} + +export abstract class BarrageBoss extends EventEmitter<BarrageBossEvent> { ticker: Ticker = new Ticker(); /** 这个boss的所有弹幕 */ projectiles: Set<Projectile> = new Set(); diff --git a/src/plugin/boss/index.ts b/src/plugin/boss/index.ts index 7b18e39..85b3ea0 100644 --- a/src/plugin/boss/index.ts +++ b/src/plugin/boss/index.ts @@ -1,13 +1,22 @@ import { BarrageBoss } from './barrage'; import { TowerBoss } from './towerBoss'; -let boss: BarrageBoss; +let boss: BarrageBoss | null; export function startTowerBoss() { boss = new TowerBoss(); boss.start(); + boss.once('end', () => { + boss = null; + }); } -export function getBoss<T extends BarrageBoss>(): T { +export function getBoss<T extends BarrageBoss>(): T | null { return boss as T; } + +Mota.require('var', 'hook').on('reset', () => { + if (boss) { + boss.end(); + } +});