summaryrefslogtreecommitdiffstats
path: root/src/renderer/runtime/view/map.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/runtime/view/map.ts')
-rw-r--r--src/renderer/runtime/view/map.ts111
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);
}
}