Files
tower/js/grid.js

47 lines
1.5 KiB
JavaScript
Raw Normal View History

2021-05-09 04:58:29 +00:00
import { Layer } from './layer.js';
export class Grid {
constructor(prnt) {
2021-05-11 03:41:01 +00:00
this.layers = new Map();
this.prnt = prnt;
this.prnt.style.display = 'grid';
2021-05-09 04:58:29 +00:00
}
set_size(x, y) {
2021-05-11 03:41:01 +00:00
this.height = y;
this.prnt.style.gridTemplateColumns = `repeat(${x}, 1fr)`;
this.prnt.style.gridTemplateRows = `repeat(${y}, 1fr)`;
2021-05-09 04:58:29 +00:00
}
set_tileset(set) {
2021-05-11 03:41:01 +00:00
this.tileset = set;
this.prnt.style.backgroundImage = `url("images/${this.tileset}/land.svg")`;
2021-05-09 04:58:29 +00:00
// TODO: Notify layers
}
set_layers(layers) {
const newNames = new Set(layers);
for (const name of newNames) {
2021-05-11 03:41:01 +00:00
if (!this.layers.has(name)) {
const layer = new Layer();
2021-05-11 03:41:01 +00:00
layer.set_tileset(this.tileset);
this.layers.set(name, layer);
2021-05-09 04:58:29 +00:00
}
}
2021-05-11 03:41:01 +00:00
for (const name of this.layers.keys()) {
2021-05-09 04:58:29 +00:00
if (!newNames.has(name)) {
// TODO: Notify layer to tear down
2021-05-11 03:41:01 +00:00
this.layers.delete(name);
2021-05-09 04:58:29 +00:00
}
}
for (let i = 0; i < layers.length; i++) {
2021-05-11 03:41:01 +00:00
const layer = this.layers.get(layers[i]);
layer.set_level(i * this.height);
2021-05-09 04:58:29 +00:00
}
}
add_tile(tile_factory, x, y) {
2021-05-11 03:41:01 +00:00
const tile = this.layers.get(tile_factory.layer_name).add_tile(tile_factory, y);
2021-05-09 04:58:29 +00:00
// Grids are 1-indexed
tile.elem.style.gridColumnStart = `${x + 1}`;
tile.elem.style.gridRowStart = `${y + 1}`;
2021-05-11 03:41:01 +00:00
this.prnt.appendChild(tile.elem);
2021-05-11 03:12:32 +00:00
return tile;
2021-05-09 04:58:29 +00:00
}
}
//# sourceMappingURL=grid.js.map