refactor(hero): 统一击退位移逻辑到MoveSystem

将英雄后退的视图层位移操作迁移到MoveSystem统一处理,
通过knockbackVelocity组件属性实现平滑的击退位移衰减与边界钳制,
移除HeroViewComp中直接操作节点位置的代码,解耦视图与战斗逻辑。
This commit is contained in:
pan
2026-08-14 09:53:05 +08:00
parent df0dedba75
commit 1988ae5ef1
3 changed files with 30 additions and 22 deletions

View File

@@ -17,6 +17,7 @@ import { mLogger } from "../common/Logger";
import { SkillTriggerHelper } from "./SkillTriggerHelper";
import { getMonsterGoldDrop } from "../map/RogueConfig";
import { MissionEconomy } from "../map/MissionEconomy";
import { MoveComp } from "./MoveComp";
/** 最终伤害数据接口
* 用于封装一次攻击计算的所有结果数据
@@ -194,6 +195,17 @@ export class HeroAtkSystem extends ecs.ComblockSystem implements ecs.ISystemUpda
if (targetView) {
targetView.do_atked(damage, isCrit, damageEvent.s_uuid, knockbackExtra);
targetView.playEnd(skillConf.endAnm);
// 击退位移下沉到 MoveSystem直接写入 knockbackVelocity由 MoveSystem 每帧衰减并叠加位移
const moveComp = target.get(MoveComp);
if (moveComp) {
const dist = FightSet.BACK_RANG + knockbackExtra;
const isHero = TAttrsComp.fac === FacSet.HERO;
// 击退初速度0.1 秒时间常数衰减,总位移约等于 dist
const knockbackSpeed = dist * 16;
moveComp.knockbackVelocity = isHero ? -knockbackSpeed : knockbackSpeed;
}
if (isFrost) {
TAttrsComp.toFrost();
targetView.in_iced(FightSet.FROST_TIME);