使用ecs系统进行重构

This commit is contained in:
walkpan
2025-01-31 21:50:59 +08:00
parent 6ea3e9504d
commit c5c01c6cf4
18 changed files with 491 additions and 44 deletions

View File

@@ -0,0 +1,47 @@
@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
});
}
}