Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 1x 1x 1x 1x 1x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 22x 10x 10x 22x 22x 13x 13x 13x 9x 9x 13x 22x 22x 22x 3x 3x 22x 22x 9x 9x 22x 22x 9x 9x 22x 22x 21x 1x 1x 20x 20x 20x 22x 22x 3x 2x 2x 3x 22x 22x 21x 21x 22x | import { FloorTile, TileFactory, TileInterface } from "../tiles/index";
import { MapGeneratorInterface, MapParamsInterface, PositionInterface } from "./interfaces";
export class GameMap {
private readonly generator?: MapGeneratorInterface;
private readonly height: number;
private readonly tiles: TileInterface[][];
private readonly width: number;
private readonly tileFactory: TileFactory;
public constructor(params: MapParamsInterface) {
this.width = params.width;
this.height = params.height;
this.tiles = [];
this.tileFactory = params.tileFactory;
if (params.tiles != null) {
this.tiles = params.tiles;
}
if (this.tiles.length === 0) {
this.generator = params.generator;
if (this.generator != null) {
this.tiles = this.generator.generate();
}
}
}
public getTiles(): TileInterface[][] {
return this.tiles;
}
public getWidth(): number {
return this.width;
}
public getHeight(): number {
return this.height;
}
public getTile(position: PositionInterface): TileInterface {
if (this.isTileOutOfBounds(position.x, position.y) === true || this.tiles[position.x][position.y] == null) {
return this.tileFactory.create("null");
}
return this.tiles[position.x][position.y];
}
public dig(position: PositionInterface): void {
if (this.getTile(position).isDiggable) {
this.tiles[position.x][position.y] = new FloorTile();
}
}
protected isTileOutOfBounds(x: number, y: number): boolean {
return x < 0 || x >= this.width || y < 0 || y >= this.height;
}
}
|