Files
pixelheros/assets/script/game/system/CombatSystem.ts
walkpan bffbb9077e dd
2025-02-01 00:14:25 +08:00

41 lines
1.2 KiB
TypeScript

@ecs.registerSystem()
export class CombatSystem extends ecs.System {
filter(): ecs.IMatcher {
return ecs.allOf(Combat, HeroModel);
}
update(entities: ecs.Entity[]) {
entities.forEach(attacker => {
if (attacker.has(HeroModel)) {
this.processHeroAttack(attacker);
}
});
}
private processHeroAttack(attacker: ecs.Entity) {
const combat = attacker.get(Combat);
const model = attacker.get(HeroModel);
if (combat.target && model.hp > 0) {
// 攻击逻辑
combat.attackTimer += this.dt;
if (combat.attackTimer >= combat.attackInterval) {
this.executeAttack(attacker, combat.target);
combat.attackTimer = 0;
}
}
}
private executeAttack(attacker: ecs.Entity, target: ecs.Entity) {
// 伤害计算逻辑
const attack = attacker.get(HeroModel).attack;
const defense = target.get(HeroModel).defense;
const damage = Math.max(attack - defense, 1);
oops.message.dispatch('CombatEvent', {
attacker,
target,
damage
});
}
}