2020-02-06 10:57:43 +00:00
|
|
|
import { System, Entity } from "ecsy"
|
|
|
|
|
import { Position } from "../Components/position";
|
|
|
|
|
import { Door } from "../Components/door";
|
|
|
|
|
import { SpriteRenderer } from "../Components/spriteRenderer";
|
2020-02-17 11:56:41 +00:00
|
|
|
import { IPoint, Texture } from "pixi.js";
|
2020-02-06 10:57:43 +00:00
|
|
|
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)
|
|
|
|
|
|
2020-02-17 11:56:41 +00:00
|
|
|
let doorOffset: IPoint = door.open ? door.openOffset : door.closedOffset
|
2020-02-06 10:57:43 +00:00
|
|
|
let doorTex: Texture = door.open ? door.openTex : door.closedTex
|
2020-02-17 11:56:41 +00:00
|
|
|
addOrSetComponent(entity, SpriteRenderer, <SpriteRenderer>{texture: doorTex, offset: doorOffset})
|
2020-02-06 10:57:43 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
|
|
this.queries.changedDoors.changed.forEach((entity: Entity) => {
|
|
|
|
|
let door = entity.getComponent(Door)
|
|
|
|
|
let renderer = entity.getMutableComponent(SpriteRenderer)
|
|
|
|
|
|
2020-02-17 11:56:41 +00:00
|
|
|
renderer.offset = door.open ? door.openOffset : door.closedOffset
|
|
|
|
|
renderer.texture = door.open ? door.openTex : door.closedTex
|
2020-02-06 10:57:43 +00:00
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static queries = {
|
|
|
|
|
newDoors: {
|
|
|
|
|
components: [ Door ],
|
|
|
|
|
listen: {
|
|
|
|
|
added: true,
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
changedDoors: {
|
|
|
|
|
components: [ Door, Position, SpriteRenderer ],
|
|
|
|
|
listen: {
|
|
|
|
|
changed: [ Door ],
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
queries: any;
|
|
|
|
|
}
|