Oliver level

This commit is contained in:
Ian Gulliver
2021-05-09 22:02:56 +00:00
parent 99aa50d5d3
commit 4651eeb335
9 changed files with 210 additions and 31 deletions

View File

@@ -16,6 +16,11 @@ export class Tile {
return new Tile(name, width, height, mask);
}
static from_mask(name: string, mask_string: string): Tile {
const mask = string_to_mask(mask_string);
return new Tile(name, mask.length, mask[0].length, mask);
}
get_mask(): boolean[][] {
return this.#mask;
}
@@ -29,3 +34,26 @@ export class Tile {
return elem;
}
}
function string_to_mask(mask_string: string): boolean[][] {
// mask_string: '\n+++\n+++\n'
const rows = mask_string.trim().split('\n');
// rows: ['+++', '+++']
const mask = [];
for (let x = 0; x < rows[0].length; x++) {
mask[x] = Array(rows.length);
}
// mask: [ [ empty, empty ], [ empty, empty ], [ empty, empty ] ]
for (let y = 0; y < rows.length; y++) {
const row = rows[y];
for (let x = 0; x < row.length; x++) {
const cell = row[x];
mask[x][y] = (cell.toUpperCase() == 'X');
}
}
return mask;
}

View File

@@ -17,7 +17,16 @@ export const ROAD_LTB = Tile.rectangle('road-ltb', 6, 8);
export const ROAD_RTB = Tile.rectangle('road-rtb', 6, 8);
// +
export const ROAD_TBLR = Tile.rectangle('road-tblr', 8, 8);
export const ROAD_TBLR = Tile.from_mask('road-tblr', `
.xxxxxx.
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxxx
.xxxxxx.
`);
// Tower base
export const EMPTY = Tile.rectangle('empty', 4, 2);

View File

@@ -4,24 +4,81 @@ import * as tiles from './tiles.js';
export function main() {
document.body.style.margin = '0';
document.body.style.backgroundColor = 'black';
document.body.style.display = 'flex';
document.body.style.justifyContent = 'center';
const container = document.createElement('div');
document.body.appendChild(container);
container.style.width = '100vmin';
container.style.height = '100vmin';
const mask = document.createElement('div');
document.body.appendChild(mask);
mask.style.width = 'min(100vw, 125vh)';
mask.style.height = 'calc(0.8 * min(100vw, 125vh))';
mask.style.overflow = 'hidden';
const grid = new Grid(container);
grid.set_size(40, 40);
const real = document.createElement('div');
mask.appendChild(real);
real.style.width = 'min(140vw, 175vh)';
real.style.height = 'calc(0.8 * min(140vw, 175vh))';
real.style.position = 'relative';
real.style.top = 'calc((-8 / 70) * min(140vw, 175vh))';
real.style.left = 'calc((-10 / 70) * min(140vw, 175vh))';
const grid = new Grid(real);
grid.set_size(70, 56);
grid.set_tileset('tropical');
grid.set_layers(['road', 'water', 'bridge']);
grid.add_tile('road', tiles.ROAD_LR, 0, 6);
grid.add_tile('road', tiles.ROAD_LR, 6, 6);
grid.add_tile('road', tiles.ROAD_LR, 12, 6);
grid.add_tile('water', tiles.RIVER_TB, 6, 0);
grid.add_tile('water', tiles.RIVER_TB, 6, 6);
grid.add_tile('water', tiles.RIVER_TB, 6, 12);
grid.add_tile('bridge', tiles.BRIDGE_LR, 5, 6);
grid.add_tile('road', tiles.ROAD_TB, 20, 46);
grid.add_tile('road', tiles.ROAD_BL, 18, 40);
grid.add_tile('road', tiles.ROAD_TR, 12, 38);
grid.add_tile('road', tiles.ROAD_BR, 12, 32);
grid.add_tile('road', tiles.ROAD_TL, 18, 30);
grid.add_tile('road', tiles.ROAD_BL, 18, 24);
grid.add_tile('road', tiles.ROAD_TR, 12, 22);
grid.add_tile('road', tiles.ROAD_BR, 12, 16);
grid.add_tile('road', tiles.ROAD_LR, 18, 16);
grid.add_tile('road', tiles.ROAD_TBLR, 24, 14);
grid.add_tile('road', tiles.ROAD_TB, 26, 2);
grid.add_tile('road', tiles.ROAD_TB, 26, 8);
grid.add_tile('road', tiles.ROAD_TB, 26, 22);
grid.add_tile('road', tiles.ROAD_TB, 26, 28);
grid.add_tile('road', tiles.ROAD_TB, 26, 34);
grid.add_tile('road', tiles.ROAD_TB, 26, 40);
grid.add_tile('road', tiles.ROAD_TB, 26, 46);
grid.add_tile('road', tiles.ROAD_BL, 32, 16);
grid.add_tile('road', tiles.ROAD_TB, 34, 22);
grid.add_tile('road', tiles.ROAD_TB, 34, 28);
grid.add_tile('road', tiles.ROAD_TB, 34, 34);
grid.add_tile('road', tiles.ROAD_TR, 34, 40);
grid.add_tile('road', tiles.ROAD_LR, 40, 42);
grid.add_tile('road', tiles.ROAD_LR, 46, 42);
grid.add_tile('road', tiles.ROAD_TL, 52, 40);
grid.add_tile('road', tiles.ROAD_BL, 52, 34);
grid.add_tile('road', tiles.ROAD_LR, 46, 34);
grid.add_tile('road', tiles.ROAD_TR, 40, 32);
grid.add_tile('road', tiles.ROAD_BR, 40, 26);
grid.add_tile('road', tiles.ROAD_LR, 46, 26);
grid.add_tile('road', tiles.ROAD_TL, 52, 24);
grid.add_tile('road', tiles.ROAD_BL, 52, 18);
grid.add_tile('road', tiles.ROAD_LR, 46, 18);
grid.add_tile('road', tiles.ROAD_TR, 40, 16);
grid.add_tile('road', tiles.ROAD_BR, 40, 10);
grid.add_tile('road', tiles.ROAD_LR, 46, 10);
grid.add_tile('road', tiles.ROAD_LR, 52, 10);
grid.add_tile('road', tiles.ROAD_LR, 58, 10);
grid.add_tile('water', tiles.RIVER_TB, 47, 46);
grid.add_tile('water', tiles.RIVER_TB, 47, 40);
grid.add_tile('water', tiles.RIVER_TB, 47, 34);
grid.add_tile('water', tiles.RIVER_TB, 47, 28);
grid.add_tile('water', tiles.RIVER_TB, 47, 22);
grid.add_tile('water', tiles.RIVER_TB, 47, 16);
grid.add_tile('water', tiles.RIVER_TB, 47, 10);
grid.add_tile('water', tiles.RIVER_TB, 47, 4);
grid.add_tile('bridge', tiles.BRIDGE_LR, 46, 42);
grid.add_tile('bridge', tiles.BRIDGE_LR, 46, 34);
grid.add_tile('bridge', tiles.BRIDGE_LR, 46, 26);
grid.add_tile('bridge', tiles.BRIDGE_LR, 46, 18);
grid.add_tile('bridge', tiles.BRIDGE_LR, 46, 10);
};
main();