1
0

Update board on transition from nameless -> named

Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
James Ketrenos 2022-03-16 11:25:10 -07:00
parent 03b34f6677
commit e6ad81502f
2 changed files with 114 additions and 95 deletions

View File

@ -94,42 +94,46 @@ const Board = () => {
} }
} }
if ('placements' in data.update) { if ('placements' in data.update && !equal(data.update.placements, placements)) {
if (!equal(data.update.placements, placements)) { console.log(`board - placements`, data.update.placements);
console.log(`board - placements`, data.update.placements); setPlacements(data.update.placements);
setPlacements(data.update.placements);
}
} }
if ('signature' in data.update && data.update.signature !== 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 */
if ('pipOrder' in data.update && !equal(data.update.pipOrder, pipOrder)) {
if ('pipOrder' in data.update) { console.log(`board - setting new pipOrder`);
setPipOrder(data.update.pipOrder); setPipOrder(data.update.pipOrder);
} }
if ('borderOrder' in data.update) { if ('borderOrder' in data.update && !equal(data.update.borderOrder, borderOrder)) {
setBorderOrder(data.update.borderOrder); console.log(`board - setting new borderOrder`);
} setBorderOrder(data.update.borderOrder);
}
if ('tileOrder' in data.update) {
setTileOrder(data.update.tileOrder); if ('tileOrder' in data.update && !equal(data.update.tileOrder, tileOrder)) {
} console.log(`board - setting new tileOrder`);
setTileOrder(data.update.tileOrder);
}
console.log(`Triggering new board layout`); if (data.update.signature !== signature) {
console.log(`board - setting new signature`);
setSignature(data.update.signature); 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
* once set */ * once set */
if ('pips' in data.update && !pips) { if ('pips' in data.update && !pips) {
console.log(`board - setting new static pips`);
setPips(data.update.pips); setPips(data.update.pips);
} }
if ('tiles' in data.update && !tiles) { if ('tiles' in data.update && !tiles) {
console.log(`board - setting new static tiles`);
setTiles(data.update.tiles); setTiles(data.update.tiles);
} }
if ('borders' in data.update && !borders) { if ('borders' in data.update && !borders) {
console.log(`board - setting new static borders`);
setBorders(data.update.borders); setBorders(data.update.borders);
} }
break; break;
@ -205,96 +209,104 @@ const Board = () => {
onResize(); onResize();
useEffect(() => { useEffect(() => {
console.log(`Generating static corner data... should only occur once per reload.`); if (!ws) {
const onCornerClicked = (event, corner) => { return;
let type;
if (event.currentTarget.getAttribute('data-type') === 'settlement') {
type = 'place-city';
} else {
type = 'place-settlement';
} }
if (!hack) { console.error(`board - onCornerClicked - ws is NULL`); return; }
ws.send(JSON.stringify({
type, index: corner.index
}));
};
const Corner = ({corner}) => { console.log(`Generating static corner data... should only occur once per reload or socket reconnect.`);
return <div className="Corner" const onCornerClicked = (event, corner) => {
onClick={(event) => { onCornerClicked(event, corner) }} let type;
data-index={corner.index} if (event.currentTarget.getAttribute('data-type') === 'settlement') {
style={{ type = 'place-city';
top: `${corner.top}px`, } else {
left: `${corner.left}px` type = 'place-settlement';
}}
><div className="Corner-Shape"/></div>;
};
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 key={`corner-${index}}`} corner={corner}/>);
} }
if (!hack) { console.error(`board - onCornerClicked - ws is NULL`); return; }
ws.send(JSON.stringify({
type, index: corner.index
}));
};
corner = { const Corner = ({corner}) => {
index: index++, return <div className="Corner"
top: y, onClick={(event) => { onCornerClicked(event, corner) }}
left: x data-index={corner.index}
}; style={{
corners.push(<Corner key={`corner-${index}}`} corner={corner}/>); top: `${corner.top}px`,
left: `${corner.left}px`
}}
><div className="Corner-Shape"/></div>;
};
corner = { const generateCorners = () => {
index: index++, let row = 0, rowCount = 0;
top: y-0.5*tileHalfHeight, let y = -8 + 0.5 * tileHalfWidth - (rows.length - 1) * 0.5 * tileWidth,
left: x+tileHalfHeight x = -tileHalfHeight -(rows[row] - 1) * 0.5 * tileHeight;
}; let index = 0;
corners.push(<Corner key={`corner-${index}}`} corner={corner}/>); const corners = [];
let corner;
if (++rowCount === rows[row]) {
corner = { for (let i = 0; i < 21; i++) {
index: index++, if (row > 2 && rowCount === 0) {
top: y,
left: x+2.*tileHalfHeight
};
corners.push(<Corner key={`corner-${index}}`} corner={corner}/>);
if (row > 2) {
corner = { corner = {
index: index++, index: index++,
top: y-0.5*tileHalfHeight, top: y-0.5*tileHalfHeight,
left: x+3.*tileHalfHeight left: x-tileHalfHeight
}; };
corners.push(<Corner key={`corner-${index}}`} corner={corner}/>); corners.push(<Corner key={`corner-${index}}`} corner={corner}/>);
} }
row++;
rowCount = 0;
y += tileHeight - 10.5;
x = -tileHalfHeight - (rows[row] - 1) * 0.5 * tileHeight;
} else {
x += tileHeight;
}
}
return corners;
};
corner = {
index: index++,
top: y,
left: x
};
corners.push(<Corner key={`corner-${index}}`} corner={corner}/>);
corner = {
index: index++,
top: y-0.5*tileHalfHeight,
left: x+tileHalfHeight
};
corners.push(<Corner key={`corner-${index}}`} corner={corner}/>);
if (++rowCount === rows[row]) {
corner = {
index: index++,
top: y,
left: x+2.*tileHalfHeight
};
corners.push(<Corner key={`corner-${index}}`} corner={corner}/>);
if (row > 2) {
corner = {
index: index++,
top: y-0.5*tileHalfHeight,
left: x+3.*tileHalfHeight
};
corners.push(<Corner key={`corner-${index}}`} corner={corner}/>);
}
row++;
rowCount = 0;
y += tileHeight - 10.5;
x = -tileHalfHeight - (rows[row] - 1) * 0.5 * tileHeight;
} else {
x += tileHeight;
}
}
return corners;
};
setCornerElements(generateCorners()); setCornerElements(generateCorners());
}, [ws, setCornerElements]); }, [ws, setCornerElements]);
useEffect(() => { useEffect(() => {
if (!ws) {
return;
}
console.log(`Generating static road data... should only occur once per reload or socket reconnect.`);
const Road = ({road}) => { const Road = ({road}) => {
const onRoadClicked = (road) => { const onRoadClicked = (road) => {
console.log(`Road clicked: ${road.index}`); console.log(`Road clicked: ${road.index}`);
@ -399,6 +411,10 @@ const Board = () => {
/* Generate Pip, Tile, and Border elements */ /* Generate Pip, Tile, and Border elements */
useEffect(() => { useEffect(() => {
if (!ws) {
return;
}
console.log(`board - Generate pip, border, and tile elements`);
const Pip = ({pip}) => { const Pip = ({pip}) => {
const onPipClicked = (pip) => { const onPipClicked = (pip) => {
if (!ws) { console.error(`board - sendPlacement - ws is NULL`); return; } if (!ws) { console.error(`board - sendPlacement - ws is NULL`); return; }
@ -675,7 +691,8 @@ const Board = () => {
const canPip = (canAction('place-robber') const canPip = (canAction('place-robber')
&& turn.color === color && turn.color === color
&& (state === 'initial-placement' || state === 'normal')); && (state === 'initial-placement' || state === 'normal'));
console.log(`board - tile elements`, tileElements);
return ( return (
<div className="Board" ref={board}> <div className="Board" ref={board}>
<div className="BoardBox"> <div className="BoardBox">

View File

@ -883,6 +883,8 @@ const setPlayerName = (game, session, name) => {
unselected: getFilteredUnselected(game), unselected: getFilteredUnselected(game),
chat: game.chat chat: game.chat
}); });
/* Now that a name is set, send the full game to the player */
sendGameToPlayer(game, session);
} }
const colorToWord = (color) => { const colorToWord = (color) => {