import { System, Entity } from "ecsy" import { Position } from "../Components/position"; import { Door } from "../Components/door"; import { SpriteRenderer } from "../Components/spriteRenderer"; import { IPoint, Texture } 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 doorOffset: IPoint = door.open ? door.openOffset : door.closedOffset let doorTex: Texture = door.open ? door.openTex : door.closedTex addOrSetComponent(entity, SpriteRenderer, {texture: doorTex, offset: doorOffset}) }) this.queries.changedDoors.changed.forEach((entity: Entity) => { let door = entity.getComponent(Door) let renderer = entity.getMutableComponent(SpriteRenderer) renderer.offset = door.open ? door.openOffset : door.closedOffset renderer.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; }