From a067dc616fff5b9bfc4c8b4a002a8a2a35a01167 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Wed, 12 May 2021 04:48:16 +0000 Subject: [PATCH] SequenceTile{Factory} --- images/tropical/fireball-impact1.svg | 985 +++++++++++++++++++++++++++ images/tropical/fireball-impact2.svg | 985 +++++++++++++++++++++++++++ images/tropical/fireball-impact3.svg | 620 +++++++++++++++++ images/tropical/fireball-impact4.svg | 212 ++++++ images/tropical/fireball-impact5.svg | 369 ++++++++++ images/tropical/fireball-impact6.svg | 412 +++++++++++ images/tropical/fireball-impact7.svg | 439 ++++++++++++ images/tropical/fireball-impact8.svg | 465 +++++++++++++ js/sequence_tile.js | 42 ++ js/sequence_tile.js.map | 1 + js/sequence_tile_factory.js | 21 + js/sequence_tile_factory.js.map | 1 + js/tiles.js | 11 + js/tiles.js.map | 2 +- js/tower.js | 1 + js/tower.js.map | 2 +- ts/sequence_tile.ts | 52 ++ ts/sequence_tile_factory.ts | 33 + ts/tiles.ts | 12 + ts/tower.ts | 2 + tsconfig.json | 2 + 21 files changed, 4667 insertions(+), 2 deletions(-) create mode 100644 images/tropical/fireball-impact1.svg create mode 100644 images/tropical/fireball-impact2.svg create mode 100644 images/tropical/fireball-impact3.svg create mode 100644 images/tropical/fireball-impact4.svg create mode 100644 images/tropical/fireball-impact5.svg create mode 100644 images/tropical/fireball-impact6.svg create mode 100644 images/tropical/fireball-impact7.svg create mode 100644 images/tropical/fireball-impact8.svg create mode 100644 js/sequence_tile.js create mode 100644 js/sequence_tile.js.map create mode 100644 js/sequence_tile_factory.js create mode 100644 js/sequence_tile_factory.js.map create mode 100644 ts/sequence_tile.ts create mode 100644 ts/sequence_tile_factory.ts diff --git a/images/tropical/fireball-impact1.svg b/images/tropical/fireball-impact1.svg new file mode 100644 index 0000000..3603f62 --- /dev/null +++ b/images/tropical/fireball-impact1.svg @@ -0,0 +1,985 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/tropical/fireball-impact2.svg b/images/tropical/fireball-impact2.svg new file mode 100644 index 0000000..05eecd1 --- /dev/null +++ b/images/tropical/fireball-impact2.svg @@ -0,0 +1,985 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/tropical/fireball-impact3.svg b/images/tropical/fireball-impact3.svg new file mode 100644 index 0000000..e32e5bf --- /dev/null +++ b/images/tropical/fireball-impact3.svg @@ -0,0 +1,620 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/tropical/fireball-impact4.svg b/images/tropical/fireball-impact4.svg new file mode 100644 index 0000000..9a3477a --- /dev/null +++ b/images/tropical/fireball-impact4.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/tropical/fireball-impact5.svg b/images/tropical/fireball-impact5.svg new file mode 100644 index 0000000..a45629d --- /dev/null +++ b/images/tropical/fireball-impact5.svg @@ -0,0 +1,369 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/tropical/fireball-impact6.svg b/images/tropical/fireball-impact6.svg new file mode 100644 index 0000000..e7d68d0 --- /dev/null +++ b/images/tropical/fireball-impact6.svg @@ -0,0 +1,412 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/tropical/fireball-impact7.svg b/images/tropical/fireball-impact7.svg new file mode 100644 index 0000000..37f04d6 --- /dev/null +++ b/images/tropical/fireball-impact7.svg @@ -0,0 +1,439 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/images/tropical/fireball-impact8.svg b/images/tropical/fireball-impact8.svg new file mode 100644 index 0000000..377494a --- /dev/null +++ b/images/tropical/fireball-impact8.svg @@ -0,0 +1,465 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/js/sequence_tile.js b/js/sequence_tile.js new file mode 100644 index 0000000..c77159d --- /dev/null +++ b/js/sequence_tile.js @@ -0,0 +1,42 @@ +import { Tile } from './tile.js'; +export class SequenceTile extends Tile { + constructor(width, height, tiles, delay, repeat) { + super(width, height); + this.elem.style.position = 'relative'; + const tile_chunk = 1 / tiles.length; + let animation = null; + for (let i = 0; i < tiles.length; i++) { + const tile = tiles[i]; + this.elem.appendChild(tile.elem); + tile.elem.style.width = '100%'; + tile.elem.style.height = '100%'; + tile.elem.style.position = 'absolute'; + tile.elem.style.top = '0'; + tile.elem.style.left = '0'; + tile.elem.style.zIndex = `${i}`; + tile.elem.style.opacity = '0.0'; + animation = tile.elem.animate([ + { + 'offset': i * tile_chunk, + 'easing': 'step-start', + 'opacity': '0.0', + }, + { + 'offset': (i + 1) * tile_chunk, + 'easing': 'step-start', + 'opacity': '1.0', + }, + ], { + 'duration': delay * (tiles.length + 1), + 'iterations': repeat ? Infinity : 1, + }); + } + if (!repeat) { + animation.finished.then(() => this.elem.remove()); + } + } + play(_) { + return undefined; + } +} +//# sourceMappingURL=sequence_tile.js.map \ No newline at end of file diff --git a/js/sequence_tile.js.map b/js/sequence_tile.js.map new file mode 100644 index 0000000..fa14580 --- /dev/null +++ b/js/sequence_tile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sequence_tile.js","sourceRoot":"","sources":["../ts/sequence_tile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,YAAa,SAAQ,IAAI;IACpC,YAAY,KAAa,EAAE,MAAc,EAAE,KAAa,EAAE,KAAa,EAAE,MAAe;QACtF,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAEtC,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACpC,IAAI,SAAS,GAAG,IAAI,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;YAEhC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAC3B;gBACE;oBACE,QAAQ,EAAE,CAAC,GAAG,UAAU;oBACxB,QAAQ,EAAE,YAAY;oBACtB,SAAS,EAAE,KAAK;iBACjB;gBACD;oBACE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU;oBAC9B,QAAQ,EAAE,YAAY;oBACtB,SAAS,EAAE,KAAK;iBACjB;aACF,EACD;gBACE,UAAU,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACpC,CACF,CAAC;SACH;QAED,IAAI,CAAC,MAAM,EAAE;YACX,SAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;SACpD;IACH,CAAC;IAED,IAAI,CAAC,CAAS;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"} \ No newline at end of file diff --git a/js/sequence_tile_factory.js b/js/sequence_tile_factory.js new file mode 100644 index 0000000..9fb55e0 --- /dev/null +++ b/js/sequence_tile_factory.js @@ -0,0 +1,21 @@ +import { SequenceTile } from './sequence_tile.js'; +import { TileFactory } from './tile_factory.js'; +export class SequenceTileFactory extends TileFactory { + constructor(tile_factories, delay, repeat) { + super(tile_factories[0].layer_name, tile_factories[0].width, tile_factories[0].height); + this.tile_factories = tile_factories; + this.delay = delay; + this.repeat = repeat; + } + build(tileset) { + const tiles = []; + for (const tile_factory of this.tile_factories) { + tiles.push(tile_factory.build(tileset)); + } + return new SequenceTile(this.width, this.height, tiles, this.delay, this.repeat); + } + copy() { + return new SequenceTileFactory(this.tile_factories, this.delay, this.repeat); + } +} +//# sourceMappingURL=sequence_tile_factory.js.map \ No newline at end of file diff --git a/js/sequence_tile_factory.js.map b/js/sequence_tile_factory.js.map new file mode 100644 index 0000000..4b5c186 --- /dev/null +++ b/js/sequence_tile_factory.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sequence_tile_factory.js","sourceRoot":"","sources":["../ts/sequence_tile_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAKlD,YAAY,cAA6B,EAAE,KAAa,EAAE,MAAe;QACvE,KAAK,CACH,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,EAC5B,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,EACvB,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CACzB,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,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,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnF,CAAC;IAED,IAAI;QACF,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/E,CAAC;CACF"} \ No newline at end of file diff --git a/js/tiles.js b/js/tiles.js index f7816bb..3200d40 100644 --- a/js/tiles.js +++ b/js/tiles.js @@ -1,4 +1,5 @@ import { LayeredTileFactory } from './layered_tile_factory.js'; +import { SequenceTileFactory } from './sequence_tile_factory.js'; import { SimpleTileFactory } from './simple_tile_factory.js'; // Straig export const ROAD_LR = new SimpleTileFactory('road', 6, 4, 'road-lr'); @@ -56,4 +57,14 @@ export const TOWER_FIREBALL1 = new LayeredTileFactory([ tower_fireball1_front, ]); export const FIREBALL = new SimpleTileFactory('projectile', 2, 2, 'fireball'); +export const FIREBALL_IMPACT = new SequenceTileFactory([ + new SimpleTileFactory('surface', 4, 4, 'fireball-impact1'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact2'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact3'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact4'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact5'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact6'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact7'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact8'), +], 100, false); //# sourceMappingURL=tiles.js.map \ No newline at end of file diff --git a/js/tiles.js.map b/js/tiles.js.map index ae07e99..22e8e0b 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":"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"} \ 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 3319c77..32ff2f0 100644 --- a/js/tower.js +++ b/js/tower.js @@ -82,6 +82,7 @@ export function main() { tower.play('fire'); grid.add_tile(new ProjectileTileFactory(tiles.FIREBALL, rand(-20, 20), rand(-10, 20), 5, 1.5, 5), 31, 27); }, 3250); + grid.add_tile(tiles.FIREBALL_IMPACT, 15, 15); } ; main(); diff --git a/js/tower.js.map b/js/tower.js.map index ff979f8..c2a8ac8 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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I,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAErC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEvC,SAAS,IAAI,CAAC,GAAW,EAAE,GAAW;QAClC,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3D,WAAW,CAAC,GAAG,EAAE;QACf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5G,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,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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I,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAErC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAEvC,SAAS,IAAI,CAAC,GAAW,EAAE,GAAW;QAClC,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3D,WAAW,CAAC,GAAG,EAAE;QACf,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5G,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAAA,CAAC;AAEF,IAAI,EAAE,CAAC"} \ No newline at end of file diff --git a/ts/sequence_tile.ts b/ts/sequence_tile.ts new file mode 100644 index 0000000..a32245c --- /dev/null +++ b/ts/sequence_tile.ts @@ -0,0 +1,52 @@ +import { Tile } from './tile.js'; + +export class SequenceTile extends Tile { + constructor(width: number, height: number, tiles: Tile[], delay: number, repeat: boolean) { + super(width, height); + + this.elem.style.position = 'relative'; + + const tile_chunk = 1 / tiles.length; + let animation = null; + + for (let i = 0; i < tiles.length; i++) { + const tile = tiles[i]; + + this.elem.appendChild(tile.elem); + tile.elem.style.width = '100%'; + tile.elem.style.height = '100%'; + tile.elem.style.position = 'absolute'; + tile.elem.style.top = '0'; + tile.elem.style.left = '0'; + tile.elem.style.zIndex = `${i}`; + tile.elem.style.opacity = '0.0'; + + animation = tile.elem.animate( + [ + { + 'offset': i * tile_chunk, + 'easing': 'step-start', + 'opacity': '0.0', + }, + { + 'offset': (i + 1) * tile_chunk, + 'easing': 'step-start', + 'opacity': '1.0', + }, + ], + { + 'duration': delay * (tiles.length + 1), + 'iterations': repeat ? Infinity : 1, + }, + ); + } + + if (!repeat) { + animation!.finished.then(() => this.elem.remove()); + } + } + + play(_: string): Animation | undefined { + return undefined; + } +} diff --git a/ts/sequence_tile_factory.ts b/ts/sequence_tile_factory.ts new file mode 100644 index 0000000..ecf67b4 --- /dev/null +++ b/ts/sequence_tile_factory.ts @@ -0,0 +1,33 @@ +import { SequenceTile } from './sequence_tile.js'; +import { TileFactory } from './tile_factory.js'; + +export class SequenceTileFactory extends TileFactory { + tile_factories: TileFactory[]; + delay: number; + repeat: boolean; + + constructor(tile_factories: TileFactory[], delay: number, repeat: boolean) { + super( + tile_factories[0].layer_name, + tile_factories[0].width, + tile_factories[0].height, + ); + this.tile_factories = tile_factories; + this.delay = delay; + this.repeat = repeat; + } + + build(tileset: string): SequenceTile { + const tiles = []; + + for (const tile_factory of this.tile_factories) { + tiles.push(tile_factory.build(tileset)); + } + + return new SequenceTile(this.width, this.height, tiles, this.delay, this.repeat); + } + + copy(): SequenceTileFactory { + return new SequenceTileFactory(this.tile_factories, this.delay, this.repeat); + } +} diff --git a/ts/tiles.ts b/ts/tiles.ts index c6649bf..ec8ac78 100644 --- a/ts/tiles.ts +++ b/ts/tiles.ts @@ -1,4 +1,5 @@ import { LayeredTileFactory } from './layered_tile_factory.js'; +import { SequenceTileFactory } from './sequence_tile_factory.js'; import { SimpleTileFactory } from './simple_tile_factory.js'; // Straig @@ -75,3 +76,14 @@ export const TOWER_FIREBALL1 = new LayeredTileFactory([ ]); export const FIREBALL = new SimpleTileFactory('projectile', 2, 2, 'fireball'); + +export const FIREBALL_IMPACT = new SequenceTileFactory([ + new SimpleTileFactory('surface', 4, 4, 'fireball-impact1'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact2'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact3'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact4'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact5'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact6'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact7'), + new SimpleTileFactory('surface', 4, 4, 'fireball-impact8'), +], 100, false); diff --git a/ts/tower.ts b/ts/tower.ts index 0243815..4f3153a 100644 --- a/ts/tower.ts +++ b/ts/tower.ts @@ -91,6 +91,8 @@ export function main() { tower.play('fire'); grid.add_tile(new ProjectileTileFactory(tiles.FIREBALL, rand(-20, 20), rand(-10, 20), 5, 1.5, 5), 31, 27); }, 3250); + + grid.add_tile(tiles.FIREBALL_IMPACT, 15, 15); }; main(); diff --git a/tsconfig.json b/tsconfig.json index 3552a82..72dfd43 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,6 +21,8 @@ "ts/layered_tile_factory.ts", "ts/layer.ts", "ts/projectile_tile_factory.ts", + "ts/sequence_tile.ts", + "ts/sequence_tile_factory.ts", "ts/simple_tile.ts", "ts/simple_tile_factory.ts", "ts/tile.ts",