From 93b534924858fb49353fcaf8c1da595a254dddd0 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 12 May 2026 19:59:10 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=BF=80=E5=85=89=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E4=BC=A4=E5=AE=B3=E6=8D=A2=E7=94=A8=E6=96=B0=20IFaceM?= =?UTF-8?q?anager=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages-user/data-base/src/combat/types.ts | 2 +- packages-user/data-base/src/common/mover.ts | 39 +++++-------------- .../data-state/src/enemy/mapDamage.ts | 24 ++++++------ 3 files changed, 24 insertions(+), 41 deletions(-) diff --git a/packages-user/data-base/src/combat/types.ts b/packages-user/data-base/src/combat/types.ts index 6f6b584..28d84cc 100644 --- a/packages-user/data-base/src/combat/types.ts +++ b/packages-user/data-base/src/combat/types.ts @@ -245,7 +245,7 @@ export interface IMapDamageView { getDamageAt(locator: ITileLocator): Readonly | null; /** - * 获取指定位置的地图伤害,会对坐标进行判断 + * 获取指定位置的地图伤害,不会对坐标进行判断 * @param locator 伤害位置 */ getDamageWithoutCheck( diff --git a/packages-user/data-base/src/common/mover.ts b/packages-user/data-base/src/common/mover.ts index f6eb757..eeba89d 100644 --- a/packages-user/data-base/src/common/mover.ts +++ b/packages-user/data-base/src/common/mover.ts @@ -7,6 +7,7 @@ import { ITileLocator } from '@motajs/common'; import { FaceDirection } from './types'; +import { IFaceHandler } from './faceManager'; //#region 对象移动 @@ -278,6 +279,14 @@ export abstract class ObjectMover /** 是否调用了 `IMoverController.stop` 接口 */ private shouldStop: boolean = false; + /** 朝向处理 */ + private readonly faceHandler: IFaceHandler; + + constructor(faceHandler: IFaceHandler) { + super(); + this.faceHandler = faceHandler; + } + protected createController( hook: Partial> ): IHookController> { @@ -349,34 +358,6 @@ export abstract class ObjectMover } } - // TODO: 需要做一个朝向系统以解决朝向难以处理的问题 - /** - * 获取指定方向的反方向 - * @param dir 当前方向 - */ - private getOppositeDirection(dir: FaceDirection): FaceDirection { - switch (dir) { - case FaceDirection.Left: - return FaceDirection.Right; - case FaceDirection.Up: - return FaceDirection.Down; - case FaceDirection.Right: - return FaceDirection.Left; - case FaceDirection.Down: - return FaceDirection.Up; - case FaceDirection.LeftUp: - return FaceDirection.RightDown; - case FaceDirection.RightUp: - return FaceDirection.LeftDown; - case FaceDirection.LeftDown: - return FaceDirection.RightUp; - case FaceDirection.RightDown: - return FaceDirection.LeftUp; - case FaceDirection.Unknown: - return FaceDirection.Unknown; - } - } - /** * 根据步骤内容预先同步移动器内部状态 * @param step 当前步骤 @@ -397,7 +378,7 @@ export abstract class ObjectMover case ObjectMoveStepType.Special: { const dir = this.getCurrentDirection(); if (step.direction === ObjectSpecialStep.Backward) { - const opposite = this.getOppositeDirection(dir); + const opposite = this.faceHandler.opposite(dir); this.moveDirection = opposite; this.faceDirection = opposite; } else { diff --git a/packages-user/data-state/src/enemy/mapDamage.ts b/packages-user/data-state/src/enemy/mapDamage.ts index 26bea1e..bea8256 100644 --- a/packages-user/data-state/src/enemy/mapDamage.ts +++ b/packages-user/data-state/src/enemy/mapDamage.ts @@ -1,7 +1,4 @@ import { - DirectionMapper, - IDirectionDescriptor, - InternalDirectionGroup, IManhattanRangeParam, IRange, IRayRangeParam, @@ -9,7 +6,8 @@ import { ManhattanRange, RayRange, RectRange, - ITileLocator + ITileLocator, + IDirectionDescriptor } from '@motajs/common'; import { IEnemyContext, @@ -21,7 +19,9 @@ import { ISpecial, IMapDamageView, IReadonlyHeroAttribute, - IReadonlyEnemy + IReadonlyEnemy, + IFaceHandler, + InternalFaceGroup } from '@user/data-base'; import { IZoneValue } from './special'; import { IEnemyAttr, MapDamageType } from './types'; @@ -31,9 +31,6 @@ const RECT_RANGE = new RectRange(); const MANHATTAN_RANGE = new ManhattanRange(); const RAY_RANGE = new RayRange(); -const DIRECTION_MAPPER = new DirectionMapper(); -const DIR4 = [...DIRECTION_MAPPER.map(InternalDirectionGroup.Dir4)]; - //#region 地图伤害 abstract class BaseMapDamageView implements IMapDamageView { @@ -154,13 +151,17 @@ export class RepulseDamageView extends BaseMapDamageView { } export class LaserDamageView extends BaseMapDamageView { + /** 激光方向列表 */ + private readonly dirs: IDirectionDescriptor[]; + constructor( context: IEnemyContext, private readonly locator: Readonly, private readonly special: Readonly>, - private readonly dir: IDirectionDescriptor[] = DIR4 + dir: IFaceHandler ) { super(context); + this.dirs = [...dir.mapMovement()].map(v => v[1]); } getRange(): IRange { @@ -171,7 +172,7 @@ export class LaserDamageView extends BaseMapDamageView { return { cx: this.locator.x, cy: this.locator.y, - dir: this.dir + dir: this.dirs }; } @@ -309,7 +310,8 @@ export class MainMapDamageConverter implements IMapDamageConverter< const laser = enemy.getSpecial(24); if (laser) { - views.push(new LaserDamageView(context, locator, laser)); + const face = handler.data.faceManager.get(InternalFaceGroup.Dir4)!; + views.push(new LaserDamageView(context, locator, laser, face)); } if (enemy.hasSpecial(27)) {