diff --git a/js/grid.js b/js/grid.js index 9dd165a..0a0f3f8 100644 --- a/js/grid.js +++ b/js/grid.js @@ -11,36 +11,30 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _prnt, _tileset, _layers, _size_x, _size_y; +var _prnt, _tileset, _layers; import { Layer } from './layer.js'; export class Grid { constructor(prnt) { _prnt.set(this, void 0); _tileset.set(this, void 0); _layers.set(this, new Map()); - _size_x.set(this, void 0); - _size_y.set(this, void 0); __classPrivateFieldSet(this, _prnt, prnt); __classPrivateFieldGet(this, _prnt).style.display = 'grid'; } set_size(x, y) { - __classPrivateFieldSet(this, _size_x, x); - __classPrivateFieldSet(this, _size_y, y); - // TODO: Notify layers if shrink __classPrivateFieldGet(this, _prnt).style.gridTemplateColumns = `repeat(${x}, 1fr)`; __classPrivateFieldGet(this, _prnt).style.gridTemplateRows = `repeat(${y}, 1fr)`; - // TODO: Notify layers if expand } set_tileset(set) { __classPrivateFieldSet(this, _tileset, set); - __classPrivateFieldGet(this, _prnt).style.backgroundImage = this.get_url('land'); + __classPrivateFieldGet(this, _prnt).style.backgroundImage = `url("images/${__classPrivateFieldGet(this, _tileset)}/land.svg")`; // TODO: Notify layers } set_layers(layers) { const newNames = new Set(layers); for (const name of newNames) { if (!__classPrivateFieldGet(this, _layers).has(name)) { - const layer = new Layer(__classPrivateFieldGet(this, _size_x), __classPrivateFieldGet(this, _size_y)); + const layer = new Layer(); layer.set_tileset(__classPrivateFieldGet(this, _tileset)); __classPrivateFieldGet(this, _layers).set(name, layer); } @@ -59,19 +53,13 @@ export class Grid { } } add_tile(layer, tile, x, y) { - const elem = __classPrivateFieldGet(this, _layers).get(layer)?.add_tile(tile, x, y); - if (!elem) { - return false; - } + const elem = __classPrivateFieldGet(this, _layers).get(layer).add_tile(tile); // Grids are 1-indexed elem.style.gridColumnStart = `${x + 1}`; elem.style.gridRowStart = `${y + 1}`; __classPrivateFieldGet(this, _prnt).appendChild(elem); return true; } - get_url(tile) { - return `url("images/${__classPrivateFieldGet(this, _tileset)}/${tile}.svg")`; - } } -_prnt = new WeakMap(), _tileset = new WeakMap(), _layers = new WeakMap(), _size_x = new WeakMap(), _size_y = new WeakMap(); +_prnt = new WeakMap(), _tileset = new WeakMap(), _layers = new WeakMap(); //# sourceMappingURL=grid.js.map \ No newline at end of file diff --git a/js/grid.js.map b/js/grid.js.map index e3cf66c..f79c241 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;AAGnC,MAAM,OAAO,IAAI;IAOf,YAAY,IAAiB;QAN7B,wBAAmB;QACnB,2BAAiB;QACjB,kBAA8B,IAAI,GAAG,EAAiB,EAAC;QACvD,0BAAgB;QAChB,0BAAgB;QAGd,uBAAA,IAAI,SAAS,IAAI,EAAC;QAClB,oCAAW,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACpC,CAAC;IAED,QAAQ,CAAC,CAAS,EAAE,CAAS;QAC3B,uBAAA,IAAI,WAAW,CAAC,EAAC;QACjB,uBAAA,IAAI,WAAW,CAAC,EAAC;QAEjB,gCAAgC;QAEhC,oCAAW,KAAK,CAAC,mBAAmB,GAAG,UAAU,CAAC,QAAQ,CAAC;QAC3D,oCAAW,KAAK,CAAC,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC;QAExD,gCAAgC;IAClC,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,uBAAA,IAAI,YAAY,GAAG,EAAC;QACpB,oCAAW,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAExD,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,sCAAa,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAM,KAAK,GAAG,IAAI,KAAK,8EAA4B,CAAC;gBACpD,KAAK,CAAC,WAAW,wCAAe,CAAC;gBACjC,sCAAa,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAC/B;SACF;QAED,KAAK,MAAM,IAAI,IAAI,sCAAa,IAAI,EAAE,EAAE;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACvB,kCAAkC;gBAClC,sCAAa,MAAM,CAAC,IAAI,CAAC,CAAC;aAC3B;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,KAAK,GAAG,sCAAa,GAAG,CAAC,IAAI,CAAE,CAAC;YACtC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACxB;IACH,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,IAAU,EAAE,CAAS,EAAE,CAAS;QACtD,MAAM,IAAI,GAAG,sCAAa,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QACD,sBAAsB;QACtB,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,oCAAW,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,OAAO,CAAC,IAAY;QAC1B,OAAO,eAAe,sCAAa,IAAI,IAAI,QAAQ,CAAC;IACtD,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;AAGnC,MAAM,OAAO,IAAI;IAKf,YAAY,IAAiB;QAJ7B,wBAAmB;QACnB,2BAAiB;QACjB,kBAA8B,IAAI,GAAG,EAAiB,EAAC;QAGrD,uBAAA,IAAI,SAAS,IAAI,EAAC;QAClB,oCAAW,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACpC,CAAC;IAED,QAAQ,CAAC,CAAS,EAAE,CAAS;QAC3B,oCAAW,KAAK,CAAC,mBAAmB,GAAG,UAAU,CAAC,QAAQ,CAAC;QAC3D,oCAAW,KAAK,CAAC,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC;IAC1D,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,uBAAA,IAAI,YAAY,GAAG,EAAC;QACpB,oCAAW,KAAK,CAAC,eAAe,GAAG,eAAe,sCAAa,aAAa,CAAC;QAE7E,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,sCAAa,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC3B,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;gBAC1B,KAAK,CAAC,WAAW,wCAAe,CAAC;gBACjC,sCAAa,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aAC/B;SACF;QAED,KAAK,MAAM,IAAI,IAAI,sCAAa,IAAI,EAAE,EAAE;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACvB,kCAAkC;gBAClC,sCAAa,MAAM,CAAC,IAAI,CAAC,CAAC;aAC3B;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,KAAK,GAAG,sCAAa,GAAG,CAAC,IAAI,CAAE,CAAC;YACtC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACxB;IACH,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,IAAU,EAAE,CAAS,EAAE,CAAS;QACtD,MAAM,IAAI,GAAG,sCAAa,GAAG,CAAC,KAAK,CAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrD,sBAAsB;QACtB,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,oCAAW,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} \ No newline at end of file diff --git a/js/layer.js b/js/layer.js index 6d367ee..ae9c0c4 100644 --- a/js/layer.js +++ b/js/layer.js @@ -11,20 +11,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _size_x, _size_y, _level, _tileset, _occupied; +var _level, _tileset; export class Layer { - constructor(size_x, size_y) { - _size_x.set(this, void 0); - _size_y.set(this, void 0); + constructor() { _level.set(this, void 0); _tileset.set(this, void 0); - _occupied.set(this, void 0); - __classPrivateFieldSet(this, _size_x, size_x); - __classPrivateFieldSet(this, _size_y, size_y); - __classPrivateFieldSet(this, _occupied, []); - for (let xi = 0; xi < __classPrivateFieldGet(this, _size_x); xi++) { - __classPrivateFieldGet(this, _occupied).push(Array(__classPrivateFieldGet(this, _size_y)).fill(false)); - } } set_level(level) { __classPrivateFieldSet(this, _level, level); @@ -32,49 +23,11 @@ export class Layer { set_tileset(tileset) { __classPrivateFieldSet(this, _tileset, tileset); } - add_tile(tile, x, y) { - if (!this.can_add(tile, x, y)) { - return undefined; - } - this.mark_occupied(tile, x, y); + add_tile(tile) { const elem = tile.get_elem(__classPrivateFieldGet(this, _tileset)); elem.style.zIndex = `${__classPrivateFieldGet(this, _level)}`; return elem; } - can_add(tile, x, y) { - const mask = tile.get_mask(); - for (let xi = 0; xi < mask.length; xi++) { - if (x + xi >= __classPrivateFieldGet(this, _occupied).length) { - // Shape goes off grid (x) - return false; - } - for (let yi = 0; yi < mask[xi].length; yi++) { - if (!mask[xi][yi]) { - continue; - } - if (y + yi >= __classPrivateFieldGet(this, _occupied)[x + xi].length) { - // Shape goes off grid (y) - return false; - } - if (__classPrivateFieldGet(this, _occupied)[x + xi][y + yi]) { - // Conflicts - return false; - } - } - } - return true; - } - mark_occupied(tile, x, y) { - const mask = tile.get_mask(); - for (let xi = 0; xi < mask.length; xi++) { - for (let yi = 0; yi < mask[xi].length; yi++) { - if (!mask[xi][yi]) { - continue; - } - __classPrivateFieldGet(this, _occupied)[x + xi][y + yi] = true; - } - } - } } -_size_x = new WeakMap(), _size_y = new WeakMap(), _level = new WeakMap(), _tileset = new WeakMap(), _occupied = new WeakMap(); +_level = new WeakMap(), _tileset = new WeakMap(); //# sourceMappingURL=layer.js.map \ No newline at end of file diff --git a/js/layer.js.map b/js/layer.js.map index 558da10..1e5418d 100644 --- a/js/layer.js.map +++ b/js/layer.js.map @@ -1 +1 @@ -{"version":3,"file":"layer.js","sourceRoot":"","sources":["../ts/layer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,MAAM,OAAO,KAAK;IAQhB,YAAY,MAAc,EAAE,MAAc;QAP1C,0BAAgB;QAChB,0BAAgB;QAChB,yBAAe;QACf,2BAAiB;QAEjB,4BAAuB;QAGrB,uBAAA,IAAI,WAAW,MAAM,EAAC;QACtB,uBAAA,IAAI,WAAW,MAAM,EAAC;QAEtB,uBAAA,IAAI,aAAa,EAAE,EAAC;QAEpB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,wCAAe,EAAE,EAAE,EAAE,EAAE;YACxC,wCAAe,IAAI,CAAC,KAAK,uCAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACtD;IACH,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,uBAAA,IAAI,UAAU,KAAK,EAAC;IACtB,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,uBAAA,IAAI,YAAY,OAAO,EAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,IAAU,EAAE,CAAS,EAAE,CAAS;QACvC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YAC7B,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,wCAAe,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,oCAAW,EAAE,CAAC;QAErC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,OAAO,CAAC,IAAU,EAAE,CAAS,EAAE,CAAS;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE7B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YACvC,IAAI,CAAC,GAAG,EAAE,IAAI,wCAAe,MAAM,EAAE;gBACnC,0BAA0B;gBAC1B,OAAO,KAAK,CAAC;aACd;YAED,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;gBAC3C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;oBACjB,SAAS;iBACV;gBAED,IAAI,CAAC,GAAG,EAAE,IAAI,wCAAe,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;oBAC3C,0BAA0B;oBAC1B,OAAO,KAAK,CAAC;iBACd;gBAED,IAAI,wCAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE;oBAClC,YAAY;oBACZ,OAAO,KAAK,CAAC;iBACd;aACF;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,aAAa,CAAC,IAAU,EAAE,CAAS,EAAE,CAAS;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE7B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YACvC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;gBAC3C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;oBACjB,SAAS;iBACV;gBAED,wCAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;aACvC;SACF;IACH,CAAC;CACF"} \ No newline at end of file +{"version":3,"file":"layer.js","sourceRoot":"","sources":["../ts/layer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,MAAM,OAAO,KAAK;IAAlB;QACE,yBAAe;QACf,2BAAiB;IAenB,CAAC;IAbC,SAAS,CAAC,KAAa;QACrB,uBAAA,IAAI,UAAU,KAAK,EAAC;IACtB,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,uBAAA,IAAI,YAAY,OAAO,EAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,IAAU;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,wCAAe,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,oCAAW,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} \ No newline at end of file diff --git a/js/tile.js b/js/tile.js index e4494fa..77b3ead 100644 --- a/js/tile.js +++ b/js/tile.js @@ -11,28 +11,15 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function ( } return privateMap.get(receiver); }; -var _name, _width, _height, _mask; +var _name, _width, _height; export class Tile { - constructor(name, width, height, mask) { + constructor(name, width, height) { _name.set(this, void 0); _width.set(this, void 0); _height.set(this, void 0); - _mask.set(this, void 0); __classPrivateFieldSet(this, _name, name); __classPrivateFieldSet(this, _width, width); __classPrivateFieldSet(this, _height, height); - __classPrivateFieldSet(this, _mask, mask); - } - static rectangle(name, width, height) { - const mask = Array(width).fill(Array(height).fill(true)); - return new Tile(name, width, height, mask); - } - static from_mask(name, mask_string) { - const mask = string_to_mask(mask_string); - return new Tile(name, mask.length, mask[0].length, mask); - } - get_mask() { - return __classPrivateFieldGet(this, _mask); } get_elem(tileset) { const elem = document.createElement('div'); @@ -43,23 +30,29 @@ export class Tile { return elem; } } -_name = new WeakMap(), _width = new WeakMap(), _height = new WeakMap(), _mask = new WeakMap(); -function string_to_mask(mask_string) { - // 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); +_name = new WeakMap(), _width = new WeakMap(), _height = new WeakMap(); +/* +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'); } - // 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; + } + + return mask; } +*/ //# sourceMappingURL=tile.js.map \ No newline at end of file diff --git a/js/tile.js.map b/js/tile.js.map index a140a0a..74d9bbb 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,OAAO,IAAI;IAMf,YAAY,IAAY,EAAE,KAAa,EAAE,MAAc,EAAE,IAAiB;QAL1E,wBAAc;QACd,yBAAe;QACf,0BAAgB;QAChB,wBAAmB;QAGjB,uBAAA,IAAI,SAAS,IAAI,EAAC;QAClB,uBAAA,IAAI,UAAU,KAAK,EAAC;QACpB,uBAAA,IAAI,WAAW,MAAM,EAAC;QACtB,uBAAA,IAAI,SAAS,IAAI,EAAC;IACpB,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,MAAc;QAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAY,EAAE,WAAmB;QAChD,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QACzC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,QAAQ;QACN,2CAAkB;IACpB,CAAC;IAED,QAAQ,CAAC,OAAe;QACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,OAAO,IAAI,mCAAU,QAAQ,CAAC;QAC1E,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,oCAAW,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,qCAAY,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;CACF;;AAED,SAAS,cAAc,CAAC,WAAmB;IACzC,8BAA8B;IAE9B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,uBAAuB;IAEvB,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC9B;IACD,iEAAiE;IAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC;SAC1C;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC"} \ No newline at end of file +{"version":3,"file":"tile.js","sourceRoot":"","sources":["../ts/tile.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,MAAM,OAAO,IAAI;IAKf,YAAY,IAAY,EAAE,KAAa,EAAE,MAAc;QAJvD,wBAAc;QACd,yBAAe;QACf,0BAAgB;QAGd,uBAAA,IAAI,SAAS,IAAI,EAAC;QAClB,uBAAA,IAAI,UAAU,KAAK,EAAC;QACpB,uBAAA,IAAI,WAAW,MAAM,EAAC;IACxB,CAAC;IAED,QAAQ,CAAC,OAAe;QACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,OAAO,IAAI,mCAAU,QAAQ,CAAC;QAC1E,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,oCAAW,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,qCAAY,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;CACF;;AAED;;;;;;;;;;;;;;;;;;;;;;;EAuBE"} \ No newline at end of file diff --git a/js/tiles.js b/js/tiles.js index 2b545a4..b1b9e33 100644 --- a/js/tiles.js +++ b/js/tiles.js @@ -1,37 +1,28 @@ import { Tile } from './tile.js'; // Straight -export const ROAD_LR = Tile.rectangle('road-lr', 6, 4); -export const ROAD_TB = Tile.rectangle('road-tb', 4, 6); +export const ROAD_LR = new Tile('road-lr', 6, 4); +export const ROAD_TB = new Tile('road-tb', 4, 6); // Elbow -export const ROAD_BL = Tile.rectangle('road-bl', 6, 6); -export const ROAD_BR = Tile.rectangle('road-br', 6, 6); -export const ROAD_TL = Tile.rectangle('road-tl', 6, 6); -export const ROAD_TR = Tile.rectangle('road-tr', 6, 6); +export const ROAD_BL = new Tile('road-bl', 6, 6); +export const ROAD_BR = new Tile('road-br', 6, 6); +export const ROAD_TL = new Tile('road-tl', 6, 6); +export const ROAD_TR = new Tile('road-tr', 6, 6); // T -export const ROAD_BLR = Tile.rectangle('road-blr', 8, 6); -export const ROAD_TLR = Tile.rectangle('road-tlr', 8, 6); -export const ROAD_LTB = Tile.rectangle('road-ltb', 6, 8); -export const ROAD_RTB = Tile.rectangle('road-rtb', 6, 8); +export const ROAD_BLR = new Tile('road-blr', 8, 6); +export const ROAD_TLR = new Tile('road-tlr', 8, 6); +export const ROAD_LTB = new Tile('road-ltb', 6, 8); +export const ROAD_RTB = new Tile('road-rtb', 6, 8); // + -export const ROAD_TBLR = Tile.from_mask('road-tblr', ` -.xxxxxx. -xxxxxxxx -xxxxxxxx -xxxxxxxx -xxxxxxxx -xxxxxxxx -xxxxxxxx -.xxxxxx. -`); +export const ROAD_TBLR = new Tile('road-tblr', 8, 8); // Tower base -export const EMPTY = Tile.rectangle('empty', 4, 2); +export const EMPTY = new Tile('empty', 4, 2); // Straight -export const RIVER_LR = Tile.rectangle('river-lr', 6, 4); -export const RIVER_TB = Tile.rectangle('river-tb', 4, 6); +export const RIVER_LR = new Tile('river-lr', 6, 4); +export const RIVER_TB = new Tile('river-tb', 4, 6); // Elbow -export const RIVER_BR = Tile.rectangle('river-br', 6, 6); -export const RIVER_BL = Tile.rectangle('river-bl', 6, 6); -export const RIVER_TR = Tile.rectangle('river-tr', 6, 6); -export const RIVER_TL = Tile.rectangle('river-tl', 6, 6); -export const BRIDGE_LR = Tile.rectangle('bridge-lr', 6, 4); +export const RIVER_BR = new Tile('river-br', 6, 6); +export const RIVER_BL = new Tile('river-bl', 6, 6); +export const RIVER_TR = new Tile('river-tr', 6, 6); +export const RIVER_TL = new Tile('river-tl', 6, 6); +export const BRIDGE_LR = new Tile('bridge-lr', 6, 4); //# sourceMappingURL=tiles.js.map \ No newline at end of file diff --git a/js/tiles.js.map b/js/tiles.js.map index fb4952f..d258245 100644 --- a/js/tiles.js.map +++ b/js/tiles.js.map @@ -1 +1 @@ -{"version":3,"file":"tiles.js","sourceRoot":"","sources":["../ts/tiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,WAAW;AACX,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEvD,QAAQ;AACR,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEvD,IAAI;AACJ,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzD,IAAI;AACJ,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;;;;;;;;;CASpD,CAAC,CAAC;AAEH,aAAa;AACb,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnD,WAAW;AACX,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzD,QAAQ;AACR,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"tiles.js","sourceRoot":"","sources":["../ts/tiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,WAAW;AACX,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjD,QAAQ;AACR,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjD,IAAI;AACJ,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnD,IAAI;AACJ,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAErD,aAAa;AACb,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE7C,WAAW;AACX,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnD,QAAQ;AACR,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/ts/grid.ts b/ts/grid.ts index 18e4a22..26fddd5 100644 --- a/ts/grid.ts +++ b/ts/grid.ts @@ -5,8 +5,6 @@ export class Grid { #prnt: HTMLElement; #tileset: string; #layers: Map = new Map(); - #size_x: number; - #size_y: number; constructor(prnt: HTMLElement) { this.#prnt = prnt; @@ -14,20 +12,13 @@ export class Grid { } set_size(x: number, y: number) { - this.#size_x = x; - this.#size_y = y; - - // TODO: Notify layers if shrink - this.#prnt.style.gridTemplateColumns = `repeat(${x}, 1fr)`; this.#prnt.style.gridTemplateRows = `repeat(${y}, 1fr)`; - - // TODO: Notify layers if expand } set_tileset(set: string) { this.#tileset = set; - this.#prnt.style.backgroundImage = this.get_url('land'); + this.#prnt.style.backgroundImage = `url("images/${this.#tileset}/land.svg")`; // TODO: Notify layers } @@ -37,7 +28,7 @@ export class Grid { for (const name of newNames) { if (!this.#layers.has(name)) { - const layer = new Layer(this.#size_x, this.#size_y); + const layer = new Layer(); layer.set_tileset(this.#tileset); this.#layers.set(name, layer); } @@ -58,19 +49,12 @@ export class Grid { } } - add_tile(layer: string, tile: Tile, x: number, y: number): boolean { - const elem = this.#layers.get(layer)?.add_tile(tile, x, y); - if (!elem) { - return false; - } + add_tile(layer: string, tile: Tile, x: number, y: number) { + const elem = this.#layers.get(layer)!.add_tile(tile); // Grids are 1-indexed elem.style.gridColumnStart = `${x + 1}`; elem.style.gridRowStart = `${y + 1}`; this.#prnt.appendChild(elem); return true; } - - private get_url(tile: string) { - return `url("images/${this.#tileset}/${tile}.svg")`; - } } diff --git a/ts/layer.ts b/ts/layer.ts index 64eda2d..4ef3b3d 100644 --- a/ts/layer.ts +++ b/ts/layer.ts @@ -1,24 +1,9 @@ import { Tile } from './tile.js'; export class Layer { - #size_x: number; - #size_y: number; #level: number; #tileset: string; - #occupied: boolean[][]; - - constructor(size_x: number, size_y: number) { - this.#size_x = size_x; - this.#size_y = size_y; - - this.#occupied = []; - - for (let xi = 0; xi < this.#size_x; xi++) { - this.#occupied.push(Array(this.#size_y).fill(false)); - } - } - set_level(level: number) { this.#level = level; } @@ -27,59 +12,9 @@ export class Layer { this.#tileset = tileset; } - add_tile(tile: Tile, x: number, y: number): HTMLElement | undefined { - if (!this.can_add(tile, x, y)) { - return undefined; - } - - this.mark_occupied(tile, x, y); - + add_tile(tile: Tile): HTMLElement { const elem = tile.get_elem(this.#tileset); elem.style.zIndex = `${this.#level}`; - return elem; } - - private can_add(tile: Tile, x: number, y: number) { - const mask = tile.get_mask(); - - for (let xi = 0; xi < mask.length; xi++) { - if (x + xi >= this.#occupied.length) { - // Shape goes off grid (x) - return false; - } - - for (let yi = 0; yi < mask[xi].length; yi++) { - if (!mask[xi][yi]) { - continue; - } - - if (y + yi >= this.#occupied[x + xi].length) { - // Shape goes off grid (y) - return false; - } - - if (this.#occupied[x + xi][y + yi]) { - // Conflicts - return false; - } - } - } - - return true; - } - - private mark_occupied(tile: Tile, x: number, y: number) { - const mask = tile.get_mask(); - - for (let xi = 0; xi < mask.length; xi++) { - for (let yi = 0; yi < mask[xi].length; yi++) { - if (!mask[xi][yi]) { - continue; - } - - this.#occupied[x + xi][y + yi] = true; - } - } - } } diff --git a/ts/tile.ts b/ts/tile.ts index 1700cd9..f9d4545 100644 --- a/ts/tile.ts +++ b/ts/tile.ts @@ -2,27 +2,11 @@ export class Tile { #name: string; #width: number; #height: number; - #mask: boolean[][]; - constructor(name: string, width: number, height: number, mask: boolean[][]) { + constructor(name: string, width: number, height: number) { this.#name = name; this.#width = width; this.#height = height; - this.#mask = mask; - } - - static rectangle(name: string, width: number, height: number): Tile { - const mask = Array(width).fill(Array(height).fill(true)); - return new Tile(name, width, height, mask); - } - - static from_mask(name: string, mask_string: string): Tile { - const mask = string_to_mask(mask_string); - return new Tile(name, mask.length, mask[0].length, mask); - } - - get_mask(): boolean[][] { - return this.#mask; } get_elem(tileset: string): HTMLElement { @@ -35,6 +19,7 @@ export class Tile { } } +/* function string_to_mask(mask_string: string): boolean[][] { // mask_string: '\n+++\n+++\n' @@ -57,3 +42,4 @@ function string_to_mask(mask_string: string): boolean[][] { return mask; } +*/ diff --git a/ts/tiles.ts b/ts/tiles.ts index 05a4665..0571ca5 100644 --- a/ts/tiles.ts +++ b/ts/tiles.ts @@ -1,44 +1,35 @@ import { Tile } from './tile.js'; // Straight -export const ROAD_LR = Tile.rectangle('road-lr', 6, 4); -export const ROAD_TB = Tile.rectangle('road-tb', 4, 6); +export const ROAD_LR = new Tile('road-lr', 6, 4); +export const ROAD_TB = new Tile('road-tb', 4, 6); // Elbow -export const ROAD_BL = Tile.rectangle('road-bl', 6, 6); -export const ROAD_BR = Tile.rectangle('road-br', 6, 6); -export const ROAD_TL = Tile.rectangle('road-tl', 6, 6); -export const ROAD_TR = Tile.rectangle('road-tr', 6, 6); +export const ROAD_BL = new Tile('road-bl', 6, 6); +export const ROAD_BR = new Tile('road-br', 6, 6); +export const ROAD_TL = new Tile('road-tl', 6, 6); +export const ROAD_TR = new Tile('road-tr', 6, 6); // T -export const ROAD_BLR = Tile.rectangle('road-blr', 8, 6); -export const ROAD_TLR = Tile.rectangle('road-tlr', 8, 6); -export const ROAD_LTB = Tile.rectangle('road-ltb', 6, 8); -export const ROAD_RTB = Tile.rectangle('road-rtb', 6, 8); +export const ROAD_BLR = new Tile('road-blr', 8, 6); +export const ROAD_TLR = new Tile('road-tlr', 8, 6); +export const ROAD_LTB = new Tile('road-ltb', 6, 8); +export const ROAD_RTB = new Tile('road-rtb', 6, 8); // + -export const ROAD_TBLR = Tile.from_mask('road-tblr', ` -.xxxxxx. -xxxxxxxx -xxxxxxxx -xxxxxxxx -xxxxxxxx -xxxxxxxx -xxxxxxxx -.xxxxxx. -`); +export const ROAD_TBLR = new Tile('road-tblr', 8, 8); // Tower base -export const EMPTY = Tile.rectangle('empty', 4, 2); +export const EMPTY = new Tile('empty', 4, 2); // Straight -export const RIVER_LR = Tile.rectangle('river-lr', 6, 4); -export const RIVER_TB = Tile.rectangle('river-tb', 4, 6); +export const RIVER_LR = new Tile('river-lr', 6, 4); +export const RIVER_TB = new Tile('river-tb', 4, 6); // Elbow -export const RIVER_BR = Tile.rectangle('river-br', 6, 6); -export const RIVER_BL = Tile.rectangle('river-bl', 6, 6); -export const RIVER_TR = Tile.rectangle('river-tr', 6, 6); -export const RIVER_TL = Tile.rectangle('river-tl', 6, 6); +export const RIVER_BR = new Tile('river-br', 6, 6); +export const RIVER_BL = new Tile('river-bl', 6, 6); +export const RIVER_TR = new Tile('river-tr', 6, 6); +export const RIVER_TL = new Tile('river-tl', 6, 6); -export const BRIDGE_LR = Tile.rectangle('bridge-lr', 6, 4); +export const BRIDGE_LR = new Tile('bridge-lr', 6, 4);