Proper bridge mask

This commit is contained in:
Ian Gulliver
2021-05-17 04:30:38 +00:00
parent 9d681291cc
commit 7e2dad422a
9 changed files with 103 additions and 4 deletions

42
ts/mask.ts Normal file
View File

@@ -0,0 +1,42 @@
export class Mask {
mask: boolean[][] = [];
constructor(width: number, height: number) {
for (let x = 0; x < width; x++) {
this.mask.push(Array(height).fill(false));
}
}
static from_string(mask_string: string): Mask {
// mask_string: '\n+++\n+++\n'
const rows = mask_string.trim().split('\n');
// rows: ['+++', '+++']
const mask = new Mask(rows[0].length, rows.length);
for (let y = 0; y < rows.length; y++) {
const row = rows[y];
for (let x = 0; x < row.length; x++) {
const cell = row[x].toLowerCase();
if (cell == '+' || cell == 'x') {
mask.set(x, y, true);
}
}
}
return mask;
}
set(x: number, y: number, val: boolean) {
this.mask[x][y] = val;
}
update(x: number, y: number, src: Mask) {
for (let xi = 0; xi < src.mask.length; xi++) {
const col = src.mask[xi];
for (let yi = 0; yi < col.length; yi++) {
this.set(x + xi, y + yi, col[yi]);
}
}
}
}

View File

@@ -143,6 +143,16 @@ export const RIVER_TR = new SimpleTileFactory('water', 12, 12, '{tileset}/river-
export const RIVER_TL = new SimpleTileFactory('water', 12, 12, '{tileset}/river-tl.svg');
export const BRIDGE_LR = new SimpleTileFactory('bridge', 12, 8, '{tileset}/bridge-lr.svg');
BRIDGE_LR.add_mask('walkable', Mask.from_string(`
............
...XXXXXX...
XXXXXXXXXXXX
XXXXXXXXXXXX
XXXXXXXXXXXX
XXX......XXX
............
............
`));
const tower_fireball1_back = new SimpleTileFactory('surface', 8, 8, 'tower/fireball1-back.svg');
const tower_fireball1 = new SimpleTileFactory('surface', 8, 8, 'tower/fireball1.svg');

View File

@@ -114,7 +114,7 @@ export function main() {
tower.play('fire');
const target_relative_x = rand(-40, 40);
const target_relative_y = rand(-20, 40);
const factory = new ProjectileTileFactory(tiles.FIREBALL, target_relative_x, target_relative_y, 5, 1.5, 5);
const factory = new ProjectileTileFactory(tiles.FIREBALL, target_relative_x, target_relative_y, 5, 3, 10);
grid.add_tile(factory, 62, 54);
setTimeout(() => {
grid.add_tile(tiles.FIREBALL_IMPACT, 62 + target_relative_x, 54 + target_relative_y);