From 3a3a6ac82dc69570652fc3e6c525680565f35aa2 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Thu, 17 Sep 2026 19:08:34 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=BB=9F=E4=B8=80=20refreshEnemy?= =?UTF-8?q?=20=E5=92=8C=20refreshEnemyAndClearCache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data-system/src/combat/mapDamage.ts | 62 +++++-------------- 1 file changed, 17 insertions(+), 45 deletions(-) diff --git a/packages-user/data-system/src/combat/mapDamage.ts b/packages-user/data-system/src/combat/mapDamage.ts index 43418cc..204348b 100644 --- a/packages-user/data-system/src/combat/mapDamage.ts +++ b/packages-user/data-system/src/combat/mapDamage.ts @@ -298,21 +298,21 @@ export class MapDamage implements IMapDamage { } /** - * 刷新指定位置的怪物地图伤害,并执行刷新缓存的操作 + * 刷新指定位置的怪物地图伤害 */ - private refreshEnemyAndClearCache( + private refreshEnemy( view: IEnemyView, locator: ITileLocator - ) { + ): Set | null { this.removeEnemyAffecting(view); - if (!this.converter) return; + if (!this.converter) return null; const handler = this.createReadonlyHandler(view, locator); - if (!handler) return; + if (!handler) return null; const views = this.converter.convert(handler, this.context); const set = new Set>(views); // 空集也需要登记,否则该怪物此后标脏会退回整表刷新 this.enemyStore.set(view, set); - if (set.size === 0) return; + if (set.size === 0) return null; const collection = new Set(); set.forEach(viewItem => { const range = viewItem.getRange(); @@ -340,49 +340,21 @@ export class MapDamage implements IMapDamage { } } }); - collection.forEach(v => { - this.dirtyIndexes.delete(v); - this.reducedCache.delete(v); - }); + return collection; } /** - * 刷新指定位置的怪物地图伤害 + * 刷新指定位置的怪物地图伤害,并执行刷新缓存的操作 */ - private refreshEnemy(view: IEnemyView, locator: ITileLocator) { - this.removeEnemyAffecting(view); - if (!this.converter) return; - const handler = this.createReadonlyHandler(view, locator); - if (!handler) return; - const views = this.converter.convert(handler, this.context); - const set = new Set>(views); - // 空集也需要登记,否则该怪物此后标脏会退回整表刷新 - this.enemyStore.set(view, set); - if (set.size === 0) return; - set.forEach(viewItem => { - const range = viewItem.getRange(); - const param = viewItem.getRangeParam(); - range.bindHost(this.context); - for (const index of range.iterateLoc(param)) { - const loc = this.indexer.indexToLocator(index); - const point = this.sourcedDamage.getOrInsertComputed( - index, - () => ({ - affectedBy: new Set(), - damages: new Set() - }) - ); - const damage = viewItem.getDamageWithoutCheck(loc); - if (damage) { - this.registerSourcedDamage( - point, - viewItem, - view, - index, - damage - ); - } - } + private refreshEnemyAndClearCache( + view: IEnemyView, + locator: ITileLocator + ) { + const collection = this.refreshEnemy(view, locator); + if (!collection) return; + collection.forEach(v => { + this.dirtyIndexes.delete(v); + this.reducedCache.delete(v); }); }