From 7dd4f39e7e05b914cf7f117c10ee9c1f5fc4570d Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Wed, 9 Sep 2026 19:42:37 +0800 Subject: [PATCH] fix: getLocationData logic --- packages-user/data-base/src/map/eventPath.test.ts | 2 +- packages-user/data-base/src/map/mapLayer.ts | 10 +++++----- packages-user/data-base/src/map/types.ts | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages-user/data-base/src/map/eventPath.test.ts b/packages-user/data-base/src/map/eventPath.test.ts index ca0c2bd..c56ce08 100644 --- a/packages-user/data-base/src/map/eventPath.test.ts +++ b/packages-user/data-base/src/map/eventPath.test.ts @@ -77,7 +77,7 @@ describe('MapState raw event path', () => { expect(layer?.event(1, 0)?.ref()).toEqual( new Map([[5, 'point-event']]) ); - expect(layer?.getLocationData(1, 0)?.static.tileEvent().get()).toEqual( + expect(layer?.getLocationData(1, 0)?.static?.tileEvent().get()).toEqual( new Map() ); expect(layer?.event(1, 0)?.dirty()).toBe(false); diff --git a/packages-user/data-base/src/map/mapLayer.ts b/packages-user/data-base/src/map/mapLayer.ts index 59042be..00c5dbf 100644 --- a/packages-user/data-base/src/map/mapLayer.ts +++ b/packages-user/data-base/src/map/mapLayer.ts @@ -263,9 +263,9 @@ export class MapLayer } getLocationData(x: number, y: number): ILayerLocation | null { + if (!this.inMap(x, y)) return null; const staticTile = this.getTile(x, y); - if (!staticTile) return null; - const num = staticTile.num(); + const num = staticTile?.num() ?? -1; const dynamics = this.getDynamicTilesAt(x, y); return { locator: { x, y }, @@ -406,7 +406,7 @@ export class MapLayer createDynamic(num: number, x: number, y: number): IDynamicTile { const tile = new DynamicTile(num, x, y, this); const location = this.getLocationData(x, y); - if (location) { + if (location?.static) { const tileEvent = tile.tileEvent(); const staticEvent = location.static.tileEvent(); tileEvent.clear(); @@ -679,7 +679,7 @@ export class MapLayer const blocks = new Map(); for (const location of this.iterateBlocks()) { const tile = location.static; - if (!tile.shouldSave()) continue; + if (!tile || !tile.shouldSave()) continue; const index = this.map.indexer.locaterToIndex(location.locator); blocks.set(index, tile.saveState(SaveCompression.NoCompression)); } @@ -817,7 +817,7 @@ export class MapLayer for (const [index, tileSave] of save) { const { x, y } = this.map.indexer.indexToLocator(index); const location = this.getLocationData(x, y); - if (!location) continue; + if (!location?.static) continue; location.static.loadState(tileSave, SaveCompression.NoCompression); } } diff --git a/packages-user/data-base/src/map/types.ts b/packages-user/data-base/src/map/types.ts index cb2efcb..0eb5b1f 100644 --- a/packages-user/data-base/src/map/types.ts +++ b/packages-user/data-base/src/map/types.ts @@ -254,7 +254,7 @@ export interface ILayerLocation { /** 该点包含的所有动态图块 */ readonly dynamics: Iterable; /** 该点的静态图块原始数据 */ - readonly static: IStaticTile; + readonly static: IStaticTile | null; } export interface IMapLayerHooks extends IHookBase {