Files
pixelheros/assets/script/game/skill/SkillEffectSystem.ts
2025-01-31 21:50:59 +08:00

47 lines
1.4 KiB
TypeScript

@ecs.registerSystem()
export class SkillEffectSystem extends ecs.System {
filter(): ecs.IMatcher {
return ecs.allOf(SkillEffectComp, CollisionResultComp);
}
update(skills: ecs.Entity[]) {
skills.forEach(skill => {
const effect = skill.get(SkillEffectComp);
const targets = skill.get(CollisionResultComp).targets;
targets.forEach(hero => {
// 应用即时伤害
if (effect.effectType === 'instant') {
this.applyInstantDamage(hero, effect.damage);
}
// 应用持续效果
else if (effect.effectType === 'dot') {
this.applyDOT(hero, effect);
}
});
// 清除碰撞结果
skill.remove(CollisionResultComp);
});
}
private applyInstantDamage(hero: ecs.Entity, damage: number) {
const model = hero.get(HeroModelComp);
model.hp -= damage;
// 触发受击事件
oops.message.dispatch('HeroDamaged', {
hero,
damage,
currentHp: model.hp
});
}
private applyDOT(hero: ecs.Entity, effect: SkillEffectComp) {
// 添加持续伤害组件
hero.add(DOTComp, {
damagePerSec: effect.damage,
duration: effect.duration
});
}
}