/** * Functions taken directly from the hex-size-support module (https://github.com/Ourobor/Hex-Size-Support/releases/tag/1.1.0). * Unless otherwise stated, these functions are taken as-is. */ /** * Altered version of this function. * - Instead of taking a token as a parameter to retrieve the altOrientationFlag, receive the flag value directly * - Instead of taking a grid parameter, get the grid value from the globas canvas */ export function findVertexSnapPoint(x, y, altOrientationFlag) { const grid = canvas.grid.grid; if (grid.columnar) { return findSnapPointCols(x, y, grid.h, grid.w, altOrientationFlag); } else { return findSnapPointRows(x, y, grid.h, grid.w, altOrientationFlag); } } function findSnapPointRows(x, y, h, w, alt) { let xOffset = 0.0; if (canvas.grid.grid.even) { xOffset = -0.5; } let yOffset1 = 0.75; let yOffset2 = 0.0; if (alt) { yOffset1 = 0.25; yOffset2 = 1.0; } let row1 = calculateSnapPointsRows(x, y, h, w, 0.5 + xOffset, yOffset1); let row2 = calculateSnapPointsRows(x, y, h, w, 1.0 + xOffset, yOffset2); let dist1 = Math.pow(row1.x - x, 2) + Math.pow(row1.y - y, 2); let dist2 = Math.pow(row2.x - x, 2) + Math.pow(row2.y - y, 2); if (dist1 < dist2) { return row1; } else { return row2; } } function calculateSnapPointsRows(x, y, h, w, xOff, yOff) { let c = Math.floor((x + (0.5 - xOff) * w) / w + 1); let r = Math.floor((y + (0.75 - yOff) * h) / (1.5 * h) + 1); let snapX = c * w - (1 - xOff) * w; let snapY = r * h * 1.5 - (1.5 - yOff) * h; return {x: snapX, y: snapY}; } function findSnapPointCols(x, y, h, w, alt) { let yOffset = 0.0; if (canvas.grid.grid.even) { yOffset = -0.5; } let xOffset1 = 0.75; let xOffset2 = 0.0; if (alt) { xOffset1 = 0.25; xOffset2 = 1.0; } let row1 = calculateSnapPointsCols(x, y, h, w, xOffset1, 0.5 + yOffset); let row2 = calculateSnapPointsCols(x, y, h, w, xOffset2, 1.0 + yOffset); let dist1 = Math.pow(row1.x - x, 2) + Math.pow(row1.y - y, 2); let dist2 = Math.pow(row2.x - x, 2) + Math.pow(row2.y - y, 2); if (dist1 < dist2) { return row1; } else { return row2; } } function calculateSnapPointsCols(x, y, h, w, xOff, yOff) { let c = Math.floor((x + (0.75 - xOff) * w) / (1.5 * w) + 1); let r = Math.floor((y + (0.5 - yOff) * h) / h + 1); let snapX = c * w * 1.5 - (1.5 - xOff) * w; let snapY = r * h - (1 - yOff) * h; return {x: snapX, y: snapY}; }