All files / games/src/engine/systems damage.ts

100% Statements 31/31
100% Branches 3/3
100% Functions 2/2
100% Lines 31/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 321x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 4x 4x 4x 4x 4x 1x 1x 3x 3x 3x 3x 3x 3x 3x 2x 2x 3x 3x 1x  
import { isAttackComponent, isDamageableComponent, ComponentName } from "../components";
 
import { Actor, Entity } from "../entities";
import { World } from "../world";
import { System } from "./system";
 
export class DamageSystem extends System {
    private readonly attacker: Actor;
 
    private readonly target: Entity;
 
    public constructor(attacker: Actor, target: Entity) {
        super(new Map(), [ComponentName.DAMAGEABLE]);
 
        this.attacker = attacker;
        this.target = target;
    }
 
    public run(world: World): void {
        const attack = this.attacker.getComponent(ComponentName.ATTACK);
        const component = this.target.getComponent(ComponentName.DAMAGEABLE);
 
        if (isAttackComponent(attack) && isDamageableComponent(component)) {
            const remainingHitPoints = component.takeDamage(attack.getValue());
 
            if (remainingHitPoints <= 0) {
                world.removeEntity(this.target);
            }
        }
    }
}