From 63a41723be0a57aff8f5f92ddf39abbf4130dc99 Mon Sep 17 00:00:00 2001 From: James Ketrenos Date: Thu, 3 Feb 2022 21:35:23 -0800 Subject: [PATCH] COrner and road selection is possible Signed-off-by: James Ketrenos --- client/src/Board.css | 56 +++++++++ client/src/Board.js | 221 +++++++++++++++++++++++++++++++-- client/src/Table.js | 84 +++++++------ client/src/assets/tabletop.png | Bin 1476832 -> 1477654 bytes 4 files changed, 308 insertions(+), 53 deletions(-) diff --git a/client/src/Board.css b/client/src/Board.css index ffdbabe..39aed27 100644 --- a/client/src/Board.css +++ b/client/src/Board.css @@ -30,5 +30,61 @@ .Pip { position: absolute; background-size: 600% auto; /* pip-numbers is a 6x6 grid of pip images */ + width: 2em; + height: 2em; transform: translate(-50%, -50%); + clip-path: circle(48%); +} + +.Roads[disabled], +.Corners[disabled] { + pointer-events: none; +} + +.Corner { + position: absolute; + display: flex; + align-items: center; + justify-items: center; + box-sizing: border-box; + border: 1px solid transparent; +/* border: 2px solid black;*/ + border-radius: 50%; + width: 2.5em; + height: 2.5em; + transform: translate(-50%, -50%); +} + +.Corner .Option { + background-color: rgba(255, 255, 255, 0.5); +} + +.Corner:hover { + border-color: black; +} + +.Road { + position: absolute; + display: flex; + align-items: center; + justify-items: center; + box-sizing: border-box; + border: 1px solid transparent; +/* border: 2px solid black; */ + transform-origin: 50% 0; + width: 1.75em; + height: 2.5em; +} + +.Road .Option { + background-color: rgba(255, 255, 255, 0.5); +} + +.Road:hover { + border-color: black; +} + +.Selected { + background-color: rgba(255, 238, 0, 0.5); + box-shadow: 5px 5px 5px black; } \ No newline at end of file diff --git a/client/src/Board.js b/client/src/Board.js index 8f45fcc..5d380bd 100644 --- a/client/src/Board.js +++ b/client/src/Board.js @@ -5,32 +5,218 @@ const base = process.env.PUBLIC_URL; const assetsPath = `${base}/assets`; const Board = ({ game }) => { - const rows = [3, 4, 5, 4, 3]; + 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 scale = 1; const hexRatio = 1.1547, - tileWidth = scale * 67, + tileWidth = 67, tileHalfWidth = tileWidth * 0.5, tileHeight = tileWidth * hexRatio, - borderOffset = scale * 86; /* ~1/10th border image width... hand tuned */ + tileHalfHeight = tileHeight * 0.5, + radius = tileHeight * 2, + borderOffset = 86; /* ~1/10th border image width... hand tuned */ /* Actual sizing */ const - tileImageWidth = scale * 90, /* Based on hand tuned and image width */ + 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 Road = ({road}) => { + const onClick = (event) => { + console.log(`Road clicked: ${road.index}`); + const 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'); + } + } + event.target.classList.toggle('Selected'); + }; + return
; + }; + const Corner = ({corner}) => { + const onClick = (event) => { + console.log(`Corner clicked: ${corner.index}`); + const 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'); + } + } + event.target.classList.toggle('Selected'); + }; + 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(); + } + + road = { + index: index++, + angle: 240, + top: y, + left: x + }; + corners.push(); + + road = { + index: index++, + angle: -60, + top: y-0.5*tileHalfHeight, + left: x+tileHalfHeight + }; + corners.push(); + + if (!lastRow) { + road = { + index: index++, + angle: 0, + top: y, + left: x + }; + corners.push(); + } + + if (++rowCount === rows[row]) { + if (!lastRow) { + road = { + index: index++, + angle: 0, + top: y, + left: x+2.*tileHalfHeight + }; + corners.push(); + } + + if (row > 2) { + road = { + index: index++, + angle: 60, + top: y-0.5*tileHalfHeight, + left: x+3.*tileHalfHeight + }; + corners.push(); + } + + row++; + rowCount = 0; + y += tileHeight - 10.5; + x = -tileHalfHeight - (rows[row] - 1) * 0.5 * tileHeight; + } else { + x += tileHeight; + } + } + return corners; + } + + const generateCorners = () => { + let row = 0, rowCount = 0; + let y = -8 + 0.5 * tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth, + x = -tileHalfHeight -(rows[row] - 1) * 0.5 * tileHeight; + let index = 0; + const corners = []; + let corner; + + for (let i = 0; i < 21; i++) { + if (row > 2 && rowCount === 0) { + corner = { + index: index++, + top: y-0.5*tileHalfHeight, + left: x-tileHalfHeight + }; + corners.push(); + } + + corner = { + index: index++, + top: y, + left: x + }; + corners.push(); + + corner = { + index: index++, + top: y-0.5*tileHalfHeight, + left: x+tileHalfHeight + }; + corners.push(); + + if (++rowCount === rows[row]) { + corner = { + index: index++, + top: y, + left: x+2.*tileHalfHeight + }; + corners.push(); + + if (row > 2) { + corner = { + index: index++, + top: y-0.5*tileHalfHeight, + left: x+3.*tileHalfHeight + }; + corners.push(); + } + + row++; + rowCount = 0; + y += tileHeight - 10.5; + x = -tileHalfHeight - (rows[row] - 1) * 0.5 * tileHeight; + } else { + x += tileHeight; + } + } + return corners; + } const generatePips = () => { let row = 0, rowCount = 0; - let y = tileHalfWidth - rows.length * 0.5 * tileWidth, + let y = tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth, x = -(rows[row] - 1) * 0.5 * tileHeight; return game.pipOrder.map(order => { const pip = game.pips[order]; @@ -39,8 +225,6 @@ const Board = ({ game }) => { key={`pip-${order}`} className="Pip" style={{ - width: `${scale*2}em`, - height: `${scale*2}em`, top: `${y}px`, left: `${x}px`, backgroundImage: `url(${assetsPath}/gfx/pip-numbers.png)`, @@ -64,7 +248,7 @@ const Board = ({ game }) => { const generateTiles = () => { let row = 0, rowCount = 0; - let y = tileHalfWidth - rows.length * 0.5 * tileWidth, + let y = tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth, x = -(rows[row] - 1) * 0.5 * tileHeight; return game.tileOrder.map(order => { const tile = game.tiles[order]; @@ -95,8 +279,7 @@ const Board = ({ game }) => { }; const generateBorders = () => { - const radius = tileHeight * 2, - sides = 6; + const sides = 6; let side = -1; return game.borderOrder.map(order => { const border = game.borders[order]; @@ -121,11 +304,15 @@ const Board = ({ game }) => { }); }; + /* If the game is loaded, and the signature is different, + * regenerate everything */ if (game && game.signature !== signature) { console.log(`Generate for ${game.signature}`); setPips(generatePips); setBorders(generateBorders); setTiles(generateTiles); + setCorners(generateCorners); + setRoads(generateRoads); setSignature(game.signature); } else { if (!game) { @@ -133,6 +320,8 @@ const Board = ({ game }) => { } } + /* Adjust the 'transform: scale' for the BoardBox + * so the board fills the Board */ const board = document.querySelector('.Board'); if (board) { const width = board.offsetWidth, @@ -143,7 +332,7 @@ const Board = ({ game }) => { } else { _transform = width / (450. * hexRatio); } - if (_transform != transform) { + if (_transform !== transform) { const boardBox = board.querySelector('.BoardBox'); if (boardBox) { console.log(`Setting transofrm scale to ${_transform}`); @@ -159,6 +348,14 @@ const Board = ({ game }) => { { borders } { tiles } { pips } + { game && <> +
+ { corners } +
+
+ { roads } +
+ }
); diff --git a/client/src/Table.js b/client/src/Table.js index f52e75d..d0c49cc 100755 --- a/client/src/Table.js +++ b/client/src/Table.js @@ -1021,50 +1021,52 @@ class Table extends React.Component { } -
- { game && game.state === "active" && <> -
In hand
-
- - - - - -
-
Available to play
-
- - -
- - + { game && game.showCards && +
+ { game && game.state === "active" && <> +
In hand
+
+ + + + +
-
-
Points
-
-
- - - +
Available to play
+
+ + +
+ + +
-
-
- - -
-
-
Stats
-
-
Points: 7
-
Cards: {this.state.total}
-
Roads remaining: 4
-
Longest road: 7
-
Cities remaining: 4
-
Settlements remaining: 5
+
Points
+
+
+ + + +
-
- } -
+
+ + +
+
+
Stats
+
+
Points: 7
+
Cards: {this.state.total}
+
Roads remaining: 4
+
Longest road: 7
+
Cities remaining: 4
+
Settlements remaining: 5
+
+
+ } +
+ } { this.state.error &&
{this.state.error}
} diff --git a/client/src/assets/tabletop.png b/client/src/assets/tabletop.png index e08cc14cc5170f7ff62c8cb0afc24960067667e7..70e9d668b17296d2f3ec1fc1e07e1066d0bcd865 100644 GIT binary patch delta 15879 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