From 0ff24fe8061656cc6e2de2c741622614d31d36c2 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Tue, 11 May 2021 02:57:17 +0000 Subject: [PATCH] Tower class hierarchy --- js/layer.js | 2 +- js/layer.js.map | 2 +- js/layered_tile.js | 19 ++++ js/layered_tile.js.map | 1 + js/layered_tile_factory.js | 37 ++----- js/layered_tile_factory.js.map | 2 +- js/simple_tile.js | 10 ++ js/simple_tile.js.map | 1 + js/simple_tile_factory.js | 40 ++++++++ js/simple_tile_factory.js.map | 1 + js/tile.js | 11 ++ js/tile.js.map | 1 + js/tile_factory.js | 45 +-------- js/tile_factory.js.map | 2 +- js/tiles.js | 177 +++++++++++++++++---------------- js/tiles.js.map | 2 +- js/tower.js | 1 - js/tower.js.map | 2 +- ts/layer.ts | 2 +- ts/layered_tile.ts | 23 +++++ ts/layered_tile_factory.ts | 43 ++------ ts/simple_tile.ts | 15 +++ ts/simple_tile_factory.ts | 51 ++++++++++ ts/tile.ts | 13 +++ ts/tile_factory.ts | 59 +---------- ts/tiles.ts | 56 ++++++----- ts/tower.ts | 1 - tsconfig.json | 6 +- 28 files changed, 346 insertions(+), 279 deletions(-) create mode 100644 js/layered_tile.js create mode 100644 js/layered_tile.js.map create mode 100644 js/simple_tile.js create mode 100644 js/simple_tile.js.map create mode 100644 js/simple_tile_factory.js create mode 100644 js/simple_tile_factory.js.map create mode 100644 js/tile.js create mode 100644 js/tile.js.map create mode 100644 ts/layered_tile.ts create mode 100644 ts/simple_tile.ts create mode 100644 ts/simple_tile_factory.ts create mode 100644 ts/tile.ts diff --git a/js/layer.js b/js/layer.js index c7e62c4..a4fb052 100644 --- a/js/layer.js +++ b/js/layer.js @@ -24,7 +24,7 @@ export class Layer { __classPrivateFieldSet(this, _tileset, tileset); } add_tile(tile_factory) { - const elem = tile_factory.get_elem(__classPrivateFieldGet(this, _tileset)); + const elem = tile_factory.build(__classPrivateFieldGet(this, _tileset)).get_elem(); elem.style.zIndex = `${__classPrivateFieldGet(this, _level)}`; return elem; } diff --git a/js/layer.js.map b/js/layer.js.map index 8325f97..2541295 100644 --- a/js/layer.js.map +++ b/js/layer.js.map @@ -1 +1 @@ -{"version":3,"file":"layer.js","sourceRoot":"","sources":["../ts/layer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,MAAM,OAAO,KAAK;IAAlB;QACE,yBAAe;QACf,2BAAiB;IAenB,CAAC;IAbC,SAAS,CAAC,KAAa;QACrB,uBAAA,IAAI,UAAU,KAAK,EAAC;IACtB,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,uBAAA,IAAI,YAAY,OAAO,EAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,YAAyB;QAChC,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,wCAAe,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,oCAAW,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"layer.js","sourceRoot":"","sources":["../ts/layer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,MAAM,OAAO,KAAK;IAAlB;QACE,yBAAe;QACf,2BAAiB;IAenB,CAAC;IAbC,SAAS,CAAC,KAAa;QACrB,uBAAA,IAAI,UAAU,KAAK,EAAC;IACtB,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,uBAAA,IAAI,YAAY,OAAO,EAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,YAAyB;QAChC,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,wCAAe,CAAC,QAAQ,EAAE,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,oCAAW,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} \ No newline at end of file diff --git a/js/layered_tile.js b/js/layered_tile.js new file mode 100644 index 0000000..d84abfc --- /dev/null +++ b/js/layered_tile.js @@ -0,0 +1,19 @@ +import { Tile } from './tile.js'; +export class LayeredTile extends Tile { + constructor(width, height, tiles) { + super(width, height); + this.elem.style.position = 'relative'; + for (let i = 0; i < tiles.length; i++) { + const tile = tiles[i]; + const sub = tile.get_elem(); + this.elem.appendChild(sub); + sub.style.width = '100%'; + sub.style.height = '100%'; + sub.style.position = 'absolute'; + sub.style.top = '0'; + sub.style.left = '0'; + sub.style.zIndex = `${i}`; + } + } +} +//# sourceMappingURL=layered_tile.js.map \ No newline at end of file diff --git a/js/layered_tile.js.map b/js/layered_tile.js.map new file mode 100644 index 0000000..09649b1 --- /dev/null +++ b/js/layered_tile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"layered_tile.js","sourceRoot":"","sources":["../ts/layered_tile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,WAAY,SAAQ,IAAI;IAGnC,YAAY,KAAa,EAAE,MAAc,EAAE,KAAa;QACtD,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC3B,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;YACzB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC1B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YAChC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;YACpB,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;YACrB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;SAC3B;IACH,CAAC;CACF"} \ No newline at end of file diff --git a/js/layered_tile_factory.js b/js/layered_tile_factory.js index 1eaa660..00fd3ed 100644 --- a/js/layered_tile_factory.js +++ b/js/layered_tile_factory.js @@ -1,35 +1,16 @@ +import { LayeredTile } from './layered_tile.js'; import { TileFactory } from './tile_factory.js'; export class LayeredTileFactory extends TileFactory { - constructor(tiles) { - super('', tiles[0].width, tiles[0].height); - this.tiles = tiles; + constructor(tile_factories) { + super(tile_factories[0].width, tile_factories[0].height); + this.tile_factories = tile_factories; } - get_elem(tileset) { - const elem = document.createElement('div'); - elem.style.gridColumnEnd = `span ${this.width}`; - elem.style.gridRowEnd = `span ${this.height}`; - elem.style.position = 'relative'; - for (let i = 0; i < this.tiles.length; i++) { - const tile = this.tiles[i]; - const sub = tile.get_elem(tileset); - elem.appendChild(sub); - sub.style.width = '100%'; - sub.style.height = '100%'; - sub.style.position = 'absolute'; - sub.style.top = '0'; - sub.style.left = '0'; - sub.style.zIndex = `${i}`; + build(tileset) { + const tiles = []; + for (const tile_factory of this.tile_factories) { + tiles.push(tile_factory.build(tileset)); } - elem.addEventListener('animate', (e) => { - for (const sub of elem.children) { - sub.dispatchEvent(new CustomEvent('animate', { 'detail': e.detail })); - } - }); - // XXX removeme - setInterval(() => { - elem.dispatchEvent(new CustomEvent('animate', { 'detail': { 'name': 'fire' } })); - }, 3250); - return elem; + return new LayeredTile(this.width, this.height, tiles); } } //# sourceMappingURL=layered_tile_factory.js.map \ No newline at end of file diff --git a/js/layered_tile_factory.js.map b/js/layered_tile_factory.js.map index b2c21e9..e618fd6 100644 --- a/js/layered_tile_factory.js.map +++ b/js/layered_tile_factory.js.map @@ -1 +1 @@ -{"version":3,"file":"layered_tile_factory.js","sourceRoot":"","sources":["../ts/layered_tile_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAGjD,YAAY,KAAoB;QAC9B,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,QAAQ,CAAC,OAAe;QACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtB,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;YACzB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAC1B,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YAChC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;YACpB,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;YACrB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;SAC3B;QAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAA6B,EAAE,EAAE;YACjE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAC/B,GAAG,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC;aACrE;QACH,CAAC,CAAC,CAAC;QAEH,eAAe;QACf,WAAW,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,EAAC,MAAM,EAAE,MAAM,EAAC,EAAC,CAAC,CAAC,CAAC;QAC/E,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"layered_tile_factory.js","sourceRoot":"","sources":["../ts/layered_tile_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAGjD,YAAY,cAA6B;QACvC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE;YAC9C,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;SACzC;QAED,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;CACF"} \ No newline at end of file diff --git a/js/simple_tile.js b/js/simple_tile.js new file mode 100644 index 0000000..241e093 --- /dev/null +++ b/js/simple_tile.js @@ -0,0 +1,10 @@ +import { Tile } from './tile.js'; +export class SimpleTile extends Tile { + constructor(width, height, image_url, animations) { + super(width, height); + this.elem.style.backgroundImage = `url('${encodeURIComponent(image_url)}')`; + this.elem.style.backgroundSize = 'cover'; + this.animations = animations; + } +} +//# sourceMappingURL=simple_tile.js.map \ No newline at end of file diff --git a/js/simple_tile.js.map b/js/simple_tile.js.map new file mode 100644 index 0000000..85cbaf5 --- /dev/null +++ b/js/simple_tile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"simple_tile.js","sourceRoot":"","sources":["../ts/simple_tile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,UAAW,SAAQ,IAAI;IAGlC,YAAY,KAAa,EAAE,MAAc,EAAE,SAAiB,EAAE,UAA6C;QACzG,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,QAAQ,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC;QAC5E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;QAEzC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF"} \ No newline at end of file diff --git a/js/simple_tile_factory.js b/js/simple_tile_factory.js new file mode 100644 index 0000000..957d4c3 --- /dev/null +++ b/js/simple_tile_factory.js @@ -0,0 +1,40 @@ +import { SimpleTile } from './simple_tile.js'; +import { TileFactory } from './tile_factory.js'; +export class SimpleTileFactory extends TileFactory { + constructor(width, height, name) { + super(width, height); + this.name = name; + this.animations = new Map(); + } + add_animation(name, keyframes, options) { + this.animations.set(name, [keyframes, options]); + } + build(tileset) { + return new SimpleTile(this.width, this.height, `images/${tileset}/${this.name}.svg`, this.animations); + } +} +/* +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; +} +*/ +//# sourceMappingURL=simple_tile_factory.js.map \ No newline at end of file diff --git a/js/simple_tile_factory.js.map b/js/simple_tile_factory.js.map new file mode 100644 index 0000000..0df0777 --- /dev/null +++ b/js/simple_tile_factory.js.map @@ -0,0 +1 @@ +{"version":3,"file":"simple_tile_factory.js","sourceRoot":"","sources":["../ts/simple_tile_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IAIhD,YAAY,KAAa,EAAE,MAAc,EAAE,IAAY;QACrD,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,SAAqB,EAAE,OAAe;QAChE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,IAAI,UAAU,CACnB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,UAAU,OAAO,IAAI,IAAI,CAAC,IAAI,MAAM,EACpC,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;EAuBE"} \ No newline at end of file diff --git a/js/tile.js b/js/tile.js new file mode 100644 index 0000000..5dab159 --- /dev/null +++ b/js/tile.js @@ -0,0 +1,11 @@ +export class Tile { + constructor(width, height) { + this.elem = document.createElement('div'); + this.elem.style.gridColumnEnd = `span ${width}`; + this.elem.style.gridRowEnd = `span ${height}`; + } + get_elem() { + return this.elem; + } +} +//# sourceMappingURL=tile.js.map \ No newline at end of file diff --git a/js/tile.js.map b/js/tile.js.map new file mode 100644 index 0000000..71bbd8e --- /dev/null +++ b/js/tile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tile.js","sourceRoot":"","sources":["../ts/tile.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,IAAI;IAGxB,YAAY,KAAa,EAAE,MAAc;QACvC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,KAAK,EAAE,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,MAAM,EAAE,CAAC;IAChD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF"} \ No newline at end of file diff --git a/js/tile_factory.js b/js/tile_factory.js index 8cbc27e..a01d54a 100644 --- a/js/tile_factory.js +++ b/js/tile_factory.js @@ -1,50 +1,7 @@ export class TileFactory { - constructor(name, width, height) { - this.name = name; + constructor(width, height) { this.width = width; this.height = height; - this.animations = new Map(); - } - add_animation(name, keyframes, options) { - this.animations.set(name, [keyframes, options]); - } - get_elem(tileset) { - const elem = document.createElement('div'); - elem.style.backgroundImage = `url("images/${tileset}/${this.name}.svg")`; - elem.style.backgroundSize = 'cover'; - elem.style.gridColumnEnd = `span ${this.width}`; - elem.style.gridRowEnd = `span ${this.height}`; - elem.addEventListener('animate', (e) => { - const animation = this.animations.get(e.detail.name); - if (animation) { - elem.animate(animation[0], animation[1]); - } - }); - 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; -} -*/ //# sourceMappingURL=tile_factory.js.map \ No newline at end of file diff --git a/js/tile_factory.js.map b/js/tile_factory.js.map index 4c94ebd..e0f46d4 100644 --- a/js/tile_factory.js.map +++ b/js/tile_factory.js.map @@ -1 +1 @@ -{"version":3,"file":"tile_factory.js","sourceRoot":"","sources":["../ts/tile_factory.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,WAAW;IAMtB,YAAY,IAAY,EAAE,KAAa,EAAE,MAAc;QACrD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,SAAqB,EAAE,OAAe;QAChE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,QAAQ,CAAC,OAAe;QACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,OAAO,IAAI,IAAI,CAAC,IAAI,QAAQ,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QAE9C,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAA6B,EAAE,EAAE;YACjE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1C;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;EAuBE"} \ No newline at end of file +{"version":3,"file":"tile_factory.js","sourceRoot":"","sources":["../ts/tile_factory.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,WAAW;IAI/B,YAAY,KAAa,EAAE,MAAc;QACvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CAGF"} \ No newline at end of file diff --git a/js/tiles.js b/js/tiles.js index 24d3d2a..5708701 100644 --- a/js/tiles.js +++ b/js/tiles.js @@ -1,36 +1,36 @@ import { LayeredTileFactory } from './layered_tile_factory.js'; -import { TileFactory } from './tile_factory.js'; -// Straight -export const ROAD_LR = new TileFactory('road-lr', 6, 4); -export const ROAD_TB = new TileFactory('road-tb', 4, 6); +import { SimpleTileFactory } from './simple_tile_factory.js'; +// Straig +export const ROAD_LR = new SimpleTileFactory(6, 4, 'road-lr'); +export const ROAD_TB = new SimpleTileFactory(4, 6, 'road-tb'); // Elbow -export const ROAD_BL = new TileFactory('road-bl', 6, 6); -export const ROAD_BR = new TileFactory('road-br', 6, 6); -export const ROAD_TL = new TileFactory('road-tl', 6, 6); -export const ROAD_TR = new TileFactory('road-tr', 6, 6); +export const ROAD_BL = new SimpleTileFactory(6, 6, 'road-bl'); +export const ROAD_BR = new SimpleTileFactory(6, 6, 'road-br'); +export const ROAD_TL = new SimpleTileFactory(6, 6, 'road-tl'); +export const ROAD_TR = new SimpleTileFactory(6, 6, 'road-tr'); // T -export const ROAD_BLR = new TileFactory('road-blr', 8, 6); -export const ROAD_TLR = new TileFactory('road-tlr', 8, 6); -export const ROAD_LTB = new TileFactory('road-ltb', 6, 8); -export const ROAD_RTB = new TileFactory('road-rtb', 6, 8); +export const ROAD_BLR = new SimpleTileFactory(8, 6, 'road-blr'); +export const ROAD_TLR = new SimpleTileFactory(8, 6, 'road-tlr'); +export const ROAD_LTB = new SimpleTileFactory(6, 8, 'road-ltb'); +export const ROAD_RTB = new SimpleTileFactory(6, 8, 'road-rtb'); // + -export const ROAD_TBLR = new TileFactory('road-tblr', 8, 8); +export const ROAD_TBLR = new SimpleTileFactory(8, 8, 'road-tblr'); // Tower base -export const EMPTY = new TileFactory('empty', 4, 2); +export const EMPTY = new SimpleTileFactory(4, 2, 'empty'); // Straight -export const RIVER_LR = new TileFactory('river-lr', 6, 4); -export const RIVER_TB = new TileFactory('river-tb', 4, 6); +export const RIVER_LR = new SimpleTileFactory(6, 4, 'river-lr'); +export const RIVER_TB = new SimpleTileFactory(4, 6, 'river-tb'); // Elbow -export const RIVER_BR = new TileFactory('river-br', 6, 6); -export const RIVER_BL = new TileFactory('river-bl', 6, 6); -export const RIVER_TR = new TileFactory('river-tr', 6, 6); -export const RIVER_TL = new TileFactory('river-tl', 6, 6); -export const BRIDGE_LR = new TileFactory('bridge-lr', 6, 4); -const tower_fireball1_back = new TileFactory('fireball1-back', 4, 4); -const tower_fireball1 = new TileFactory('fireball1', 4, 4); -const tower_fireball1_front = new TileFactory('fireball1-front', 4, 4); -for (const tile of [tower_fireball1_back, tower_fireball1_front]) { - tile.add_animation('fire', [ +export const RIVER_BR = new SimpleTileFactory(6, 6, 'river-br'); +export const RIVER_BL = new SimpleTileFactory(6, 6, 'river-bl'); +export const RIVER_TR = new SimpleTileFactory(6, 6, 'river-tr'); +export const RIVER_TL = new SimpleTileFactory(6, 6, 'river-tl'); +export const BRIDGE_LR = new SimpleTileFactory(6, 4, 'bridge-lr'); +const tower_fireball1_back = new SimpleTileFactory(4, 4, 'fireball1-back'); +const tower_fireball1 = new SimpleTileFactory(4, 4, 'fireball1'); +const tower_fireball1_front = new SimpleTileFactory(4, 4, 'fireball1-front'); +for (const tile_factory of [tower_fireball1_back, tower_fireball1_front]) { + tile_factory.add_animation('fire', [ { 'offset': 0.0, 'easing': 'cubic-bezier(0.02, 1.07, 0.73, 0.99)', @@ -55,63 +55,74 @@ export const TOWER_FIREBALL1 = new LayeredTileFactory([ tower_fireball1, tower_fireball1_front, ]); -class Fireball extends TileFactory { - get_elem(tileset) { - const elem = document.createElement('div'); - elem.style.gridColumnEnd = `span ${this.width}`; - elem.style.gridRowEnd = `span ${this.height}`; - elem.style.position = 'relative'; - const base = document.createElement('div'); - elem.appendChild(base); - base.style.width = '100%'; - base.style.height = '100%'; - base.style.position = 'absolute'; - base.style.top = '0'; - base.style.left = '0'; - base.style.backgroundImage = `url("images/${tileset}/${this.name}.svg")`; - base.style.backgroundSize = 'cover'; - base.style.visibility = 'hidden'; - setInterval(() => { - base.animate([ - { - 'offset': 0.0, - 'easing': 'cubic-bezier(0.33, 0.66, 0.66, 1.00)', - 'top': '0', - }, - { - 'offset': 0.50, - 'easing': 'cubic-bezier(0.33, 0.00, 0.66, 0.33)', - 'top': '-500%', - }, - { - 'offset': 1.0, - 'top': '0', - }, - ], { - 'duration': 1500, - 'iterations': 1, - }); - base.animate([ - { - 'offset': 0.0, - 'easing': 'linear', - 'visibility': 'visible', - 'left': '0', - 'transform': 'rotate(0)', - }, - { - 'offset': 1.0, - 'visibility': 'hidden', - 'left': '1000%', - 'transform': 'rotate(720deg)', - }, - ], { - 'duration': 1500, - 'iterations': 1, - }); - }, 3250); - return elem; - } +/* +class Fireball extends SimpleTileFactory { + get_elem(tileset: string): HTMLElement { + const elem = document.createElement('div'); + elem.style.gridColumnEnd = `span ${this.width}`; + elem.style.gridRowEnd = `span ${this.height}`; + elem.style.position = 'relative'; + + const base = document.createElement('div'); + elem.appendChild(base); + base.style.width = '100%'; + base.style.height = '100%'; + base.style.position = 'absolute'; + base.style.top = '0'; + base.style.left = '0'; + base.style.backgroundImage = `url("images/${tileset}/${this.name}.svg")`; + base.style.backgroundSize = 'cover'; + base.style.visibility = 'hidden'; + + setInterval(() => { + base.animate([ + { + 'offset': 0.0, + 'easing': 'cubic-bezier(0.33, 0.66, 0.66, 1.00)', + + 'top': '0', + }, + { + 'offset': 0.50, + 'easing': 'cubic-bezier(0.33, 0.00, 0.66, 0.33)', + + 'top': '-500%', + }, + { + 'offset': 1.0, + + 'top': '0', + }, + ], { + 'duration': 1500, + 'iterations': 1, + }); + + base.animate([ + { + 'offset': 0.0, + 'easing': 'linear', + + 'visibility': 'visible', + 'left': '0', + 'transform': 'rotate(0)', + }, + { + 'offset': 1.0, + + 'visibility': 'hidden', + 'left': '1000%', + 'transform': 'rotate(720deg)', + }, + ], { + 'duration': 1500, + 'iterations': 1, + }); + }, 3250); + + return elem; + } } export const FIREBALL = new Fireball('fireball', 2, 2); +*/ //# sourceMappingURL=tiles.js.map \ No newline at end of file diff --git a/js/tiles.js.map b/js/tiles.js.map index 9ec4412..988f46a 100644 --- a/js/tiles.js.map +++ b/js/tiles.js.map @@ -1 +1 @@ -{"version":3,"file":"tiles.js","sourceRoot":"","sources":["../ts/tiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,WAAW;AACX,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAExD,QAAQ;AACR,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAExD,IAAI;AACJ,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1D,IAAI;AACJ,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5D,aAAa;AACb,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEpD,WAAW;AACX,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1D,QAAQ;AACR,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE1D,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5D,MAAM,oBAAoB,GAAG,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACrE,MAAM,eAAe,GAAG,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,MAAM,qBAAqB,GAAG,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEvE,KAAK,MAAM,IAAI,IAAI,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,EAAE;IAChE,IAAI,CAAC,aAAa,CAChB,MAAM,EACN;QACE;YACE,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,sCAAsC;YAEhD,KAAK,EAAE,GAAG;SACX;QACD;YACE,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,QAAQ;YAElB,KAAK,EAAE,KAAK;SACb;QACD;YACE,QAAQ,EAAE,GAAG;YAEb,KAAK,EAAE,GAAG;SACX;KACF,EACD;QACE,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,CAAC;KAChB,CACF,CAAC;CACH;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,kBAAkB,CAAC;IACpD,oBAAoB;IACpB,eAAe;IACf,qBAAqB;CACtB,CAAC,CAAC;AAEH,MAAM,QAAS,SAAQ,WAAW;IAChC,QAAQ,CAAC,OAAe;QACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAEjC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,OAAO,IAAI,IAAI,CAAC,IAAI,QAAQ,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QAEjC,WAAW,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,OAAO,CAAC;gBACX;oBACE,QAAQ,EAAE,GAAG;oBACb,QAAQ,EAAE,sCAAsC;oBAEhD,KAAK,EAAE,GAAG;iBACX;gBACD;oBACE,QAAQ,EAAE,IAAI;oBACd,QAAQ,EAAE,sCAAsC;oBAEhD,KAAK,EAAE,OAAO;iBACf;gBACD;oBACE,QAAQ,EAAE,GAAG;oBAEb,KAAK,EAAE,GAAG;iBACX;aACF,EAAE;gBACD,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,CAAC;aAChB,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC;gBACX;oBACE,QAAQ,EAAE,GAAG;oBACb,QAAQ,EAAE,QAAQ;oBAElB,YAAY,EAAE,SAAS;oBACvB,MAAM,EAAE,GAAG;oBACX,WAAW,EAAE,WAAW;iBACzB;gBACD;oBACE,QAAQ,EAAE,GAAG;oBAEb,YAAY,EAAE,QAAQ;oBACtB,MAAM,EAAE,OAAO;oBACf,WAAW,EAAE,gBAAgB;iBAC9B;aACF,EAAE;gBACD,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,CAAC;aAChB,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AACD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"tiles.js","sourceRoot":"","sources":["../ts/tiles.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/js/tower.js b/js/tower.js index 7cea500..94e68b1 100644 --- a/js/tower.js +++ b/js/tower.js @@ -74,7 +74,6 @@ export function main() { grid.add_tile('bridge', tiles.BRIDGE_LR, 46, 18); grid.add_tile('bridge', tiles.BRIDGE_LR, 46, 10); grid.add_tile('tower', tiles.TOWER_FIREBALL1, 30, 18); - grid.add_tile('tower', tiles.FIREBALL, 31, 17); } ; main(); diff --git a/js/tower.js.map b/js/tower.js.map index 38ae6d8..d37178a 100644 --- a/js/tower.js.map +++ b/js/tower.js.map @@ -1 +1 @@ -{"version":3,"file":"tower.js","sourceRoot":"","sources":["../ts/tower.ts"],"names":[],"mappings":"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EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE3C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAE9C,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACjD,CAAC;AAAA,CAAC;AAEF,IAAI,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"tower.js","sourceRoot":"","sources":["../ts/tower.ts"],"names":[],"mappings":"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EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE3C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAE9C,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjD,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC;AAAA,CAAC;AAEF,IAAI,EAAE,CAAC"} \ No newline at end of file diff --git a/ts/layer.ts b/ts/layer.ts index 617e603..ca0efcb 100644 --- a/ts/layer.ts +++ b/ts/layer.ts @@ -13,7 +13,7 @@ export class Layer { } add_tile(tile_factory: TileFactory): HTMLElement { - const elem = tile_factory.get_elem(this.#tileset); + const elem = tile_factory.build(this.#tileset).get_elem(); elem.style.zIndex = `${this.#level}`; return elem; } diff --git a/ts/layered_tile.ts b/ts/layered_tile.ts new file mode 100644 index 0000000..ddad046 --- /dev/null +++ b/ts/layered_tile.ts @@ -0,0 +1,23 @@ +import { Tile } from './tile.js'; + +export class LayeredTile extends Tile { + elem: HTMLElement; + + constructor(width: number, height: number, tiles: Tile[]) { + super(width, height); + + this.elem.style.position = 'relative'; + + for (let i = 0; i < tiles.length; i++) { + const tile = tiles[i]; + const sub = tile.get_elem(); + this.elem.appendChild(sub); + sub.style.width = '100%'; + sub.style.height = '100%'; + sub.style.position = 'absolute'; + sub.style.top = '0'; + sub.style.left = '0'; + sub.style.zIndex = `${i}`; + } + } +} diff --git a/ts/layered_tile_factory.ts b/ts/layered_tile_factory.ts index 2ad6e5d..0525d3c 100644 --- a/ts/layered_tile_factory.ts +++ b/ts/layered_tile_factory.ts @@ -1,42 +1,21 @@ -import { AnimateDetail, TileFactory } from './tile_factory.js'; +import { LayeredTile } from './layered_tile.js'; +import { TileFactory } from './tile_factory.js'; export class LayeredTileFactory extends TileFactory { - tiles: TileFactory[]; + tile_factories: TileFactory[]; - constructor(tiles: TileFactory[]) { - super('', tiles[0].width, tiles[0].height); - this.tiles = tiles; + constructor(tile_factories: TileFactory[]) { + super(tile_factories[0].width, tile_factories[0].height); + this.tile_factories = tile_factories; } - get_elem(tileset: string): HTMLElement { - const elem = document.createElement('div'); - elem.style.gridColumnEnd = `span ${this.width}`; - elem.style.gridRowEnd = `span ${this.height}`; - elem.style.position = 'relative'; + build(tileset: string): LayeredTile { + const tiles = []; - for (let i = 0; i < this.tiles.length; i++) { - const tile = this.tiles[i]; - const sub = tile.get_elem(tileset); - elem.appendChild(sub); - sub.style.width = '100%'; - sub.style.height = '100%'; - sub.style.position = 'absolute'; - sub.style.top = '0'; - sub.style.left = '0'; - sub.style.zIndex = `${i}`; + for (const tile_factory of this.tile_factories) { + tiles.push(tile_factory.build(tileset)); } - elem.addEventListener('animate', (e: CustomEvent) => { - for (const sub of elem.children) { - sub.dispatchEvent(new CustomEvent('animate', {'detail': e.detail})); - } - }); - - // XXX removeme - setInterval(() => { - elem.dispatchEvent(new CustomEvent('animate', {'detail': {'name': 'fire'}})); - }, 3250); - - return elem; + return new LayeredTile(this.width, this.height, tiles); } } diff --git a/ts/simple_tile.ts b/ts/simple_tile.ts new file mode 100644 index 0000000..0e914f7 --- /dev/null +++ b/ts/simple_tile.ts @@ -0,0 +1,15 @@ +import { Tile } from './tile.js'; + +export class SimpleTile extends Tile { + animations: Map; + + constructor(width: number, height: number, image_url: string, animations: Map) { + super(width, height); + + this.elem.style.backgroundImage = `url('${encodeURIComponent(image_url)}')`; + this.elem.style.backgroundSize = 'cover'; + + this.animations = animations; + } +} + diff --git a/ts/simple_tile_factory.ts b/ts/simple_tile_factory.ts new file mode 100644 index 0000000..9fba17d --- /dev/null +++ b/ts/simple_tile_factory.ts @@ -0,0 +1,51 @@ +import { SimpleTile } from './simple_tile.js'; +import { TileFactory } from './tile_factory.js'; + +export class SimpleTileFactory extends TileFactory { + name: string; + animations: Map; + + constructor(width: number, height: number, name: string) { + super(width, height); + this.name = name; + this.animations = new Map(); + } + + add_animation(name: string, keyframes: Keyframe[], options: object) { + this.animations.set(name, [keyframes, options]); + } + + build(tileset: string): SimpleTile { + return new SimpleTile( + this.width, + this.height, + `images/${tileset}/${this.name}.svg`, + this.animations, + ); + } +} + +/* +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; +} +*/ diff --git a/ts/tile.ts b/ts/tile.ts new file mode 100644 index 0000000..ad06f31 --- /dev/null +++ b/ts/tile.ts @@ -0,0 +1,13 @@ +export abstract class Tile { + elem: HTMLElement; + + constructor(width: number, height: number) { + this.elem = document.createElement('div'); + this.elem.style.gridColumnEnd = `span ${width}`; + this.elem.style.gridRowEnd = `span ${height}`; + } + + get_elem(): HTMLElement { + return this.elem; + } +} diff --git a/ts/tile_factory.ts b/ts/tile_factory.ts index a15ca19..cf1fe70 100644 --- a/ts/tile_factory.ts +++ b/ts/tile_factory.ts @@ -1,64 +1,13 @@ -export interface AnimateDetail { - name: string; -} +import { Tile } from './tile.js'; -export class TileFactory { - name: string; +export abstract class TileFactory { width: number; height: number; - animations: Map; - constructor(name: string, width: number, height: number) { - this.name = name; + constructor(width: number, height: number) { this.width = width; this.height = height; - - this.animations = new Map(); } - add_animation(name: string, keyframes: Keyframe[], options: object) { - this.animations.set(name, [keyframes, options]); - } - - get_elem(tileset: string): HTMLElement { - const elem = document.createElement('div'); - elem.style.backgroundImage = `url("images/${tileset}/${this.name}.svg")`; - elem.style.backgroundSize = 'cover'; - elem.style.gridColumnEnd = `span ${this.width}`; - elem.style.gridRowEnd = `span ${this.height}`; - - elem.addEventListener('animate', (e: CustomEvent) => { - const animation = this.animations.get(e.detail.name); - if (animation) { - elem.animate(animation[0], animation[1]); - } - }); - - return elem; - } + abstract build(tileset: string): Tile; } - -/* -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; -} -*/ diff --git a/ts/tiles.ts b/ts/tiles.ts index 0061ae0..1019feb 100644 --- a/ts/tiles.ts +++ b/ts/tiles.ts @@ -1,46 +1,46 @@ import { LayeredTileFactory } from './layered_tile_factory.js'; -import { TileFactory } from './tile_factory.js'; +import { SimpleTileFactory } from './simple_tile_factory.js'; -// Straight -export const ROAD_LR = new TileFactory('road-lr', 6, 4); -export const ROAD_TB = new TileFactory('road-tb', 4, 6); +// Straig +export const ROAD_LR = new SimpleTileFactory(6, 4, 'road-lr'); +export const ROAD_TB = new SimpleTileFactory(4, 6, 'road-tb'); // Elbow -export const ROAD_BL = new TileFactory('road-bl', 6, 6); -export const ROAD_BR = new TileFactory('road-br', 6, 6); -export const ROAD_TL = new TileFactory('road-tl', 6, 6); -export const ROAD_TR = new TileFactory('road-tr', 6, 6); +export const ROAD_BL = new SimpleTileFactory(6, 6, 'road-bl'); +export const ROAD_BR = new SimpleTileFactory(6, 6, 'road-br'); +export const ROAD_TL = new SimpleTileFactory(6, 6, 'road-tl'); +export const ROAD_TR = new SimpleTileFactory(6, 6, 'road-tr'); // T -export const ROAD_BLR = new TileFactory('road-blr', 8, 6); -export const ROAD_TLR = new TileFactory('road-tlr', 8, 6); -export const ROAD_LTB = new TileFactory('road-ltb', 6, 8); -export const ROAD_RTB = new TileFactory('road-rtb', 6, 8); +export const ROAD_BLR = new SimpleTileFactory(8, 6, 'road-blr'); +export const ROAD_TLR = new SimpleTileFactory(8, 6, 'road-tlr'); +export const ROAD_LTB = new SimpleTileFactory(6, 8, 'road-ltb'); +export const ROAD_RTB = new SimpleTileFactory(6, 8, 'road-rtb'); // + -export const ROAD_TBLR = new TileFactory('road-tblr', 8, 8); +export const ROAD_TBLR = new SimpleTileFactory(8, 8, 'road-tblr'); // Tower base -export const EMPTY = new TileFactory('empty', 4, 2); +export const EMPTY = new SimpleTileFactory(4, 2, 'empty'); // Straight -export const RIVER_LR = new TileFactory('river-lr', 6, 4); -export const RIVER_TB = new TileFactory('river-tb', 4, 6); +export const RIVER_LR = new SimpleTileFactory(6, 4, 'river-lr'); +export const RIVER_TB = new SimpleTileFactory(4, 6, 'river-tb'); // Elbow -export const RIVER_BR = new TileFactory('river-br', 6, 6); -export const RIVER_BL = new TileFactory('river-bl', 6, 6); -export const RIVER_TR = new TileFactory('river-tr', 6, 6); -export const RIVER_TL = new TileFactory('river-tl', 6, 6); +export const RIVER_BR = new SimpleTileFactory(6, 6, 'river-br'); +export const RIVER_BL = new SimpleTileFactory(6, 6, 'river-bl'); +export const RIVER_TR = new SimpleTileFactory(6, 6, 'river-tr'); +export const RIVER_TL = new SimpleTileFactory(6, 6, 'river-tl'); -export const BRIDGE_LR = new TileFactory('bridge-lr', 6, 4); +export const BRIDGE_LR = new SimpleTileFactory(6, 4, 'bridge-lr'); -const tower_fireball1_back = new TileFactory('fireball1-back', 4, 4); -const tower_fireball1 = new TileFactory('fireball1', 4, 4); -const tower_fireball1_front = new TileFactory('fireball1-front', 4, 4); +const tower_fireball1_back = new SimpleTileFactory(4, 4, 'fireball1-back'); +const tower_fireball1 = new SimpleTileFactory(4, 4, 'fireball1'); +const tower_fireball1_front = new SimpleTileFactory(4, 4, 'fireball1-front'); -for (const tile of [tower_fireball1_back, tower_fireball1_front]) { - tile.add_animation( +for (const tile_factory of [tower_fireball1_back, tower_fireball1_front]) { + tile_factory.add_animation( 'fire', [ { @@ -74,7 +74,8 @@ export const TOWER_FIREBALL1 = new LayeredTileFactory([ tower_fireball1_front, ]); -class Fireball extends TileFactory { +/* +class Fireball extends SimpleTileFactory { get_elem(tileset: string): HTMLElement { const elem = document.createElement('div'); elem.style.gridColumnEnd = `span ${this.width}`; @@ -142,3 +143,4 @@ class Fireball extends TileFactory { } } export const FIREBALL = new Fireball('fireball', 2, 2); +*/ diff --git a/ts/tower.ts b/ts/tower.ts index b7bc53b..988925b 100644 --- a/ts/tower.ts +++ b/ts/tower.ts @@ -82,7 +82,6 @@ export function main() { grid.add_tile('bridge', tiles.BRIDGE_LR, 46, 10); grid.add_tile('tower', tiles.TOWER_FIREBALL1, 30, 18); - grid.add_tile('tower', tiles.FIREBALL, 31, 17); }; main(); diff --git a/tsconfig.json b/tsconfig.json index f3011c9..4323c1c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,8 +15,12 @@ }, "files": [ "ts/grid.ts", - "ts/layer.ts", + "ts/layered_tile.ts", "ts/layered_tile_factory.ts", + "ts/layer.ts", + "ts/simple_tile.ts", + "ts/simple_tile_factory.ts", + "ts/tile.ts", "ts/tile_factory.ts", "ts/tiles.ts", "ts/tower.ts"