import { System, Entity } from "ecsy" import { Position } from "../Components/position"; import { Door } from "../Components/door"; import { SpriteRenderer } from "../Components/spriteRenderer"; import { IPoint, Texture, Sprite } from "pixi.js"; import { addOrSetComponent } from "../util"; // MovableSystem export class DoorSystem extends System { // This method will get called on every frame by default execute(delta : number) { // Iterate through all the entities on the query this.queries.newDoors.added.forEach((entity: Entity) => { let door = entity.getComponent(Door) let doorPos: IPoint = door.open ? door.openPosition : door.closedPosition addOrSetComponent(entity, Position, {value: doorPos}) let doorTex: Texture = door.open ? door.openTex : door.closedTex addOrSetComponent(entity, SpriteRenderer, {sprite: new Sprite(doorTex)}) }) this.queries.changedDoors.changed.forEach((entity: Entity) => { let door = entity.getComponent(Door) let pos = entity.getMutableComponent(Position) let renderer = entity.getMutableComponent(SpriteRenderer) pos.value = door.open ? door.openPosition : door.closedPosition renderer.sprite.texture = door.open ? door.openTex : door.closedTex }) } static queries = { newDoors: { components: [ Door ], listen: { added: true, } }, changedDoors: { components: [ Door, Position, SpriteRenderer ], listen: { changed: [ Door ], } } } queries: any; }