import MapState from '../model/state/MapState'; import { TileMap } from './MapLoader'; import Renderer from './renderer/Renderer'; import { TileView, TileViewBuilder } from './tile'; export default class MapView { private static addTile(builder: TileViewBuilder, tileMap: TileMap, x: number, y: number, tile: string) { if (tile === ' ') return; const tilePos = tileMap.tiles.get(tile); if (!tilePos) throw new Error('invalid tile specifier in map data'); builder.addTile([x, y, x + 1, y + 1], tilePos); } private readonly tileView: TileView; constructor( r: Renderer, map: MapState, tileMap: TileMap, ) { const builder = new TileViewBuilder(r, tileMap.texture); for (let x = 0; x < map.data.width; x++) for (let y = 0; y < map.data.height; y++) for (const layer of map.data.layers) MapView.addTile(builder, tileMap, x, y, layer[y][x]); this.tileView = builder.build(); } public render(): void { this.tileView.render(); } }