Files
tower/ts/layered_tile_factory.ts

43 lines
1.2 KiB
TypeScript
Raw Normal View History

2021-05-11 02:21:23 +00:00
import { AnimateDetail, TileFactory } from './tile_factory.js';
2021-05-10 05:20:29 +00:00
2021-05-11 02:21:23 +00:00
export class LayeredTileFactory extends TileFactory {
tiles: TileFactory[];
2021-05-10 05:20:29 +00:00
2021-05-11 02:21:23 +00:00
constructor(tiles: TileFactory[]) {
2021-05-10 05:20:29 +00:00
super('', tiles[0].width, tiles[0].height);
this.tiles = tiles;
}
get_elem(tileset: string): HTMLElement {
const elem = document.createElement('div');
elem.style.gridColumnEnd = `span ${this.width}`;
elem.style.gridRowEnd = `span ${this.height}`;
elem.style.position = 'relative';
for (let i = 0; i < this.tiles.length; i++) {
const tile = this.tiles[i];
const sub = tile.get_elem(tileset);
elem.appendChild(sub);
sub.style.width = '100%';
sub.style.height = '100%';
sub.style.position = 'absolute';
sub.style.top = '0';
sub.style.left = '0';
sub.style.zIndex = `${i}`;
}
elem.addEventListener('animate', (e: CustomEvent<AnimateDetail>) => {
for (const sub of elem.children) {
sub.dispatchEvent(new CustomEvent('animate', {'detail': e.detail}));
}
});
// XXX removeme
setInterval(() => {
elem.dispatchEvent(new CustomEvent('animate', {'detail': {'name': 'fire'}}));
}, 3250);
return elem;
}
}