Spaces:
Running
Running
import cell from '../cell/cell'; | |
import * as CONST from '../constants'; | |
import * as layers from './layers/'; | |
export default class map { | |
#scene; | |
grid = []; | |
cells = []; | |
list = []; | |
selectedCell = { x: 0, y: 0 }; | |
sprites = { all: [] }; | |
layers = []; | |
constructor (options) { | |
this.#scene = options.scene; | |
} | |
create () { | |
for (let i = 0; i < this.#scene.importedData.cells.length; i++) { | |
let c = new cell({ | |
scene: this.#scene, | |
data: this.#scene.importedData.cells[i], | |
index: i | |
}); | |
if (!this.cells[c.x]) this.cells[c.x] = []; | |
if (!this.cells[c.x][c.y]) this.cells[c.x][c.y] = []; | |
this.cells[c.x][c.y] = c; | |
this.list.push(this.cells[c.x][c.y]); | |
} | |
// create map cells | |
for (let x = 0; x < CONST.MAP_SIZE; x++) | |
for (let y = 0; y < CONST.MAP_SIZE; y++) | |
this.cells[x][y].create(); | |
// create layers | |
this.layers.terrain = new layers.terrain({ scene: this.#scene }); | |
this.layers.water = new layers.water({ scene: this.#scene }); | |
this.layers.edge = new layers.edge({ scene: this.#scene }); | |
this.layers.heightmap = new layers.heightmap({ scene: this.#scene }); | |
this.layers.zone = new layers.zone({ scene: this.#scene }); | |
this.layers.building = new layers.building({ scene: this.#scene }); | |
this.layers.road = new layers.road({ scene: this.#scene }); | |
this.layers.rail = new layers.rail({ scene: this.#scene }); | |
this.layers.power = new layers.power({ scene: this.#scene }); | |
this.layers.highway = new layers.highway({ scene: this.#scene }); | |
this.layers.subway = new layers.subway({ scene: this.#scene }); | |
this.layers.pipe = new layers.pipe({ scene: this.#scene }); | |
// do an initial object cull after rendering map | |
this.#scene.viewport.cullObjects(); | |
} | |
rotateCW () { | |
let cells = this.cells; | |
let tempCells = []; | |
for (let x = 0; x < CONST.MAP_SIZE; x++) { | |
for (let y = 0; y < CONST.MAP_SIZE; y++) { | |
if (!tempCells[x]) tempCells[x] = []; | |
if (!tempCells[x][y]) tempCells[x][y] = []; | |
let newX = y; | |
let newY = CONST.MAP_SIZE - x - 1; | |
tempCells[newX][newY] = cells[x][y]; | |
} | |
} | |
this.cells = tempCells; | |
} | |
rotateCCW () { | |
let cells = this.cells; | |
let tempCells = []; | |
for (let x = 0; x < CONST.MAP_SIZE; x++) { | |
for (let y = 0; y < CONST.MAP_SIZE; y++) { | |
if (!tempCells[x]) tempCells[x] = []; | |
if (!tempCells[x][y]) tempCells[x][y] = []; | |
let newX = CONST.MAP_SIZE - y - 1; | |
let newY = x; | |
tempCells[newX][newY] = cells[x][y]; | |
} | |
} | |
this.cells = tempCells; | |
} | |
update () { | |
} | |
shutdown () { | |
if (this.list.length > 0) | |
this.list.forEach((cell) => { | |
cell.shutdown(); | |
}); | |
if (this.sprites.all.length > 0) | |
this.sprites.all.forEach((sprite) => { | |
sprite.destroy(); | |
}); | |
} | |
addSprite (sprite, type) { | |
if (!this.sprites[type]) | |
this.sprites[type] = []; | |
this.sprites[type].push(sprite); | |
this.sprites.all.push(sprite); | |
} | |
} |