diff --git a/packages-user/data-base/src/enemy/context.ts b/packages-user/data-base/src/enemy/context.ts index 9b4c42a..63c9559 100644 --- a/packages-user/data-base/src/enemy/context.ts +++ b/packages-user/data-base/src/enemy/context.ts @@ -1,5 +1,4 @@ -import { IRange, logger } from '@motajs/common'; -import { ITileLocator } from '@user/types'; +import { IRange, ITileLocator, logger } from '@motajs/common'; import { IAuraConverter, IAuraView, diff --git a/packages-user/data-base/src/enemy/mapDamage.ts b/packages-user/data-base/src/enemy/mapDamage.ts index 5d876eb..a204161 100644 --- a/packages-user/data-base/src/enemy/mapDamage.ts +++ b/packages-user/data-base/src/enemy/mapDamage.ts @@ -1,5 +1,4 @@ -import { logger } from '@motajs/common'; -import { ITileLocator } from '@user/types'; +import { logger, ITileLocator } from '@motajs/common'; import { IEnemyContext, IEnemyView, diff --git a/packages-user/data-base/src/enemy/types.ts b/packages-user/data-base/src/enemy/types.ts index a0cc59c..95f44eb 100644 --- a/packages-user/data-base/src/enemy/types.ts +++ b/packages-user/data-base/src/enemy/types.ts @@ -1,5 +1,4 @@ -import { IRange } from '@motajs/common'; -import { ITileLocator } from '@user/types'; +import { IRange, ITileLocator } from '@motajs/common'; export interface ISpecial { /** 特殊属性代码 */ diff --git a/packages-user/data-base/src/enemy/utils.ts b/packages-user/data-base/src/enemy/utils.ts index fc8f5c8..088d186 100644 --- a/packages-user/data-base/src/enemy/utils.ts +++ b/packages-user/data-base/src/enemy/utils.ts @@ -1,4 +1,4 @@ -import { ITileLocator } from '@user/types'; +import { ITileLocator } from '@motajs/common'; import { IMapLocIndexer } from './types'; export class MapLocIndexer implements IMapLocIndexer { diff --git a/packages-user/data-state/package.json b/packages-user/data-state/package.json index 38049ca..0ff5c79 100644 --- a/packages-user/data-state/package.json +++ b/packages-user/data-state/package.json @@ -6,4 +6,4 @@ "@user/data-base": "workspace:*", "@user/data-utils": "workspace:*" } -} \ No newline at end of file +} diff --git a/packages-user/data-state/src/core.ts b/packages-user/data-state/src/core.ts index c62e888..dd9cffa 100644 --- a/packages-user/data-state/src/core.ts +++ b/packages-user/data-state/src/core.ts @@ -1,12 +1,13 @@ -import { ICoreState, IGameDataState, IStateSaveData } from './types'; +import { ICoreState, IStateSaveData } from './types'; import { IHeroState, HeroState } from './hero'; import { ILayerState, LayerState } from './map'; import { IRoleFaceBinder, RoleFaceBinder } from './common'; -import { GameDataState } from './data'; import { DamageSystem, EnemyContext, + EnemyManager, IEnemyContext, + IEnemyManager, MapDamage } from '@user/data-base'; import { IEnemyAttributes } from './enemy/types'; @@ -15,16 +16,19 @@ import { GuardAuraConverter, MainEnemyFinalEffect, MainMapDamageConverter, - MainMapDamageReducer + MainMapDamageReducer, + registerSpecials } from './enemy'; +import { TILE_HEIGHT, TILE_WIDTH } from './shared'; export class CoreState implements ICoreState { readonly layer: ILayerState; readonly hero: IHeroState; readonly roleFace: IRoleFaceBinder; - readonly data: IGameDataState; readonly idNumberMap: Map; readonly numberIdMap: Map; + + readonly enemyManager: IEnemyManager; readonly enemyContext: IEnemyContext; constructor() { @@ -33,8 +37,10 @@ export class CoreState implements ICoreState { this.roleFace = new RoleFaceBinder(); this.idNumberMap = new Map(); this.numberIdMap = new Map(); - this.data = new GameDataState(); + // 怪物管理器初始化 + this.enemyManager = new EnemyManager(); + registerSpecials(this.enemyManager); // 怪物上下文初始化 const enemyContext = new EnemyContext(); const damageSystem = new DamageSystem(enemyContext); @@ -46,7 +52,7 @@ export class CoreState implements ICoreState { enemyContext.registerAuraConverter(new CommonAuraConverter()); enemyContext.registerAuraConverter(new GuardAuraConverter()); enemyContext.registerFinalEffect(new MainEnemyFinalEffect()); - enemyContext.resize(core._WIDTH_, core._HEIGHT_); + enemyContext.resize(TILE_WIDTH, TILE_HEIGHT); this.enemyContext = enemyContext; } diff --git a/packages-user/data-state/src/data.ts b/packages-user/data-state/src/data.ts deleted file mode 100644 index 826f730..0000000 --- a/packages-user/data-state/src/data.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { EnemyManager, IEnemyManager } from '@user/data-base'; -import { IEnemyAttributes } from './enemy/types'; -import { IGameDataState } from './types'; -import { registerSpecials } from './enemy'; - -export class GameDataState implements IGameDataState { - readonly enemyManager: IEnemyManager; - - constructor() { - this.enemyManager = new EnemyManager(); - registerSpecials(this.enemyManager); - } -} diff --git a/packages-user/data-state/src/enemy/aura.ts b/packages-user/data-state/src/enemy/aura.ts index 99caee1..cc12fff 100644 --- a/packages-user/data-state/src/enemy/aura.ts +++ b/packages-user/data-state/src/enemy/aura.ts @@ -3,6 +3,7 @@ import { IManhattanRangeParam, IRange, IRectRangeParam, + ITileLocator, ManhattanRange, RectRange } from '@motajs/common'; @@ -17,7 +18,6 @@ import { IEnemy } from '@user/data-base'; import { IHaloValue } from './special'; -import { ITileLocator } from '@user/types'; import { IEnemyAttributes } from './types'; const FULL_RANGE = new FullRange(); diff --git a/packages-user/data-state/src/enemy/final.ts b/packages-user/data-state/src/enemy/final.ts index 6e4337f..7c91d0c 100644 --- a/packages-user/data-state/src/enemy/final.ts +++ b/packages-user/data-state/src/enemy/final.ts @@ -1,6 +1,6 @@ import { IEnemy, IEnemyFinalEffect } from '@user/data-base'; import { IEnemyAttributes } from './types'; -import { ITileLocator } from '@user/types'; +import { ITileLocator } from '@motajs/common'; const HERO_STATUS_PLACEHOLDER = { atk: 0, diff --git a/packages-user/data-state/src/enemy/mapDamage.ts b/packages-user/data-state/src/enemy/mapDamage.ts index cda0439..7684588 100644 --- a/packages-user/data-state/src/enemy/mapDamage.ts +++ b/packages-user/data-state/src/enemy/mapDamage.ts @@ -8,9 +8,9 @@ import { IRectRangeParam, ManhattanRange, RayRange, - RectRange + RectRange, + ITileLocator } from '@motajs/common'; -import { ITileLocator } from '@user/types'; import { IReadonlyEnemy, ISpecial } from '@user/data-base'; import { IEnemyContext, diff --git a/packages-user/data-state/src/shared.ts b/packages-user/data-state/src/shared.ts index 81e114e..bb2d38c 100644 --- a/packages-user/data-state/src/shared.ts +++ b/packages-user/data-state/src/shared.ts @@ -1,2 +1,7 @@ +/** 每个地图的默认宽度 */ +export const TILE_WIDTH = 13; +/** 每个地图的默认高度 */ +export const TILE_HEIGHT = 13; + /** 默认的勇士图片 */ export const DEFAULT_HERO_IMAGE: ImageIds = 'hero.png'; diff --git a/packages-user/data-state/src/types.ts b/packages-user/data-state/src/types.ts index 278592f..7092239 100644 --- a/packages-user/data-state/src/types.ts +++ b/packages-user/data-state/src/types.ts @@ -21,13 +21,13 @@ export interface ICoreState { readonly hero: IHeroState; /** 朝向绑定 */ readonly roleFace: IRoleFaceBinder; - /** 游戏数据状态 */ - readonly data: IGameDataState; /** id 到图块数字的映射 */ readonly idNumberMap: Map; /** 图块数字到 id 的映射 */ readonly numberIdMap: Map; + /** 怪物管理器 */ + readonly enemyManager: IEnemyManager; /** 怪物上下文 */ readonly enemyContext: IEnemyContext; diff --git a/packages-user/types/package.json b/packages-user/types/package.json deleted file mode 100644 index 82a7c94..0000000 --- a/packages-user/types/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "@user/types" -} diff --git a/packages-user/types/src/enemy.ts b/packages-user/types/src/enemy.ts deleted file mode 100644 index c332f67..0000000 --- a/packages-user/types/src/enemy.ts +++ /dev/null @@ -1,87 +0,0 @@ -// todo: 2.C - -export interface IEnemyInfo {} - -export interface IDamageInfo {} - -export interface IDamageEnemy { - /** 原始怪物信息 */ - readonly enemy: Enemy; - /** 该怪物所属的怪物列表 */ - readonly collection: IEnemyCollection | null; - /** 怪物横坐标 */ - readonly x: number | undefined; - - /** - * 获取怪物属性信息 - */ - getEnemyInfo(): IEnemyInfo; - - /** - * 获取这个怪物的伤害信息 - */ - getDamageInfo(): IDamageInfo; -} - -export interface IMapDamage { - /** 伤害类型 */ - readonly type: string; - /** 伤害值 */ - readonly damage: number; - /** 伤害优先级 */ - readonly priority: number; -} - -export interface IMapDamageSummary { - /** 该点的总伤害 */ - readonly totalDamage: number; - /** 该点的伤害信息 */ - readonly damages: IMapDamage[]; -} - -export interface IEnemyCollection { - /** 怪物列表,索引为 x + width * y,值表示该点对应的怪物 */ - readonly list: Map; - - /** 楼层 id */ - readonly floorId: FloorIds; - /** 楼层宽度 */ - readonly width: number; - /** 楼层高度 */ - readonly height: number; - - /** 地图伤害 */ - readonly mapDamage: Map; - - /** 用于计算本怪物列表中怪物信息的勇士属性 */ - readonly hero: HeroStatus; - - /** - * 获取一点的怪物信息,不存在时返回 null - * @param x 怪物横坐标 - * @param y 怪物纵坐标 - */ - getEnemy(x: number, y: number): IDamageEnemy | null; - - /** - * 获取一点的地图伤害信息,每一点都包含地图伤害对象,传入地图外坐标时返回 null - * @param x 横坐标 - * @param y 纵坐标 - */ - getMapDamage(x: number, y: number): IMapDamageSummary | null; - - /** - * 重置此地图的怪物信息,并重新计算 - */ - refresh(): void; - - /** - * 复制这个怪物列表,同时将复制后的列表中勇士属性设为指定值 - * @param status 新的勇士属性 - */ - with(status: HeroStatus): IEnemyCollection; -} - -export interface IDamageSystem { - readonly collections: Map; -} diff --git a/packages-user/types/src/index.ts b/packages-user/types/src/index.ts deleted file mode 100644 index 17d326c..0000000 --- a/packages-user/types/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './enemy'; -export * from './spatial'; diff --git a/packages-user/types/src/spatial.ts b/packages-user/types/src/spatial.ts deleted file mode 100644 index 4926ac7..0000000 --- a/packages-user/types/src/spatial.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface ITileLocator { - /** 图块所在横坐标 */ - x: number; - /** 图块所在纵坐标 */ - y: number; -} diff --git a/packages/common/src/utils/types.ts b/packages/common/src/utils/types.ts index db01be3..39784d6 100644 --- a/packages/common/src/utils/types.ts +++ b/packages/common/src/utils/types.ts @@ -135,6 +135,13 @@ export interface IRayRangeParam { //#region 实用接口 +export interface ITileLocator { + /** 图块所在横坐标 */ + x: number; + /** 图块所在纵坐标 */ + y: number; +} + export const enum InternalDirectionGroup { /** 上下左右四方向 */ Dir4,