From 9d681291cc1bddf6a656f1163f6d43cc2a98b4c2 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Mon, 17 May 2021 04:26:18 +0000 Subject: [PATCH] Walkable mask painting --- js/animatable_tile.js | 4 +- js/animatable_tile.js.map | 2 +- js/animatable_tile_factory.js | 6 + js/animatable_tile_factory.js.map | 2 +- js/grid.js | 43 +++---- js/grid.js.map | 2 +- js/layer.js | 4 +- js/layer.js.map | 2 +- js/layered_tile.js | 4 +- js/layered_tile.js.map | 2 +- js/layered_tile_factory.js | 2 +- js/layered_tile_factory.js.map | 2 +- js/sequence_tile.js | 4 +- js/sequence_tile.js.map | 2 +- js/sequence_tile_factory.js | 2 +- js/sequence_tile_factory.js.map | 2 +- js/simple_tile.js | 4 +- js/simple_tile.js.map | 2 +- js/simple_tile_factory.js | 26 +---- js/simple_tile_factory.js.map | 2 +- js/tile.js | 6 +- js/tile.js.map | 2 +- js/tile_factory.js | 11 ++ js/tile_factory.js.map | 2 +- js/tiles.js | 180 +++++++++++++++++++++++------ js/tiles.js.map | 2 +- js/tower.js | 140 +++++++++++++---------- js/tower.js.map | 2 +- ts/animatable_tile.ts | 5 +- ts/animatable_tile_factory.ts | 8 ++ ts/grid.ts | 53 +++------ ts/layer.ts | 5 +- ts/layered_tile.ts | 5 +- ts/layered_tile_factory.ts | 2 +- ts/sequence_tile.ts | 5 +- ts/sequence_tile_factory.ts | 2 +- ts/simple_tile.ts | 5 +- ts/simple_tile_factory.ts | 29 +---- ts/tile.ts | 10 +- ts/tile_factory.ts | 14 +++ ts/tiles.ts | 184 ++++++++++++++++++++++++------ ts/tower.ts | 147 ++++++++++++++---------- tsconfig.json | 1 + 43 files changed, 577 insertions(+), 362 deletions(-) diff --git a/js/animatable_tile.js b/js/animatable_tile.js index 4369f47..30c5637 100644 --- a/js/animatable_tile.js +++ b/js/animatable_tile.js @@ -1,7 +1,7 @@ import { Tile } from './tile.js'; export class AnimatableTile extends Tile { - constructor(width, height, animations) { - super(width, height); + constructor(width, height, masks, animations) { + super(width, height, masks); this.animations = animations; } play(name) { diff --git a/js/animatable_tile.js.map b/js/animatable_tile.js.map index e6695a4..f8b9420 100644 --- a/js/animatable_tile.js.map +++ b/js/animatable_tile.js.map @@ -1 +1 @@ -{"version":3,"file":"animatable_tile.js","sourceRoot":"","sources":["../ts/animatable_tile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAgB,cAAe,SAAQ,IAAI;IAG/C,YAAY,KAAa,EAAE,MAAc,EAAE,UAA6C;QACtF,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,IAAY;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,SAAS,EAAE;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;SACxC;aAAM;YACL,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"animatable_tile.js","sourceRoot":"","sources":["../ts/animatable_tile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAgB,cAAe,SAAQ,IAAI;IAG/C,YAAY,KAAa,EAAE,MAAc,EAAE,KAAwB,EAAE,UAA6C;QAChH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,IAAY;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,SAAS,EAAE;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;SACxC;aAAM;YACL,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;CACF"} \ No newline at end of file diff --git a/js/animatable_tile_factory.js b/js/animatable_tile_factory.js index 79b4224..6cec8ff 100644 --- a/js/animatable_tile_factory.js +++ b/js/animatable_tile_factory.js @@ -7,5 +7,11 @@ export class AnimatableTileFactory extends TileFactory { add_animation(name, keyframes, options) { this.animations.set(name, [keyframes, options]); } + animatable_tile_args() { + return [ + ...super.tile_args(), + this.animations, + ]; + } } //# sourceMappingURL=animatable_tile_factory.js.map \ No newline at end of file diff --git a/js/animatable_tile_factory.js.map b/js/animatable_tile_factory.js.map index 970d77c..8597722 100644 --- a/js/animatable_tile_factory.js.map +++ b/js/animatable_tile_factory.js.map @@ -1 +1 @@ -{"version":3,"file":"animatable_tile_factory.js","sourceRoot":"","sources":["../ts/animatable_tile_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAgB,qBAAsB,SAAQ,WAAW;IAA/D;;QACE,eAAU,GAAsC,IAAI,GAAG,EAAE,CAAC;IAO5D,CAAC;IALC,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;CAGF"} \ No newline at end of file +{"version":3,"file":"animatable_tile_factory.js","sourceRoot":"","sources":["../ts/animatable_tile_factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAgB,qBAAsB,SAAQ,WAAW;IAA/D;;QACE,eAAU,GAAsC,IAAI,GAAG,EAAE,CAAC;IAc5D,CAAC;IAZC,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,oBAAoB;QAClB,OAAO;YACL,GAAG,KAAK,CAAC,SAAS,EAAE;YACpB,IAAI,CAAC,UAAU;SAChB,CAAC;IACJ,CAAC;CAGF"} \ No newline at end of file diff --git a/js/grid.js b/js/grid.js index 28a10c1..838cbac 100644 --- a/js/grid.js +++ b/js/grid.js @@ -1,38 +1,20 @@ import { Layer } from './layer.js'; +import { Mask } from './mask.js'; export class Grid { - constructor(prnt) { + constructor(prnt, width, height, tileset, layers, masks) { this.layers = new Map(); + this.masks = new Map(); this.prnt = prnt; this.prnt.style.display = 'grid'; - } - set_size(x, y) { - this.height = y; - this.prnt.style.gridTemplateColumns = `repeat(${x}, 1fr)`; - this.prnt.style.gridTemplateRows = `repeat(${y}, 1fr)`; - } - set_tileset(set) { - this.tileset = set; - this.prnt.style.backgroundImage = `url("images/${this.tileset}/land.svg")`; - // TODO: Notify layers - } - set_layers(layers) { - const newNames = new Set(layers); - for (const name of newNames) { - if (!this.layers.has(name)) { - const layer = new Layer(); - layer.set_tileset(this.tileset); - this.layers.set(name, layer); - } + this.prnt.style.gridTemplateColumns = `repeat(${width}, 1fr)`; + this.prnt.style.gridTemplateRows = `repeat(${height}, 1fr)`; + this.prnt.style.backgroundImage = `url("images/${tileset}/land.svg")`; + for (let i = 0; i <= layers.length; i++) { + const name = layers[i]; + this.layers.set(name, new Layer(i * height, tileset)); } - for (const name of this.layers.keys()) { - if (!newNames.has(name)) { - // TODO: Notify layer to tear down - this.layers.delete(name); - } - } - for (let i = 0; i < layers.length; i++) { - const layer = this.layers.get(layers[i]); - layer.set_level(i * this.height); + for (const name of masks) { + this.masks.set(name, new Mask(width, height)); } } add_tile(tile_factory, x, y) { @@ -41,6 +23,9 @@ export class Grid { tile.elem.style.gridColumnStart = `${x + 1}`; tile.elem.style.gridRowStart = `${y + 1}`; this.prnt.appendChild(tile.elem); + for (const [name, mask] of tile.masks) { + this.masks.get(name).update(x, y, mask); + } return tile; } } diff --git a/js/grid.js.map b/js/grid.js.map index 38699ef..e9cb93a 100644 --- a/js/grid.js.map +++ b/js/grid.js.map @@ -1 +1 @@ -{"version":3,"file":"grid.js","sourceRoot":"","sources":["../ts/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,MAAM,OAAO,IAAI;IAMf,YAAY,IAAiB;QAH7B,WAAM,GAAuB,IAAI,GAAG,EAAiB,CAAC;QAIpD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACnC,CAAC;IAED,QAAQ,CAAC,CAAS,EAAE,CAAS;QAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,UAAU,CAAC,QAAQ,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC;IACzD,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,IAAI,CAAC,OAAO,aAAa,CAAC;QAE3E,sBAAsB;IACxB,CAAC;IAED,UAAU,CAAC,MAAgB;QACzB,MAAM,QAAQ,GAAgB,IAAI,GAAG,CAAS,MAAM,CAAC,CAAC;QAEtD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC1B,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;gBAC1B,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAC9B;SACF;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE;YACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACvB,kCAAkC;gBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAC1B;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC;YAC1C,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;SAClC;IACH,CAAC;IAED,QAAQ,CAAC,YAAyB,EAAE,CAAS,EAAE,CAAS;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEjF,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"grid.js","sourceRoot":"","sources":["../ts/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,OAAO,IAAI;IAKf,YAAY,IAAiB,EAAE,KAAa,EAAE,MAAc,EAAE,OAAe,EAAE,MAAgB,EAAE,KAAe;QAHhH,WAAM,GAAuB,IAAI,GAAG,EAAiB,CAAC;QACtD,UAAK,GAAsB,IAAI,GAAG,EAAgB,CAAC;QAGjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,UAAU,KAAK,QAAQ,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,UAAU,MAAM,QAAQ,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,OAAO,aAAa,CAAC;QAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACvC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;SACvD;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;SAC/C;IACH,CAAC;IAED,QAAQ,CAAC,YAAyB,EAAE,CAAS,EAAE,CAAS;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEjF,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;SAC1C;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} \ No newline at end of file diff --git a/js/layer.js b/js/layer.js index 6c255d6..3833a38 100644 --- a/js/layer.js +++ b/js/layer.js @@ -1,8 +1,6 @@ export class Layer { - set_level(level) { + constructor(level, tileset) { this.level = level; - } - set_tileset(tileset) { this.tileset = tileset; } add_tile(tile_factory, y) { diff --git a/js/layer.js.map b/js/layer.js.map index a8d42df..05a2681 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":"AAGA,MAAM,OAAO,KAAK;IAIhB,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,YAAyB,EAAE,CAAS;QAC3C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"layer.js","sourceRoot":"","sources":["../ts/layer.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,KAAK;IAIhB,YAAY,KAAa,EAAE,OAAe;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,YAAyB,EAAE,CAAS;QAC3C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} \ No newline at end of file diff --git a/js/layered_tile.js b/js/layered_tile.js index c540720..3784c65 100644 --- a/js/layered_tile.js +++ b/js/layered_tile.js @@ -1,7 +1,7 @@ import { Tile } from './tile.js'; export class LayeredTile extends Tile { - constructor(width, height, tiles) { - super(width, height); + constructor(width, height, masks, tiles) { + super(width, height, masks); this.tiles = []; this.elem.style.position = 'relative'; for (let i = 0; i < tiles.length; i++) { diff --git a/js/layered_tile.js.map b/js/layered_tile.js.map index d273a3f..d7d288b 100644 --- a/js/layered_tile.js.map +++ b/js/layered_tile.js.map @@ -1 +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;QACrB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,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,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,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;SACjC;IACH,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,GAAG,GAAG,SAAS,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;SAC9B;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"layered_tile.js","sourceRoot":"","sources":["../ts/layered_tile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,WAAY,SAAQ,IAAI;IAGnC,YAAY,KAAa,EAAE,MAAc,EAAE,KAAwB,EAAE,KAAa;QAChF,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,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,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,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;SACjC;IACH,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,GAAG,GAAG,SAAS,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;SAC9B;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"} \ No newline at end of file diff --git a/js/layered_tile_factory.js b/js/layered_tile_factory.js index 196d39a..34c56c3 100644 --- a/js/layered_tile_factory.js +++ b/js/layered_tile_factory.js @@ -10,7 +10,7 @@ export class LayeredTileFactory extends TileFactory { for (const tile_factory of this.tile_factories) { tiles.push(tile_factory.build(tileset)); } - return new LayeredTile(this.width, this.height, tiles); + return new LayeredTile(...this.tile_args(), tiles); } copy() { return new LayeredTileFactory(this.tile_factories); diff --git a/js/layered_tile_factory.js.map b/js/layered_tile_factory.js.map index 3625ca6..b3eb23c 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,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,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;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;IAED,IAAI;QACF,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrD,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,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;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,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,IAAI;QACF,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC;CACF"} \ No newline at end of file diff --git a/js/sequence_tile.js b/js/sequence_tile.js index 63887d3..343325f 100644 --- a/js/sequence_tile.js +++ b/js/sequence_tile.js @@ -1,7 +1,7 @@ import { AnimatableTile } from './animatable_tile.js'; export class SequenceTile extends AnimatableTile { - constructor(width, height, animations, tiles, delay, repeat) { - super(width, height, animations); + constructor(width, height, masks, animations, tiles, delay, repeat) { + super(width, height, masks, animations); this.elem.style.position = 'relative'; const tile_chunk = 1 / tiles.length; let animation = null; diff --git a/js/sequence_tile.js.map b/js/sequence_tile.js.map index 7982a33..1acc630 100644 --- a/js/sequence_tile.js.map +++ b/js/sequence_tile.js.map @@ -1 +1 @@ -{"version":3,"file":"sequence_tile.js","sourceRoot":"","sources":["../ts/sequence_tile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,MAAM,OAAO,YAAa,SAAQ,cAAc;IAC9C,YAAY,KAAa,EAAE,MAAc,EAAE,UAA6C,EAAE,KAAa,EAAE,KAAa,EAAE,MAAe;QACrI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAEjC,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,UAAU,GAAG,QAAQ,CAAC;YAEtC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAC3B;gBACE;oBACE,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,UAAU;oBACpB,YAAY,EAAE,QAAQ;iBACvB;gBACD;oBACE,QAAQ,EAAE,CAAC,GAAG,UAAU;oBACxB,QAAQ,EAAE,UAAU;oBACpB,YAAY,EAAE,SAAS;iBACxB;gBACD;oBACE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU;oBAC9B,YAAY,EAAE,QAAQ;iBACvB;aACF,EACD;gBACE,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK;gBAChC,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 +{"version":3,"file":"sequence_tile.js","sourceRoot":"","sources":["../ts/sequence_tile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,MAAM,OAAO,YAAa,SAAQ,cAAc;IAC9C,YAAY,KAAa,EAAE,MAAc,EAAE,KAAwB,EAAE,UAA6C,EAAE,KAAa,EAAE,KAAa,EAAE,MAAe;QAC/J,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAExC,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,UAAU,GAAG,QAAQ,CAAC;YAEtC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAC3B;gBACE;oBACE,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,UAAU;oBACpB,YAAY,EAAE,QAAQ;iBACvB;gBACD;oBACE,QAAQ,EAAE,CAAC,GAAG,UAAU;oBACxB,QAAQ,EAAE,UAAU;oBACpB,YAAY,EAAE,SAAS;iBACxB;gBACD;oBACE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU;oBAC9B,YAAY,EAAE,QAAQ;iBACvB;aACF,EACD;gBACE,UAAU,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK;gBAChC,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 index 5050dc1..bd3c58f 100644 --- a/js/sequence_tile_factory.js +++ b/js/sequence_tile_factory.js @@ -12,7 +12,7 @@ export class SequenceTileFactory extends AnimatableTileFactory { for (const tile_factory of this.tile_factories) { tiles.push(tile_factory.build(tileset)); } - return new SequenceTile(this.width, this.height, this.animations, tiles, this.delay, this.repeat); + return new SequenceTile(...this.animatable_tile_args(), tiles, this.delay, this.repeat); } copy() { return new SequenceTileFactory(this.tile_factories, this.delay, this.repeat); diff --git a/js/sequence_tile_factory.js.map b/js/sequence_tile_factory.js.map index ff009cd..6d0a5b1 100644 --- a/js/sequence_tile_factory.js.map +++ b/js/sequence_tile_factory.js.map @@ -1 +1 @@ -{"version":3,"file":"sequence_tile_factory.js","sourceRoot":"","sources":["../ts/sequence_tile_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,OAAO,mBAAoB,SAAQ,qBAAqB;IAK5D,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,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACpG,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 +{"version":3,"file":"sequence_tile_factory.js","sourceRoot":"","sources":["../ts/sequence_tile_factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,OAAO,mBAAoB,SAAQ,qBAAqB;IAK5D,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,GAAG,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1F,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/simple_tile.js b/js/simple_tile.js index ddd11d1..9aeef79 100644 --- a/js/simple_tile.js +++ b/js/simple_tile.js @@ -1,7 +1,7 @@ import { AnimatableTile } from './animatable_tile.js'; export class SimpleTile extends AnimatableTile { - constructor(width, height, image_url, animations) { - super(width, height, animations); + constructor(width, height, masks, animations, image_url) { + super(width, height, masks, animations); this.elem.style.backgroundImage = `url('${encodeURIComponent(image_url)}')`; this.elem.style.backgroundSize = 'cover'; } diff --git a/js/simple_tile.js.map b/js/simple_tile.js.map index 1b66397..d9eb98f 100644 --- a/js/simple_tile.js.map +++ b/js/simple_tile.js.map @@ -1 +1 @@ -{"version":3,"file":"simple_tile.js","sourceRoot":"","sources":["../ts/simple_tile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,UAAW,SAAQ,cAAc;IAC5C,YAAY,KAAa,EAAE,MAAc,EAAE,SAAiB,EAAE,UAA6C;QACzG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAEjC,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;IAC3C,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"simple_tile.js","sourceRoot":"","sources":["../ts/simple_tile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,MAAM,OAAO,UAAW,SAAQ,cAAc;IAC5C,YAAY,KAAa,EAAE,MAAc,EAAE,KAAwB,EAAE,UAA6C,EAAE,SAAiB;QACnI,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAExC,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;IAC3C,CAAC;CACF"} \ No newline at end of file diff --git a/js/simple_tile_factory.js b/js/simple_tile_factory.js index 685dc10..e2d527f 100644 --- a/js/simple_tile_factory.js +++ b/js/simple_tile_factory.js @@ -6,7 +6,7 @@ export class SimpleTileFactory extends AnimatableTileFactory { this.name = name; } build(tileset) { - return new SimpleTile(this.width, this.height, `images/${this.name.replace('{tileset}', tileset)}`, this.animations); + return new SimpleTile(...this.animatable_tile_args(), `images/${this.name.replace('{tileset}', tileset)}`); } copy() { const stf = new SimpleTileFactory(this.layer_name, this.width, this.height, this.name); @@ -16,28 +16,4 @@ export class SimpleTileFactory extends AnimatableTileFactory { return stf; } } -/* -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 index a8ea570..ffb9b76 100644 --- a/js/simple_tile_factory.js.map +++ b/js/simple_tile_factory.js.map @@ -1 +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,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IAG1D,YAAY,UAAkB,EAAE,KAAa,EAAE,MAAc,EAAE,IAAY;QACzE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,IAAI,UAAU,CACnB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EACnD,IAAI,CAAC,UAAU,CAChB,CAAC;IACJ,CAAC;IAED,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YAC1D,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;SAC7C;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;EAuBE"} \ No newline at end of file +{"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,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IAG1D,YAAY,UAAkB,EAAE,KAAa,EAAE,MAAc,EAAE,IAAY;QACzE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,IAAI,UAAU,CACnB,GAAG,IAAI,CAAC,oBAAoB,EAAE,EAC9B,UAAU,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CACpD,CAAC;IACJ,CAAC;IAED,IAAI;QACF,MAAM,GAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YAC1D,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;SAC7C;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"} \ No newline at end of file diff --git a/js/tile.js b/js/tile.js index 5bd62f9..73e8cc7 100644 --- a/js/tile.js +++ b/js/tile.js @@ -1,8 +1,12 @@ export class Tile { - constructor(width, height) { + constructor(width, height, masks) { + this.masks = masks; this.elem = document.createElement('div'); this.elem.style.gridColumnEnd = `span ${width}`; this.elem.style.gridRowEnd = `span ${height}`; + // Hack to avoid floating point stitching gaps + this.elem.style.width = 'calc(100% + 1px)'; + this.elem.style.height = 'calc(100% + 1px)'; } remove() { this.elem.remove(); diff --git a/js/tile.js.map b/js/tile.js.map index 92a0334..0301310 100644 --- a/js/tile.js.map +++ b/js/tile.js.map @@ -1 +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;IAID,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"tile.js","sourceRoot":"","sources":["../ts/tile.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,IAAI;IAIxB,YAAY,KAAa,EAAE,MAAc,EAAE,KAAwB;QACjE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,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;QAC9C,8CAA8C;QAC9C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,kBAAkB,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,kBAAkB,CAAC;IAC9C,CAAC;IAID,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;CACF"} \ No newline at end of file diff --git a/js/tile_factory.js b/js/tile_factory.js index 11dd0d7..a09b639 100644 --- a/js/tile_factory.js +++ b/js/tile_factory.js @@ -1,8 +1,19 @@ export class TileFactory { constructor(layer_name, width, height) { + this.masks = new Map(); this.layer_name = layer_name; this.width = width; this.height = height; } + add_mask(name, mask) { + this.masks.set(name, mask); + } + tile_args() { + return [ + this.width, + this.height, + this.masks, + ]; + } } //# 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 53b0ab4..3a1f150 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":"AAEA,MAAM,OAAgB,WAAW;IAK/B,YAAY,UAAkB,EAAE,KAAa,EAAE,MAAc;QAC3D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CAKF"} \ No newline at end of file +{"version":3,"file":"tile_factory.js","sourceRoot":"","sources":["../ts/tile_factory.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,WAAW;IAM/B,YAAY,UAAkB,EAAE,KAAa,EAAE,MAAc;QAF7D,UAAK,GAAsB,IAAI,GAAG,EAAgB,CAAC;QAGjD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,IAAU;QAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,OAAO;YACL,IAAI,CAAC,KAAK;YACV,IAAI,CAAC,MAAM;YACX,IAAI,CAAC,KAAK;SACX,CAAC;IACJ,CAAC;CAKF"} \ No newline at end of file diff --git a/js/tiles.js b/js/tiles.js index 727d42e..b16c460 100644 --- a/js/tiles.js +++ b/js/tiles.js @@ -1,35 +1,139 @@ import { LayeredTileFactory } from './layered_tile_factory.js'; +import { Mask } from './mask.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, '{tileset}/road-lr.svg'); -export const ROAD_TB = new SimpleTileFactory('road', 4, 6, '{tileset}/road-tb.svg'); +export const ROAD_LR = new SimpleTileFactory('road', 12, 8, '{tileset}/road-lr.svg'); +ROAD_LR.add_mask('walkable', Mask.from_string(` +............ +............ +XXXXXXXXXXXX +XXXXXXXXXXXX +XXXXXXXXXXXX +XXXXXXXXXXXX +............ +............ +`)); +export const ROAD_TB = new SimpleTileFactory('road', 8, 12, '{tileset}/road-tb.svg'); +ROAD_TB.add_mask('walkable', Mask.from_string(` +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +`)); // Elbow -export const ROAD_BL = new SimpleTileFactory('road', 6, 6, '{tileset}/road-bl.svg'); -export const ROAD_BR = new SimpleTileFactory('road', 6, 6, '{tileset}/road-br.svg'); -export const ROAD_TL = new SimpleTileFactory('road', 6, 6, '{tileset}/road-tl.svg'); -export const ROAD_TR = new SimpleTileFactory('road', 6, 6, '{tileset}/road-tr.svg'); +export const ROAD_BL = new SimpleTileFactory('road', 12, 12, '{tileset}/road-bl.svg'); +ROAD_BL.add_mask('walkable', Mask.from_string(` +............ +............ +XXX......... +XXXXX....... +XXXXXXX..... +XXXXXXXX.... +..XXXXXX.... +....XXXXX... +.....XXXX... +.....XXXXX.. +......XXXX.. +......XXXX.. +`)); +export const ROAD_BR = new SimpleTileFactory('road', 12, 12, '{tileset}/road-br.svg'); +ROAD_BR.add_mask('walkable', Mask.from_string(` +............ +............ +.........XXX +.......XXXXX +.....XXXXXXX +....XXXXXXXX +....XXXXXX.. +...XXXXX.... +...XXXX..... +..XXXXX..... +..XXXX...... +..XXXX...... +`)); +export const ROAD_TL = new SimpleTileFactory('road', 12, 12, '{tileset}/road-tl.svg'); +ROAD_TL.add_mask('walkable', Mask.from_string(` +......XXXX.. +......XXXX.. +.....XXXXX.. +.....XXXX... +....XXXXX... +..XXXXXX.... +XXXXXXXX.... +XXXXXXX..... +XXXXX....... +XXX......... +............ +............ +`)); +export const ROAD_TR = new SimpleTileFactory('road', 12, 12, '{tileset}/road-tr.svg'); +ROAD_TR.add_mask('walkable', Mask.from_string(` +..XXXX...... +..XXXX...... +..XXXXX..... +...XXXX..... +...XXXXX.... +....XXXXXX.. +....XXXXXXXX +.....XXXXXXX +.......XXXXX +.........XXX +............ +............ +`)); // T -export const ROAD_BLR = new SimpleTileFactory('road', 8, 6, '{tileset}/road-blr.svg'); -export const ROAD_TLR = new SimpleTileFactory('road', 8, 6, '{tileset}/road-tlr.svg'); -export const ROAD_LTB = new SimpleTileFactory('road', 6, 8, '{tileset}/road-ltb.svg'); -export const ROAD_RTB = new SimpleTileFactory('road', 6, 8, '{tileset}/road-rtb.svg'); +export const ROAD_BLR = new SimpleTileFactory('road', 16, 12, '{tileset}/road-blr.svg'); +// TODO: add_mask(walkable) +export const ROAD_TLR = new SimpleTileFactory('road', 16, 12, '{tileset}/road-tlr.svg'); +// TODO: add_mask(walkable) +export const ROAD_LTB = new SimpleTileFactory('road', 12, 16, '{tileset}/road-ltb.svg'); +// TODO: add_mask(walkable) +export const ROAD_RTB = new SimpleTileFactory('road', 12, 16, '{tileset}/road-rtb.svg'); +// TODO: add_mask(walkable) // + -export const ROAD_TBLR = new SimpleTileFactory('road', 8, 8, '{tileset}/road-tblr.svg'); +export const ROAD_TBLR = new SimpleTileFactory('road', 16, 16, '{tileset}/road-tblr.svg'); +ROAD_TBLR.add_mask('walkable', Mask.from_string(` +......XXXX...... +......XXXX...... +......XXXX...... +.....XXXXXX..... +....XXXXXXXX.... +...XXXXXXXXXX... +XXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXX +...XXXXXXXXXX... +....XXXXXXXX.... +.....XXXXXX..... +......XXXX...... +......XXXX...... +......XXXX...... +`)); // Tower base -export const EMPTY = new SimpleTileFactory('road', 4, 2, '{tileset}/empty.svg'); +export const EMPTY = new SimpleTileFactory('road', 8, 4, '{tileset}/empty.svg'); // Straight -export const RIVER_LR = new SimpleTileFactory('water', 6, 4, '{tileset}/river-lr.svg'); -export const RIVER_TB = new SimpleTileFactory('water', 4, 6, '{tileset}/river-tb.svg'); +export const RIVER_LR = new SimpleTileFactory('water', 12, 8, '{tileset}/river-lr.svg'); +export const RIVER_TB = new SimpleTileFactory('water', 8, 12, '{tileset}/river-tb.svg'); // Elbow -export const RIVER_BR = new SimpleTileFactory('water', 6, 6, '{tileset}/river-br.svg'); -export const RIVER_BL = new SimpleTileFactory('water', 6, 6, '{tileset}/river-bl.svg'); -export const RIVER_TR = new SimpleTileFactory('water', 6, 6, '{tileset}/river-tr.svg'); -export const RIVER_TL = new SimpleTileFactory('water', 6, 6, '{tileset}/river-tl.svg'); -export const BRIDGE_LR = new SimpleTileFactory('bridge', 6, 4, '{tileset}/bridge-lr.svg'); -const tower_fireball1_back = new SimpleTileFactory('surface', 4, 4, 'tower/fireball1-back.svg'); -const tower_fireball1 = new SimpleTileFactory('surface', 4, 4, 'tower/fireball1.svg'); -const tower_fireball1_front = new SimpleTileFactory('surface', 4, 4, 'tower/fireball1-front.svg'); +export const RIVER_BR = new SimpleTileFactory('water', 12, 12, '{tileset}/river-br.svg'); +export const RIVER_BL = new SimpleTileFactory('water', 12, 12, '{tileset}/river-bl.svg'); +export const RIVER_TR = new SimpleTileFactory('water', 12, 12, '{tileset}/river-tr.svg'); +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'); +const tower_fireball1_back = new SimpleTileFactory('surface', 8, 8, 'tower/fireball1-back.svg'); +const tower_fireball1 = new SimpleTileFactory('surface', 8, 8, 'tower/fireball1.svg'); +const tower_fireball1_front = new SimpleTileFactory('surface', 8, 8, 'tower/fireball1-front.svg'); for (const tile_factory of [tower_fireball1_back, tower_fireball1_front]) { tile_factory.add_animation('fire', [ { @@ -56,18 +160,18 @@ export const TOWER_FIREBALL1 = new LayeredTileFactory([ tower_fireball1, tower_fireball1_front, ]); -export const FIREBALL = new SimpleTileFactory('projectile', 2, 2, 'tower/fireball.svg'); +export const FIREBALL = new SimpleTileFactory('projectile', 4, 4, 'tower/fireball.svg'); export const FIREBALL_IMPACT = new SequenceTileFactory([ - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact1.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact2.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact3.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact4.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact5.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact6.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact7.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact8.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact1.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact2.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact3.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact4.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact5.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact6.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact7.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact8.svg'), ], 50, false); -const greenaxe_axe = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/axe.svg'); +const greenaxe_axe = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/axe.svg'); greenaxe_axe.add_animation('walk', [ { 'transform': 'scaleX(1.01) scaleY(1.014) translateX(-0.45%) translateY(0.01%) rotate(0.1deg)', @@ -92,7 +196,7 @@ greenaxe_axe.add_animation('walk', [ 'iterations': Infinity, 'direction': 'alternate', }); -const greenaxe_rightleg = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/rightleg.svg'); +const greenaxe_rightleg = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/rightleg.svg'); greenaxe_rightleg.add_animation('walk', [ { 'transform': 'rotate(4.6deg) scaleX(1.025) scaleY(1) translateX(3.11%) translateY(1%)', @@ -117,7 +221,7 @@ greenaxe_rightleg.add_animation('walk', [ 'iterations': Infinity, 'direction': 'alternate', }); -const greenaxe_leftleg = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/leftleg.svg'); +const greenaxe_leftleg = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/leftleg.svg'); greenaxe_leftleg.add_animation('walk', [ { 'transform': 'rotate(-1deg) scaleX(1.024) scaleY(1.005) translateX(-0.7%) translateY(-0.16%)', @@ -142,7 +246,7 @@ greenaxe_leftleg.add_animation('walk', [ 'iterations': Infinity, 'direction': 'alternate', }); -const greenaxe_torso = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/torso.svg'); +const greenaxe_torso = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/torso.svg'); greenaxe_torso.add_animation('walk', [ { 'transform': 'rotate(1.3deg) scaleX(1.021) scaleY(1) translateX(0.61%) translateY(0.67%)', @@ -167,7 +271,7 @@ greenaxe_torso.add_animation('walk', [ 'iterations': Infinity, 'direction': 'alternate', }); -const greenaxe_head = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/head.svg'); +const greenaxe_head = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/head.svg'); greenaxe_head.add_animation('walk', [ { 'transform': 'rotate(-0.8deg) scaleX(1.027) scaleY(0.993) translateX(0.44%) translateY(-0.35%)', @@ -192,7 +296,7 @@ greenaxe_head.add_animation('walk', [ 'iterations': Infinity, 'direction': 'alternate', }); -const greenaxe_rightarm = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/rightarm.svg'); +const greenaxe_rightarm = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/rightarm.svg'); greenaxe_rightarm.add_animation('walk', [ { 'transform': 'rotate(1.1deg) scaleX(1) scaleY(1.009) translateX(0.12%) translateY(0.54%)', @@ -217,7 +321,7 @@ greenaxe_rightarm.add_animation('walk', [ 'iterations': Infinity, 'direction': 'alternate', }); -const greenaxe_leftarm = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/leftarm.svg'); +const greenaxe_leftarm = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/leftarm.svg'); greenaxe_leftarm.add_animation('walk', [ { 'transform': 'rotate(0deg) scaleX(1) scaleY(1) translateX(0%) translateY(0%)', diff --git a/js/tiles.js.map b/js/tiles.js.map index b7dca22..e00a551 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":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,SAAS;AACT,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC;AACrF,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC;;;;;;;;;CAS7C,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACrF,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC;;;;;;;;;;;;;;CAc7C,CAAC,CAAC,CAAC;AAEJ,QAAQ;AACR,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACtF,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC;;;;;;;;;;;;;CAa7C,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACtF,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC;;;;;;;;;;;;;CAa7C,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACtF,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC;;;;;;;;;;;;;CAa7C,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACtF,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC;;;;;;;;;;;;;CAa7C,CAAC,CAAC,CAAC;AAEJ,IAAI;AACJ,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;AACxF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;AACxF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;AACxF,2BAA2B;AAC3B,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;AACxF,2BAA2B;AAE3B,IAAI;AACJ,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,yBAAyB,CAAC,CAAC;AAC1F,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;CAiB/C,CAAC,CAAC,CAAC;AAEJ,aAAa;AACb,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;AAEhF,WAAW;AACX,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,wBAAwB,CAAC,CAAC;AACxF,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAExF,QAAQ;AACR,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,wBAAwB,CAAC,CAAC;AAEzF,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,EAAE,yBAAyB,CAAC,CAAC;AAE3F,MAAM,oBAAoB,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC;AAChG,MAAM,eAAe,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;AACtF,MAAM,qBAAqB,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC;AAElG,KAAK,MAAM,YAAY,IAAI,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,EAAE;IACxE,YAAY,CAAC,aAAa,CACxB,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,CAAC,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,mBAAmB,CAAC;IACrD,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC;IACpE,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC;IACpE,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC;IACpE,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC;IACpE,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC;IACpE,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC;IACpE,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC;IACpE,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC;CACrE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAEd,MAAM,YAAY,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC;AACxF,YAAY,CAAC,aAAa,CACxB,MAAM,EACN;IACE;QACE,WAAW,EAAE,gFAAgF;KAC9F;IACD;QACE,WAAW,EAAE,gFAAgF;KAC9F;IACD;QACE,WAAW,EAAE,gFAAgF;KAC9F;IACD;QACE,WAAW,EAAE,8EAA8E;KAC5F;IACD;QACE,WAAW,EAAE,kFAAkF;KAChG;IACD;QACE,WAAW,EAAE,iFAAiF;KAC/F;CACF,EACD;IACE,UAAU,EAAE,GAAG;IACf,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,WAAW;CACzB,CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,+BAA+B,CAAC,CAAC;AAClG,iBAAiB,CAAC,aAAa,CAC7B,MAAM,EACN;IACE;QACE,WAAW,EAAE,yEAAyE;KACvF;IACD;QACE,WAAW,EAAE,+EAA+E;KAC7F;IACD;QACE,WAAW,EAAE,iFAAiF;KAC/F;IACD;QACE,WAAW,EAAE,mFAAmF;KACjG;IACD;QACE,WAAW,EAAE,mFAAmF;KACjG;IACD;QACE,WAAW,EAAE,mFAAmF;KACjG;CACF,EACD;IACE,UAAU,EAAE,GAAG;IACf,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,WAAW;CACzB,CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,8BAA8B,CAAC,CAAC;AAChG,gBAAgB,CAAC,aAAa,CAC5B,MAAM,EACN;IACE;QACE,WAAW,EAAE,gFAAgF;KAC9F;IACD;QACE,WAAW,EAAE,iFAAiF;KAC/F;IACD;QACE,WAAW,EAAE,+EAA+E;KAC7F;IACD;QACE,WAAW,EAAE,0EAA0E;KACxF;IACD;QACE,WAAW,EAAE,0EAA0E;KACxF;IACD;QACE,WAAW,EAAE,2EAA2E;KACzF;CACF,EACD;IACE,UAAU,EAAE,GAAG;IACf,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,WAAW;CACzB,CACF,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,4BAA4B,CAAC,CAAC;AAC5F,cAAc,CAAC,aAAa,CAC1B,MAAM,EACN;IACE;QACE,WAAW,EAAE,4EAA4E;KAC1F;IACD;QACE,WAAW,EAAE,6EAA6E;KAC3F;IACD;QACE,WAAW,EAAE,+EAA+E;KAC7F;IACD;QACE,WAAW,EAAE,gFAAgF;KAC9F;IACD;QACE,WAAW,EAAE,gFAAgF;KAC9F;IACD;QACE,WAAW,EAAE,gFAAgF;KAC9F;CACF,EACD;IACE,UAAU,EAAE,GAAG;IACf,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,WAAW;CACzB,CACF,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,2BAA2B,CAAC,CAAC;AAC1F,aAAa,CAAC,aAAa,CACzB,MAAM,EACN;IACE;QACE,WAAW,EAAE,kFAAkF;KAChG;IACD;QACE,WAAW,EAAE,iFAAiF;KAC/F;IACD;QACE,WAAW,EAAE,gFAAgF;KAC9F;IACD;QACE,WAAW,EAAE,gFAAgF;KAC9F;IACD;QACE,WAAW,EAAE,iFAAiF;KAC/F;IACD;QACE,WAAW,EAAE,iFAAiF;KAC/F;CACF,EACD;IACE,UAAU,EAAE,GAAG;IACf,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,WAAW;CACzB,CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,+BAA+B,CAAC,CAAC;AAClG,iBAAiB,CAAC,aAAa,CAC7B,MAAM,EACN;IACE;QACE,WAAW,EAAE,4EAA4E;KAC1F;IACD;QACE,WAAW,EAAE,iFAAiF;KAC/F;IACD;QACE,WAAW,EAAE,+EAA+E;KAC7F;IACD;QACE,WAAW,EAAE,gFAAgF;KAC9F;IACD;QACE,WAAW,EAAE,iFAAiF;KAC/F;IACD;QACE,WAAW,EAAE,kFAAkF;KAChG;CACF,EACD;IACE,UAAU,EAAE,GAAG;IACf,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,WAAW;CACzB,CACF,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,8BAA8B,CAAC,CAAC;AAChG,gBAAgB,CAAC,aAAa,CAC5B,MAAM,EACN;IACE;QACE,WAAW,EAAE,gEAAgE;KAC9E;IACD;QACE,WAAW,EAAE,iEAAiE;KAC/E;IACD;QACE,WAAW,EAAE,wEAAwE;KACtF;IACD;QACE,WAAW,EAAE,yEAAyE;KACvF;IACD;QACE,WAAW,EAAE,0EAA0E;KACxF;IACD;QACE,WAAW,EAAE,0EAA0E;KACxF;CACF,EACD;IACE,UAAU,EAAE,GAAG;IACf,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,WAAW;CACzB,CACF,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC;IAC7C,gBAAgB;IAChB,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,aAAa;IACb,YAAY;IACZ,iBAAiB;CAClB,CAAC,CAAC"} \ No newline at end of file diff --git a/js/tower.js b/js/tower.js index 6e61bdf..4522cb6 100644 --- a/js/tower.js +++ b/js/tower.js @@ -18,77 +18,93 @@ export function main() { 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('wasteland'); - grid.set_layers(['road', 'water', 'bridge', 'surface', 'projectile']); - grid.add_tile(tiles.ROAD_TB, 20, 46); - grid.add_tile(tiles.ROAD_BL, 18, 40); - grid.add_tile(tiles.ROAD_TR, 12, 38); - grid.add_tile(tiles.ROAD_BR, 12, 32); - grid.add_tile(tiles.ROAD_TL, 18, 30); - grid.add_tile(tiles.ROAD_BL, 18, 24); - grid.add_tile(tiles.ROAD_TR, 12, 22); - grid.add_tile(tiles.ROAD_BR, 12, 16); - grid.add_tile(tiles.ROAD_LR, 18, 16); - grid.add_tile(tiles.ROAD_TBLR, 24, 14); - grid.add_tile(tiles.ROAD_TB, 26, 2); - grid.add_tile(tiles.ROAD_TB, 26, 8); - grid.add_tile(tiles.ROAD_TB, 26, 22); - grid.add_tile(tiles.ROAD_TB, 26, 28); - grid.add_tile(tiles.ROAD_TB, 26, 34); - grid.add_tile(tiles.ROAD_TB, 26, 40); - grid.add_tile(tiles.ROAD_TB, 26, 46); - grid.add_tile(tiles.ROAD_BL, 32, 16); - grid.add_tile(tiles.ROAD_TB, 34, 22); - grid.add_tile(tiles.ROAD_TB, 34, 28); - grid.add_tile(tiles.ROAD_TB, 34, 34); - grid.add_tile(tiles.ROAD_TR, 34, 40); - grid.add_tile(tiles.ROAD_LR, 40, 42); - grid.add_tile(tiles.ROAD_LR, 46, 42); - grid.add_tile(tiles.ROAD_TL, 52, 40); - grid.add_tile(tiles.ROAD_BL, 52, 34); - grid.add_tile(tiles.ROAD_LR, 46, 34); - grid.add_tile(tiles.ROAD_TR, 40, 32); - grid.add_tile(tiles.ROAD_BR, 40, 26); - grid.add_tile(tiles.ROAD_LR, 46, 26); - grid.add_tile(tiles.ROAD_TL, 52, 24); - grid.add_tile(tiles.ROAD_BL, 52, 18); - grid.add_tile(tiles.ROAD_LR, 46, 18); - grid.add_tile(tiles.ROAD_TR, 40, 16); - grid.add_tile(tiles.ROAD_BR, 40, 10); - grid.add_tile(tiles.ROAD_LR, 46, 10); - grid.add_tile(tiles.ROAD_LR, 52, 10); - grid.add_tile(tiles.ROAD_LR, 58, 10); - grid.add_tile(tiles.EMPTY, 30, 20); - grid.add_tile(tiles.RIVER_TB, 47, 46); - grid.add_tile(tiles.RIVER_TB, 47, 40); - grid.add_tile(tiles.RIVER_TB, 47, 34); - grid.add_tile(tiles.RIVER_TB, 47, 28); - grid.add_tile(tiles.RIVER_TB, 47, 22); - grid.add_tile(tiles.RIVER_TB, 47, 16); - grid.add_tile(tiles.RIVER_TB, 47, 10); - grid.add_tile(tiles.RIVER_TB, 47, 4); - grid.add_tile(tiles.BRIDGE_LR, 46, 42); - grid.add_tile(tiles.BRIDGE_LR, 46, 34); - grid.add_tile(tiles.BRIDGE_LR, 46, 26); - grid.add_tile(tiles.BRIDGE_LR, 46, 18); - grid.add_tile(tiles.BRIDGE_LR, 46, 10); + const grid = new Grid(real, 140, 112, 'wasteland', ['road', 'water', 'bridge', 'surface', 'projectile'], ['walkable', 'not-flyable']); + grid.add_tile(tiles.ROAD_TB, 40, 92); + grid.add_tile(tiles.ROAD_BL, 36, 80); + grid.add_tile(tiles.ROAD_TR, 24, 76); + grid.add_tile(tiles.ROAD_BR, 24, 64); + grid.add_tile(tiles.ROAD_TL, 36, 60); + grid.add_tile(tiles.ROAD_BL, 36, 48); + grid.add_tile(tiles.ROAD_TR, 24, 44); + grid.add_tile(tiles.ROAD_BR, 24, 32); + grid.add_tile(tiles.ROAD_LR, 36, 32); + grid.add_tile(tiles.ROAD_TBLR, 48, 28); + grid.add_tile(tiles.ROAD_TB, 52, 4); + grid.add_tile(tiles.ROAD_TB, 52, 16); + grid.add_tile(tiles.ROAD_TB, 52, 44); + grid.add_tile(tiles.ROAD_TB, 52, 56); + grid.add_tile(tiles.ROAD_TB, 52, 68); + grid.add_tile(tiles.ROAD_TB, 52, 80); + grid.add_tile(tiles.ROAD_TB, 52, 92); + grid.add_tile(tiles.ROAD_BL, 64, 32); + grid.add_tile(tiles.ROAD_TB, 68, 44); + grid.add_tile(tiles.ROAD_TB, 68, 56); + grid.add_tile(tiles.ROAD_TB, 68, 68); + grid.add_tile(tiles.ROAD_TR, 68, 80); + grid.add_tile(tiles.ROAD_LR, 80, 84); + grid.add_tile(tiles.ROAD_LR, 92, 84); + grid.add_tile(tiles.ROAD_TL, 104, 80); + grid.add_tile(tiles.ROAD_BL, 104, 68); + grid.add_tile(tiles.ROAD_LR, 92, 68); + grid.add_tile(tiles.ROAD_TR, 80, 64); + grid.add_tile(tiles.ROAD_BR, 80, 52); + grid.add_tile(tiles.ROAD_LR, 92, 52); + grid.add_tile(tiles.ROAD_TL, 104, 48); + grid.add_tile(tiles.ROAD_BL, 104, 36); + grid.add_tile(tiles.ROAD_LR, 92, 36); + grid.add_tile(tiles.ROAD_TR, 80, 32); + grid.add_tile(tiles.ROAD_BR, 80, 20); + grid.add_tile(tiles.ROAD_LR, 92, 20); + grid.add_tile(tiles.ROAD_LR, 104, 20); + grid.add_tile(tiles.ROAD_LR, 116, 20); + grid.add_tile(tiles.EMPTY, 60, 40); + grid.add_tile(tiles.RIVER_TB, 94, 92); + grid.add_tile(tiles.RIVER_TB, 94, 80); + grid.add_tile(tiles.RIVER_TB, 94, 68); + grid.add_tile(tiles.RIVER_TB, 94, 56); + grid.add_tile(tiles.RIVER_TB, 94, 44); + grid.add_tile(tiles.RIVER_TB, 94, 32); + grid.add_tile(tiles.RIVER_TB, 94, 20); + grid.add_tile(tiles.RIVER_TB, 94, 8); + grid.add_tile(tiles.BRIDGE_LR, 92, 84); + grid.add_tile(tiles.BRIDGE_LR, 92, 68); + grid.add_tile(tiles.BRIDGE_LR, 92, 52); + grid.add_tile(tiles.BRIDGE_LR, 92, 36); + grid.add_tile(tiles.BRIDGE_LR, 92, 20); + { + const m = grid.masks.get('walkable').mask; + for (let x = 0; x < m.length; x++) { + for (let y = 0; y < m[x].length; y++) { + if (!m[x][y]) { + continue; + } + const div = document.createElement('div'); + real.appendChild(div); + div.style.gridColumnStart = `${x + 1}`; + div.style.gridRowStart = `${y + 1}`; + div.style.gridColumnEnd = 'span 1'; + div.style.gridRowEnd = 'span 1'; + div.style.backgroundColor = 'orange'; + div.style.opacity = '0.3'; + div.style.zIndex = '1000000'; + } + } + } function rand(min, max) { return Math.round(Math.random() * (max - min) + min); } - const tower = grid.add_tile(tiles.TOWER_FIREBALL1, 30, 28); + const tower = grid.add_tile(tiles.TOWER_FIREBALL1, 60, 56); setInterval(() => { tower.play('fire'); - const target_relative_x = rand(-20, 20); - const target_relative_y = rand(-10, 20); + 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); - grid.add_tile(factory, 31, 27); + grid.add_tile(factory, 62, 54); setTimeout(() => { - grid.add_tile(tiles.FIREBALL_IMPACT, 31 + target_relative_x, 27 + target_relative_y); + grid.add_tile(tiles.FIREBALL_IMPACT, 62 + target_relative_x, 54 + target_relative_y); }, factory.duration); }, 3250); - const greenaxe = grid.add_tile(tiles.GREENAXE, 30, 16); + const greenaxe = grid.add_tile(tiles.GREENAXE, 60, 32); greenaxe.play('walk'); greenaxe.elem.style.transitionProperty = 'top,left'; greenaxe.elem.style.transitionDuration = '25s'; diff --git a/js/tower.js.map b/js/tower.js.map index f8c36fa..e6a9bc2 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;IA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"} \ No newline at end of file +{"version":3,"file":"tower.js","sourceRoot":"","sources":["../ts/tower.ts"],"names":[],"mappings":"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;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,GAAG,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtC,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,GAAG,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACtC,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,CA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"} \ No newline at end of file diff --git a/ts/animatable_tile.ts b/ts/animatable_tile.ts index b75d4ea..87750f0 100644 --- a/ts/animatable_tile.ts +++ b/ts/animatable_tile.ts @@ -1,10 +1,11 @@ +import { Mask } from './mask.js'; import { Tile } from './tile.js'; export abstract class AnimatableTile extends Tile { animations: Map; - constructor(width: number, height: number, animations: Map) { - super(width, height); + constructor(width: number, height: number, masks: Map, animations: Map) { + super(width, height, masks); this.animations = animations; } diff --git a/ts/animatable_tile_factory.ts b/ts/animatable_tile_factory.ts index 70239ae..10d2148 100644 --- a/ts/animatable_tile_factory.ts +++ b/ts/animatable_tile_factory.ts @@ -1,3 +1,4 @@ +import { Mask } from './mask.js'; import { TileFactory } from './tile_factory.js'; export abstract class AnimatableTileFactory extends TileFactory { @@ -7,5 +8,12 @@ export abstract class AnimatableTileFactory extends TileFactory { this.animations.set(name, [keyframes, options]); } + animatable_tile_args(): [number, number, Map, Map] { + return [ + ...super.tile_args(), + this.animations, + ]; + } + abstract copy(): AnimatableTileFactory; } diff --git a/ts/grid.ts b/ts/grid.ts index 94c9be9..8dc64ef 100644 --- a/ts/grid.ts +++ b/ts/grid.ts @@ -1,53 +1,28 @@ import { Layer } from './layer.js'; +import { Mask } from './mask.js'; import { Tile } from './tile.js'; import { TileFactory } from './tile_factory.js'; export class Grid { prnt: HTMLElement; - tileset: string; layers: Map = new Map(); - height: number; + masks: Map = new Map(); - constructor(prnt: HTMLElement) { + constructor(prnt: HTMLElement, width: number, height: number, tileset: string, layers: string[], masks: string[]) { this.prnt = prnt; + this.prnt.style.display = 'grid'; - } + this.prnt.style.gridTemplateColumns = `repeat(${width}, 1fr)`; + this.prnt.style.gridTemplateRows = `repeat(${height}, 1fr)`; + this.prnt.style.backgroundImage = `url("images/${tileset}/land.svg")`; - set_size(x: number, y: number) { - this.height = y; - - this.prnt.style.gridTemplateColumns = `repeat(${x}, 1fr)`; - this.prnt.style.gridTemplateRows = `repeat(${y}, 1fr)`; - } - - set_tileset(set: string) { - this.tileset = set; - this.prnt.style.backgroundImage = `url("images/${this.tileset}/land.svg")`; - - // TODO: Notify layers - } - - set_layers(layers: string[]) { - const newNames: Set = new Set(layers); - - for (const name of newNames) { - if (!this.layers.has(name)) { - const layer = new Layer(); - layer.set_tileset(this.tileset); - this.layers.set(name, layer); - } + for (let i = 0; i <= layers.length; i++) { + const name = layers[i]; + this.layers.set(name, new Layer(i * height, tileset)); } - for (const name of this.layers.keys()) { - if (!newNames.has(name)) { - // TODO: Notify layer to tear down - this.layers.delete(name); - } - } - - for (let i = 0; i < layers.length; i++) { - const layer = this.layers.get(layers[i])!; - layer.set_level(i * this.height); + for (const name of masks) { + this.masks.set(name, new Mask(width, height)); } } @@ -59,6 +34,10 @@ export class Grid { tile.elem.style.gridRowStart = `${y + 1}`; this.prnt.appendChild(tile.elem); + for (const [name, mask] of tile.masks) { + this.masks.get(name)!.update(x, y, mask); + } + return tile; } } diff --git a/ts/layer.ts b/ts/layer.ts index b916f2f..228a736 100644 --- a/ts/layer.ts +++ b/ts/layer.ts @@ -5,11 +5,8 @@ export class Layer { level: number; tileset: string; - set_level(level: number) { + constructor(level: number, tileset: string) { this.level = level; - } - - set_tileset(tileset: string) { this.tileset = tileset; } diff --git a/ts/layered_tile.ts b/ts/layered_tile.ts index ec39c32..6c5bb1a 100644 --- a/ts/layered_tile.ts +++ b/ts/layered_tile.ts @@ -1,10 +1,11 @@ +import { Mask } from './mask.js'; import { Tile } from './tile.js'; export class LayeredTile extends Tile { tiles: Tile[]; - constructor(width: number, height: number, tiles: Tile[]) { - super(width, height); + constructor(width: number, height: number, masks: Map, tiles: Tile[]) { + super(width, height, masks); this.tiles = []; this.elem.style.position = 'relative'; diff --git a/ts/layered_tile_factory.ts b/ts/layered_tile_factory.ts index c59d046..b87e86d 100644 --- a/ts/layered_tile_factory.ts +++ b/ts/layered_tile_factory.ts @@ -20,7 +20,7 @@ export class LayeredTileFactory extends TileFactory { tiles.push(tile_factory.build(tileset)); } - return new LayeredTile(this.width, this.height, tiles); + return new LayeredTile(...this.tile_args(), tiles); } copy(): LayeredTileFactory { diff --git a/ts/sequence_tile.ts b/ts/sequence_tile.ts index ed58002..5120131 100644 --- a/ts/sequence_tile.ts +++ b/ts/sequence_tile.ts @@ -1,9 +1,10 @@ import { AnimatableTile } from './animatable_tile.js'; +import { Mask } from './mask.js'; import { Tile } from './tile.js'; export class SequenceTile extends AnimatableTile { - constructor(width: number, height: number, animations: Map, tiles: Tile[], delay: number, repeat: boolean) { - super(width, height, animations); + constructor(width: number, height: number, masks: Map, animations: Map, tiles: Tile[], delay: number, repeat: boolean) { + super(width, height, masks, animations); this.elem.style.position = 'relative'; diff --git a/ts/sequence_tile_factory.ts b/ts/sequence_tile_factory.ts index 4eaacde..8a34ab5 100644 --- a/ts/sequence_tile_factory.ts +++ b/ts/sequence_tile_factory.ts @@ -25,7 +25,7 @@ export class SequenceTileFactory extends AnimatableTileFactory { tiles.push(tile_factory.build(tileset)); } - return new SequenceTile(this.width, this.height, this.animations, tiles, this.delay, this.repeat); + return new SequenceTile(...this.animatable_tile_args(), tiles, this.delay, this.repeat); } copy(): SequenceTileFactory { diff --git a/ts/simple_tile.ts b/ts/simple_tile.ts index 1bd6f4e..b74531e 100644 --- a/ts/simple_tile.ts +++ b/ts/simple_tile.ts @@ -1,8 +1,9 @@ import { AnimatableTile } from './animatable_tile.js'; +import { Mask } from './mask.js'; export class SimpleTile extends AnimatableTile { - constructor(width: number, height: number, image_url: string, animations: Map) { - super(width, height, animations); + constructor(width: number, height: number, masks: Map, animations: Map, image_url: string) { + super(width, height, masks, animations); this.elem.style.backgroundImage = `url('${encodeURIComponent(image_url)}')`; this.elem.style.backgroundSize = 'cover'; diff --git a/ts/simple_tile_factory.ts b/ts/simple_tile_factory.ts index 658c991..fbf2104 100644 --- a/ts/simple_tile_factory.ts +++ b/ts/simple_tile_factory.ts @@ -11,10 +11,8 @@ export class SimpleTileFactory extends AnimatableTileFactory { build(tileset: string): SimpleTile { return new SimpleTile( - this.width, - this.height, + ...this.animatable_tile_args(), `images/${this.name.replace('{tileset}', tileset)}`, - this.animations, ); } @@ -26,28 +24,3 @@ export class SimpleTileFactory extends AnimatableTileFactory { return stf; } } - -/* -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 index c2ac9c2..5ca2cab 100644 --- a/ts/tile.ts +++ b/ts/tile.ts @@ -1,10 +1,18 @@ +import { Mask } from './mask.js'; + export abstract class Tile { elem: HTMLElement; + masks: Map; + + constructor(width: number, height: number, masks: Map) { + this.masks = masks; - constructor(width: number, height: number) { this.elem = document.createElement('div'); this.elem.style.gridColumnEnd = `span ${width}`; this.elem.style.gridRowEnd = `span ${height}`; + // Hack to avoid floating point stitching gaps + this.elem.style.width = 'calc(100% + 1px)'; + this.elem.style.height = 'calc(100% + 1px)'; } abstract play(name: string): Animation | undefined; diff --git a/ts/tile_factory.ts b/ts/tile_factory.ts index 121dbfb..2a957db 100644 --- a/ts/tile_factory.ts +++ b/ts/tile_factory.ts @@ -1,9 +1,11 @@ +import { Mask } from './mask.js'; import { Tile } from './tile.js'; export abstract class TileFactory { layer_name: string; width: number; height: number; + masks: Map = new Map(); constructor(layer_name: string, width: number, height: number) { this.layer_name = layer_name; @@ -11,6 +13,18 @@ export abstract class TileFactory { this.height = height; } + add_mask(name: string, mask: Mask) { + this.masks.set(name, mask); + } + + tile_args(): [number, number, Map] { + return [ + this.width, + this.height, + this.masks, + ]; + } + abstract build(tileset: string): Tile; abstract copy(): TileFactory; diff --git a/ts/tiles.ts b/ts/tiles.ts index 0d6797d..9304fbc 100644 --- a/ts/tiles.ts +++ b/ts/tiles.ts @@ -1,44 +1,152 @@ import { LayeredTileFactory } from './layered_tile_factory.js'; +import { Mask } from './mask.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, '{tileset}/road-lr.svg'); -export const ROAD_TB = new SimpleTileFactory('road', 4, 6, '{tileset}/road-tb.svg'); +export const ROAD_LR = new SimpleTileFactory('road', 12, 8, '{tileset}/road-lr.svg'); +ROAD_LR.add_mask('walkable', Mask.from_string(` +............ +............ +XXXXXXXXXXXX +XXXXXXXXXXXX +XXXXXXXXXXXX +XXXXXXXXXXXX +............ +............ +`)); + +export const ROAD_TB = new SimpleTileFactory('road', 8, 12, '{tileset}/road-tb.svg'); +ROAD_TB.add_mask('walkable', Mask.from_string(` +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +..XXXX.. +`)); // Elbow -export const ROAD_BL = new SimpleTileFactory('road', 6, 6, '{tileset}/road-bl.svg'); -export const ROAD_BR = new SimpleTileFactory('road', 6, 6, '{tileset}/road-br.svg'); -export const ROAD_TL = new SimpleTileFactory('road', 6, 6, '{tileset}/road-tl.svg'); -export const ROAD_TR = new SimpleTileFactory('road', 6, 6, '{tileset}/road-tr.svg'); +export const ROAD_BL = new SimpleTileFactory('road', 12, 12, '{tileset}/road-bl.svg'); +ROAD_BL.add_mask('walkable', Mask.from_string(` +............ +............ +XXX......... +XXXXX....... +XXXXXXX..... +XXXXXXXX.... +..XXXXXX.... +....XXXXX... +.....XXXX... +.....XXXXX.. +......XXXX.. +......XXXX.. +`)); + +export const ROAD_BR = new SimpleTileFactory('road', 12, 12, '{tileset}/road-br.svg'); +ROAD_BR.add_mask('walkable', Mask.from_string(` +............ +............ +.........XXX +.......XXXXX +.....XXXXXXX +....XXXXXXXX +....XXXXXX.. +...XXXXX.... +...XXXX..... +..XXXXX..... +..XXXX...... +..XXXX...... +`)); + +export const ROAD_TL = new SimpleTileFactory('road', 12, 12, '{tileset}/road-tl.svg'); +ROAD_TL.add_mask('walkable', Mask.from_string(` +......XXXX.. +......XXXX.. +.....XXXXX.. +.....XXXX... +....XXXXX... +..XXXXXX.... +XXXXXXXX.... +XXXXXXX..... +XXXXX....... +XXX......... +............ +............ +`)); + +export const ROAD_TR = new SimpleTileFactory('road', 12, 12, '{tileset}/road-tr.svg'); +ROAD_TR.add_mask('walkable', Mask.from_string(` +..XXXX...... +..XXXX...... +..XXXXX..... +...XXXX..... +...XXXXX.... +....XXXXXX.. +....XXXXXXXX +.....XXXXXXX +.......XXXXX +.........XXX +............ +............ +`)); // T -export const ROAD_BLR = new SimpleTileFactory('road', 8, 6, '{tileset}/road-blr.svg'); -export const ROAD_TLR = new SimpleTileFactory('road', 8, 6, '{tileset}/road-tlr.svg'); -export const ROAD_LTB = new SimpleTileFactory('road', 6, 8, '{tileset}/road-ltb.svg'); -export const ROAD_RTB = new SimpleTileFactory('road', 6, 8, '{tileset}/road-rtb.svg'); +export const ROAD_BLR = new SimpleTileFactory('road', 16, 12, '{tileset}/road-blr.svg'); +// TODO: add_mask(walkable) +export const ROAD_TLR = new SimpleTileFactory('road', 16, 12, '{tileset}/road-tlr.svg'); +// TODO: add_mask(walkable) +export const ROAD_LTB = new SimpleTileFactory('road', 12, 16, '{tileset}/road-ltb.svg'); +// TODO: add_mask(walkable) +export const ROAD_RTB = new SimpleTileFactory('road', 12, 16, '{tileset}/road-rtb.svg'); +// TODO: add_mask(walkable) // + -export const ROAD_TBLR = new SimpleTileFactory('road', 8, 8, '{tileset}/road-tblr.svg'); +export const ROAD_TBLR = new SimpleTileFactory('road', 16, 16, '{tileset}/road-tblr.svg'); +ROAD_TBLR.add_mask('walkable', Mask.from_string(` +......XXXX...... +......XXXX...... +......XXXX...... +.....XXXXXX..... +....XXXXXXXX.... +...XXXXXXXXXX... +XXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXX +XXXXXXXXXXXXXXXX +...XXXXXXXXXX... +....XXXXXXXX.... +.....XXXXXX..... +......XXXX...... +......XXXX...... +......XXXX...... +`)); // Tower base -export const EMPTY = new SimpleTileFactory('road', 4, 2, '{tileset}/empty.svg'); +export const EMPTY = new SimpleTileFactory('road', 8, 4, '{tileset}/empty.svg'); // Straight -export const RIVER_LR = new SimpleTileFactory('water', 6, 4, '{tileset}/river-lr.svg'); -export const RIVER_TB = new SimpleTileFactory('water', 4, 6, '{tileset}/river-tb.svg'); +export const RIVER_LR = new SimpleTileFactory('water', 12, 8, '{tileset}/river-lr.svg'); +export const RIVER_TB = new SimpleTileFactory('water', 8, 12, '{tileset}/river-tb.svg'); // Elbow -export const RIVER_BR = new SimpleTileFactory('water', 6, 6, '{tileset}/river-br.svg'); -export const RIVER_BL = new SimpleTileFactory('water', 6, 6, '{tileset}/river-bl.svg'); -export const RIVER_TR = new SimpleTileFactory('water', 6, 6, '{tileset}/river-tr.svg'); -export const RIVER_TL = new SimpleTileFactory('water', 6, 6, '{tileset}/river-tl.svg'); +export const RIVER_BR = new SimpleTileFactory('water', 12, 12, '{tileset}/river-br.svg'); +export const RIVER_BL = new SimpleTileFactory('water', 12, 12, '{tileset}/river-bl.svg'); +export const RIVER_TR = new SimpleTileFactory('water', 12, 12, '{tileset}/river-tr.svg'); +export const RIVER_TL = new SimpleTileFactory('water', 12, 12, '{tileset}/river-tl.svg'); -export const BRIDGE_LR = new SimpleTileFactory('bridge', 6, 4, '{tileset}/bridge-lr.svg'); +export const BRIDGE_LR = new SimpleTileFactory('bridge', 12, 8, '{tileset}/bridge-lr.svg'); -const tower_fireball1_back = new SimpleTileFactory('surface', 4, 4, 'tower/fireball1-back.svg'); -const tower_fireball1 = new SimpleTileFactory('surface', 4, 4, 'tower/fireball1.svg'); -const tower_fireball1_front = new SimpleTileFactory('surface', 4, 4, 'tower/fireball1-front.svg'); +const tower_fireball1_back = new SimpleTileFactory('surface', 8, 8, 'tower/fireball1-back.svg'); +const tower_fireball1 = new SimpleTileFactory('surface', 8, 8, 'tower/fireball1.svg'); +const tower_fireball1_front = new SimpleTileFactory('surface', 8, 8, 'tower/fireball1-front.svg'); for (const tile_factory of [tower_fireball1_back, tower_fireball1_front]) { tile_factory.add_animation( @@ -75,20 +183,20 @@ export const TOWER_FIREBALL1 = new LayeredTileFactory([ tower_fireball1_front, ]); -export const FIREBALL = new SimpleTileFactory('projectile', 2, 2, 'tower/fireball.svg'); +export const FIREBALL = new SimpleTileFactory('projectile', 4, 4, 'tower/fireball.svg'); export const FIREBALL_IMPACT = new SequenceTileFactory([ - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact1.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact2.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact3.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact4.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact5.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact6.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact7.svg'), - new SimpleTileFactory('surface', 2, 2, 'tower/fireball-impact8.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact1.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact2.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact3.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact4.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact5.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact6.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact7.svg'), + new SimpleTileFactory('surface', 4, 4, 'tower/fireball-impact8.svg'), ], 50, false); -const greenaxe_axe = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/axe.svg'); +const greenaxe_axe = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/axe.svg'); greenaxe_axe.add_animation( 'walk', [ @@ -118,7 +226,7 @@ greenaxe_axe.add_animation( }, ); -const greenaxe_rightleg = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/rightleg.svg'); +const greenaxe_rightleg = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/rightleg.svg'); greenaxe_rightleg.add_animation( 'walk', [ @@ -148,7 +256,7 @@ greenaxe_rightleg.add_animation( }, ); -const greenaxe_leftleg = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/leftleg.svg'); +const greenaxe_leftleg = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/leftleg.svg'); greenaxe_leftleg.add_animation( 'walk', [ @@ -178,7 +286,7 @@ greenaxe_leftleg.add_animation( }, ); -const greenaxe_torso = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/torso.svg'); +const greenaxe_torso = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/torso.svg'); greenaxe_torso.add_animation( 'walk', [ @@ -208,7 +316,7 @@ greenaxe_torso.add_animation( }, ); -const greenaxe_head = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/head.svg'); +const greenaxe_head = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/head.svg'); greenaxe_head.add_animation( 'walk', [ @@ -238,7 +346,7 @@ greenaxe_head.add_animation( }, ); -const greenaxe_rightarm = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/rightarm.svg'); +const greenaxe_rightarm = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/rightarm.svg'); greenaxe_rightarm.add_animation( 'walk', [ @@ -268,7 +376,7 @@ greenaxe_rightarm.add_animation( }, ); -const greenaxe_leftarm = new SimpleTileFactory('surface', 3, 3, 'monster/greenaxe/leftarm.svg'); +const greenaxe_leftarm = new SimpleTileFactory('surface', 6, 6, 'monster/greenaxe/leftarm.svg'); greenaxe_leftarm.add_animation( 'walk', [ diff --git a/ts/tower.ts b/ts/tower.ts index 14a0f53..5f3849c 100644 --- a/ts/tower.ts +++ b/ts/tower.ts @@ -22,83 +22,106 @@ export function main() { 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('wasteland'); - grid.set_layers(['road', 'water', 'bridge', 'surface', 'projectile']); + const grid = new Grid( + real, + 140, 112, + 'wasteland', + ['road', 'water', 'bridge', 'surface', 'projectile'], + ['walkable', 'not-flyable'], + ); - grid.add_tile(tiles.ROAD_TB, 20, 46); - grid.add_tile(tiles.ROAD_BL, 18, 40); - grid.add_tile(tiles.ROAD_TR, 12, 38); - grid.add_tile(tiles.ROAD_BR, 12, 32); - grid.add_tile(tiles.ROAD_TL, 18, 30); - grid.add_tile(tiles.ROAD_BL, 18, 24); - grid.add_tile(tiles.ROAD_TR, 12, 22); - grid.add_tile(tiles.ROAD_BR, 12, 16); - grid.add_tile(tiles.ROAD_LR, 18, 16); - grid.add_tile(tiles.ROAD_TBLR, 24, 14); - grid.add_tile(tiles.ROAD_TB, 26, 2); - grid.add_tile(tiles.ROAD_TB, 26, 8); - grid.add_tile(tiles.ROAD_TB, 26, 22); - grid.add_tile(tiles.ROAD_TB, 26, 28); - grid.add_tile(tiles.ROAD_TB, 26, 34); - grid.add_tile(tiles.ROAD_TB, 26, 40); - grid.add_tile(tiles.ROAD_TB, 26, 46); - grid.add_tile(tiles.ROAD_BL, 32, 16); - grid.add_tile(tiles.ROAD_TB, 34, 22); - grid.add_tile(tiles.ROAD_TB, 34, 28); - grid.add_tile(tiles.ROAD_TB, 34, 34); - grid.add_tile(tiles.ROAD_TR, 34, 40); - grid.add_tile(tiles.ROAD_LR, 40, 42); - grid.add_tile(tiles.ROAD_LR, 46, 42); - grid.add_tile(tiles.ROAD_TL, 52, 40); - grid.add_tile(tiles.ROAD_BL, 52, 34); - grid.add_tile(tiles.ROAD_LR, 46, 34); - grid.add_tile(tiles.ROAD_TR, 40, 32); - grid.add_tile(tiles.ROAD_BR, 40, 26); - grid.add_tile(tiles.ROAD_LR, 46, 26); - grid.add_tile(tiles.ROAD_TL, 52, 24); - grid.add_tile(tiles.ROAD_BL, 52, 18); - grid.add_tile(tiles.ROAD_LR, 46, 18); - grid.add_tile(tiles.ROAD_TR, 40, 16); - grid.add_tile(tiles.ROAD_BR, 40, 10); - grid.add_tile(tiles.ROAD_LR, 46, 10); - grid.add_tile(tiles.ROAD_LR, 52, 10); - grid.add_tile(tiles.ROAD_LR, 58, 10); - grid.add_tile(tiles.EMPTY, 30, 20); + grid.add_tile(tiles.ROAD_TB, 40, 92); + grid.add_tile(tiles.ROAD_BL, 36, 80); + grid.add_tile(tiles.ROAD_TR, 24, 76); + grid.add_tile(tiles.ROAD_BR, 24, 64); + grid.add_tile(tiles.ROAD_TL, 36, 60); + grid.add_tile(tiles.ROAD_BL, 36, 48); + grid.add_tile(tiles.ROAD_TR, 24, 44); + grid.add_tile(tiles.ROAD_BR, 24, 32); + grid.add_tile(tiles.ROAD_LR, 36, 32); + grid.add_tile(tiles.ROAD_TBLR, 48, 28); + grid.add_tile(tiles.ROAD_TB, 52, 4); + grid.add_tile(tiles.ROAD_TB, 52, 16); + grid.add_tile(tiles.ROAD_TB, 52, 44); + grid.add_tile(tiles.ROAD_TB, 52, 56); + grid.add_tile(tiles.ROAD_TB, 52, 68); + grid.add_tile(tiles.ROAD_TB, 52, 80); + grid.add_tile(tiles.ROAD_TB, 52, 92); + grid.add_tile(tiles.ROAD_BL, 64, 32); + grid.add_tile(tiles.ROAD_TB, 68, 44); + grid.add_tile(tiles.ROAD_TB, 68, 56); + grid.add_tile(tiles.ROAD_TB, 68, 68); + grid.add_tile(tiles.ROAD_TR, 68, 80); + grid.add_tile(tiles.ROAD_LR, 80, 84); + grid.add_tile(tiles.ROAD_LR, 92, 84); + grid.add_tile(tiles.ROAD_TL, 104, 80); + grid.add_tile(tiles.ROAD_BL, 104, 68); + grid.add_tile(tiles.ROAD_LR, 92, 68); + grid.add_tile(tiles.ROAD_TR, 80, 64); + grid.add_tile(tiles.ROAD_BR, 80, 52); + grid.add_tile(tiles.ROAD_LR, 92, 52); + grid.add_tile(tiles.ROAD_TL, 104, 48); + grid.add_tile(tiles.ROAD_BL, 104, 36); + grid.add_tile(tiles.ROAD_LR, 92, 36); + grid.add_tile(tiles.ROAD_TR, 80, 32); + grid.add_tile(tiles.ROAD_BR, 80, 20); + grid.add_tile(tiles.ROAD_LR, 92, 20); + grid.add_tile(tiles.ROAD_LR, 104, 20); + grid.add_tile(tiles.ROAD_LR, 116, 20); + grid.add_tile(tiles.EMPTY, 60, 40); - grid.add_tile(tiles.RIVER_TB, 47, 46); - grid.add_tile(tiles.RIVER_TB, 47, 40); - grid.add_tile(tiles.RIVER_TB, 47, 34); - grid.add_tile(tiles.RIVER_TB, 47, 28); - grid.add_tile(tiles.RIVER_TB, 47, 22); - grid.add_tile(tiles.RIVER_TB, 47, 16); - grid.add_tile(tiles.RIVER_TB, 47, 10); - grid.add_tile(tiles.RIVER_TB, 47, 4); + grid.add_tile(tiles.RIVER_TB, 94, 92); + grid.add_tile(tiles.RIVER_TB, 94, 80); + grid.add_tile(tiles.RIVER_TB, 94, 68); + grid.add_tile(tiles.RIVER_TB, 94, 56); + grid.add_tile(tiles.RIVER_TB, 94, 44); + grid.add_tile(tiles.RIVER_TB, 94, 32); + grid.add_tile(tiles.RIVER_TB, 94, 20); + grid.add_tile(tiles.RIVER_TB, 94, 8); - grid.add_tile(tiles.BRIDGE_LR, 46, 42); - grid.add_tile(tiles.BRIDGE_LR, 46, 34); - grid.add_tile(tiles.BRIDGE_LR, 46, 26); - grid.add_tile(tiles.BRIDGE_LR, 46, 18); - grid.add_tile(tiles.BRIDGE_LR, 46, 10); + grid.add_tile(tiles.BRIDGE_LR, 92, 84); + grid.add_tile(tiles.BRIDGE_LR, 92, 68); + grid.add_tile(tiles.BRIDGE_LR, 92, 52); + grid.add_tile(tiles.BRIDGE_LR, 92, 36); + grid.add_tile(tiles.BRIDGE_LR, 92, 20); + + { + const m = grid.masks.get('walkable')!.mask; + for (let x = 0; x < m.length; x++) { + for (let y = 0; y < m[x].length; y++) { + if (!m[x][y]) { + continue; + } + const div = document.createElement('div'); + real.appendChild(div); + div.style.gridColumnStart = `${x + 1}`; + div.style.gridRowStart = `${y + 1}`; + div.style.gridColumnEnd = 'span 1'; + div.style.gridRowEnd = 'span 1'; + div.style.backgroundColor = 'orange'; + div.style.opacity = '0.3'; + div.style.zIndex = '1000000'; + } + } + } function rand(min: number, max: number): number { return Math.round(Math.random() * (max - min) + min); } - const tower = grid.add_tile(tiles.TOWER_FIREBALL1, 30, 28); + const tower = grid.add_tile(tiles.TOWER_FIREBALL1, 60, 56); setInterval(() => { tower.play('fire'); - const target_relative_x = rand(-20, 20); - const target_relative_y = rand(-10, 20); + 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); - grid.add_tile(factory, 31, 27); + grid.add_tile(factory, 62, 54); setTimeout(() => { - grid.add_tile(tiles.FIREBALL_IMPACT, 31 + target_relative_x, 27 + target_relative_y); + grid.add_tile(tiles.FIREBALL_IMPACT, 62 + target_relative_x, 54 + target_relative_y); }, factory.duration); }, 3250); - const greenaxe = grid.add_tile(tiles.GREENAXE, 30, 16); + const greenaxe = grid.add_tile(tiles.GREENAXE, 60, 32); greenaxe.play('walk'); greenaxe.elem.style.transitionProperty = 'top,left'; greenaxe.elem.style.transitionDuration = '25s'; diff --git a/tsconfig.json b/tsconfig.json index 72dfd43..79624b2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,6 +20,7 @@ "ts/layered_tile.ts", "ts/layered_tile_factory.ts", "ts/layer.ts", + "ts/mask.ts", "ts/projectile_tile_factory.ts", "ts/sequence_tile.ts", "ts/sequence_tile_factory.ts",