dd
This commit is contained in:
41
assets/script/game/system/CombatSystem.ts
Normal file
41
assets/script/game/system/CombatSystem.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
@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
|
||||
});
|
||||
}
|
||||
}
|
||||
9
assets/script/game/system/CombatSystem.ts.meta
Normal file
9
assets/script/game/system/CombatSystem.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "477f2c7f-0408-46db-8101-08d5a7717bac",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
Reference in New Issue
Block a user