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

100% Statements 49/49
100% Branches 5/5
100% Functions 4/4
100% Lines 49/49

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 501x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 2x 2x 5x 5x 2x 12x 12x 12x 12x 12x 12x 12x 12x 12x 12x 12x 12x 12x 12x 2x 2x 5x  
import { DisplayInterface } from "../../display/index";
 
import { isAppearanceComponent, isPositionComponent, ComponentName } from "../components";
import { Entity } from "../entities";
import { System } from "./system";
 
export interface OffsetInterface {
    x: number;
    y: number;
}
 
export class DrawSystem extends System {
    protected display: DisplayInterface;
 
    protected offset: OffsetInterface;
 
    public constructor(
        entities: Map<string, Entity>,
        display: DisplayInterface,
        offset: OffsetInterface = { x: 0, y: 0 },
    ) {
        super(entities, [ComponentName.APPEARANCE, ComponentName.POSITION]);
        this.display = display;
        this.offset = offset;
    }
 
    public getOffset(): OffsetInterface {
        return this.offset;
    }
 
    public run(): void {
        return this.entities.forEach((entity): void => {
            const positionComponent = entity.getComponent(ComponentName.POSITION);
 
            const appeareanceComponent = entity.getComponent(ComponentName.APPEARANCE);
 
            if (isPositionComponent(positionComponent)) {
                const position = {
                    x: positionComponent.getPosition().x - this.offset.x,
                    y: positionComponent.getPosition().y - this.offset.y,
                };
 
                if (isAppearanceComponent(appeareanceComponent)) {
                    this.display.draw(position, appeareanceComponent.getGlyph());
                }
            }
        });
    }
}