import React, { useState } from "react"; import "./Board.css"; const base = process.env.PUBLIC_URL; const assetsPath = `${base}/assets`; const Board = ({ game }) => { const rows = [3, 4, 5, 4, 3, 2]; /* The final row of 2 is to place roads and corners */ const [signature, setSignature] = useState(""); const [pips, setPips] = useState(<>>); const [borders, setBorders] = useState(<>>); const [tiles, setTiles] = useState(<>>); const [corners, setCorners] = useState(<>>); const [roads, setRoads] = useState(<>>); const [transform, setTransform] = useState(1); const hexRatio = 1.1547, tileWidth = 67, tileHalfWidth = tileWidth * 0.5, tileHeight = tileWidth * hexRatio, tileHalfHeight = tileHeight * 0.5, radius = tileHeight * 2, borderOffsetX = 86, /* ~1/10th border image width... hand tuned */ borderOffsetY = 3; /* Actual sizing */ const tileImageWidth = 90, /* Based on hand tuned and image width */ tileImageHeight = tileImageWidth/hexRatio, borderImageWidth = (2 + 2/3) * tileImageWidth, /* 2.667 * .Tile.width */ borderImageHeight = borderImageWidth * 0.29; /* 0.29 * .Border.height */ const Tile = ({tile}) => { const onClick = (event) => { console.log(`Tile clicked: ${tile.index}`); let nodes = document.querySelectorAll('.Tile.Selected'); for (let i = 0; i < nodes.length; i++) { const el = nodes[i]; if (el !== event.target) { el.classList.remove('Selected'); } } nodes = document.querySelectorAll('.Corner.Selected'); for (let i = 0; i < nodes.length; i++) { const el = nodes[i]; if (el !== event.target) { el.classList.remove('Selected'); } } nodes = document.querySelectorAll('.Road.Selected'); for (let i = 0; i < nodes.length; i++) { const el = nodes[i]; if (el !== event.target) { el.classList.remove('Selected'); } } game.layout.tiles[tile.index].corners.forEach(index => { const el = document.querySelector(`.Corner[data-index="${index}"]`); if (!el) { console.log(`Unable to find corner[${index}]`); } else { el.classList.add('Selected'); } }); game.layout.tiles[tile.index].roads.forEach(index => { const el = document.querySelector(`.Road[data-index="${index}"]`); if (!el) { console.log(`Unable to find corner[${index}]`); } else { el.classList.add('Selected'); } }); event.target.setAttribute("data-color", game.color); event.target.classList.toggle('Selected'); }; return
; }; const Road = ({road}) => { const onClick = (event) => { console.log(`Road clicked: ${road.index}`); let nodes = document.querySelectorAll('.Road.Selected'); for (let i = 0; i < nodes.length; i++) { const el = nodes[i]; if (el !== event.target) { el.classList.remove('Selected'); } } nodes = document.querySelectorAll('.Corner.Selected'); for (let i = 0; i < nodes.length; i++) { const el = nodes[i]; if (el !== event.target) { el.classList.remove('Selected'); } } game.layout.roads[road.index].corners.forEach(index => { const el = document.querySelector(`.Corner[data-index="${index}"]`); if (!el) { console.log(`Unable to find corner[${index}]`); } else { el.classList.add('Selected'); } }); event.target.setAttribute("data-color", game.color); event.target.classList.toggle('Selected'); }; return ; }; const Corner = ({corner}) => { const onClick = (event) => { console.log(`Corner ${corner.index}:`, game.layout.corners[corner.index]); let nodes = document.querySelectorAll('.Corner.Selected'); for (let i = 0; i < nodes.length; i++) { const el = nodes[i]; if (el !== event.target) { el.classList.remove('Selected'); } } nodes = document.querySelectorAll('.Road.Selected'); for (let i = 0; i < nodes.length; i++) { const el = nodes[i]; if (el !== event.target) { el.classList.remove('Selected'); } } game.layout.corners[corner.index].roads.forEach(index => { const el = document.querySelector(`.Road[data-index="${index}"]`); if (!el) { console.log(`Unable to find road[${index}]`); } else { el.classList.add('Selected'); } }); event.target.classList.toggle('Selected'); event.target.setAttribute("data-color", game.color); }; return ; }; const generateRoads = () => { let row = 0, rowCount = 0; let y = -2.5 + tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth, x = -tileHalfHeight -(rows[row] - 1) * 0.5 * tileHeight; let index = 0; let road; const corners = []; for (let i = 0; i < 21; i++) { const lastRow = row === rows.length - 1; if (row > 2 && rowCount === 0) { road = { index: index++, angle: -60, top: y-0.5*tileHalfHeight, left: x-tileHalfHeight }; corners.push(