From 8f4c4b7df2adb4eae69da493320e34dca70262a3 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Sun, 17 May 2026 21:32:23 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=B0=86=20Layer=200=20=E5=8D=95?= =?UTF-8?q?=E7=8B=AC=E6=94=BE=E5=88=B0=E4=B8=80=E4=B8=AA=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev.md | 11 ++-- packages-user/data-base/package.json | 1 + packages-user/data-base/src/enemy/enemy.ts | 2 +- packages-user/data-base/src/enemy/manager.ts | 2 +- packages-user/data-base/src/enemy/special.ts | 2 +- packages-user/data-base/src/enemy/types.ts | 2 +- packages-user/data-base/src/flag/types.ts | 2 +- packages-user/data-base/src/hero/attribute.ts | 2 +- packages-user/data-base/src/hero/mover.ts | 4 +- packages-user/data-base/src/hero/state.ts | 2 +- packages-user/data-base/src/hero/types.ts | 2 +- packages-user/data-base/src/index.ts | 2 - .../data-base/src/map/dynamicLayer.ts | 5 +- .../data-base/src/map/dynamicTile.ts | 5 +- packages-user/data-base/src/map/layerState.ts | 4 +- packages-user/data-base/src/map/mapLayer.ts | 7 ++- packages-user/data-base/src/map/mapStore.ts | 11 ++-- packages-user/data-base/src/map/mover.ts | 6 +- packages-user/data-base/src/map/types.ts | 26 +++++---- packages-user/data-base/src/shared.ts | 4 ++ packages-user/data-base/src/types.ts | 12 +--- packages-user/data-common/package.json | 6 ++ .../src/common/face.ts | 2 +- .../src/common/faceManager.ts | 2 +- .../src/common/index.ts | 0 .../src/common/indexer.ts | 0 .../src/common/mover.ts | 0 .../src/common/types.ts | 0 .../src/common/utils.ts | 0 packages-user/data-common/src/index.ts | 4 ++ .../src/store/index.ts | 0 .../src/store/tileStore.ts | 0 .../src/store/types.ts | 0 packages-user/data-common/src/types.ts | 16 ++++++ packages-user/data-state/package.json | 1 + packages-user/data-state/src/core.ts | 56 ++++++++++--------- .../data-state/src/enemy/mapDamage.ts | 7 +-- packages-user/data-state/src/legacy/move.ts | 3 +- packages-user/data-state/src/legacy/tile.ts | 6 +- packages-user/data-state/src/save/system.ts | 2 +- packages-user/data-state/src/save/types.ts | 2 +- packages-user/data-state/src/types.ts | 9 +-- .../data-system/src/combat/context.ts | 5 +- .../data-system/src/combat/mapDamage.ts | 3 +- packages-user/data-system/src/combat/types.ts | 4 +- .../legacy-plugin-data/src/fallback.ts | 3 +- packages/common/src/utils/types.ts | 2 +- pnpm-lock.yaml | 9 +++ 48 files changed, 159 insertions(+), 97 deletions(-) create mode 100644 packages-user/data-base/src/shared.ts create mode 100644 packages-user/data-common/package.json rename packages-user/{data-base => data-common}/src/common/face.ts (97%) rename packages-user/{data-base => data-common}/src/common/faceManager.ts (99%) rename packages-user/{data-base => data-common}/src/common/index.ts (100%) rename packages-user/{data-base => data-common}/src/common/indexer.ts (100%) rename packages-user/{data-base => data-common}/src/common/mover.ts (100%) rename packages-user/{data-base => data-common}/src/common/types.ts (100%) rename packages-user/{data-base => data-common}/src/common/utils.ts (100%) create mode 100644 packages-user/data-common/src/index.ts rename packages-user/{data-base => data-common}/src/store/index.ts (100%) rename packages-user/{data-base => data-common}/src/store/tileStore.ts (100%) rename packages-user/{data-base => data-common}/src/store/types.ts (100%) create mode 100644 packages-user/data-common/src/types.ts diff --git a/dev.md b/dev.md index 45ec7b8..62f19e0 100644 --- a/dev.md +++ b/dev.md @@ -128,8 +128,9 @@ **Layer 2 — 执行层**:直接引用 Layer 1,负责产生影响游戏进程的动作,如玩家控制、战斗计算等。本层内容不会进入存档,仅通过修改 Layer 1 的数据来影响游戏状态,并通过统一接口 `ICoreState` 对外暴露执行能力。 -| 包 | 层级 | 说明 | -| ------------------- | ----------------- | ------------------------------------------------------------------------------- | -| `@user/data-base` | Layer 0 / Layer 1 | 公共层与数据层,定义 `IStateBase` 及各类游戏数据(地图、怪物、玩家属性等) | -| `@user/data-state` | — | 数据端的顶层模块,指导 Layer 2 的执行行为,不直接参与执行 | -| `@user/data-system` | Layer 2 | 执行层,定义 `ICoreState`,依赖数据层实现玩家控制、战斗计算等影响游戏进程的动作 | +| 包 | 层级 | 说明 | +| ------------------- | ------- | ------------------------------------------------------------------------------- | +| `@user/data-common | Layer 0 | 公共层,定义 `IDataCommon` 及公共无依赖接口 | +| `@user/data-base` | Layer 1 | 数据层,定义 `IStateBase` 及可存档游戏数据(地图、怪物、玩家属性等) | +| `@user/data-system` | Layer 2 | 执行层,定义 `ICoreState`,依赖数据层实现玩家控制、战斗计算等影响游戏进程的动作 | +| `@user/data-state` | — | 数据端的顶层模块,指导 Layer 2 的执行行为,不直接参与执行 | diff --git a/packages-user/data-base/package.json b/packages-user/data-base/package.json index 89deac7..77412d8 100644 --- a/packages-user/data-base/package.json +++ b/packages-user/data-base/package.json @@ -1,6 +1,7 @@ { "name": "@user/data-base", "dependencies": { + "@user/data-common": "workspace:*", "@motajs/common": "workspace:*", "@motajs/types": "workspace:*", "@motajs/loader": "workspace:*" diff --git a/packages-user/data-base/src/enemy/enemy.ts b/packages-user/data-base/src/enemy/enemy.ts index 369ae39..63b2870 100644 --- a/packages-user/data-base/src/enemy/enemy.ts +++ b/packages-user/data-base/src/enemy/enemy.ts @@ -1,5 +1,5 @@ import { logger } from '@motajs/common'; -import { SaveCompression } from '../common'; +import { SaveCompression } from '@user/data-common'; import { IEnemy, IEnemySaveState, IReadonlyEnemy, ISpecial } from './types'; export class Enemy implements IEnemy { diff --git a/packages-user/data-base/src/enemy/manager.ts b/packages-user/data-base/src/enemy/manager.ts index b3ad7c1..2cdff49 100644 --- a/packages-user/data-base/src/enemy/manager.ts +++ b/packages-user/data-base/src/enemy/manager.ts @@ -10,7 +10,7 @@ import { SpecialCreation, IEnemySaveState } from './types'; -import { SaveCompression } from '../common'; +import { SaveCompression } from '@user/data-common'; export class EnemyManager implements IEnemyManager { /** 特殊属性注册表,code -> 创建函数 */ diff --git a/packages-user/data-base/src/enemy/special.ts b/packages-user/data-base/src/enemy/special.ts index 6f53661..312f702 100644 --- a/packages-user/data-base/src/enemy/special.ts +++ b/packages-user/data-base/src/enemy/special.ts @@ -1,5 +1,5 @@ import { isEqual } from 'lodash-es'; -import { SaveCompression } from '../common'; +import { SaveCompression } from '@user/data-common'; import { ISpecial, SpecialCreation } from './types'; // TODO: 颜色参数 diff --git a/packages-user/data-base/src/enemy/types.ts b/packages-user/data-base/src/enemy/types.ts index 61d6ba8..a316d9b 100644 --- a/packages-user/data-base/src/enemy/types.ts +++ b/packages-user/data-base/src/enemy/types.ts @@ -1,4 +1,4 @@ -import { ISaveableContent } from '../common'; +import { ISaveableContent } from '@user/data-common'; //#region 怪物基础 diff --git a/packages-user/data-base/src/flag/types.ts b/packages-user/data-base/src/flag/types.ts index a7cc428..3071a80 100644 --- a/packages-user/data-base/src/flag/types.ts +++ b/packages-user/data-base/src/flag/types.ts @@ -1,6 +1,6 @@ //#region 字段 -import { ISaveableContent } from '../common'; +import { ISaveableContent } from '@user/data-common'; export interface IFlagCommonField { /** 此字段所处的 Flag 系统 */ diff --git a/packages-user/data-base/src/hero/attribute.ts b/packages-user/data-base/src/hero/attribute.ts index 6a1f6f0..4e0a8a8 100644 --- a/packages-user/data-base/src/hero/attribute.ts +++ b/packages-user/data-base/src/hero/attribute.ts @@ -1,5 +1,5 @@ import { logger } from '@motajs/common'; -import { SaveCompression } from '../common'; +import { SaveCompression } from '@user/data-common'; import { IHeroAttribute, IHeroModifier } from './types'; export abstract class BaseHeroModifier implements IHeroModifier { diff --git a/packages-user/data-base/src/hero/mover.ts b/packages-user/data-base/src/hero/mover.ts index c578f30..b384978 100644 --- a/packages-user/data-base/src/hero/mover.ts +++ b/packages-user/data-base/src/hero/mover.ts @@ -1,8 +1,8 @@ import { Hookable, HookController, IHookController } from '@motajs/common'; import { isNil } from 'lodash-es'; -import { getFaceMovement, nextFaceDirection } from '../common/utils'; +import { getFaceMovement, nextFaceDirection } from '@user/data-common'; import { IHeroFollower, IHeroMover, IHeroMovingHooks } from './types'; -import { FaceDirection } from '../common'; +import { FaceDirection } from '@user/data-common'; const DEFAULT_HERO_IMAGE: ImageIds = 'hero.png'; diff --git a/packages-user/data-base/src/hero/state.ts b/packages-user/data-base/src/hero/state.ts index 37a690d..045e470 100644 --- a/packages-user/data-base/src/hero/state.ts +++ b/packages-user/data-base/src/hero/state.ts @@ -8,7 +8,7 @@ import { IModifierStateSave, IReadonlyHeroAttribute } from './types'; -import { SaveCompression } from '../common'; +import { SaveCompression } from '@user/data-common'; import { logger } from '@motajs/common'; export class HeroState implements IHeroState { diff --git a/packages-user/data-base/src/hero/types.ts b/packages-user/data-base/src/hero/types.ts index a35902b..3d0f048 100644 --- a/packages-user/data-base/src/hero/types.ts +++ b/packages-user/data-base/src/hero/types.ts @@ -1,5 +1,5 @@ import { IFacedTileLocator, IHookBase, IHookable } from '@motajs/common'; -import { FaceDirection, ISaveableContent } from '../common'; +import { FaceDirection, ISaveableContent } from '@user/data-common'; //#region 勇士属性 diff --git a/packages-user/data-base/src/index.ts b/packages-user/data-base/src/index.ts index 55d11bf..7d31be1 100644 --- a/packages-user/data-base/src/index.ts +++ b/packages-user/data-base/src/index.ts @@ -1,10 +1,8 @@ -export * from './common'; export * from './enemy'; export * from './flag'; export * from './hero'; export * from './load'; export * from './map'; -export * from './store'; export * from './game'; export * from './types'; diff --git a/packages-user/data-base/src/map/dynamicLayer.ts b/packages-user/data-base/src/map/dynamicLayer.ts index 20aac90..8afc2a4 100644 --- a/packages-user/data-base/src/map/dynamicLayer.ts +++ b/packages-user/data-base/src/map/dynamicLayer.ts @@ -11,13 +11,15 @@ import { IDynamicTile, IMapLayer } from './types'; -import { FaceDirection, degradeFace } from '../common'; +import { FaceDirection, IDataCommon, degradeFace } from '@user/data-common'; import { DynamicTile } from './dynamicTile'; export class DynamicLayer extends Hookable implements IDynamicLayer { + readonly state: IDataCommon; + /** 坐标到动态图块集合的映射,外层 key = y,内层 key = x,不使用 index 是为了支持地图外图块 */ private readonly tilePosMap: Map>> = new Map(); @@ -26,6 +28,7 @@ export class DynamicLayer constructor(public readonly layer: IMapLayer) { super(); + this.state = layer.state; } protected createController( diff --git a/packages-user/data-base/src/map/dynamicTile.ts b/packages-user/data-base/src/map/dynamicTile.ts index 2eff581..3169edf 100644 --- a/packages-user/data-base/src/map/dynamicTile.ts +++ b/packages-user/data-base/src/map/dynamicTile.ts @@ -1,14 +1,16 @@ import { isNil } from 'lodash-es'; import { FaceDirection, + IDataCommon, IMoverController, IObjectMover, IRoleFaceBinder -} from '../common'; +} from '@user/data-common'; import { IDynamicLayer, IDynamicTile } from './types'; import { DynamicTileMover } from './mover'; export class DynamicTile implements IDynamicTile { + readonly state: IDataCommon; readonly mover: IObjectMover; triggerType: number; @@ -21,6 +23,7 @@ export class DynamicTile implements IDynamicTile { public y: number, public readonly layer: IDynamicLayer ) { + this.state = layer.state; this.mover = new DynamicTileMover(this); this.triggerType = -1; } diff --git a/packages-user/data-base/src/map/layerState.ts b/packages-user/data-base/src/map/layerState.ts index 21f5a87..b11638b 100644 --- a/packages-user/data-base/src/map/layerState.ts +++ b/packages-user/data-base/src/map/layerState.ts @@ -11,7 +11,7 @@ import { IMapLayerHookController, IMapLayerHooks } from './types'; -import { ITileStore } from '../store'; +import { IDataCommon, ITileStore } from '@user/data-common'; import { MapLayer } from './mapLayer'; export class LayerState @@ -39,6 +39,7 @@ export class LayerState private dirty: boolean = false; constructor( + public readonly state: IDataCommon, public readonly tileStore: ITileStore, public width: number, public height: number @@ -52,6 +53,7 @@ export class LayerState array, this.width, this.height, + this, this.tileStore ); this.layerList.add(layer); diff --git a/packages-user/data-base/src/map/mapLayer.ts b/packages-user/data-base/src/map/mapLayer.ts index 061cd39..373dac2 100644 --- a/packages-user/data-base/src/map/mapLayer.ts +++ b/packages-user/data-base/src/map/mapLayer.ts @@ -1,6 +1,7 @@ import { isNil } from 'lodash-es'; import { IDynamicLayer, + ILayerState, IMapLayer, IMapLayerData, IMapLayerHookController, @@ -8,7 +9,7 @@ import { } from './types'; import { Hookable, HookController, logger } from '@motajs/common'; import { DynamicLayer } from './dynamicLayer'; -import { ITileStore } from '../store'; +import { IDataCommon, ITileStore } from '@user/data-common'; // todo: 提供 core.setBlock 等方法的替代方法,同时添加 setBlockList,以及前景背景的接口 @@ -16,6 +17,8 @@ export class MapLayer extends Hookable implements IMapLayer { + readonly state: IDataCommon; + width: number; height: number; empty: boolean = true; @@ -34,9 +37,11 @@ export class MapLayer array: Uint32Array, width: number, height: number, + public readonly layerState: ILayerState, private readonly tileStore: ITileStore ) { super(); + this.state = layerState.state; this.width = width; this.height = height; const area = width * height; diff --git a/packages-user/data-base/src/map/mapStore.ts b/packages-user/data-base/src/map/mapStore.ts index 7095da2..365d898 100644 --- a/packages-user/data-base/src/map/mapStore.ts +++ b/packages-user/data-base/src/map/mapStore.ts @@ -1,6 +1,6 @@ import { logger } from '@motajs/common'; -import { SaveCompression } from '../common'; -import { ITileStore } from '../store'; +import { IDataCommon, SaveCompression } from '@user/data-common'; +import { ITileStore } from '@user/data-common'; import { ILayerState, ILayerStateSave, @@ -32,7 +32,10 @@ export class MapStore implements IMapStore { /** 自动分区激活器开关 */ private autoActivitorEnabled: boolean = false; - constructor(private readonly tileStore: ITileStore) {} + constructor( + private readonly tileStore: ITileStore, + public readonly state: IDataCommon + ) {} //#region 楼层管理 @@ -42,7 +45,7 @@ export class MapStore implements IMapStore { } else { this.maps.push(id); } - const state = new LayerState(this.tileStore, width, height); + const state = new LayerState(this.state, this.tileStore, width, height); // 若 refData 已存在,新楼层直接视为全脏 if (this.refData !== null) { state.setDirty(true); diff --git a/packages-user/data-base/src/map/mover.ts b/packages-user/data-base/src/map/mover.ts index c6cd03a..2340ff2 100644 --- a/packages-user/data-base/src/map/mover.ts +++ b/packages-user/data-base/src/map/mover.ts @@ -4,8 +4,9 @@ import { ObjectMover, ObjectMoveStep, ObjectMoveStepType -} from '../common'; +} from '@user/data-common'; import { IDynamicTile } from './types'; +import { DYNAMIC_MOVER_FACE } from '../shared'; //#region 动态图块 @@ -16,7 +17,8 @@ const enum DynamicMoveCode { export class DynamicTileMover extends ObjectMover { constructor(public readonly tile: IDynamicTile) { - super(); + const face = tile.state.faceManager; + super(face.get(DYNAMIC_MOVER_FACE)!); } protected onMoveStart(): Promise { diff --git a/packages-user/data-base/src/map/types.ts b/packages-user/data-base/src/map/types.ts index 9d969e5..f6ca49f 100644 --- a/packages-user/data-base/src/map/types.ts +++ b/packages-user/data-base/src/map/types.ts @@ -1,13 +1,14 @@ import { IHookable, IHookBase, IHookController } from '@motajs/common'; import { FaceDirection, + IDataCommonExtended, IMoverController, IObjectMovable, IObjectMover, IRoleFaceBinder, ISaveableContent -} from '../common'; -import { ITileStore } from '../store'; +} from '@user/data-common'; +import { ITileStore } from '@user/data-common'; //#region 静态图层 @@ -69,10 +70,10 @@ export interface IMapLayerHookController extends IHookController getMapData(): Readonly; } -export interface IMapLayer extends IHookable< - IMapLayerHooks, - IMapLayerHookController -> { +export interface IMapLayer + extends + IHookable, + IDataCommonExtended { /** 地图宽度 */ readonly width: number; /** 地图高度 */ @@ -85,6 +86,8 @@ export interface IMapLayer extends IHookable< /** 图层纵深 */ readonly zIndex: number; + /** 当前图层所属的地图状态对象 */ + readonly layerState: ILayerState; /** 此图层对应的动态图块图层,z 层级与静态图块一致 */ readonly dynamicLayer: IDynamicLayer; @@ -261,7 +264,8 @@ export interface ILayerStateHooks extends IHookBase { onResizeLayer(layer: IMapLayer, width: number, height: number): void; } -export interface ILayerState extends IHookable { +export interface ILayerState + extends IHookable, IDataCommonExtended { /** 地图列表 */ readonly layerList: Set; /** 当前楼层共享的图块定义 store */ @@ -395,7 +399,8 @@ export interface IMapAreaInterval { export type MapArea = IMapAreaInterval[]; -export interface IMapStore extends ISaveableContent { +export interface IMapStore + extends ISaveableContent, IDataCommonExtended { /** 所有楼层的 id 有序数组 */ readonly maps: ReadonlyArray; @@ -524,7 +529,8 @@ export interface IDynamicLayerHooks extends IHookBase { onUpdateTilePosition(tile: IDynamicTile, layer: IDynamicLayer): void; } -export interface IDynamicLayer extends IHookable { +export interface IDynamicLayer + extends IHookable, IDataCommonExtended { /** 当前动态图层所属的静态图层 */ readonly layer: IMapLayer; @@ -598,7 +604,7 @@ export interface IDynamicLayer extends IHookable { updateDynamicTile(tile: IDynamicTile): void; } -export interface IDynamicTile extends IObjectMovable { +export interface IDynamicTile extends IObjectMovable, IDataCommonExtended { /** 当前图块数字 */ readonly num: number; /** 当前动态图块携带的触发器类型,-1 表示无触发器 */ diff --git a/packages-user/data-base/src/shared.ts b/packages-user/data-base/src/shared.ts new file mode 100644 index 0000000..0464e06 --- /dev/null +++ b/packages-user/data-base/src/shared.ts @@ -0,0 +1,4 @@ +import { FaceGroup } from '@user/data-common'; + +/** 动态图块所使用的默认移动组,不知道干什么的就别动 */ +export const DYNAMIC_MOVER_FACE = FaceGroup.Dir8; diff --git a/packages-user/data-base/src/types.ts b/packages-user/data-base/src/types.ts index 33b6e5f..94e65e0 100644 --- a/packages-user/data-base/src/types.ts +++ b/packages-user/data-base/src/types.ts @@ -1,23 +1,15 @@ import { IHeroFollower, IHeroState } from './hero'; import { IEnemyManager } from './enemy'; import { IFlagSystem } from './flag'; -import { IFaceManager, IRoleFaceBinder, ISaveableContent } from './common'; import { IMapStore } from './map'; -import { ITileStore } from './store'; +import { IDataCommon, ISaveableContent } from '@user/data-common'; export interface IStateSaveData { /** 跟随者列表 */ readonly followers: readonly IHeroFollower[]; } -export interface IStateBase { - /** 朝向绑定 */ - readonly roleFace: IRoleFaceBinder; - /** 朝向管理 */ - readonly faceManager: IFaceManager; - /** 图块定义存储 */ - readonly tileStore: ITileStore; - +export interface IStateBase extends IDataCommon { /** 地图状态 */ readonly maps: IMapStore; /** 勇士状态 */ diff --git a/packages-user/data-common/package.json b/packages-user/data-common/package.json new file mode 100644 index 0000000..f69debc --- /dev/null +++ b/packages-user/data-common/package.json @@ -0,0 +1,6 @@ +{ + "name": "@user/data-common", + "dependencies": { + "@motajs/common": "workspace:*" + } +} diff --git a/packages-user/data-base/src/common/face.ts b/packages-user/data-common/src/common/face.ts similarity index 97% rename from packages-user/data-base/src/common/face.ts rename to packages-user/data-common/src/common/face.ts index 5318fcf..8654106 100644 --- a/packages-user/data-base/src/common/face.ts +++ b/packages-user/data-common/src/common/face.ts @@ -1,5 +1,5 @@ import { logger } from '@motajs/common'; -import { IFaceData, IRoleFaceBinder } from './types'; +import { IFaceData, IRoleFaceBinder } from '../common'; import { isNil } from 'lodash-es'; import { FaceDirection } from '.'; diff --git a/packages-user/data-base/src/common/faceManager.ts b/packages-user/data-common/src/common/faceManager.ts similarity index 99% rename from packages-user/data-base/src/common/faceManager.ts rename to packages-user/data-common/src/common/faceManager.ts index 8736d3a..66df2b0 100644 --- a/packages-user/data-base/src/common/faceManager.ts +++ b/packages-user/data-common/src/common/faceManager.ts @@ -2,7 +2,7 @@ import { FaceDirection } from './types'; //#region 接口与枚举 -export const enum InternalFaceGroup { +export const enum FaceGroup { /** 四方向(上下左右) */ Dir4, /** 八方向(上下左右+斜向) */ diff --git a/packages-user/data-base/src/common/index.ts b/packages-user/data-common/src/common/index.ts similarity index 100% rename from packages-user/data-base/src/common/index.ts rename to packages-user/data-common/src/common/index.ts diff --git a/packages-user/data-base/src/common/indexer.ts b/packages-user/data-common/src/common/indexer.ts similarity index 100% rename from packages-user/data-base/src/common/indexer.ts rename to packages-user/data-common/src/common/indexer.ts diff --git a/packages-user/data-base/src/common/mover.ts b/packages-user/data-common/src/common/mover.ts similarity index 100% rename from packages-user/data-base/src/common/mover.ts rename to packages-user/data-common/src/common/mover.ts diff --git a/packages-user/data-base/src/common/types.ts b/packages-user/data-common/src/common/types.ts similarity index 100% rename from packages-user/data-base/src/common/types.ts rename to packages-user/data-common/src/common/types.ts diff --git a/packages-user/data-base/src/common/utils.ts b/packages-user/data-common/src/common/utils.ts similarity index 100% rename from packages-user/data-base/src/common/utils.ts rename to packages-user/data-common/src/common/utils.ts diff --git a/packages-user/data-common/src/index.ts b/packages-user/data-common/src/index.ts new file mode 100644 index 0000000..97bcfee --- /dev/null +++ b/packages-user/data-common/src/index.ts @@ -0,0 +1,4 @@ +export * from './common'; +export * from './store'; + +export * from './types'; diff --git a/packages-user/data-base/src/store/index.ts b/packages-user/data-common/src/store/index.ts similarity index 100% rename from packages-user/data-base/src/store/index.ts rename to packages-user/data-common/src/store/index.ts diff --git a/packages-user/data-base/src/store/tileStore.ts b/packages-user/data-common/src/store/tileStore.ts similarity index 100% rename from packages-user/data-base/src/store/tileStore.ts rename to packages-user/data-common/src/store/tileStore.ts diff --git a/packages-user/data-base/src/store/types.ts b/packages-user/data-common/src/store/types.ts similarity index 100% rename from packages-user/data-base/src/store/types.ts rename to packages-user/data-common/src/store/types.ts diff --git a/packages-user/data-common/src/types.ts b/packages-user/data-common/src/types.ts new file mode 100644 index 0000000..d814269 --- /dev/null +++ b/packages-user/data-common/src/types.ts @@ -0,0 +1,16 @@ +import { IFaceManager, IRoleFaceBinder } from './common'; +import { ITileStore } from './store'; + +export interface IDataCommon { + /** 图块定义存储 */ + readonly tileStore: ITileStore>; + /** 朝向绑定 */ + readonly roleFace: IRoleFaceBinder; + /** 朝向管理 */ + readonly faceManager: IFaceManager; +} + +export interface IDataCommonExtended { + /** 当前对象对应的基本数据端对象(Layer 0 对象) */ + readonly state: IDataCommon; +} diff --git a/packages-user/data-state/package.json b/packages-user/data-state/package.json index eca262b..e3e224d 100644 --- a/packages-user/data-state/package.json +++ b/packages-user/data-state/package.json @@ -3,6 +3,7 @@ "dependencies": { "@motajs/types": "workspace:*", "@motajs/common": "workspace:*", + "@user/data-common": "workspace:*", "@user/data-base": "workspace:*", "@user/data-system": "workspace:*", "@user/data-utils": "workspace:*" diff --git a/packages-user/data-state/src/core.ts b/packages-user/data-state/src/core.ts index 2145c69..0bba55c 100644 --- a/packages-user/data-state/src/core.ts +++ b/packages-user/data-state/src/core.ts @@ -1,4 +1,18 @@ import { ICoreState, ISaveableExecutor } from './types'; +import { + IRoleFaceBinder, + IFaceManager, + ITileStore, + ISaveableContent, + TileStore, + SaveCompression, + RoleFaceBinder, + FaceManager, + Dir4FaceHandler, + Dir8FaceHandler, + FaceGroup, + FaceDirection +} from '@user/data-common'; import { EnemyManager, HeroMover, @@ -11,22 +25,16 @@ import { IMotaDataLoader, MotaDataLoader, loading, - IRoleFaceBinder, - RoleFaceBinder, - FaceDirection, - ISaveableContent, - SaveCompression, IReadonlyEnemy, IMapStore, - MapStore, - IFaceManager, - FaceManager, - InternalFaceGroup, - Dir4FaceHandler, - Dir8FaceHandler, - ITileStore, - TileStore + MapStore } from '@user/data-base'; +import { + DamageSystem, + EnemyContext, + IEnemyContext, + MapDamage +} from '@user/data-system'; import { CommonAuraConverter, EnemyLegacyBridge, @@ -55,29 +63,25 @@ import { ILoadProgressTotal, LoadProgressTotal } from '@motajs/loader'; import { isNil } from 'lodash-es'; import { logger } from '@motajs/common'; import { ISaveSystem, SaveSystem } from './save'; -import { - DamageSystem, - EnemyContext, - IEnemyContext, - MapDamage -} from '@user/data-system'; export class CoreState implements ICoreState { - // 全局内容 + // Layer 0 内容 readonly roleFace: IRoleFaceBinder; readonly faceManager: IFaceManager; readonly tileStore: ITileStore; - // 可存档内容 + // Layer 1 内容 readonly maps: IMapStore; readonly hero: IHeroState; readonly enemyManager: IEnemyManager; readonly flags: IFlagSystem; - // 状态内容 + // Layer 2 内容 + readonly enemyContext: IEnemyContext; + + // 用户层内容 readonly loadProgress: ILoadProgressTotal; readonly dataLoader: IMotaDataLoader; - readonly enemyContext: IEnemyContext; readonly saveSystem: ISaveSystem; /** 可存档对象映射 */ @@ -94,7 +98,7 @@ export class CoreState implements ICoreState { const tileStore = new TileStore(); tileStore.attachLegacyConverter(new TileLegacyBridge()); this.tileStore = tileStore; - this.maps = new MapStore(tileStore); + this.maps = new MapStore(tileStore, this); this.loadProgress = new LoadProgressTotal(); this.dataLoader = new MotaDataLoader(this.loadProgress); @@ -166,9 +170,9 @@ export class CoreState implements ICoreState { this.faceManager = new FaceManager(); const dir4 = new Dir4FaceHandler(); const dir8 = new Dir8FaceHandler(); - this.faceManager.register(InternalFaceGroup.Dir4, dir4); + this.faceManager.register(FaceGroup.Dir4, dir4); this.faceManager.registerById('dir4', dir4); - this.faceManager.register(InternalFaceGroup.Dir8, dir8); + this.faceManager.register(FaceGroup.Dir8, dir8); this.faceManager.registerById('dir8', dir8); this.flags = new FlagSystem(); diff --git a/packages-user/data-state/src/enemy/mapDamage.ts b/packages-user/data-state/src/enemy/mapDamage.ts index 6bff8e7..b0659e8 100644 --- a/packages-user/data-state/src/enemy/mapDamage.ts +++ b/packages-user/data-state/src/enemy/mapDamage.ts @@ -19,15 +19,14 @@ import { IMapDamageView } from '@user/data-system'; import { - IFaceHandler, ISpecial, IReadonlyHeroAttribute, - IReadonlyEnemy, - InternalFaceGroup + IReadonlyEnemy } from '@user/data-base'; import { IZoneValue } from './special'; import { IEnemyAttr, MapDamageType } from './types'; import { IHeroAttr } from '../hero'; +import { IFaceHandler, FaceGroup } from '@user/data-common'; const RECT_RANGE = new RectRange(); const MANHATTAN_RANGE = new ManhattanRange(); @@ -312,7 +311,7 @@ export class MainMapDamageConverter implements IMapDamageConverter< const laser = enemy.getSpecial(24); if (laser) { - const face = handler.data.faceManager.get(InternalFaceGroup.Dir4)!; + const face = handler.data.faceManager.get(FaceGroup.Dir4)!; views.push(new LaserDamageView(context, locator, laser, face)); } diff --git a/packages-user/data-state/src/legacy/move.ts b/packages-user/data-state/src/legacy/move.ts index 48c3aa3..c91c047 100644 --- a/packages-user/data-state/src/legacy/move.ts +++ b/packages-user/data-state/src/legacy/move.ts @@ -1,9 +1,10 @@ import EventEmitter from 'eventemitter3'; import { backDir, toDir } from './utils'; -import { fromDirectionString, loading } from '@user/data-base'; +import { loading } from '@user/data-base'; import type { HeroKeyMover } from '@user/client-modules'; import { sleep } from '@motajs/common'; import { state } from '..'; +import { fromDirectionString } from '@user/data-common'; // todo: 转身功能 diff --git a/packages-user/data-state/src/legacy/tile.ts b/packages-user/data-state/src/legacy/tile.ts index 8694394..ca50d42 100644 --- a/packages-user/data-state/src/legacy/tile.ts +++ b/packages-user/data-state/src/legacy/tile.ts @@ -1,4 +1,8 @@ -import { ITileLegacyConverter, ITileRawData, TileType } from '@user/data-base'; +import { + ITileLegacyConverter, + ITileRawData, + TileType +} from '@user/data-common'; export type LegacyTileData = MapDataOf; diff --git a/packages-user/data-state/src/save/system.ts b/packages-user/data-state/src/save/system.ts index 8b5fecd..68e93c9 100644 --- a/packages-user/data-state/src/save/system.ts +++ b/packages-user/data-state/src/save/system.ts @@ -6,7 +6,7 @@ import { ISaveSystem, ISaveSystemConfig } from './types'; -import { ISaveableContent, SaveCompression } from '@user/data-base'; +import { ISaveableContent, SaveCompression } from '@user/data-common'; import { isNil } from 'lodash-es'; interface ISaveRecord { diff --git a/packages-user/data-state/src/save/types.ts b/packages-user/data-state/src/save/types.ts index 034db4b..82737b5 100644 --- a/packages-user/data-state/src/save/types.ts +++ b/packages-user/data-state/src/save/types.ts @@ -1,4 +1,4 @@ -import { ISaveableContent, SaveCompression } from '@user/data-base'; +import { ISaveableContent, SaveCompression } from '@user/data-common'; import { Dexie, Table } from 'dexie'; export interface IGlobalTrasaction { diff --git a/packages-user/data-state/src/types.ts b/packages-user/data-state/src/types.ts index 5ef2e96..beb114d 100644 --- a/packages-user/data-state/src/types.ts +++ b/packages-user/data-state/src/types.ts @@ -1,13 +1,10 @@ -import { - IEnemyContext, - IMotaDataLoader, - ISaveableContent, - IStateBase -} from '@user/data-base'; +import { IMotaDataLoader, IStateBase } from '@user/data-base'; import { IEnemyAttr } from './enemy'; import { IHeroAttr } from './hero'; import { ILoadProgressTotal } from '@motajs/loader'; import { ISaveSystem } from './save'; +import { IEnemyContext } from '@user/data-system'; +import { ISaveableContent } from '@user/data-common'; export interface ISaveableExecutor { /** diff --git a/packages-user/data-system/src/combat/context.ts b/packages-user/data-system/src/combat/context.ts index ca7e8db..22dbb4f 100644 --- a/packages-user/data-system/src/combat/context.ts +++ b/packages-user/data-system/src/combat/context.ts @@ -19,11 +19,10 @@ import { IEnemy, IReadonlyEnemy, ISpecial, - IStateBase, - ILocationIndexer, - MapLocIndexer + IStateBase } from '@user/data-base'; import { EnemyView } from './enemy'; +import { ILocationIndexer, MapLocIndexer } from '@user/data-common'; export class EnemyContext implements IEnemyContext< TEnemy, diff --git a/packages-user/data-system/src/combat/mapDamage.ts b/packages-user/data-system/src/combat/mapDamage.ts index 200fa3b..e68249a 100644 --- a/packages-user/data-system/src/combat/mapDamage.ts +++ b/packages-user/data-system/src/combat/mapDamage.ts @@ -9,7 +9,8 @@ import { IMapDamageReducer, IMapDamageView } from './types'; -import { ILocationHelper, IStateBase } from '@user/data-base'; +import { IStateBase } from '@user/data-base'; +import { ILocationHelper } from '@user/data-common'; interface IPointInfo { /** 该点所有的地图伤害 */ diff --git a/packages-user/data-system/src/combat/types.ts b/packages-user/data-system/src/combat/types.ts index cc6ab59..044cafe 100644 --- a/packages-user/data-system/src/combat/types.ts +++ b/packages-user/data-system/src/combat/types.ts @@ -5,9 +5,9 @@ import { ISpecial, IReadonlyHeroAttribute, IHeroAttribute, - IStateBase, - ILocationHelper + IStateBase } from '@user/data-base'; +import { ILocationHelper } from '@user/data-common'; //#region 辅助接口 diff --git a/packages-user/legacy-plugin-data/src/fallback.ts b/packages-user/legacy-plugin-data/src/fallback.ts index 8cd88eb..a69fb7b 100644 --- a/packages-user/legacy-plugin-data/src/fallback.ts +++ b/packages-user/legacy-plugin-data/src/fallback.ts @@ -1,8 +1,9 @@ import type { TimingFn } from 'mutate-animate'; import { heroMoveCollection, MoveStep, state } from '@user/data-state'; -import { fromDirectionString, hook, loading } from '@user/data-base'; +import { hook, loading } from '@user/data-base'; import { Patch, PatchClass } from '@motajs/legacy-common'; import { isNil } from 'lodash-es'; +import { fromDirectionString } from '@user/data-common'; // 向后兼容用,会充当两个版本间过渡的作用 diff --git a/packages/common/src/utils/types.ts b/packages/common/src/utils/types.ts index 8334175..82b6a31 100644 --- a/packages/common/src/utils/types.ts +++ b/packages/common/src/utils/types.ts @@ -1,4 +1,4 @@ -import { FaceDirection } from '@user/data-base'; +import { FaceDirection } from '@user/data-common'; export interface ISearchable4Dir { /** 获取上侧元素 */ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16fe420..a8ea3a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -288,6 +288,15 @@ importers: '@motajs/types': specifier: workspace:* version: link:../../packages/types + '@user/data-common': + specifier: workspace:* + version: link:../data-common + + packages-user/data-common: + dependencies: + '@motajs/common': + specifier: workspace:* + version: link:../../packages/common packages-user/data-fallback: dependencies: