From d1b76727c89c602dd20322be5399392eb90d5df3 Mon Sep 17 00:00:00 2001 From: Gavin McDonald Date: Fri, 4 Jan 2019 22:03:05 -0500 Subject: [PATCH] looks like maps are finally wrapping properly --- src/cartographerFlatXYZ.js | 187 ++++++++++++++++++++++++++++++++++++- src/funky.js | 4 +- src/main.js | 2 +- 3 files changed, 189 insertions(+), 4 deletions(-) diff --git a/src/cartographerFlatXYZ.js b/src/cartographerFlatXYZ.js index c1b8e42..6a8c9b7 100644 --- a/src/cartographerFlatXYZ.js +++ b/src/cartographerFlatXYZ.js @@ -8,6 +8,160 @@ import Point from './point.js'; const tilePointToHex = ({tilePoint, pixelPoint}) => ({tilePoint: new Hex(tilePoint), pixelPoint}); +window.debugged = -1; + +const positive3x3 = [{ + x: 0, + y: 0, + z: 0, +}, { + x: 1, + y: 0, + z: -1, +}, { + x: 2, + y: -1, + z: -1, +}, { + x: 0, + y: -1, + z: 1, +}, { + x: 1, + y: -1, + z: 0, +}, { + x: 2, + y: -2, + z: 0, +}, { + x: 0, + y: -2, + z: 2, +}, { + x: 1, + y: -2, + z: 1, +}, { + x: 2, + y: -3, + z: 1, +}]; + +const positiveEast3x3 = [{ + x: 3, + y: -2, + z: -1, +}, { + x: 4, + y: -2, + z: -2, +}, { + x: 5, + y: -3, + z: -2, +}, { + x: 3, + y: -3, + z: 0, +}, { + x: 4, + y: -3, + z: -1, +}, { + x: 5, + y: -4, + z: -1, +}, { + x: 3, + y: -4, + z: 1, +}, { + x: 4, + y: -4, + z: 0, +}, { + x: 5, + y: -5, + z: 0, +}]; + +const positiveMiddleEast3x3 = [{ + x: 6, + y: -4, + z: -2, +}, { + x: 7, + y: -4, + z: -3, +}, { + x: 8, + y: -5, + z: -3, +}, { + x: 6, + y: -5, + z: -1, +}, { + x: 7, + y: -5, + z: -2, +}, { + x: 8, + y: -6, + z: -2, +}, { + x: 6, + y: -6, + z: 0, +}, { + x: 7, + y: -6, + z: -1, +}, { + x: 8, + y: -7, + z: -1, +}]; + +const positiveFarEast3x3 = [{ + x: 9, + y: -6, + z: -3, +}, { + x: 10, + y: -6, + z: -4, +}, { + x: 11, + y: -7, + z: -4, +}, { + x: 9, + y: -7, + z: -2, +}, { + x: 10, + y: -7, + z: -3, +}, { + x: 11, + y: -8, + z: -3, +}, { + x: 9, + y: -8, + z: -1, +}, { + x: 10, + y: -8, + z: -2, +}, { + x: 11, + y: -9, + z: -2, +}]; + export default class CartographerFlatXYZ extends Cartographer { constructor(settings) { super(settings); @@ -106,8 +260,20 @@ export default class CartographerFlatXYZ extends Cartographer { if (this.radius) { } else { + // ensure odd-width maps wrap properly + if (this.width % 2) { + const offset = Math.floor(col / this.width); + + let verticalAdjust = offset / 2; + verticalAdjust = offset % 2 === 0 ? verticalAdjust : + col % 2 ? Math.ceil(verticalAdjust) : + Math.floor(verticalAdjust); + + row -= verticalAdjust; + } + const halfWidth = Math.floor(this.width / 2); - const halfHeight = Math.floor(this.height / 2); + const halfHeight = Math.floor(this.height / 2); if (this.negativeTiles) { col += halfWidth; @@ -157,6 +323,7 @@ export default class CartographerFlatXYZ extends Cartographer { } boundingBox(upperLeftPoint, upperRightPoint, lowerLeftPoint, lowerRightPoint) { + window.debugged++; const upperLeftTile = this._pixelToTile(upperLeftPoint); const lowerLeftTile = this._pixelToTile(lowerLeftPoint); const lowerRightTile = this._pixelToTile(lowerRightPoint); @@ -184,9 +351,27 @@ export default class CartographerFlatXYZ extends Cartographer { .value(); }; +// if (debugged < 1) { +// +// [positive3x3, positiveEast3x3, positiveMiddleEast3x3, positiveFarEast3x3].forEach(set => { +// set.forEach((input, index) => { +// const result = this.teleport(input, true); +// +// if (result.x === positive3x3[index].x && result.y === positive3x3[index].y && result.z === positive3x3[index].z) console.log(input, '->', positive3x3[index]); +// else console.log(input, '><', positive3x3[index], result); +// console.log('---------------------------------------------------'); +// }); +// +// console.log('-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-'); +// }); +// } + return funky.chain(columns) + .log(() => window.debugged < 1) .map(processRow) + .log(() => window.debugged < 1) .flatten() + .log(() => window.debugged < 1) .value(); } } diff --git a/src/funky.js b/src/funky.js index ddfb9ad..d38dcd6 100644 --- a/src/funky.js +++ b/src/funky.js @@ -1,7 +1,7 @@ export function chain (obj) { let chainInstance = { - log: function () { - console.log(obj); + log: function (predicate = () => true) { + if (predicate(obj)) console.log(obj); return chainInstance; }, diff --git a/src/main.js b/src/main.js index 16b960b..29f09f7 100644 --- a/src/main.js +++ b/src/main.js @@ -134,7 +134,7 @@ class Demo { if (this.map[key]) { this.map[key].pips = Tessellate.utils.random(1, pipMax); - console.log(key); + console.log(`{${ x }, ${ y }${ z != null ? `, ${ z }` : ''}}`); } else { console.log('ERROR - no tile', key);