refactor: 修改 mover 名称

This commit is contained in:
AncTe committed 2026-05-29 14:07:21 +08:00
1 parent 2c89a4ac37
commit c48f91c25c
9 files changed
+92 -45

No files matched your search

@@ -87,6 +87,24 @@ export class HeroAttribute<THero> implements IHeroAttribute<THero> {
this.finalAttribute[name] = value;
}
*catchCalculateProgress<K extends keyof THero>(name: K) {
const modifierList = this.modifier.get(name);
if (!modifierList) return;
const baseValue = this.attribute[name];
let value = baseValue;
for (const modifier of modifierList as IHeroModifier<THero[K]>[]) {
const nextValue = modifier.modify(value, baseValue, name);
// 部署之后就没必要弹这个警告了,额外判断反而可能会有一定的性能损失,直接 tree-shaking 优化掉
if (import.meta.env.DEV && this.isSameReference(value, nextValue)) {
const modiferName = modifier.constructor.name;
logger.warn(109, modiferName, String(name));
}
value = nextValue;
yield [modifier, value] as [IHeroModifier<THero[K]>, THero[K]];
}
}
getBaseAttribute<K extends keyof THero>(name: K): THero[K] {
return this.attribute[name];
}
+10 -6
View File
@@ -1,14 +1,18 @@
import { Hookable, HookController, IHookController } from '@motajs/common';
import { isNil } from 'lodash-es';
import { getFaceMovement, nextFaceDirection } from '@user/data-common';
import { IHeroFollower, IHeroMover, IHeroMovingHooks } from './types';
import {
IHeroFollower,
IHeroMoveController,
IHeroMoveControllerHooks
} from './types';
import { FaceDirection } from '@user/data-common';
const DEFAULT_HERO_IMAGE: ImageIds = 'hero.png';
export class HeroMover
extends Hookable<IHeroMovingHooks>
implements IHeroMover
export class HeroMoveController
extends Hookable<IHeroMoveControllerHooks>
implements IHeroMoveController
{
x: number = 0;
y: number = 0;
@@ -22,8 +26,8 @@ export class HeroMover
readonly followers: IHeroFollower[] = [];
protected createController(
hook: Partial<IHeroMovingHooks>
): IHookController<IHeroMovingHooks> {
hook: Partial<IHeroMoveControllerHooks>
): IHookController<IHeroMoveControllerHooks> {
return new HookController(this, hook);
}
+4 -4
View File
@@ -2,7 +2,7 @@ import { HeroAttribute } from './attribute';
import {
IHeroAttribute,
IHeroModifier,
IHeroMover,
IHeroMoveController,
IHeroState,
IHeroStateSave,
IModifierStateSave,
@@ -16,11 +16,11 @@ export class HeroState<THero> implements IHeroState<THero> {
private readonly registry: Map<string, () => IHeroModifier> = new Map();
constructor(
public mover: IHeroMover,
public mover: IHeroMoveController,
public attribute: IHeroAttribute<THero>
) {}
attachMover(mover: IHeroMover): void {
attachMover(mover: IHeroMoveController): void {
this.mover = mover;
}
@@ -28,7 +28,7 @@ export class HeroState<THero> implements IHeroState<THero> {
this.attribute = attribute;
}
getHeroMover(): IHeroMover {
getHeroMover(): IHeroMoveController {
return this.mover;
}
+21 -12
View File
@@ -4,10 +4,10 @@ import { FaceDirection, ISaveableContent } from '@user/data-common';
//#region 勇士属性
export interface IHeroModifier<
T = unknown,
K = unknown,
V = unknown,
S = unknown
> extends ISaveableContent<S> {
Save = unknown
> extends ISaveableContent<Save> {
/** 修饰器类型 */
readonly type: string;
/** 修饰器优先级 */
@@ -40,12 +40,12 @@ export interface IHeroModifier<
* @param baseValue 该属性值的基础属性值
* @param name 属性名称
*/
modify(value: T, baseValue: T, name: PropertyKey): T;
modify(value: K, baseValue: K, name: PropertyKey): K;
/**
* 深拷贝此修饰器
*/
clone(): IHeroModifier<T, V>;
clone(): IHeroModifier<K, V>;
}
export interface IModifierStateSave {
@@ -129,7 +129,7 @@ export interface IHeroAttribute<THero> extends IReadonlyHeroAttribute<THero> {
*/
addModifier<K extends keyof THero>(
name: K,
modifier: IHeroModifier<THero[K], unknown>
modifier: IHeroModifier<THero[K]>
): void;
/**
@@ -139,7 +139,7 @@ export interface IHeroAttribute<THero> extends IReadonlyHeroAttribute<THero> {
*/
deleteModifier<K extends keyof THero>(
name: K,
modifier: IHeroModifier<THero[K], unknown>
modifier: IHeroModifier<THero[K]>
): void;
/**
@@ -147,6 +147,15 @@ export interface IHeroAttribute<THero> extends IReadonlyHeroAttribute<THero> {
* @param cloneModifier 是否同时复制修饰器,默认复制
*/
clone(cloneModifier?: boolean): IHeroAttribute<THero>;
/**
* 获取勇士指定属性计算过程的可迭代对象,一般用于调试。
* 此方法仅输出计算过程及结果,不会修改内部存储的最终属性。
* @param name 属性名称
*/
catchCalculateProgress<K extends keyof THero>(
name: K
): Iterable<[IHeroModifier<THero[K]>, THero[K]]>;
}
//#endregion
@@ -169,7 +178,7 @@ export interface IHeroFollower {
alpha: number;
}
export interface IHeroMovingHooks extends IHookBase {
export interface IHeroMoveControllerHooks extends IHookBase {
/**
* 当设置勇士的坐标时触发
* @param x 勇士横坐标
@@ -253,7 +262,7 @@ export interface IHeroMovingHooks extends IHookBase {
onSetFollowerAlpha(identifier: string, alpha: number): void;
}
export interface IHeroMover extends IHookable<IHeroMovingHooks> {
export interface IHeroMoveController extends IHookable<IHeroMoveControllerHooks> {
/** 勇士横坐标 */
readonly x: number;
/** 勇士纵坐标 */
@@ -372,7 +381,7 @@ export interface IHeroState<THero> extends ISaveableContent<
IHeroStateSave<THero>
> {
/** 勇士移动对象 */
readonly mover: IHeroMover;
readonly mover: IHeroMoveController;
/** 勇士属性对象 */
readonly attribute: IReadonlyHeroAttribute<THero>;
@@ -380,12 +389,12 @@ export interface IHeroState<THero> extends ISaveableContent<
* 绑定勇士移动对象
* @param mover 勇士移动对象
*/
attachMover(mover: IHeroMover): void;
attachMover(mover: IHeroMoveController): void;
/**
* 获取勇士移动对象
*/
getHeroMover(): IHeroMover;
getHeroMover(): IHeroMoveController;
/**
* 绑定勇士属性对象