From e7b4d4cd747d9db6862350964eb221c3fe394813 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 12 Nov 2024 15:58:56 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=8E=B7=E5=8F=96=E5=A4=A9=E6=B0=94?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20&=20=E4=BC=98=E5=8C=96=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/render/item.ts | 4 ++-- src/core/render/render.ts | 11 ++++++----- src/module/weather/weather.ts | 14 +++++++++++--- src/plugin/boss/barrage.ts | 9 +++++++++ 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/core/render/item.ts b/src/core/render/item.ts index 52cbf1a..6626766 100644 --- a/src/core/render/item.ts +++ b/src/core/render/item.ts @@ -15,7 +15,7 @@ export type RenderItemPosition = 'absolute' | 'static'; export interface IRenderUpdater { /** * 更新这个渲染元素 - * @param item 触发更新事件的元素,可以是自身触发。如果不填表示手动触发,而非渲染内容发生变化而引起的触发 + * @param item 触发更新事件的元素,不填默认为元素自身触发 */ update(item?: RenderItem): void; } @@ -333,7 +333,7 @@ export abstract class RenderItem this.anchorY = y; } - update(item?: RenderItem): void { + update(item: RenderItem = this): void { if (this.needUpdate) return; this.needUpdate = true; this.cacheDirty = true; diff --git a/src/core/render/render.ts b/src/core/render/render.ts index 2fa059d..afbda1d 100644 --- a/src/core/render/render.ts +++ b/src/core/render/render.ts @@ -27,7 +27,7 @@ export class MotaRenderer extends Container { MotaRenderer.list.set(id, this); } - update(item?: RenderItem) { + update(item: RenderItem = this) { if (this.needUpdate) return; this.needUpdate = true; this.requestRenderFrame(() => { @@ -36,7 +36,7 @@ export class MotaRenderer extends Container { }); } - protected refresh(item?: RenderItem): void { + protected refresh(item: RenderItem = this): void { this.emit('beforeUpdate', item); this.target.clear(); this.renderContent(this.target, Transform.identity); @@ -48,7 +48,7 @@ export class MotaRenderer extends Container { * @param id 要获取的渲染元素id * @returns */ - getElementById(id: string): RenderItem | undefined { + getElementById(id: string): RenderItem | null { const map = RenderItem.itemMap; const item = map.get(id); if (item) return item; @@ -56,18 +56,19 @@ export class MotaRenderer extends Container { const item = this.searchElement(this, id); if (item) { map.set(id, item); - return item; } + return item; } } - private searchElement(ele: Container, id: string): RenderItem | undefined { + private searchElement(ele: Container, id: string): RenderItem | null { for (const child of ele.children) { if (child.id === id) return child; if (child instanceof Container) { return this.searchElement(child, id); } } + return null; } /** diff --git a/src/module/weather/weather.ts b/src/module/weather/weather.ts index 885b20a..1d9de42 100644 --- a/src/module/weather/weather.ts +++ b/src/module/weather/weather.ts @@ -18,9 +18,9 @@ export interface IWeather { deactivate(): void; } -interface Weather { +interface Weather { id: string; - new (level?: number): IWeather; + new (level?: number): T; } export class WeatherController { @@ -37,7 +37,15 @@ export class WeatherController { }; /** - * 添加一个天气,如果天气不存在则抛出警告。注意虽然原则上允许天气重复,但一些天气在实现时,并不允许重复 + * 获取一个天气 + * @param weather 要获取的天气 + */ + getWeather(weather: Weather): T | null { + return ([...this.active].find(v => v instanceof weather) as T) ?? null; + } + + /** + * 添加一个天气,如果天气不存在则抛出警告。注意虽然原则上不允许天气重复。 * @param id 天气的id * @param level 天气的等级 * @returns 天气实例,可以操作天气的效果,也可以用来删除 diff --git a/src/plugin/boss/barrage.ts b/src/plugin/boss/barrage.ts index 7fd6e15..1ffcfc5 100644 --- a/src/plugin/boss/barrage.ts +++ b/src/plugin/boss/barrage.ts @@ -37,6 +37,15 @@ export abstract class BarrageBoss { this.ticker.add(this.tick); } + /** + * 结束这个弹幕战 + */ + end() { + if (this.ticker.funcs.has(this.tick)) { + this.ticker.remove(this.tick); + } + } + /** * 摧毁传入的弹幕 */