refactor(hero): 重构英雄属性与状态管理

- 将增益效果属性组移到武器进化属性后以优化结构
- 新增 in_stun 和 in_frost 状态标志替代 isStun/isFrost 方法
- 更新状态检查逻辑以使用新的状态标志
- 移除 HeroSkillsComp 依赖以简化移动系统
- 修改伤害计算直接使用 HeroAttrsComp 属性而非 Attrs 映射
- 简化暴击、击退等判定逻辑,移除闪避和抗性计算
- 优化 reset 方法,设置合理的默认值并重置新增状态标志
- 添加状态变化时的调试日志输出
This commit is contained in:
walkpan
2026-03-11 22:51:48 +08:00
parent 48769e699e
commit 9d6075be6e
4 changed files with 53 additions and 58 deletions

View File

@@ -1,7 +1,6 @@
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { HeroViewComp } from "./HeroViewComp";
import { HeroAttrsComp } from "./HeroAttrsComp";
import { HeroSkillsComp } from "./HeroSkills";
import { smc } from "../common/SingletonModuleComp";
import { FacSet } from "../common/config/GameSet";
import { HType } from "../common/config/heroSet";
@@ -29,7 +28,7 @@ export class HeroMoveComp extends ecs.Comp {
@ecs.register('HeroMoveSystem')
export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
filter(): ecs.IMatcher {
return ecs.allOf(HeroMoveComp, HeroViewComp, HeroAttrsComp, HeroSkillsComp);
return ecs.allOf(HeroMoveComp, HeroViewComp, HeroAttrsComp);
}
update(e: ecs.Entity) {
@@ -47,7 +46,7 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
if (!move.moving) return;
// 2. 异常状态检查 (死亡/复活/眩晕/冰冻)
if (model.is_stop || model.is_dead || model.is_reviving || model.isStun() || model.isFrost()) {
if (model.is_stop || model.is_dead || model.is_reviving || model.in_stun || model.in_frost) {
if (!model.is_reviving) view.status_change("idle");
return;
}
@@ -119,7 +118,7 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
view.status_change("idle");
model.is_atking = true;
} else {
const speed = model.Attrs[Attrs.SPEED] / 3;
const speed = model.speed / 3;
this.moveEntity(view, move.direction, speed);
model.is_atking = false;
}
@@ -145,7 +144,7 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
this.performRetreat(view, move, model, currentX);
} else if (dist > maxRange) {
// 太远了,追击
const speed = model.Attrs[Attrs.SPEED] / 3;
const speed = model.speed / 3;
this.moveEntity(view, move.direction, speed);
model.is_atking = false;
} else {
@@ -175,7 +174,7 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
this.performRetreat(view, move, model, currentX);
} else if (dist > maxRange) {
// 太远了,追击
const speed = model.Attrs[Attrs.SPEED] / 3;
const speed = model.speed / 3;
this.moveEntity(view, move.direction, speed);
model.is_atking = false;
} else {
@@ -189,7 +188,7 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
private performRetreat(view: HeroViewComp, move: HeroMoveComp, model: HeroAttrsComp, currentX: number) {
const safeRetreatX = currentX - move.direction * 50;
if (safeRetreatX >= -300 && safeRetreatX <= 300) {
const retreatSpeed = (model.Attrs[Attrs.SPEED] / 3) * 0.8;
const retreatSpeed = (model.speed / 3) * 0.8;
this.moveEntity(view, -move.direction, retreatSpeed);
model.is_atking = false;
} else {
@@ -214,7 +213,7 @@ export class HeroMoveSystem extends ecs.ComblockSystem implements ecs.ISystemUpd
if (Math.abs(currentX - targetX) > 5) {
const dir = targetX > currentX ? 1 : -1;
const speed = model.Attrs[Attrs.SPEED] / 3;
const speed = model.speed / 3;
// 修正朝向:回正
move.direction = 1;