refactor(hero): 重构英雄属性与状态管理
- 将增益效果属性组移到武器进化属性后以优化结构 - 新增 in_stun 和 in_frost 状态标志替代 isStun/isFrost 方法 - 更新状态检查逻辑以使用新的状态标志 - 移除 HeroSkillsComp 依赖以简化移动系统 - 修改伤害计算直接使用 HeroAttrsComp 属性而非 Attrs 映射 - 简化暴击、击退等判定逻辑,移除闪避和抗性计算 - 优化 reset 方法,设置合理的默认值并重置新增状态标志 - 添加状态变化时的调试日志输出
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user