1
0

Relayout on shuffle working again

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-03-15 20:04:09 -07:00
parent 54f67417d7
commit 446a581e94
4 changed files with 245 additions and 242 deletions

View File

@ -49,7 +49,6 @@
filter: drop-shadow(0px 0px 10px rgba(255, 0, 255, 1)); filter: drop-shadow(0px 0px 10px rgba(255, 0, 255, 1));
} }
.Pip.Option:hover, .Pip.Option:hover,
.Pip:hover { .Pip:hover {
filter: brightness(100%); filter: brightness(100%);
@ -64,7 +63,6 @@
filter: brightness(150%) drop-shadow(0px 0px 10px rgba(255, 0, 255, 1)); filter: brightness(150%) drop-shadow(0px 0px 10px rgba(255, 0, 255, 1));
} }
.Pips[disabled], .Pips[disabled],
.Tiles[disabled], .Tiles[disabled],
.Roads[disabled], .Roads[disabled],
@ -114,6 +112,7 @@
height: 50px; height: 50px;
transform-origin: 50% 0; transform-origin: 50% 0;
z-index: 11; /* Above Tile, below Corner */ z-index: 11; /* Above Tile, below Corner */
pointer-events: none;
} }
.Road-Shape { .Road-Shape {
@ -167,6 +166,7 @@
.Board .Option { .Board .Option {
cursor: pointer; cursor: pointer;
pointer-events: all; pointer-events: all;
filter: brightness(150%) drop-shadow(0 0 10px black); filter: brightness(150%) drop-shadow(0 0 10px black);
transition-timing-function: ease-in-out; transition-timing-function: ease-in-out;

View File

@ -106,8 +106,6 @@ const Board = () => {
} }
if ('signature' in data.update && data.update.signature !== signature) { if ('signature' in data.update && data.update.signature !== signature) {
setSignature(data.update.signature);
/* The following are only updated if there is a new game /* The following are only updated if there is a new game
* signature */ * signature */
@ -122,6 +120,9 @@ const Board = () => {
if ('tileOrder' in data.update) { if ('tileOrder' in data.update) {
setTileOrder(data.update.tileOrder); setTileOrder(data.update.tileOrder);
} }
console.log(`Triggering new board layout`);
setSignature(data.update.signature);
} }
/* This is permanent static data from the server -- do not update /* This is permanent static data from the server -- do not update
@ -288,7 +289,7 @@ useRef didn't work...
sendPlacement(type, corner.index); sendPlacement(type, corner.index);
}, [sendPlacement]); }, [sendPlacement]);
const Corner = ({corner}) => { const Corner = useCallback(({corner}) => {
return <div className="Corner" return <div className="Corner"
onClick={(event) => { onCornerClicked(event, corner) }} onClick={(event) => { onCornerClicked(event, corner) }}
data-index={corner.index} data-index={corner.index}
@ -297,13 +298,13 @@ useRef didn't work...
left: `${corner.left}px` left: `${corner.left}px`
}} }}
><div className="Corner-Shape"/></div>; ><div className="Corner-Shape"/></div>;
}; }, [onCornerClicked]);
const onPipClicked = useCallback((pip) => { const onPipClicked = useCallback((pip) => {
sendPlacement('place-robber', pip.index); sendPlacement('place-robber', pip.index);
}, [sendPlacement]); }, [sendPlacement]);
const Pip = ({pip}) => { const Pip = useCallback(({pip}) => {
return <div className="Pip" return <div className="Pip"
onClick={() => { onPipClicked(pip) }} onClick={() => { onPipClicked(pip) }}
data-roll={pip.roll} data-roll={pip.roll}
@ -316,25 +317,9 @@ useRef didn't work...
backgroundPositionY: `${ 100 * Math.floor(pip.order / 6) / 5. }%` backgroundPositionY: `${ 100 * Math.floor(pip.order / 6) / 5. }%`
}} }}
><div className="Pip-Shape"/></div>; ><div className="Pip-Shape"/></div>;
}; }, [onPipClicked]);
useEffect(() => { const generateRoads = useCallback(() => {
if (!signature) {
return;
}
if (signature === generated) {
return;
}
if (!pips || !pipOrder || !borders || !borderOrder
|| !tiles || !tileOrder) {
return;
}
console.log(`board - Generate board - ${signature}`);
const generateRoads = () => {
let row = 0, rowCount = 0; let row = 0, rowCount = 0;
let y = -2.5 + tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth, let y = -2.5 + tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth,
x = -tileHalfHeight -(rows[row] - 1) * 0.5 * tileHeight; x = -tileHalfHeight -(rows[row] - 1) * 0.5 * tileHeight;
@ -412,9 +397,9 @@ useRef didn't work...
} }
} }
return corners; return corners;
} }, []);
const generateCorners = () => { const generateCorners = useCallback(() => {
let row = 0, rowCount = 0; let row = 0, rowCount = 0;
let y = -8 + 0.5 * tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth, let y = -8 + 0.5 * tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth,
x = -tileHalfHeight -(rows[row] - 1) * 0.5 * tileHeight; x = -tileHalfHeight -(rows[row] - 1) * 0.5 * tileHeight;
@ -472,9 +457,9 @@ useRef didn't work...
} }
} }
return corners; return corners;
} }, []);
const generatePips = () => { const generatePips = function (pipOrder) {
let row = 0, rowCount = 0; let row = 0, rowCount = 0;
let y = tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth, let y = tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth,
x = -(rows[row] - 1) * 0.5 * tileHeight; x = -(rows[row] - 1) * 0.5 * tileHeight;
@ -506,7 +491,15 @@ useRef didn't work...
}); });
}; };
const generateTiles = () => { useEffect(() => {
setCornerElements(generateCorners());
setRoadElements(generateRoads());
}, []);
console.log(`board - Generate board - ${signature}`);
console.log(`board - tileOrder - `, tileOrder);
const generateTiles = function (tileOrder) {
let row = 0, rowCount = 0; let row = 0, rowCount = 0;
let y = tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth, let y = tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth,
x = -(rows[row] - 1) * 0.5 * tileHeight; x = -(rows[row] - 1) * 0.5 * tileHeight;
@ -534,7 +527,7 @@ useRef didn't work...
}); });
}; };
const generateBorders = () => { const generateBorders = function(borderOrder) {
const sides = 6; const sides = 6;
let side = -1; let side = -1;
return borderOrder.map(order => { return borderOrder.map(order => {
@ -560,19 +553,21 @@ useRef didn't work...
}); });
}; };
setPipElements(generatePips()); if ((signature && signature !== generated)
setBorderElements(generateBorders()); && (pips && pipOrder && borders && borderOrder
setTileElements(generateTiles()); && tiles && tileOrder)) {
setCornerElements(generateCorners()); setPipElements(generatePips(pipOrder));
setRoadElements(generateRoads()); setBorderElements(generateBorders(borderOrder));
setTileElements(generateTiles(tileOrder));
setGenerated(signature); setGenerated(signature);
}, [ }/*, [
signature, generated, signature, generated,
setPipElements, setBorderElements, setTileElements, setPipElements, setBorderElements, setTileElements,
setCornerElements, setRoadElements,
borderOrder, borders, pipOrder, pips, tileOrder, tiles borderOrder, borders, pipOrder, pips, tileOrder, tiles
]); ]);*/
console.log(`board - rendering tileOrder - `, tileOrder);
console.log(`board - todo - look into debouncing the direct DOM update`); console.log(`board - todo - look into debouncing the direct DOM update`);
if (turn) { if (turn) {
@ -681,6 +676,7 @@ useRef didn't work...
} }
} }
useEffect(() => {
let nodes = document.querySelectorAll(`.Pip.Robber`); let nodes = document.querySelectorAll(`.Pip.Robber`);
for (let i = 0; i < nodes.length; i++) { for (let i = 0; i < nodes.length; i++) {
nodes[i].classList.remove('Robber'); nodes[i].classList.remove('Robber');
@ -696,6 +692,8 @@ useRef didn't work...
el.classList.add(robberName); el.classList.add(robberName);
} }
} }
});
const canAction = (action) => { const canAction = (action) => {
return (turn && Array.isArray(turn.actions) && turn.actions.indexOf(action) !== -1); return (turn && Array.isArray(turn.actions) && turn.actions.indexOf(action) !== -1);

View File

@ -110,7 +110,7 @@ const PlayerList = () => {
<div>{ player }</div> <div>{ player }</div>
<MediaControl peer={player} isSelf={name === player}/> <MediaControl peer={player} isSelf={name === player}/>
</div> </div>
}) });
return ( return (
<Paper className="PlayerList"> <Paper className="PlayerList">

View File

@ -1877,8 +1877,6 @@ const stopTurnTimer = (game) => {
} }
const shuffle = (game, session) => { const shuffle = (game, session) => {
const name = session.name;
if (game.state !== "lobby") { if (game.state !== "lobby") {
return `Game no longer in lobby (${game.state}). Can not shuffle board.`; return `Game no longer in lobby (${game.state}). Can not shuffle board.`;
} }
@ -1886,9 +1884,16 @@ const shuffle = (game, session) => {
return `Game already in progress (${game.turns} so far!) and cannot be shuffled.`; return `Game already in progress (${game.turns} so far!) and cannot be shuffled.`;
} }
shuffleBoard(game); shuffleBoard(game);
const message = `${name} requested a new board. New board signature: ${game.signature}.`; console.log(`${session.id}: Shuffled to new signature: ${game.signature}`);
addChatMessage(game, null, message);
sendGameToPlayers(game); sendUpdateToPlayers(game, {
pipOrder: game.pipOrder,
tileOrder: game.tileOrder,
borderOrder: game.borderOrder,
robber: game.robber,
robberName: game.robberName,
signature: game.signature
});
} }
const pass = (game, session) => { const pass = (game, session) => {
@ -3087,12 +3092,12 @@ const sendGameToPlayer = (game, session) => {
console.log(`${session.id}: -> sendGamePlayer:${getName(session)} - only sending empty name`); console.log(`${session.id}: -> sendGamePlayer:${getName(session)} - only sending empty name`);
update = { name: "" }; update = { name: "" };
} else { } else {
update - getFilteredGameForPlayer(game, session); update = getFilteredGameForPlayer(game, session);
} }
session.ws.send(JSON.stringify({ session.ws.send(JSON.stringify({
type: 'game-update', type: 'game-update',
update: getFilteredGameForPlayer(game, session) update: update
})); }));
}; };