@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 }); } }