CabinGame/Program/src/Systems/DoorSystem.ts

48 lines
1.6 KiB
TypeScript
Raw Normal View History

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;
}