diff options
Diffstat (limited to 'src/renderer/runtime/view/map.ts')
-rw-r--r-- | src/renderer/runtime/view/map.ts | 111 |
1 files changed, 55 insertions, 56 deletions
diff --git a/src/renderer/runtime/view/map.ts b/src/renderer/runtime/view/map.ts index 18def05..90d0c52 100644 --- a/src/renderer/runtime/view/map.ts +++ b/src/renderer/runtime/view/map.ts @@ -34,20 +34,20 @@ interface Tileset { async function loadTile(r: Renderer, tile: string): Promise<MapTile> { const name = tile.substr(1); switch (tile[0]) { - case '-': - return { - type: 'static', - image: await loadImage(`resources/sprite/tile/${name}.png`), - }; - - case '@': - return { - type: 'entity', - entity: await EntityView.load(r, name), - }; - - default: - throw new Error('invalid tile specifier'); + case '-': + return { + type: 'static', + image: await loadImage(`resources/sprite/tile/${name}.png`), + }; + + case '@': + return { + type: 'entity', + entity: await EntityView.load(r, name), + }; + + default: + throw new Error('invalid tile specifier'); } } @@ -55,10 +55,7 @@ function loadTiles(r: Renderer, tiles: string[]): Promise<MapTile[]> { return Promise.all(tiles.map((tile) => loadTile(r, tile))); } -function mkTileset( - r: Renderer, - mapTiles: MapTile[], -): Tileset { +function mkTileset(r: Renderer, mapTiles: MapTile[]): Tileset { const tileSize = 32; const canvasDim = nextPowerOf2(Math.sqrt(mapTiles.length)); @@ -67,29 +64,35 @@ function mkTileset( const canvas = document.createElement('canvas'); canvas.width = canvas.height = canvasSize; - let x = 0, y = 0; + let x = 0; + let y = 0; const tiles: TilesetTile[] = []; const ctx = canvas.getContext('2d') as CanvasRenderingContext2D; for (const tile of mapTiles) { switch (tile.type) { - case 'static': - ctx.drawImage(tile.image, x * tileSize, y * tileSize); - tiles.push({ - type: 'static', - coords: [x / canvasDim, y / canvasDim, (x + 1) / canvasDim, (y + 1) / canvasDim], - }); - - x++; - if (x === canvasDim) { - x = 0; - y++; - } - break; - - case 'entity': - tiles.push(tile); - break; + case 'static': + ctx.drawImage(tile.image, x * tileSize, y * tileSize); + tiles.push({ + type: 'static', + coords: [ + x / canvasDim, + y / canvasDim, + (x + 1) / canvasDim, + (y + 1) / canvasDim, + ], + }); + + x++; + if (x === canvasDim) { + x = 0; + y++; + } + break; + + case 'entity': + tiles.push(tile); + break; } } @@ -107,9 +110,9 @@ function addSprite( tileset: Tileset, x: number, y: number, - tile: number) { - if (!tile) - return; + tile: number, +): void { + if (!tile) return; const tilesetTile = tileset.tiles[tile - 1]; @@ -124,24 +127,12 @@ function addSprite( } } -function buildMapLayer(r: Renderer, tileset: Tileset, layer: number[][]): MapLayerView { - const builder = new SpriteViewBuilder(r, tileset.texture); - const entityTiles: Array<[[number, number], EntityView]> = []; - - for (let x = 0; x < layer[0].length; x++) - for (let y = 0; y < layer.length; y++) - addSprite(builder, entityTiles, tileset, x, y, layer[y][x]); - - return new MapLayerView(r, builder.build(), entityTiles); -} - class MapLayerView { public constructor( private r: Renderer, private staticTiles: SpriteView, private entityTiles: Array<[[number, number], EntityView]>, - ) { - } + ) {} public render(time: number): void { this.r.setTranslation([0, 0]); @@ -154,6 +145,16 @@ class MapLayerView { } } +function buildMapLayer(r: Renderer, tileset: Tileset, layer: number[][]): MapLayerView { + const builder = new SpriteViewBuilder(r, tileset.texture); + const entityTiles: Array<[[number, number], EntityView]> = []; + + for (let x = 0; x < layer[0].length; x++) + for (let y = 0; y < layer.length; y++) addSprite(builder, entityTiles, tileset, x, y, layer[y][x]); + + return new MapLayerView(r, builder.build(), entityTiles); +} + export class MapView { public static async load(r: Renderer, map: MapData): Promise<MapView> { const tiles = await loadTiles(r, map.tiles); @@ -163,11 +164,9 @@ export class MapView { return new MapView(layers); } - private constructor(private layers: MapLayerView[]) { - } + private constructor(private layers: MapLayerView[]) {} public render(time: number): void { - for (const layer of this.layers) - layer.render(time); + for (const layer of this.layers) layer.render(time); } } |