diff --git a/packages-user/data-base/src/map/mapStore.ts b/packages-user/data-base/src/map/mapStore.ts index 365d898..aef9cf6 100644 --- a/packages-user/data-base/src/map/mapStore.ts +++ b/packages-user/data-base/src/map/mapStore.ts @@ -6,14 +6,14 @@ import { ILayerStateSave, IMapLayer, IMapLayerSave, - IMapStore, + IMapState, IMapStoreSave, MapArea } from './types'; import { LayerState } from './layerState'; import { uniq } from 'lodash-es'; -export class MapStore implements IMapStore { +export class MapState implements IMapState { /** 楼层 id 到状态对象的映射 */ private readonly mapData: Map = new Map(); diff --git a/packages-user/data-base/src/map/types.ts b/packages-user/data-base/src/map/types.ts index f48345a..86080e8 100644 --- a/packages-user/data-base/src/map/types.ts +++ b/packages-user/data-base/src/map/types.ts @@ -425,7 +425,7 @@ export interface IMapAreaInterval { export type MapArea = IMapAreaInterval[]; -export interface IMapStore +export interface IMapState extends ISaveableContent, IDataCommonExtended { /** 所有楼层的 id 有序数组 */ readonly maps: ReadonlyArray; diff --git a/packages-user/data-base/src/types.ts b/packages-user/data-base/src/types.ts index 781c5fa..04081d5 100644 --- a/packages-user/data-base/src/types.ts +++ b/packages-user/data-base/src/types.ts @@ -1,7 +1,7 @@ import { IHeroFollower, IHeroState } from './hero'; import { IEnemyManager } from './enemy'; import { IFlagSystem } from './flag'; -import { IMapStore } from './map'; +import { IMapState } from './map'; import { IDataCommon, IEnemyAttr, @@ -16,7 +16,7 @@ export interface IStateSaveData { export interface IStateBase extends IDataCommon { /** 地图状态 */ - readonly maps: IMapStore; + readonly maps: IMapState; /** 勇士状态 */ readonly hero: IHeroState; diff --git a/packages-user/data-common/src/store/mapStore.ts b/packages-user/data-common/src/store/mapStore.ts new file mode 100644 index 0000000..7cd8239 --- /dev/null +++ b/packages-user/data-common/src/store/mapStore.ts @@ -0,0 +1,14 @@ +import { IMapRawData, IMapStore } from './types'; + +export class MapStore implements IMapStore { + /** 地图存储映射 */ + private readonly maps: Map = new Map(); + + getMap(floorId: string): IMapRawData | null { + return this.maps.get(floorId) ?? null; + } + + addMap(map: IMapRawData): void { + this.maps.set(map.floorId, map); + } +} diff --git a/packages-user/data-common/src/store/types.ts b/packages-user/data-common/src/store/types.ts index 82cacf3..3b1798f 100644 --- a/packages-user/data-common/src/store/types.ts +++ b/packages-user/data-common/src/store/types.ts @@ -68,7 +68,7 @@ export interface ITileLegacyConverter { fromLegacy(num: number, legacy: TLegacy): ITileRawData; } -export interface ITileStore { +export interface ITileStore { /** * 获取指定图块数字对应的完整原始定义 * @param num 图块数字 @@ -250,3 +250,32 @@ export interface IItemStore { } //#endregion + +//#region map + +export interface IMapRawData { + /** 楼层 id */ + readonly floorId: string; + /** 地图宽度 */ + readonly width: number; + /** 地图数组 */ + readonly map: Record; + /** 每个地图图层的字符串别名 */ + readonly layerAlias: Record; +} + +export interface IMapStore { + /** + * 根据地图 id 获取指定地图的原始数据 + * @param floorId 楼层 id + */ + getMap(floorId: string): IMapRawData | null; + + /** + * 添加地图的原始数据定义 + * @param map 地图原始数据 + */ + addMap(map: IMapRawData): void; +} + +//#endregion diff --git a/packages-user/data-common/src/types.ts b/packages-user/data-common/src/types.ts index e0e6bdb..709d3cd 100644 --- a/packages-user/data-common/src/types.ts +++ b/packages-user/data-common/src/types.ts @@ -1,6 +1,6 @@ import { ITileLocator } from '@motajs/common'; import { IFaceManager, IRoleFaceBinder } from './common'; -import { IItemStore, ITileStore } from './store'; +import { IItemStore, IMapStore, ITileStore } from './store'; import { ISaveSystem } from './save'; export interface IEnemyAttr { @@ -48,6 +48,8 @@ export interface IDataCommon { readonly tileStore: ITileStore>; /** 道具定义存储 */ readonly itemStore: IItemStore>>; + /** 地图定义存储 */ + readonly mapStore: IMapStore; /** 朝向绑定 */ readonly roleFace: IRoleFaceBinder; /** 朝向管理 */ diff --git a/packages-user/data-state/src/core.ts b/packages-user/data-state/src/core.ts index 4127339..21b2c79 100644 --- a/packages-user/data-state/src/core.ts +++ b/packages-user/data-state/src/core.ts @@ -17,7 +17,8 @@ import { ISaveSystem, SaveSystem, IItemStore, - ItemStore + ItemStore, + IMapStore } from '@user/data-common'; import { EnemyManager, @@ -31,8 +32,8 @@ import { MotaDataLoader, loading, IReadonlyEnemy, - IMapStore, - MapStore + IMapState, + MapState } from '@user/data-base'; import { DamageSystem, @@ -75,6 +76,7 @@ import { ILoadProgressTotal, LoadProgressTotal } from '@motajs/loader'; import { isNil } from 'lodash-es'; import { logger } from '@motajs/common'; import { DefaultHeroMoveTopImpl } from './hero'; +import { MapStore } from '../../data-common/src/store/mapStore'; export class CoreState implements ICoreState { // Layer 0 公共层,最底层的接口,不会依赖任何其他内容,一般是工具性接口及不需要存档的数据 @@ -83,9 +85,10 @@ export class CoreState implements ICoreState { readonly faceManager: IFaceManager; readonly tileStore: ITileStore; readonly itemStore: IItemStore; + readonly mapStore: IMapStore; // Layer 1 数据层,所有可存档内容都在这,一般用于数据存储 - readonly maps: IMapStore; + readonly maps: IMapState; readonly hero: IHeroState; readonly enemyManager: IEnemyManager; readonly flags: IFlagSystem; @@ -138,9 +141,12 @@ export class CoreState implements ICoreState { tileStore.attachLegacyConverter(new TileLegacyBridge()); this.tileStore = tileStore; // 道具 - const itemStore = new ItemStore(); + const itemStore = new ItemStore(); itemStore.attachLegacyConverter(new ItemLegacyBridge(this)); this.itemStore = itemStore; + // 地图 + const mapStore = new MapStore(); + this.mapStore = mapStore; //#endregion @@ -150,7 +156,7 @@ export class CoreState implements ICoreState { this.flags = new FlagSystem(); // 地图 - this.maps = new MapStore(tileStore, this); + this.maps = new MapState(tileStore, this); // 勇士 const heroAttribute = new HeroAttribute(HERO_DEFAULT_ATTRIBUTE); diff --git a/packages-user/data-state/src/hero/moverImpl.ts b/packages-user/data-state/src/hero/moverImpl.ts index 686f70b..9b46db3 100644 --- a/packages-user/data-state/src/hero/moverImpl.ts +++ b/packages-user/data-state/src/hero/moverImpl.ts @@ -1,7 +1,7 @@ import { IHeroMoveTopHandler, IHeroMoveTopImpl, - IMapStore + IMapState } from '@user/data-base'; import { FaceDirection, PassBit } from '@user/data-common'; import { @@ -13,7 +13,7 @@ import { isNil } from 'lodash-es'; export class DefaultHeroMoveTopImpl implements IHeroMoveTopImpl { /** 地图存储对象 */ - private readonly maps: IMapStore; + private readonly maps: IMapState; /** 触发器收集器对象 */ private readonly collector: ITriggerCollector; diff --git a/src/content/core.jsonc b/src/content/core.jsonc new file mode 100644 index 0000000..e69de29 diff --git a/src/content/enemy.jsonc b/src/content/enemy.jsonc new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/content/enemy.jsonc @@ -0,0 +1 @@ +{} diff --git a/src/content/item.jsonc b/src/content/item.jsonc new file mode 100644 index 0000000..ee2066f --- /dev/null +++ b/src/content/item.jsonc @@ -0,0 +1,3 @@ +// Type: packages-user/data-common/src/store/types IItemRawData +// ItemEffect: ./item.ts +{} diff --git a/src/content/item.ts b/src/content/item.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/content/maps/MT0.jsonc b/src/content/maps/MT0.jsonc new file mode 100644 index 0000000..9402f97 --- /dev/null +++ b/src/content/maps/MT0.jsonc @@ -0,0 +1,2 @@ +// Type: packages-user/data-base/src/map/types.ts +{} diff --git a/src/content/tile.jsonc b/src/content/tile.jsonc new file mode 100644 index 0000000..bee835f --- /dev/null +++ b/src/content/tile.jsonc @@ -0,0 +1,2 @@ +// Type: packages-user/data-common/src/store/types ITileRawData +{}