import React from "react"; import { Line, Group, RegularPolygon } from "react-konva"; import { getStrokeWidth } from "../helpers/drawing"; import { getCellSize, getCellLocation, gridClipFunction, shouldClipCell, } from "../helpers/grid"; function Grid({ grid, strokeWidth, width, height, stroke }) { if (!grid?.size.x || !grid?.size.y) { return null; } const gridSizeNormalized = { x: (grid.inset.bottomRight.x - grid.inset.topLeft.x) / grid.size.x, y: (grid.inset.bottomRight.y - grid.inset.topLeft.y) / grid.size.y, }; const insetWidth = (grid.inset.bottomRight.x - grid.inset.topLeft.x) * width; const insetHeight = (grid.inset.bottomRight.y - grid.inset.topLeft.y) * height; const offsetX = grid.inset.topLeft.x * width * -1; const offsetY = grid.inset.topLeft.y * height * -1; const cellSize = getCellSize(grid, insetWidth, insetHeight); const shapes = []; if (grid.type === "square") { for (let x = 1; x < grid.size.x; x++) { shapes.push( ); } for (let y = 1; y < grid.size.y; y++) { shapes.push( ); } } else if (grid.type === "hexVertical" || grid.type === "hexHorizontal") { // Start at -1 to overshoot the bounds of the grid to ensure all lines are drawn for (let x = -1; x < grid.size.x; x++) { for (let y = -1; y < grid.size.y; y++) { const cellLocation = getCellLocation(grid, x, y, cellSize); shapes.push( gridClipFunction(context, grid, x, y, cellSize)) } x={cellLocation.x} y={cellLocation.y} offsetX={offsetX} offsetY={offsetY} > ); } } } return {shapes}; } Grid.defaultProps = { strokeWidth: 0.1, stroke: "white", }; export default Grid;